1 : //=============================================================================
2 : // File <$/src/cpp/prod/tool/Hash.h>
3 : // This file is part of YaOrb : Yet Another Object Request Broker,
4 : // Copyright (c) 2000-2003, Marc Alff.
5 : //
6 : // This program is free software; you can redistribute it and/or
7 : // modify it under the terms of the GNU General Public License
8 : // as published by the Free Software Foundation; either version 2
9 : // of the License, or (at your option) any later version.
10 : //
11 : // This program is distributed in the hope that it will be useful,
12 : // but WITHOUT ANY WARRANTY; without even the implied warranty of
13 : // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 : // GNU General Public License for more details.
15 : //
16 : // You should have received a copy of the GNU General Public License
17 : // along with this program; if not, write to the Free Software
18 : // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
19 : //
20 : //=============================================================================
21 :
22 : #ifndef HASH_H
23 : #define HASH_H
24 :
25 : class SList ;
26 :
27 : class VoidHash
28 : {
29 : public :
30 : typedef int (*HashFn)(const void* key) ;
31 : typedef bool (*CmpFn)(const void* obj, const void* key) ;
32 :
33 : VoidHash(HashFn hashFn, CmpFn cmpFn, int size) ;
34 : ~VoidHash() ;
35 :
36 : void* FindByKey(const void* key) ;
37 : void* RemoveByKey(const void* key) ;
38 : void Insert(void *obj, const void* key) ;
39 :
40 : private :
41 : int index(const void* key) ;
42 :
43 : int _size ;
44 : SList* _table ;
45 : HashFn _hashFn ;
46 : CmpFn _cmpFn ;
47 :
48 : private :
49 : VoidHash(const VoidHash& ) ;
50 : VoidHash& operator=(const VoidHash& ) ;
51 : } ;
52 :
53 : template <class T, class K> class THash
54 : {
55 : public :
56 : typedef int (*HashFn)(const K* key) ;
57 : typedef bool (*CmpFn)(const T* obj, const K* key) ;
58 :
59 : private :
60 : VoidHash _h ;
61 :
62 : public :
63 : THash(HashFn hashFn, CmpFn cmpFn, int size)
64 147 : : _h( (VoidHash::HashFn) hashFn, (VoidHash::CmpFn) cmpFn, size)
65 : {}
66 :
67 0 : virtual ~THash()
68 0 : {}
69 :
70 : public :
71 : T* FindByKey(const K* key)
72 4 : { return (T*) _h.FindByKey(key) ; }
73 :
74 : T* RemoveByKey(const K* key)
75 : { return (T*) _h.RemoveByKey(key) ; }
76 :
77 : void Insert(T *obj, const K* key)
78 24 : { _h.Insert(obj, key) ; }
79 :
80 : private :
81 : THash(const THash<T,K> &) ;
82 : THash& operator=(const THash<T,K> &) ;
83 : } ;
84 :
85 : #endif
86 :
|