Leaked source code of windows server 2003
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
//+---------------------------------------------------------------------------
//
//
// CThaiTrieIter - class CThaiTrieIter use for traversing trie.
//
// History:
// created 7/99 aarayas
//
// �1999 Microsoft Corporation
//----------------------------------------------------------------------------
#ifndef _CTHAITRIEITER_H_
#define _CTHAITRIEITER_H_
#include "ctrie.hpp"
#include "thwbdef.hpp"
#include "WB_Asserts.h"
#include "lextable.hpp"
#include "wzmanip.h"
BOOL IsThaiUpperAndLowerClusterCharacter(WCHAR wc); BOOL IsThaiBeginClusterCharacter(WCHAR wc); BOOL IsThaiEndingClusterCharacter(WCHAR wc); BOOL IsThaiConsonant(WCHAR wc); bool IsThaiMostlyBeginCharacter(WCHAR wc); bool IsThaiMostlyLastCharacter(WCHAR wc); bool IsContain(const WCHAR* pwcWord, unsigned int iWordLen, WCHAR wc); bool IsThaiEndingSign(WCHAR wc); //unsigned int GetCluster(WCHAR* pszIndex);
DWORD POSCompress(const WCHAR* szTag); WCHAR* POSDecompress(DWORD dwTag);
enum SOUNDEXSTATE { UNABLE_TO_MOVE, NOSUBSTITUTE, SUBSTITUTE_DIACRITIC, SUBSTITUTE_SOUNDLIKECHAR, STOP_MOVE };
class CThaiTrieIter : public CTrieIter { public: CThaiTrieIter(); ~CThaiTrieIter(); void Init(CTrie* ctrie); BOOL MoveCluster(const WCHAR* szCluster, unsigned int iNumCluster); bool MoveCluster(WCHAR* szCluster, unsigned int iNumCluster, bool fBeginNewWord); SOUNDEXSTATE MoveSoundexByCluster(WCHAR* szCluster, unsigned int iNumCluster, unsigned int iNumNextCluster); int Soundex(WCHAR* word); bool m_fThaiNumber; protected: unsigned int GetScore(WCHAR* idealWord, WCHAR* soundLikeWord); bool Traverse(unsigned int iCharPos, unsigned int scoring); inline void CopyScan();
// Trie Iterator - extra iterator for use as
TRIESCAN trieScan1;
WCHAR* soundexWord; WCHAR* resultWord; WCHAR* tempWord; unsigned int iResultScore;
// For optimization quick look up table.
TRIESCAN* pTrieScanArray; private: bool CheckNextCluster(const WCHAR* szCluster, unsigned int iNumCluster); bool GetScanFirstChar(WCHAR wc, TRIESCAN* pTrieScan); }; #endif
|