Logo
Distributed Genetic Programming Framework
print print

File org.dgpf.gp.vm.base.VMMemory.java

Here you can find all the information about the file org.dgpf.gp.vm.base.VMMemory.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-22 13:41:11
 * Original Filename: org.dgpf.gp.vm.memory.VMMemory.java
 * Version          : 1.0.0
 * Last modification: 2006-06-22
 *                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.base;

import org.dgpf.gp.Construct;


/**
 * A memory frame of a virtual machine.
 *
 * @author Thomas Weise
 */

public final  class VMMemory  extends     Construct
  {
/**
 * The serial version uid.
 */

  private static final long serialVersionUID = 1;
/**
 * The memory data.
 */

                int[]           m_data  ;
/**
 * The size of the data element.
 */

                int             m_size  ;
/**
 * The next vm memory frame.
 */

                VMMemory        m_next  ;
                
/**
 * Allocate a new frame of vm memory.
 * @param p_slots   The memory slots needed.
 */

  VMMemory  (final int p_slots)
    {
    super();
    this.m_data     = new int[p_slots];
    }
 
  
/**
 * Push a value into this vm memory frame.
 * @param p_value The value to be pushed.
 * @return  <code>true</code> if the push operation was successfull,
 *          <code>false</code> if it failed due to insufficient memory.
 */

  final boolean push  (final int p_value)
    {
    int[] l_m;
    int   l_c;
    
    l_m = this.m_data;
    l_c = this.m_size;
    
    if(l_c >= l_m.length) return false;
    
    l_m[l_c]    = p_value;
    this.m_size = (l_c+1);
    return true;
    }
  
/**
 * Pop an item from the memory frame.
 * @return  The item popped from the memory frame, or <code>0</code> if
 *          no item could be popped.
 */

  final int pop ()
    {
    int   l_c;
    
    l_c = this.m_size;
    
    if(l_c > 0)
      {
      --l_c;
      this.m_size = l_c;
      return this.m_data[l_c];
      }
    
    return 0;
    }
  
/**
 * Read a value from the memory.
 * @param p_addr  The address to read from.
 * @return  The value stored at this address, or <code>0</code> if the
 *          address is out of range.
 */

  public  final int read  (int p_addr)
    {
    if(p_addr >= this.m_size)
      {
      p_addr -= this.m_data.length;
      return ((p_addr > 0) ? p_addr : 0); 
      }
    
    return this.m_data[p_addr];
    }
  
/**
 * Store a value to the memory.
 * @param p_addr  The address to write to. If this address is out of range,
 *                nothing will be done.
 * @param p_value The value to be stored at this address.
 * @return  <code>1</code> if and only if the write operation lead to a
 *          memory size increase. <code>2</code> if memory could not be
 *          increased because the specified address is out of range,
 *          <code>0</code> if everything went ok.
 */

  final byte  write (final int p_addr,
                     final int p_value)
    {
    int   l_s;
    int[] l_d;
    
    l_s = this.m_size;
    l_d = this.m_data;
    
    if(p_addr >= l_s)
      {
      if(p_addr >= l_d.length) return 2;
       
      for(; l_s < p_addr; l_s++) l_d[l_s] = 0;
      
      this.m_size = (p_addr+1);
      l_d[p_addr] = p_value;
      return 1;
      }
      
    l_d[p_addr] = p_value;
    return 0;
    }  
  
///**
// * Clear this memory frame.
// */

//  final void  clear()
//    {
//    this.m_size = 0;
//    }
  
/**
 * Append another memory to this one.
 * @param p_mem The memory frame to be appended.
 */

  final void  append  (final VMMemory p_mem)
    {
    int   l_l1, l_l2, l_c;
    int[] l_d;
    
    if((l_l2 = p_mem.m_size) > 0)
      {    
      l_l1 = this.m_size;    
      l_d  = this.m_data;
      
      l_c  = Math.min(l_l1 + l_l2, l_d.length);
      
      this.m_size = l_c;
      System.arraycopy(p_mem.m_data, 0, l_d, l_l1, l_c - l_l1);
      }
    }
  
/**
 * Obtain the size of this vm memory frame.
 * @return The size of this vm memory frame.
 */

  public  final int get_size()
    {
    return this.m_size;
    }
  
/**
 * 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)
    {
    int[] l_m;
    int   l_i, l_j;
    
    p_sb.append('[');
    l_m = this.m_data;
    l_j = this.m_size;
    
    if(l_j > 0)
      {
      p_sb.append(l_m[0]);
      
      for(l_i = 1; l_i < l_j; l_i++)
        {
        p_sb.append(' ');
        p_sb.append(l_m[l_i]);
        }
      }
    
    p_sb.append(']');
    }
  

/**
 * Get a string that can be copy-pasted into a java file an that creates
 * this construct.
 * @param p_b The string builder to add with. 
 */

  @Override
  public final  void    to_creation_string (final StringBuilder p_b)
    {
    //
    }
  }

File Information:

file name:VMMemory.java
package:org.dgpf.gp.vm.base
qualified name:org.dgpf.gp.vm.base.VMMemory.java
file type:Java Source File
download location:download http://dgpf.sourceforge.net/source/org/dgpf/gp/vm/base/VMMemory.java
size:5.608 KB (5743 B)
uploaded: 2015-07-22 04:10:56 GMT+0000
last update: 2006-08-01 05:36:37 GMT+0000
last access: 2017-11-17 19:20:00 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-17 19:20:00 GMT+0000.
Valid CSS Valid XHTML 1.1
Valid RSS SourceForge.net Logo