campo-sirio/include/hashtable.h

49 lines
1.2 KiB
C++

#pragma once
#ifndef __HASHTABLE_H__
#define __HASHTABLE_H__
#ifndef __ARRAY_H__
#include <array.h>
#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