#pragma once #ifndef __HASHTABLE_H__ #define __HASHTABLE_H__ #ifndef __ARRAY_H__ #include #endif struct THash_bucket; struct THash_entry; class THash_table : public TContainer { TArray* _buckets; long _items; // container iterator int _curr_bucket, _curr_item; protected: THash_bucket& bucket(size_t b); void add(TObject* value, const char* key, unsigned int hash); THash_entry* lookup_ex(const char* key, unsigned int& hash) const; THash_entry* lookup(const char* key) const; void expand(); public: // Container interface virtual TObject* first_item(); virtual TObject* last_item(); virtual TObject* succ_item(); virtual TObject* pred_item(); virtual long objects() const { return _items; } public: bool add(const char* key, TObject* value, bool force = false); bool add(const char* key, const TObject& value, bool force = false); void steal(THash_entry& e); bool is_key(const char* key) const { return lookup(key) != NULL; } TObject* get(const char* key); TObject* remove(const char* key); bool destroy(const char* key); size_t items() const { return _items; } THash_table(size_t sz = 0); ~THash_table(); }; #endif