diff options
Diffstat (limited to 'tools.h')
-rw-r--r-- | tools.h | 34 |
1 files changed, 33 insertions, 1 deletions
@@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: tools.h 1.70 2005/05/26 11:34:01 kls Exp $ + * $Id: tools.h 1.71 2005/05/28 11:24:49 kls Exp $ */ #ifndef __TOOLS_H @@ -236,4 +236,36 @@ public: T *Next(const T *object) const { return (T *)object->cListObject::Next(); } // avoid ambiguities in case of a "list of lists" }; +class cHashObject : public cListObject { + friend class cHashBase; +private: + int id; + cListObject *object; +public: + cHashObject(cListObject *Object, int Id) { object = Object; id = Id; } + }; + +class cHashBase { +private: + cList<cHashObject> **hashTable; + int size; + int hashfn(int Id) const { return Id % size; } +protected: + cHashBase(int Size); +public: + virtual ~cHashBase(); + void Add(cListObject *Object, int Id); + void Del(cListObject *Object, int Id); + cListObject *Get(int Id) const; + cList<cHashObject> *GetList(int Id) const; + }; + +#define HASHSIZE 512 + +template<class T> class cHash : public cHashBase { +public: + cHash(int Size = HASHSIZE) : cHashBase(Size) {} + T *Get(int Id) const { return (T *)cHashBase::Get(Id); } +}; + #endif //__TOOLS_H |