aboutsummaryrefslogtreecommitdiff
path: root/src/hashfunction.h
blob: cbcf70f8ee4f20c6c7ac7921177fa90c6e71ce70 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#ifndef HASH_FUNCTION
#define HASH_FUNCTION

/** This represents the shell of a hash function.  It must be aggregated in
  * order to be used.  Please read about it's two functions for specificatins
  * relating to what values will be passed to them and what they should return
  * for creating your own hash functions.
  *@author Mike Buland.
  */
class HashFunction
{
public:
	/**
	 * Standard Constructor.
	 */
	HashFunction();

	/**
	 * Standard Deconstructor.
	 */
	virtual ~HashFunction();

	/** Hashes the value represnted by id.  This must return a fairly unique
	  * number in the range of 0-2^32 (or whatever the size of an unsigned long
	  * is on your system) based on the id given.  The faster the number changes
	  * the better in a general sence.  The return value will be the index
	  * (after probing takes place) to the data assosiated with an id, so this
	  * function should always produce the same number for any given id.
	  *@param id The identifier to use to create a unique numerical identifier.
	  *@returns A mostly unique numerical identifier generated using the given
	  * id.
	  */
	virtual unsigned long int hash( const void *id ) = 0;

	/** This function must compare two ids in the format that this hashfunction
	  * accepts.  For example, if the hash function hashes strings it should
	  * probably { return strcmp( id1, id2 ) == 0 }.
	  *@param id1 One value to use in the comparison
	  *@param id2 Another value to use in the comparison
	  *@returns True if the two values match, otherwise false.
	  */
	virtual bool cmpIDs( const void *id1, const void *id2 ) = 0;
	
//	virtual void *createPersistantID( const void *id ) = 0;
//	virtual void destroyPersistantID( const void *id ) = 0;
};

#endif