package org.dgpf.gp.netvm.instructions;
import org.dgpf.gp.netvm.base.NetVM;
import org.dgpf.gp.vm.base.IInstructionHandler;
import org.dgpf.gp.vm.base.Instruction;
import org.dgpf.gp.vm.base.VM;
import org.dgpf.gp.vm.instructions.BasicCosts;
/**
* The send operation.
*
* @author Thomas Weise
*/
public class Send extends Instruction
{
/**
* The serial version uid.
*/
private static final long serialVersionUID = 1;
/**
* The globally shared singleton instance.
*/
public static final Instruction INSTANCE = new Send();
/**
* The costs for sending a message.
*/
public static final double COSTS = (BasicCosts.CALL_COSTS * 7.0d);
/**
* Create a new send instruction.
*/
private Send ()
{
super();
}
/**
* Execute this instruction on a virtual machine.
* @param p_machine The virtual machine to execute on.
* @return The cost of the execution of the last instruction.
*/
@Override
protected final double execute (final VM p_machine)
{
((NetVM)p_machine).send();
return COSTS;
}
/**
* Store this objects content into a string builder.
* @param p_sb The string builder to store stuff into.
*/
@Override
public final void to_string (final StringBuilder p_sb)
{
p_sb.append("send");
}
/**
* Perform a write replace of this object.
* @return The object to store.
*/
private final Object writeReplace()
{
return INSTANCE;
}
/**
* Deserialize to the proper instance.
* @return The globally shared instance.
*/
private final Object readResolve()
{
return INSTANCE;
}
/**
* Obtain the instruction handler to be used for this sort of instructions.
* @return The instruction handler to be used for this sort of instructions.
*/
@Override
public final IInstructionHandler get_handler()
{
return SendHandler.INSTANCE;
}
/**
* Check whether this instruction equals to a specified object, called
* internally.
* @param p_o The object to compare with, which is of the same class as
* this instruction.
* @return <code>true</code> if and only if this instruction equals
* the specified object.
*/
@Override
protected boolean does_equal (final Object p_o)
{
return true;
}
/**
* Get a string that can be copy-pasted into a java file an that creates
* this instruction.
* @param p_b The string builder to add with.
*/
@Override
public final void to_creation_string (final StringBuilder p_b)
{
p_b.append("Send.INSTANCE");
}
}