CCAFFEINE
0.8.8
|
00001 00007 #ifndef StringHash_seen 00008 #define StringHash_seen 00009 namespace jcpp { 00010 00011 //#include "jc++/jc++.h" 00012 //#include "jc++/lang/Object.h" 00013 //#include "jc++/util/Enumeration.h" 00014 //#include "jc++/util/StringEnumeration.h" 00015 //#include "jc++/util/HashEnum.h" 00016 //#include "jc++/util/StringHashBucket.h" 00017 00018 class StringHashBucket; // our implementation detail. 00019 00024 class StringHash : public virtual Object { 00025 00026 private: 00027 00028 StringHashBucket **table; 00029 int table_length; 00030 int N; // geometry; the index to a primes list. 00031 00032 float loadFactor; 00033 int numberOfKeys; 00034 int rehashLimit; 00035 00036 char **okeys; // string array 00037 Object **oelements; // element array 00038 00039 // unlike kaffe's rather goofy hash table implementation, 00040 // we're stealing ascends/tcls hash on string 00041 00042 int calculateBucket(register const char *str); 00043 00044 public: 00045 00046 CDELETE StringHash() ; 00047 00048 ~StringHash() ; 00049 00050 int size() ; 00051 00052 boolean isEmpty() ; 00053 00055 StringEnumeration *keys() ; 00056 00057 Enumeration *elements() ; 00058 00059 boolean contains(Object *value) ; 00060 00061 boolean containsKey(char *key) ; 00062 00066 CFREE char **charKeysToArray(int& ka_length); 00067 00070 Object *get(const char *key) ; 00071 00074 Object *get(const std::string key) ; 00075 00078 CONST char *getKey(char *key) ; 00079 00082 Object *put(const char *key, Object *value); 00083 00086 Object *put(const std::string key, Object *value); 00087 00088 Object *remove(const char *key) ; 00089 00090 void clear() ; 00091 00092 Object *clone() { return 0; } 00093 00094 CFREE char *toString() ; 00095 00096 boolean containsValue(Object *o) ; 00097 00098 void rehash(int & RehashError); 00099 00100 }; 00101 00102 } ENDSEMI //jcpp 00103 00104 #endif // StringHash_seen