Logo
Distributed Genetic Programming Framework
print print

File org.sfc.utils.HashCode.java

Here you can find all the information about the file org.sfc.utils.HashCode.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-01-20 06:13:37
 * Original Filename: org.sfc.utils.HashCode.java
 * Version          : 1.0.1
 * Last modification: 2006-01-20
 *                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.utils;

/**
 * This class contains standard helper methods to create proper hash codes. 
 */

public  final class HashCode
  {
/**
 * The internal constructor prohibits object instantiation.
 */

  private HashCode()
    {
    Typesafe.do_not_call();
    }
  
/**
 * Create a hash code of an integer value.
 * @param p_value The integer value to create a hash code off.
 * @return  The hash code of the integer value.
 */

  public  static  final int int_hash_code (int p_value)
    {        
    p_value += 0xA72C4377;
    p_value += ~(p_value << 9);
    p_value ^=  (p_value >>> 14);
    p_value +=  (p_value << 4);
    p_value ^=  (p_value >>> 10);
    return ((p_value << 13) | (p_value >>> -13));
    }
  
/**
 * Create a hash code of a short value.
 * @param p_value The short value to create a hash code off.
 * @return  The hash code of the short value.
 */

  public  static  final int short_hash_code (final  short p_value)
    {        
    return int_hash_code(p_value ^ (p_value << 15));
    }

/**
 * Create a hash code of a byte value.
 * @param p_value The byte value to create a hash code off.
 * @return  The hash code of the byte value.
 */

  public  static  final int byte_hash_code (final  byte  p_value)
    {        
    return int_hash_code(p_value ^ (p_value << 17));
    }
  
  
/**
 * Create a hash code of a character value.
 * @param p_value The character value to create a hash code off.
 * @return  The hash code of the character value.
 */

  public  static  final int char_hash_code (final  char p_value)
    {        
    return int_hash_code(p_value ^ (p_value << 21));
    }

/**
 * Create a hash code of a boolean value.
 * @param p_value The boolean value to create a hash code off.
 * @return  The hash code of the boolean value.
 */

  public  static  final int boolean_hash_code (final  boolean p_value)
    {        
    return (p_value ? 1231 : 1237);
    }
  

/**
 * Create a hash code of a long value.
 * @param p_value The long value to create a hash code off.
 * @return  The hash code of the long value.
 */

  public  static  final int  long_hash_code (final  long p_value)
    {        
    return int_hash_code((int)(p_value ^ (p_value >>> 32)));
    }
  
/**
 * Create a hash code of a float value.
 * @param p_value The float value to create a hash code off.
 * @return  The hash code of the float value.
 */

  public  static  final int  float_hash_code (final  float p_value)
    {        
    return int_hash_code(Float.floatToIntBits(p_value));
    }
  
  
/**
 * Create a hash code of a double value.
 * @param p_value The double value to create a hash code off.
 * @return  The hash code of the double value.
 */

  public  static  final int  double_hash_code (final  double  p_value)
    {        
    return long_hash_code(Double.doubleToLongBits(p_value));
    }
  
/**
 * Combine two hash codes to obtain a third one representing both.
 * @param p_hash_code_1 The first hash code.
 * @param p_hash_code_2 The second hash code.
 * @return  A hash code representing both hash codes <strong>and</strong>
 *          their sequence.
 */

  public  static  final int  combine_hash_codes (final  int p_hash_code_1,
                                                 final  int p_hash_code_2)
    {
    return  int_hash_code(int_hash_code(p_hash_code_1) - p_hash_code_2);
    }
  
/**
 * Obtain the hashcode of a byte array.
 * @param p_array The array to obtain the hash code off.
 * @return  The hash code of the array.
 */

  public  static  final int byte_array_hash_code (final byte[] p_array)
    {
    int l_i, l_s;
    
    if(p_array == null) return -3413;
    l_i = p_array.length;
    if(l_i <= 0) return -928547;
    
    l_s = byte_hash_code(p_array[0]);
    for(--l_i; l_i > 0; l_i--)
      {
      l_s = combine_hash_codes(l_s, p_array[l_i]);      
      }
    
    return l_s;
    }
  
  

/**
 * Obtain the hashcode of a short array.
 * @param p_array The array to obtain the hash code off.
 * @return  The hash code of the array.
 */

  public  static  final int short_array_hash_code (final short[] p_array)
    {
    int l_i, l_s;
    
    if(p_array == null) return 0xC43413;
    l_i = p_array.length;
    if(l_i <= 0) return 0x3148547;
    
    l_s = short_hash_code(p_array[0]);
    for(--l_i; l_i > 0; l_i--)
      {
      l_s = combine_hash_codes(l_s, p_array[l_i]);      
      }
    
    return l_s;
    }
  
/**
 * Obtain the hashcode of a int array.
 * @param p_array The array to obtain the hash code off.
 * @return  The hash code of the array.
 */

  public  static  final int int_array_hash_code (final int[] p_array)
    {
    int l_i, l_s;
    
    if(p_array == null) return 0xCF34222;
    l_i = p_array.length;
    if(l_i <= 0) return 0xAA0331;
    
    l_s = int_hash_code(p_array[0]);
    for(--l_i; l_i > 0; l_i--)
      {
      l_s = combine_hash_codes(l_s, p_array[l_i]);      
      }
    
    return l_s;
    }
  
/**
 * Obtain the hashcode of a long array.
 * @param p_array The array to obtain the hash code off.
 * @return  The hash code of the array.
 */

  public  static  final int long_array_hash_code (final long[] p_array)
    {
    int l_i, l_s;
    
    if(p_array == null) return -344;
    l_i = p_array.length;
    if(l_i <= 0) return 234532542;
    
    l_s = long_hash_code(p_array[0]);
    for(--l_i; l_i > 0; l_i--)
      {
      l_s = combine_hash_codes(l_s, long_hash_code(p_array[l_i]));      
      }
    
    return l_s;
    }
  
/**
 * Obtain the hashcode of a float array.
 * @param p_array The array to obtain the hash code off.
 * @return  The hash code of the array.
 */

  public  static  final int float_array_hash_code (final float[] p_array)
    {
    int l_i, l_s;
    
    if(p_array == null) return 6654734;
    l_i = p_array.length;
    if(l_i <= 0) return 447811;
    
    l_s = float_hash_code(p_array[0]);
    for(--l_i; l_i > 0; l_i--)
      {
      l_s = combine_hash_codes(l_s, float_hash_code(p_array[l_i]));      
      }
    
    return l_s;
    }
  

/**
 * Obtain the hashcode of a double array.
 * @param p_array The array to obtain the hash code off.
 * @return  The hash code of the array.
 */

  public  static  final int double_array_hash_code (final double[] p_array)
    {
    int l_i, l_s;
    
    if(p_array == null) return 34;
    l_i = p_array.length;
    if(l_i <= 0) return -278812;
    
    l_s = double_hash_code(p_array[0]);
    for(--l_i; l_i > 0; l_i--)
      {
      l_s = combine_hash_codes(l_s, double_hash_code(p_array[l_i]));      
      }
    
    return l_s;
    }
  

/**
 * Obtain the hashcode of a char array.
 * @param p_array The array to obtain the hash code off.
 * @return  The hash code of the array.
 */

  public  static  final int char_array_hash_code (final char[] p_array)
    {
    int l_i, l_s;
    
    if(p_array == null) return -3294781;
    l_i = p_array.length;
    if(l_i <= 0) return 0xACFDDD;
    
    l_s = char_hash_code(p_array[0]);
    for(--l_i; l_i > 0; l_i--)
      {
      l_s = combine_hash_codes(l_s, p_array[l_i]);      
      }
    
    return l_s;
    }

/**
 * Obtain the hashcode of a boolean array.
 * @param p_array The array to obtain the hash code off.
 * @return  The hash code of the array.
 */

  public  static  final int boolean_array_hash_code (final boolean[] p_array)
    {
    int l_i, l_s;
    
    if(p_array == null) return 3891;
    l_i = p_array.length;
    if(l_i <= 0) return 0x221;
    
    l_s = boolean_hash_code(p_array[0]);
    for(--l_i; l_i > 0; l_i--)
      {
      l_s = combine_hash_codes(l_s, p_array[l_i] ? 92 : -2837);      
      }
    
    return l_s;
    }
  
/**
 * Obtain the hashcode of an object array.
 * @param p_array The array to obtain the hash code off.
 * @return  The hash code of the array.
 */

  public  static  final int object_array_hash_code (final Object[] p_array)
    {
    int l_i, l_s;
    
    if(p_array == null) return 234723874;
    l_i = p_array.length;
    if(l_i <= 0) return -832476;
    
    l_s = object_hash_code(p_array[0]);
    for(--l_i; l_i > 0; l_i--)
      {
      l_s = combine_hash_codes(l_s, object_hash_code(p_array[l_i]));      
      }
    
    return l_s;
    }
  
/**
 * Obtain the hashcode of a random object. If this object is an array, it
 * will be treated accordingly.
 * @param p_object  The object to obtain the hash code off.
 * @return  The hash code of the object.
 */

  public  static  final int object_hash_code (final Object p_object)
    {
    Class l_c;
    
    if(p_object == null) return 3274372;
    
    l_c = p_object.getClass();
    if(l_c.isArray())
      {
      if(l_c == byte[].class)
         return int_hash_code(byte_array_hash_code((byte[])p_object)-1);
      
      if(l_c == short[].class)
         return int_hash_code(short_array_hash_code((short[])p_object)-2);
     
      if(l_c == int[].class)
         return int_hash_code(int_array_hash_code((int[])p_object)-3);
      
      if(l_c == long[].class)
         return int_hash_code(long_array_hash_code((long[])p_object)-4);
      
      if(l_c == boolean[].class)
         return int_hash_code(boolean_array_hash_code((boolean[])p_object)-5);
      
      if(l_c == float[].class)
         return int_hash_code(float_array_hash_code((float[])p_object)-6);
      
      if(l_c == double[].class)
         return int_hash_code(double_array_hash_code((double[])p_object)-7);
            
      if(l_c == char[].class)
         return int_hash_code(char_array_hash_code((char[])p_object)-8);
      
      return combine_hash_codes(object_array_hash_code((Object[])p_object),
                                l_c.hashCode());
      }
    
    return p_object.hashCode();
    }
  }

File Information:

file name:HashCode.java
package:org.sfc.utils
qualified name:org.sfc.utils.HashCode.java
file type:Java Source File
download location:download http://dgpf.sourceforge.net/source/org/sfc/utils/HashCode.java
size:10.865 KB (11126 B)
uploaded: 2018-01-07 12:03:36 GMT+0000
last update: 2006-08-22 09:38:03 GMT+0000
last access: 2018-04-26 00:09:14 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-26 00:09:14 GMT+0000.
Valid CSS Valid XHTML 1.1
Valid RSS SourceForge.net Logo