/* ** Command & Conquer Generals Zero Hour(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 . */ /*********************************************************************************************** *** 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:: /G/wwlib/hashcalc.h $* * * * Author:: Greg Hjelstrom * * * * $Modtime:: 4/02/99 11:59a $* * * * $Revision:: 3 $* * * *---------------------------------------------------------------------------------------------* * Functions: * * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ #if _MSC_VER >= 1000 #pragma once #endif // _MSC_VER >= 1000 #ifndef HASHCALC_H #define HASHCALC_H /* ** HashCalculatorClass ** The hash calculator is used to abstract the process of computing a hash ** value for an object. Also, when dealing with floating point values, you ** may need to have a fudge factor and therefore have several valid hash ** values for a particular object (generated by adding and subtracting an ** epsilon to the number(s)). This class lets you define any number ** of hash values. This class is used by the UniqueArrayClass and the HashTableClass ** templates. Basically, you give one of these to the UniqueArrayClass at ** construction time. It will call the Num_Hash_Bits function in order to ** properly allocate its hash table. Then, for each object you pass into the ** Add function, it will call Compute_Hash, then it will loop through ** Num_Hash_Values, calling Get_Hash_Value for each index and see if the object ** is found in the indicated slot. Also, when it is checking to see if it has ** the object you "Added", the Items_Match function is called. This again ** allows you to do epsilon tests. Make sense? */ template class HashCalculatorClass { public: virtual bool Items_Match(const T & a, const T & b) = 0; virtual void Compute_Hash(const T & item) = 0; virtual int Num_Hash_Bits(void) = 0; virtual int Num_Hash_Values(void) = 0; virtual int Get_Hash_Value(int index = 0) = 0; }; #endif