/*
 * Burton Rosenberg
 * June 2004
 */


class Key {

   String key_s ;
   int key_i ;
   boolean intKeyValid ;

   /* WARNING: if interpretIntegers is toggled after
    * integers are in tree, they might be inaccessible
    */

   Key( int key_i ) {
      key_s = Integer.toString(key_i) ;
      this.key_i = key_i ;
      intKeyValid = true ;
   }

   Key( String key_s ) {
      this.key_s = key_s ;
      try { 
         key_i = Integer.parseInt(key_s) ; 
         intKeyValid = true ;
      } 
      catch ( NumberFormatException nfe ) {
         intKeyValid = false ;
      }
   }

   int compareTo(Key keyOnRight, boolean interpretIntegers) {
      if ( interpretIntegers ) {
         // interpreting integers
         if ( this.intKeyValid && keyOnRight.intKeyValid ) {
             return (key_i - keyOnRight.key_i) ;
         }
         // not both integers
         if ( intKeyValid ) return -1 ;
         if ( keyOnRight.intKeyValid ) return +1 ;
         // neither integers, continue on
      }
      // treat as strings
      return key_s.compareTo( keyOnRight.key_s ) ;
   }
}

