campo-sirio/include/hashtable.h

48 lines
1.2 KiB
C++

#pragma once
#ifndef __HASHTABLE_H__
#define __HASHTABLE_H__
#ifndef __ARRAY_H__
#include <array.h>
#endif
class THash_table : public TContainer
{
struct THashEntry;
THashEntry** _buckets;
size_t _bucketCount, _size;
volatile unsigned int _lock;
// container iterator
size_t _curr_bucket;
THashEntry* _curr_entry;
protected:
THashEntry* lookup_ex(const char* key, unsigned int& hash, size_t& index) const;
THashEntry* lookup(const char* key) const;
void expand_if_needed();
void Lock();
void Unlock();
public: // Container interface
virtual TObject* first_item();
virtual TObject* last_item();
virtual TObject* succ_item();
virtual TObject* pred_item();
virtual long objects() const { return _size; }
public:
bool add(const char* key, TObject* value, bool force = false);
bool add(const char* key, const TObject& value, bool force = false);
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 _size; }
THash_table(size_t sz = 0);
~THash_table();
};
#endif