--- parser3/src/include/pa_hash.h 2001/01/27 10:02:59 1.1 +++ parser3/src/include/pa_hash.h 2001/01/29 12:00:45 1.8 @@ -1,5 +1,5 @@ /* - $Id: pa_hash.h,v 1.1 2001/01/27 10:02:59 paf Exp $ + $Id: pa_hash.h,v 1.8 2001/01/29 12:00:45 paf Exp $ */ /* @@ -17,16 +17,27 @@ class Pool; -typedef String Key; -typedef void Value; - class Hash { public: + typedef String Key; + typedef void Value; + +public: + + // useful generic hash function + static uint generic_code(uint aresult, char *start, uint size); + + // put a [value] under the [key] + /*SYNCHRONIZED*/ void put(Key& key, Value *value); + + // get associated [value] by the [key] + /*SYNCHRONIZED*/ Value* get(Key& key); + private: friend Pool; - // expand when there would be used this %% of size + // expand when these %% of size exausted enum { THRESHOLD_PERCENT=75 }; @@ -34,10 +45,10 @@ private: // the pool I'm allocated on Pool *pool; - // the index of size in sizes + // the index of [size] in [sizes] int size_index; - // possible sizes. prime numbers + // possible [sizes]. prime numbers static uint sizes[]; static int sizes_count; @@ -52,33 +63,37 @@ private: // main storage class Pair { + friend Hash; + uint code; Key key; Value *value; Pair *link; - Pair(uint acode, Key& akey, Value *avalue) : + + void *operator new(size_t size, Pool *apool); + + Pair(uint acode, Key& akey, Value *avalue, Pair *alink) : code(acode), key(akey), value(avalue), - link(0) {} - } **pair_refs; + link(alink) {} + } **refs; // new&constructors made private to enforce factory manufacturing at pool - static void *operator new(size_t size, Pool *apool); + void *operator new(size_t size, Pool *apool); Hash(Pool *apool); - bool full() { - return used==threshold; - } + // filled to threshold: needs expanding + bool full() { return used==threshold; } + + // allocate larger buffer & rehash void expand(); -public: +private: //disabled - Hash() { /* never */ } - static uint generic_code(uint aresult, char *start, uint size); - void put(Key& key, Value *value); - Value* get(Key& key); + Hash& operator = (Hash& src) { return *this; } + Hash(Hash& src) {} }; #endif