00001
00007 #ifndef StringHash_seen
00008 #define StringHash_seen
00009 namespace jcpp {
00010
00011
00012
00013
00014
00015
00016
00017
00018 class StringHashBucket;
00019
00024 class StringHash : public virtual Object {
00025
00026 private:
00027
00028 StringHashBucket **table;
00029 int table_length;
00030 int N;
00031
00032 float loadFactor;
00033 int numberOfKeys;
00034 int rehashLimit;
00035
00036 char **okeys;
00037 Object **oelements;
00038
00039
00040
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
00103
00104 #endif // StringHash_seen