class interface HASH
   -- [V->STRING, K->STRING]

creation
   make
      -- Create an empty dictionary. Internal storage capacity of the
      -- dictionary is initialized using the Default_size value. Then,
      -- tuning of needed storage capacity is performed automatically
      -- according to usage. If you are really sure that your dictionary
      -- is always really bigger than Default_size, you may consider to use
      -- with_capacity to save some execution time.
      ensure
         is_empty;
         capacity = Default_size

   from_tuple_table (table: ARRAY[TUPLE[K,V]])
      -- not fully tested
      -- Create the dictionary from a TUPLE table. This
      -- code is untested and due to SmallEiffel limitations
      -- in the -0.74 Betas, probably will not work.
      require
         table /= Void and then table.count >= 1

   from_table (table: COLLECTION[K])
      -- Accept a 2D array that contains
      -- two entries, and create a HASH from them.
      -- the key is assumed to be the first entry.
      -- Example:
      -- create my_hash.from_table( <<
      --                         1, 2,
      --                         3, 4,
      --                         5, 6 >> )
      require
         valid_table: table /= Void and then table.count >= 2 and then table.count \\ 2 = 0

   dbm_open (input_file_name: STRING)
      -- a simple-minded version of the dbmopen function
      -- from Perl. The input file is assumed to be a list
      -- of key/value pairs, each to its own line. The
      -- pairs are read in to create the HASH.
      -- if the input file doesn't exist, then an empty
      -- hash results.
      require
         input_file_name /= Void
      ensure
         file_name /= Void

feature(s) from HASH
   make
      -- Create an empty dictionary. Internal storage capacity of the
      -- dictionary is initialized using the Default_size value. Then,
      -- tuning of needed storage capacity is performed automatically
      -- according to usage. If you are really sure that your dictionary
      -- is always really bigger than Default_size, you may consider to use
      -- with_capacity to save some execution time.
      ensure
         is_empty;
         capacity = Default_size

   dbm_open (input_file_name: STRING)
      -- a simple-minded version of the dbmopen function
      -- from Perl. The input file is assumed to be a list
      -- of key/value pairs, each to its own line. The
      -- pairs are read in to create the HASH.
      -- if the input file doesn't exist, then an empty
      -- hash results.
      require
         input_file_name /= Void
      ensure
         file_name /= Void

feature(s) from HASH
   dbm_close
      -- close a hash created with dbm_open, writing out
      -- all entries.
      require
         file_name /= Void

   sorted_keys: ARRAY[STRING]
      -- Since sorted keys are quite popular,
      -- provide a feature for getting them easily.

feature(s) from HASH
   file_name: STRING

invariant

    capacity > 0;

    capacity >= count;

    cache_user.in_range(- 1,count);

    cache_user > 0 implies cache_node /= Void;

    cache_user > 0 implies cache_buckets.in_range(0,capacity - 1);

end of HASH