00001
00007 #ifndef Hashtable_seen
00008 #define Hashtable_seen
00009
00010 namespace jcpp {
00011
00012
00013
00014
00015
00016
00017
00018
00022 class HashBucket;
00023
00024 class Hashtable : public virtual Object {
00025
00026 private:
00027
00028 HashBucket **table;
00029 int table_length;
00030
00031 float loadFactor;
00032 int numberOfKeys;
00033 int rehashLimit;
00034
00035 Object **okeys;
00036 Object **oelements;
00037
00040 static const long magic;
00042 int N;
00044 int ttmNm2;
00046 int twoNm1;
00047
00048 int calculateBucket(Object *key);
00049
00050 public:
00051
00052 Hashtable();
00053
00054 ~Hashtable();
00055
00056 int size();
00057
00058 boolean isEmpty();
00059
00061 Enumeration *keys();
00062
00064 Enumeration *elements();
00065
00066 boolean contains(Object *value);
00067
00068 boolean containsKey(Object *key);
00069
00072 char **charKeysToArray(int& ka_length);
00073
00074
00075 Object *get(Object *key);
00076
00077 Object *put(Object *key, Object *value);
00078
00079 Object *remove(Object *key);
00080
00081 void clear();
00082
00088 Object *clone() { return 0; }
00089
00091 char *toString();
00092
00093 boolean containsValue(Object *o);
00094
00095 protected:
00096 void rehash(int & rehashError);
00097
00098 };
00099
00100 } ENDSEMI
00101 #endif //Hashtable_seen