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.
 
 
 
 
 
 

86 lines
3.8 KiB

/*******************************************************************************
* VendorLx.h
* This is the header file for the CCompressedLexicon class that implements
* the read-only vendor lexicons.
*
* Owner: yunusm Date: 06/18/99
* Copyright (C) 1998 Microsoft Corporation. All Rights Reserved.
*******************************************************************************/
#pragma once
//--- Includes -----------------------------------------------------------------
#include "resource.h"
#include "HuffD.h"
#include "CommonLx.h"
//--- Class, Struct and Union Definitions -------------------------------------
/*******************************************************************************
*
* CCompressedLexicon
*
****************************************************************** YUNUSM *****/
class ATL_NO_VTABLE CCompressedLexicon :
public CComObjectRootEx<CComMultiThreadModel>,
public CComCoClass<CCompressedLexicon, &CLSID_SpCompressedLexicon>,
public ISpLexicon,
public ISpObjectWithToken
{
//=== ATL Setup ===
public:
DECLARE_REGISTRY_RESOURCEID(IDR_COMPRESSEDLEXICON)
DECLARE_PROTECT_FINAL_CONSTRUCT()
BEGIN_COM_MAP(CCompressedLexicon)
COM_INTERFACE_ENTRY(ISpLexicon)
COM_INTERFACE_ENTRY(ISpObjectWithToken)
END_COM_MAP()
//=== Methods ===
public:
//--- Ctor, dtor, etc
CCompressedLexicon();
~CCompressedLexicon();
//=== Interfaces ===
public:
//--- ISpLexicon
STDMETHODIMP GetPronunciations(const WCHAR * pwWord, LANGID LangID, DWORD dwFlags, SPWORDPRONUNCIATIONLIST * pWordPronunciationList);
STDMETHODIMP AddPronunciation(const WCHAR * pwWord, LANGID LangID, SPPARTOFSPEECH ePartOfSpeech, const SPPHONEID * pszPronunciations);
STDMETHODIMP RemovePronunciation(const WCHAR * pszWord, LANGID LangID, SPPARTOFSPEECH ePartOfSpeech, const SPPHONEID * pszPronunciation);
STDMETHODIMP GetGeneration(DWORD *pdwGeneration);
STDMETHODIMP GetGenerationChange(DWORD dwFlags, DWORD *pdwGeneration, SPWORDLIST *pWordList);
STDMETHODIMP GetWords(DWORD dwFlags, DWORD *pdwGeneration, DWORD *pdwCookie, SPWORDLIST *pWordList);
//--- ISpObjectWithToken
STDMETHODIMP SetObjectToken(ISpObjectToken * pToken);
STDMETHODIMP GetObjectToken(ISpObjectToken ** ppToken);
//=== Private methods ===
private:
void CleanUp(void);
void NullMembers(void);
DWORD GetCmpHashEntry(DWORD dhash);
bool CompareHashValue(DWORD dhash, DWORD d);
void CopyBitsAsDWORDs(PDWORD pDest, PDWORD pSource, DWORD dSourceOffset, DWORD nBits);
HRESULT ReadWord(DWORD *dOffset, PWSTR pwWord);
HRESULT ReadWordInfo(PWSTR pWord, SPLEXWORDINFOTYPE Type, DWORD *dOffset,
PBYTE pProns, DWORD dLen, DWORD *pdLenRequired);
//=== Private data ===
private:
bool m_fInit; // true if successfully inited
CComPtr<ISpObjectToken> m_cpObjectToken; // Token object
HANDLE m_hLkupFile; // Handle to lookup file
HANDLE m_hLkupMap; // Handle to map on lookup file
PBYTE m_pLkup; // Pointer to view on map on lookup file
PBYTE m_pWordHash; // Word hash table holding offsets into the compressed block
PDWORD m_pCmpBlock; // Pointer to compressed block holding words + CBs + prons
LOOKUPLEXINFO *m_pLkupLexInfo; // Lookup lex info header
CHuffDecoder *m_pWordsDecoder; // Huffman decoder for words
CHuffDecoder *m_pPronsDecoder; // Huffman decoder for pronunciations
CHuffDecoder *m_pPosDecoder; // Huffman decoder for part of speech
};
//--- End of File -------------------------------------------------------------