Logo
Distributed Genetic Programming Framework
print print

File org.dgpf.gp.vm.instructions.arith.SetZeroFlag.java

Here you can find all the information about the file org.dgpf.gp.vm.instructions.arith.SetZeroFlag.java. You may explore it here or download it onto your local disk.
/*
 * Copyright (c) 2006 Thomas Weise
 * 
 * E-Mail           : tweise@gmx.de
 * Creation Date    : 2006-06-26 08:21:11
 * Original Filename: org.dgpf.gp.vm.instructions.arith.SetZeroFlag.java
 * Version          : 1.0.1
 * Last modification: 2006-07-15
 *                by: Thomas Weise
 * 
 * License          : GNU LESSER GENERAL PUBLIC LICENSE
 *                    Version 2.1, February 1999
 *                    You should have received a copy of this license along
 *                    with this library; if not, write to the Free Software
 *                    Foundation, Inc., 59 Temple Place, Suite 330, Boston,
 *                    MA 02111-1307, USA or download the license under
 *                    http://www.gnu.org/copyleft/lesser.html.
 *                    
 * Warranty         : This software is provided "as is" without any
 *                    warranty; without even the implied warranty of
 *                    merchantability or fitness for a particular purpose.
 *                    See the Gnu Lesser General Public License for more
 *                    details.
 */

 
package org.dgpf.gp.vm.instructions.arith;


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 set zero_flag operation.
 *
 * @author Thomas Weise
 */

public class SetZeroFlag extends Instruction
  {
/**
 * The serial version uid.
 */

  private static final long serialVersionUID = 1;

/**
 * The set-zero_flag instruction. 
 */

  public  static  final Instruction SET_FLAG    = new SetZeroFlag((byte)(-1));
/**
 * The clear-zero_flag instruction. 
 */

  public  static  final Instruction CLEAR_FLAG  = new SetZeroFlag((byte)1);
/**
 * The toggle-zero_flag instruction. 
 */

  public  static  final Instruction TOGGLE_FLAG = new SetZeroFlag((byte)0);
  
/**
 * <code>-1</code> if the zero_flag should be set, <code>1</code> if it
 * should be resetted, <code>0</code> if it should be toggled.
 */

  private final byte m_set ;
  
/**
 * Create a new set zero_flag instruction.
 * @param p_set <code>-1</code> if the zero_flag should be set, <code>1</code>
 *              if it should be resetted, <code>0</code> if it should be
 *              toggled.
 */

  private  SetZeroFlag         (final byte p_set)
    {
    super();
    this.m_set = p_set;
    }
  
  
/**
 * 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)
    {
    switch(this.m_set)
      {
      case -1:  {
                p_machine.set_zero_flag(true);
                break;
                }
      case 1:   {
                p_machine.set_zero_flag(false);
                break;
                }
      default:  {
                p_machine.set_zero_flag(!(p_machine.get_zero_flag()));
                }
      }
    
    return BasicCosts.SET_FLAG_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)
    {
    switch(this.m_set)
      {
      case -1:   {
                p_sb.append("zf = true");
                return;
                }
      case 1:   {
                p_sb.append("zf = false");
                return;
                }
      
      default:  p_sb.append("zf = !zf");
      }
    }
  
  
/**
 * Perform a write replace of this object.
 * @return  The object to store.
 */

  private final Object writeReplace()
    {
    switch(this.m_set)
      {
      case -1:  return SET_FLAG;
      case  1:  return CLEAR_FLAG;
      default:  return TOGGLE_FLAG;
      }
    }

/**
 * Deserialize to the proper instance.
 * @return  The globally shared instance.
 */

  private final Object readResolve()
    {
    return this.writeReplace();
    }
  

/**
 * 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 SetZeroFlagHandler.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 (((SetZeroFlag)p_o).m_set == this.m_set);
    }
  
/**
 * 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("SetZeroFlag.");
    switch(this.m_set)
      {
      case -1:  { p_b.append("SET_FLAG");    break; }
      case  1:  { p_b.append("CLEAR_FLAG");  break; }
      default:  { p_b.append("TOGGLE_FLAG"); break; }
      }
    }
  }

File Information:

file name:SetZeroFlag.java
package:org.dgpf.gp.vm.instructions.arith
qualified name:org.dgpf.gp.vm.instructions.arith.SetZeroFlag.java
file type:Java Source File
download location:download http://dgpf.sourceforge.net/source/org/dgpf/gp/vm/instructions/arith/SetZeroFlag.java
size:5.266 KB (5393 B)
uploaded: 2015-07-22 04:10:58 GMT+0000
last update: 2006-07-15 09:37:48 GMT+0000
last access: 2017-11-19 02:58:19 GMT+0000

statistics online since 2006-01-02.   RSS Feed
Contact us by sending an email to tweise@gmx.de to receive further information, to report errors, or to join our project.
All content on this site (http://dgpf.sourceforge.net/) is LGPL-licensed.
http://dgpf.sourceforge.net/scripts/source/source.php last modified at 2015-07-22 04:10:53 GMT+0000 served at 2017-11-19 02:58:19 GMT+0000.
Valid CSS Valid XHTML 1.1
Valid RSS SourceForge.net Logo