Logo
Distributed Genetic Programming Framework
print print

File org.sfc.collections.IntHash.java

Here you can find all the information about the file org.sfc.collections.IntHash.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-04-10 17:26:44
 * Original Filename: org.sfc.collections.IntHash.java
 * Version          : 1.0.0
 * Last modification: 2006-04-10
 *                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.sfc.collections;

/**
 * This simple hashmap uses integers as keys and objects as data.
 *
 * @param <Type>  The type of objects stored inside the hash.
 *
 * @author Thomas Weise
 */

public final  class IntHash<Type>
  {
/**
 * The data array.
 */

  private Element<Type>[] m_data  ;
/**
 * The internal element counter.
 */

  private int             m_count ;

/**
 * Create a new int hash.
 * @param p_size  The initial size of the hash. If you set this parameter
 *                to a value smaller than 4, a reasonable default initial
 *                size will be used.
 */

  public  IntHash(final int p_size)
    {
    super();
    this.m_data = Arrays.create(Element.class, (p_size > 4 ? p_size : 128));
    }


/**
 * Obtain the element stored under the specified code.
 * @param p_code  The integer code identifying this element.
 * @return  The element stored under that code or <code>null</code> if none
 *          is stored there.
 */

  public  final Type  get (final int p_code)
    {
    Element<Type>  l_e;

    for(l_e = this.m_data[p_code & (this.m_data.length-1)];
        l_e != null;
        l_e = l_e.m_next)
      {
      if(l_e.m_key == p_code) return l_e.m_data;
      }

    return null;
    }

/**
 * Store an element under the given code.
 * @param p_code    The integer code identifying the element.
 * @param p_element The element to be stored.
 */

  public  final void  put (final int  p_code,
                           final Type p_element)
    {
    Element<Type>[] l_d, l_d2;
    Element<Type>   l_e, l_v;
    int             l_l, l_i;

    l_d = this.m_data;
    l_l = l_d.length;
    for(l_e = l_d[p_code & (l_l-1)]; l_e != null; l_e = l_e.m_next)
      {
      if(l_e.m_key == p_code)
        {
        l_e.m_data = p_element;
        return;
        }
      }

    if(((++this.m_count) << 1) > l_l)
      {
      l_i  = l_l-1;
      l_l<<= 1;
      l_d2 = Arrays.create(Element.class, l_l);
      l_l--;

      for(; l_i >= 0; l_i--)
        {
        for(l_e = l_d[l_i]; l_e != null; l_e = l_v)
          {
          l_v                   = l_e.m_next;
          l_e.m_next            = l_d2[l_e.m_key & l_l];
          l_d2[l_e.m_key & l_l] = l_e;
          }
        }

      this.m_data = l_d = l_d2;
      }
    else l_l--;


    l_d[p_code & l_l] = new Element<Type>(p_code, p_element,
                        l_d[p_code & l_l]);
    }

/**
 * This internal class represents the elements of the hash table.
 * @param <T> The type parameter.
 */

  private static  final class Element<T>
    {
/**
 * The key.
 */

    final int         m_key ;
/**
 * The data.
 */

          T           m_data  ;
/**
 * The next element.
 */

          Element<T>  m_next  ;

/**
 * Create a new hash set element.
 * @param p_key   The key of the new element.
 * @param p_data  The data part of the new element.
 * @param p_next  The reference to the next element.
 */

    Element(final int         p_key,
            final T           p_data,
            final Element<T>  p_next)
      {
      super();
      this.m_key  = p_key;
      this.m_data = p_data;
      this.m_next = p_next;
      }
    }
  }

File Information:

file name:IntHash.java
package:org.sfc.collections
qualified name:org.sfc.collections.IntHash.java
file type:Java Source File
download location:download http://dgpf.sourceforge.net/source/org/sfc/collections/IntHash.java
size:4.271 KB (4374 B)
uploaded: 2018-01-07 12:03:36 GMT+0000
last update: 2006-04-10 10:00:58 GMT+0000
last access: 2018-04-21 04:14:51 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 2018-01-07 12:03:34 GMT+0000 served at 2018-04-21 04:14:51 GMT+0000.
Valid CSS Valid XHTML 1.1
Valid RSS SourceForge.net Logo