haiku/headers/private/servers/app/HashTable.h
Axel Dörfler 174b20a89a Adds the concept of owning the table entries - before, they were always owned,
now it defaults to not-owning.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14823 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-11-10 14:49:24 +00:00

49 lines
1013 B
C++

/*
* Copyright 2005, Haiku.
* Distributed under the terms of the MIT License.
*
* Authors:
* Axel Dörfler, axeld@pinc-software.de
*/
#ifndef _HASH_TABLE_H_
#define _HASH_TABLE_H_
#include <SupportDefs.h>
class Hashable {
public:
virtual uint32 Hash() const = 0;
virtual bool CompareTo(Hashable& hashable) const = 0;
};
class HashTable {
public:
HashTable(bool owning = false, int32 capacity = 100, float loadFactor = 0.75);
~HashTable();
void MakeEmpty(bool deleteValues = true);
bool IsEmpty() const { return fCount == 0; }
bool ContainsKey(Hashable& key) const { return _GetHashEntry(key) != NULL; }
int32 CountItems() const { return fCount; }
Hashable *GetValue(Hashable& key) const;
bool AddItem(Hashable* value);
Hashable *RemoveItem(Hashable& key);
protected:
struct entry;
bool _Rehash();
entry *_GetHashEntry(Hashable& key) const;
entry** fTable;
int32 fCapacity, fCount, fThreshold;
float fLoadFactor;
bool fOwning;
};
#endif /* HASHTABLE_H */