
/**
 * Title:
 * Description:  Starting point for Hash exercise, CSC 220
 * Copyright:    Copyright (c) 2002
 * Company:
 * @author       Burton Rosenberg
 * @version 1.0
 */

import java.io.* ;

public class MyHashTableTest {

  private static final int DEFAULT_HASH_TABLE_SIZE = 6 ;
  private static final boolean DEFAULT_DEBUG = false ;
  private static final boolean SINGLE_HASHING = false ;

  private static void printUsage() {
    System.out.println(
      "Usage: HasProjectText [-t tablesize] [-s ] [-D] input-file-name") ;
  }

  public static void main(String[] args) {

    if ( args.length == 0 ) {
       printUsage() ;
       return ;
    }

    int hashTableSize = parseOptInt( "-t", args, DEFAULT_HASH_TABLE_SIZE ) ;
    boolean isDebug = parseOptBool( "-D", args, DEFAULT_DEBUG ) ;
    boolean isSingle = parseOptBool( "-s", args, SINGLE_HASHING ) ;

    BufferedReader br ;
    try {
       br = new BufferedReader(new FileReader(args[args.length-1])) ;
    } catch (FileNotFoundException fnfe) {
       System.out.println("File " + args[args.length-1] + " not found.");
       return ;
    }

    MyHashTable mht = new MyHashTable(hashTableSize) ;
    mht.debug = isDebug ;
    mht.useSingleHashing = isSingle ;

    try {
       String line ;
       while ( (line=br.readLine())!=null ) {
          mht.insert(line) ;
       }
    } catch ( IOException ioe ) {
       System.out.println(ioe) ;
       return ;
    }

    mht.printHashTable() ;
  }

  public static int parseOptInt( String option, String [] args, int default_value ) {
      for ( int i=0; i<args.length; i++ ) {
         if ( option.equals(args[i]) ) {
            // got match ; what if args[i+1] doesn't exist?
            if ( i == args.length-1 ) // at end of array
               return default_value ;
            // else the hard part
            try {
              return Integer.parseInt(args[i+1]) ;
            } catch ( NumberFormatException nfe ) { return default_value ; }
         }
      }
      return default_value ;
  }

  public static boolean parseOptBool( String option, String [] args,
      boolean default_value ) {
      for ( int i=0; i<args.length; i++ ) {
         if ( option.equals(args[i]) ) {
            return (!default_value) ;
         }
      }
      return default_value ;
  }

}
