| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127 |
- /*
- ** Command & Conquer Renegade(tm)
- ** Copyright 2025 Electronic Arts Inc.
- **
- ** This program is free software: you can redistribute it and/or modify
- ** it under the terms of the GNU General Public License as published by
- ** the Free Software Foundation, either version 3 of the License, or
- ** (at your option) any later version.
- **
- ** This program is distributed in the hope that it will be useful,
- ** but WITHOUT ANY WARRANTY; without even the implied warranty of
- ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- ** GNU General Public License for more details.
- **
- ** You should have received a copy of the GNU General Public License
- ** along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
- /***********************************************************************************************
- *** C O N F I D E N T I A L --- W E S T W O O D S T U D I O S ***
- ***********************************************************************************************
- * *
- * Project Name : Westwood Library *
- * *
- * $Archive:: /Commando/Code/Library/hashtab.h $*
- * *
- * Author:: Greg Hjelstrom *
- * *
- * $Modtime:: 7/30/98 10:07a $*
- * *
- * $Revision:: 2 $*
- * *
- *---------------------------------------------------------------------------------------------*
- * Functions: *
- * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
- #ifndef HASHTAB_H
- #define HASHTAB_H
- #if 0
- template <class Object,class Key> class NamedObjectHashTableClass
- {
- public:
- HashTableClass(int initialsize,int growthrate,HashCalculatorClass<Key> * hasher);
- ~HashTableClass(void);
- void Add(Object * new_item,Key * key);
- void Remove(Object * item,Key * key);
- int Count(void) const { return Items.Count(); }
- Object * Find(const Key & key) const
- private:
- enum { NO_ITEM = 0xFFFFFFFF };
- class HashItem
- {
- public:
- T * Item;
- int NextHashIndex;
- bool operator == (const HashItem & that) { return ((Item == that.Item) && (NextHashIndex == that.NextHashIndex)); }
- bool operator != (const HashItem & that) { return !(*this == that); }
- };
-
- // Dynamic Vector of the unique items:
- DynamicVectorClass<HashItem> Items;
- // Hash table:
- int HashTableSize;
- int * HashTable;
- // object which does the hashing for the type
- HashCalculatorClass<T> * HashCalculator;
- friend class VectorClass;
- friend class DynamicVectorClass;
- };
- template <class Object,class Key>
- HashTableClass<Object,Key>::HashTableClass
- (
- int initialsize,
- int growthrate,
- HashCalculatorClass<Object> * hasher
- )
- {
- }
- template <class Object,class Key>
- HashTableClass<Object,Key>::~HashTableClass(void)
- {
- }
- template <class Object,class Key>
- Object * HashTableClass<Object,Key>::Find(Key * key) const
- {
- // compute where in the hash table this key would go.
- HashCalculator->Compute_Hash(key);
- int hashval = HashCalculator->Get_Hash_Value(0);
- // now try to find an object which has the same key
- int test_item_index = HashTable[hash];
- while (test_item_index != 0xFFFFFFFF) {
- if (HashCalculator->Items_Match(Items[test_item_index].Item,new_item)) {
- return Items[test_item_index].Object;
- }
- test_item_index = Items[test_item_index].NextHashIndex;
- }
- // couldn't find it
- return NULL;
- }
- #endif
- #endif
|