2 * CDE - Common Desktop Environment
4 * Copyright (c) 1993-2012, The Open Group. All rights reserved.
6 * These libraries and programs are free software; you can
7 * redistribute them and/or modify them under the terms of the GNU
8 * Lesser General Public License as published by the Free Software
9 * Foundation; either version 2 of the License, or (at your option)
12 * These libraries and programs are distributed in the hope that
13 * they will be useful, but WITHOUT ANY WARRANTY; without even the
14 * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
15 * PURPOSE. See the GNU Lesser General Public License for more
18 * You should have received a copy of the GNU Lesser General Public
19 * License along with these libraries and programs; if not, write
20 * to the Free Software Foundation, Inc., 51 Franklin Street, Fifth
21 * Floor, Boston, MA 02110-1301 USA
27 * $XConsortium: HashTable.hh /main/4 1996/04/21 19:45:12 drk $
29 * RESTRICTED CONFIDENTIAL INFORMATION:
31 * The information in this document is subject to special
32 * restrictions in a confidential disclosure agreement bertween
33 * HP, IBM, Sun, USL, SCO and Univel. Do not distribute this
34 * document outside HP, IBM, Sun, USL, SCO, or Univel wihtout
35 * Sun's specific written approval. This documment and all copies
36 * and derivative works thereof must be returned or destroyed at
39 * Copyright 1993 Sun Microsystems, Inc. All rights reserved.
47 #include <DtMail/ObjectKey.hh>
49 class HashTableImpl : public DtCPlusPlusAllocator {
51 HashTableImpl(int table_size);
52 virtual ~HashTableImpl(void);
54 virtual void * lookup(ObjectKey &);
55 virtual void set(ObjectKey & key, void * value);
56 virtual void * remove(ObjectKey & key);
58 // HP can not support this construct.
59 // UXP/DS can not support this construct either.
61 #if !defined(HPUX) && !defined(__uxp__)
63 #define HASHTABLE_HASFOREACH
65 typedef int (*HashImplIterator)(ObjectKey &, void * value, void * client_data);
66 virtual void forEach(HashImplIterator, void * client_data);
71 struct HashEntry : public DtCPlusPlusAllocator {
77 HashEntry * _hash_table;
81 template <class Object>
82 class HashTable : public DtCPlusPlusAllocator {
84 HashTable(int table_size) : _table(table_size) { }
86 Object lookup(ObjectKey & key) { return( (Object)((long)_table.lookup(key)) ); }
88 void set(ObjectKey & key, Object obj) {
89 _table.set(key, (void *)obj);
92 Object remove(ObjectKey & key) { return( (Object)((long)_table.remove(key)) ); }
94 #if !defined(HPUX) && !defined(__uxp__)
95 typedef int (*HashIterator)(ObjectKey &, Object, void * client_data);
96 void forEach(HashTableImpl::HashImplIterator iterator, void * client_data) {
97 _table.forEach((HashTableImpl::HashImplIterator)iterator, client_data);
102 HashTableImpl _table;