///////////////////////////////////////////////////////////////////////////// // // Copyright (C) 1997, Microsoft Corporation. All Rights Reserved. // // Hash.h : // // Owner : ChaeSeong Lim, HET MSCH RND (e-mail:cslim@microsoft.com) // // History : 1996/May ///////////////////////////////////////////////////////////////////////////// #ifndef __HASH_H__ #define __HASH_H__ #if !defined (_UNICODE) && !defined (_MBCS) #error _UNICODE or _MBCS is required. #endif #include #define OYONG_HASHSIZE 5501 // current num of words = 3657 ///////////////////////////////////////////////////////////////////////////// // CHash class CHash { public: // Constructor CHash() {} // Attributes // Operations virtual void Add(LPCTSTR) {} virtual BOOL Find(LPCTSTR) { return FALSE; } virtual void Delete(LPCTSTR) {} // Implementations protected: virtual UINT Hash(const _TXCHAR *key); // UINT = 32 bit unsigned public: // Destructor virtual ~CHash() { } }; ///////////////////////////////////////////////////////////////////////////// // CHash inline fuctions // Hash fuction inline UINT CHash::Hash(const _TXCHAR *key) { UINT hashValue = 0, g; while (*key) { hashValue = (hashValue << 4) + *key++; if (g = hashValue & 0xF0000000) { hashValue ^= g >> 24; hashValue &= ~g; } } return hashValue % OYONG_HASHSIZE; } #ifdef _DIC_BUILD_ ///////////////////////////////////////////////////////////////////////////// // CMemHash inline fuctions class COyongMakeHash : public CHash { public: // Constructor COyongMakeHash() { for (int i=0; i> 24; hashValue &= ~g; } } return hashValue % WORD_HASH_SIZE; } inline void CWordHash::Add(LPCTSTR searchWord, BYTE pumsa) { UINT hashVal = CWordHash::Hash((const _TXCHAR*)searchWord); memset(m_lpHashTable[hashVal], '\0', 20); _tcscpy((LPTSTR)m_lpHashTable[hashVal], searchWord); m_lpHashTable[hashVal][19] = pumsa; } #endif // !__HASH_H__