xref: /inferno-os/man/2/hash (revision 46439007cf417cbd9ac8049bb4122c890097a0fa)
HASH 2
NAME
hash, HashTable - hash table
SYNOPSIS
.EX include "hash.m"; hash := load Hash Hash->PATH; new: fn(size:int):ref HashTable; HashTable: adt{ insert: fn(h:self ref HashTable, key:string, val:HashVal); find: fn(h:self ref HashTable, key:string):ref HashVal; delete: fn(h:self ref HashTable, key:string); all: fn(h:self ref HashTable): list of HashNode; }; HashVal: adt{ i: int; r: real; s: string; }; HashNode: adt{ key: string; val: ref HashVal; }; fun1, fun2: fn(s:string, n:int):int;
DESCRIPTION
The hash module provides support for arrays that are indexed by keys of type string . The values may be any combination of int , real , or string . New creates and returns a new HashTable with size slots. The hashing works best if size is a prime number. The HashVal adt contains the data values of the hash. The HashNode adt contains the key/value pair for each element in the table.

ht .insert( "key, value" ) Adds a new key / value pair to the table. If an element with the same key already exists, it will acquire the new value .

ht .find( key ) Search the table for an element with the given key and return the value found; return nil if none was found.

ht .delete( key ) Removes any element with the given key from the table.

ht .all() Returns a list of all key/value pairs stored in the table.

Fun1 and fun2 provide access to two different string hashing functions. Fun1 is the function used internally; fun2 is the same as that used in the Limbo compiler. They each compute the hash value of s and return a value between 0 and n -1.

SOURCE
/appl/lib/hash.b
BUGS
HashVal should really be a pick .