content: // ////////////////////////////////////////////////////////////////////////////
  // Copyright (c) 2009, Rob Eden All Rights Reserved.
  // Copyright (c) 2009, Jeff Randall All Rights Reserved.
  //
  // This library is free software; you can redistribute it and/or
  // modify it under the terms of the GNU Lesser General Public
  // License as published by the Free Software Foundation; either
  // version 2.1 of the License, or (at your option) any later version.
  //
  // This library is distributed in the hope that it will be useful,
  // but WITHOUT ANY WARRANTY; without even the implied warranty of
  // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  // GNU General Public License for more details.
  //
  // You should have received a copy of the GNU Lesser General Public
  // License along with this program; if not, write to the Free Software
  // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
  // ////////////////////////////////////////////////////////////////////////////
  package gnu.trove.impl;
  
  /**
   * Central location for constants needed by various implementations.
   */
  public class Constants {
  
      private static final boolean VERBOSE =
              System.getProperty( "gnu.trove.verbose", null ) != null;
  
      /** the default capacity for new collections */
      public static final int DEFAULT_CAPACITY = 10;
  
      /** the load above which rehashing occurs. */
      public static final float DEFAULT_LOAD_FACTOR = 0.5f;
  
  
      /** the default value that represents for <tt>byte</tt> types. */
      public static final byte DEFAULT_BYTE_NO_ENTRY_VALUE;
      static {
          byte value;
          String property = System.getProperty( "gnu.trove.no_entry.byte", "0" );
          if ( "MAX_VALUE".equalsIgnoreCase( property ) ) value = Byte.MAX_VALUE;
          else if ( "MIN_VALUE".equalsIgnoreCase( property ) ) value = Byte.MIN_VALUE;
          else value = Byte.valueOf( property );
  
          if ( value > Byte.MAX_VALUE ) value = Byte.MAX_VALUE;
          else if ( value < Byte.MIN_VALUE ) value = Byte.MIN_VALUE;
          DEFAULT_BYTE_NO_ENTRY_VALUE = value;
          if ( VERBOSE ) {
              System.out.println( "DEFAULT_BYTE_NO_ENTRY_VALUE: " +
                                  DEFAULT_BYTE_NO_ENTRY_VALUE );
          }
      }
  
  
      /** the default value that represents for <tt>short</tt> types. */
      public static final short DEFAULT_SHORT_NO_ENTRY_VALUE;
      static {
          short value;
          String property = System.getProperty( "gnu.trove.no_entry.short", "0" );
          if ( "MAX_VALUE".equalsIgnoreCase( property ) ) value = Short.MAX_VALUE;
          else if ( "MIN_VALUE".equalsIgnoreCase( property ) ) value = Short.MIN_VALUE;
          else value = Short.valueOf( property );
  
          if ( value > Short.MAX_VALUE ) value = Short.MAX_VALUE;
          else if ( value < Short.MIN_VALUE ) value = Short.MIN_VALUE;
          DEFAULT_SHORT_NO_ENTRY_VALUE = value;
          if ( VERBOSE ) {
              System.out.println( "DEFAULT_SHORT_NO_ENTRY_VALUE: " +
                                  DEFAULT_SHORT_NO_ENTRY_VALUE );
          }
      }
  
  
      /** the default value that represents for <tt>char</tt> types. */
      public static final char DEFAULT_CHAR_NO_ENTRY_VALUE;
      static {
          char value;
          String property = System.getProperty( "gnu.trove.no_entry.char", "\0" );
          if ( "MAX_VALUE".equalsIgnoreCase( property ) ) value = Character.MAX_VALUE;
          else if ( "MIN_VALUE".equalsIgnoreCase( property ) ) value = Character.MIN_VALUE;
          else value = property.toCharArray()[0];
  
          if ( value > Character.MAX_VALUE ) value = Character.MAX_VALUE;
          else if ( value < Character.MIN_VALUE ) value = Character.MIN_VALUE;
          DEFAULT_CHAR_NO_ENTRY_VALUE = value;
          if ( VERBOSE ) {
              System.out.println( "DEFAULT_CHAR_NO_ENTRY_VALUE: " +
                                  Integer.valueOf( value ) );
          }
      }
  
  
      /** the default value that represents for <tt>int</tt> types. */
      public static final int DEFAULT_INT_NO_ENTRY_VALUE;
       static {
          int value;
          String property = System.getProperty( "gnu.trove.no_entry.int", "0" );
          if ( "MAX_VALUE".equalsIgnoreCase( property ) ) value = Integer.MAX_VALUE;
          else if ( "MIN_VALUE".equalsIgnoreCase( property ) ) value = Integer.MIN_VALUE;
          else value = Integer.valueOf( property );
          DEFAULT_INT_NO_ENTRY_VALUE = value;
          if ( VERBOSE ) {
              System.out.println( "DEFAULT_INT_NO_ENTRY_VALUE: " +
                                  DEFAULT_INT_NO_ENTRY_VALUE );
          }
      }
  
  
      /** the default value that represents for <tt>long</tt> types. */
      public static final long DEFAULT_LONG_NO_ENTRY_VALUE;
      static {
          long value;
          String property = System.getProperty( "gnu.trove.no_entry.long", "0" );
          if ( "MAX_VALUE".equalsIgnoreCase( property ) ) value = Long.MAX_VALUE;
          else if ( "MIN_VALUE".equalsIgnoreCase( property ) ) value = Long.MIN_VALUE;
          else value = Long.valueOf( property );
          DEFAULT_LONG_NO_ENTRY_VALUE = value;
          if ( VERBOSE ) {
              System.out.println( "DEFAULT_LONG_NO_ENTRY_VALUE: " +
                                  DEFAULT_LONG_NO_ENTRY_VALUE );
          }
      }
  
  
      /** the default value that represents for <tt>float</tt> types. */
      public static final float DEFAULT_FLOAT_NO_ENTRY_VALUE;
      static {
          float value;
          String property = System.getProperty( "gnu.trove.no_entry.float", "0" );
          if ( "MAX_VALUE".equalsIgnoreCase( property ) ) value = Float.MAX_VALUE;
          else if ( "MIN_VALUE".equalsIgnoreCase( property ) ) value = Float.MIN_VALUE;
          // Value from Float.MIN_NORMAL (introduced in 1.6)
          else if ( "MIN_NORMAL".equalsIgnoreCase( property ) ) value = 0x1.0p-126f;
          else if ( "NEGATIVE_INFINITY".equalsIgnoreCase( property ) ) value = Float.NEGATIVE_INFINITY;
          else if ( "POSITIVE_INFINITY".equalsIgnoreCase( property ) ) value = Float.POSITIVE_INFINITY;
  //        else if ( "NaN".equalsIgnoreCase( property ) ) value = Float.NaN;
          else value = Float.valueOf( property );
          DEFAULT_FLOAT_NO_ENTRY_VALUE = value;
          if ( VERBOSE ) {
              System.out.println( "DEFAULT_FLOAT_NO_ENTRY_VALUE: " +
                                  DEFAULT_FLOAT_NO_ENTRY_VALUE );
          }
      }
  
  
      /** the default value that represents for <tt>double</tt> types. */
      public static final double DEFAULT_DOUBLE_NO_ENTRY_VALUE;
      static {
          double value;
          String property = System.getProperty( "gnu.trove.no_entry.double", "0" );
          if ( "MAX_VALUE".equalsIgnoreCase( property ) ) value = Double.MAX_VALUE;
          else if ( "MIN_VALUE".equalsIgnoreCase( property ) ) value = Double.MIN_VALUE;
          // Value from Double.MIN_NORMAL (introduced in 1.6)
          else if ( "MIN_NORMAL".equalsIgnoreCase( property ) ) value = 0x1.0p-1022;
          else if ( "NEGATIVE_INFINITY".equalsIgnoreCase( property ) ) value = Double.NEGATIVE_INFINITY;
          else if ( "POSITIVE_INFINITY".equalsIgnoreCase( property ) ) value = Double.POSITIVE_INFINITY;
  //        else if ( "NaN".equalsIgnoreCase( property ) ) value = Double.NaN;
          else value = Double.valueOf( property );
          DEFAULT_DOUBLE_NO_ENTRY_VALUE = value;
          if ( VERBOSE ) {
              System.out.println( "DEFAULT_DOUBLE_NO_ENTRY_VALUE: " +
                                  DEFAULT_DOUBLE_NO_ENTRY_VALUE );
          }
      }
  }
  