CCAFFEINE  0.8.8
StringHash.h
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