2025-11-27 16:46:48 +09:00

96 lines
2.6 KiB
C++

// HashTable.h: interface for the COXHashTable class.
//
// COXHashTable is a VERY simple hash table implementation.
//
//////////////////////////////////////////////////////////////////////
// Version: 9.3
#if !defined(AFX_HASHTABLE_H__30445BB2_1885_11D3_AA0C_F0E6D1000000__INCLUDED_)
#define AFX_HASHTABLE_H__30445BB2_1885_11D3_AA0C_F0E6D1000000__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#include "oxdllext.h"
#include <tchar.h> // for TCHAR stuff and portable character mappings
// Each entry in the hash table is one of these...
struct HashNode
{
HashNode();
~HashNode();
HashNode* pNext;
LPTSTR szName;
DWORD dwData;
UINT nHashValue;
};
// For iteration
typedef HashNode* HASH_POS;
#define HASHTABLE_START_POS ((HASH_POS)-1L)
// class wrapper for the hash table
class OX_CLASS_DECL COXHashTable
{
// Construction/Destruction
public:
COXHashTable();
COXHashTable(int nHashTableSize);
virtual ~COXHashTable();
// Attributes
public:
// Sets whether or not keys are treated as case sensitive
void SetCaseSensitive(BOOL bCase);
// Returns whether or not keys are treated as case sensitive
BOOL GetCaseSensitive();
// Operations
public:
// Clears contents of hash table
void RemoveAll();
// Initialises the hash table to the desired size. A Prime number is good.
// Size should be 20% bigger than largest anticipated data set
BOOL InitHashTable(UINT nHashSize);
// Returns the size of the hash table
UINT GetHashTableSize() const;
// Stores the given data (dwData) in the hash table using the supplied string (sz)
// as the hash key. Returns TRUE on success.
BOOL Add(LPCTSTR sz, DWORD dwData);
// Looks up the data entry using the string 'sz' as the key, and returns the
// stored data in the dwData reference. Returns TRUE on success.
BOOL Lookup(LPCTSTR sz, DWORD& dwData) const;
// Stores the given data (dwData) in the hash table using the supplied string (sz)
// as the hash key
BOOL Remove(LPCTSTR sz);
HASH_POS GetStartPosition() const;
void GetNextAssoc(HASH_POS& pos, LPCTSTR& sz, DWORD& dwData) const;
// Implementation
protected:
BOOL CommonConstruct(int nHashTableSize);
// Produces a hash value for a given string
UINT Hash(LPCTSTR sz) const;
// Looks up the hash table for a given string and returns a hash table entry
HashNode *Lookup(LPCTSTR sz) const;
protected:
UINT m_nHashTableSize;
BOOL m_bCaseSensitive;
HashNode** m_pHashTable;
};
#endif // !defined(AFX_HASHTABLE_H__30445BB2_1885_11D3_AA0C_F0E6D1000000__INCLUDED_)