--- parser3/src/include/pa_hash.h 2001/01/27 12:04:53 1.2 +++ parser3/src/include/pa_hash.h 2001/01/29 12:13:14 1.9 @@ -1,5 +1,5 @@ /* - $Id: pa_hash.h,v 1.2 2001/01/27 12:04:53 paf Exp $ + $Id: pa_hash.h,v 1.9 2001/01/29 12:13:14 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,13 @@ private: // the pool I'm allocated on Pool *pool; - // the index of size in sizes + // am I thread-safe? + bool thread_safe; + + // the index of [size] in [sizes] int size_index; - // possible sizes. prime numbers + // possible [sizes]. prime numbers static uint sizes[]; static int sizes_count; @@ -71,18 +85,18 @@ private: // new&constructors made private to enforce factory manufacturing at pool void *operator new(size_t size, Pool *apool); - Hash(Pool *apool); + Hash(Pool *apool, bool athread_safe); - bool full() { - return used==threshold; - } + // filled to threshold: needs expanding + bool full() { return used==threshold; } + + // allocate larger buffer & rehash void expand(); -public: +private: //disabled - 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