mirror of https://github.com/tongzx/nt5src
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.
249 lines
7.0 KiB
249 lines
7.0 KiB
//+---------------------------------------------------------------------------
|
|
//
|
|
// Microsoft Windows
|
|
// Copyright (C) Microsoft Corporation, 1991 - 2000.
|
|
//
|
|
// File: DREP.HXX
|
|
//
|
|
// Contents: Data Repository
|
|
//
|
|
// Classes: CDataRepository
|
|
//
|
|
// History: 17-Apr-91 BartoszM Created.
|
|
//
|
|
//-----------------------------------------------------------------------------
|
|
|
|
#pragma once
|
|
|
|
#include <plang.hxx>
|
|
#include <occarray.hxx>
|
|
#include <norm.hxx>
|
|
#include <keymak.hxx>
|
|
|
|
class CFullPropSpec;
|
|
class CWordList;
|
|
class CLangList;
|
|
class CValueNormalizer;
|
|
class CPidMapper;
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// Class: CCumulTimer
|
|
//
|
|
// Purpose: Cumulative timing for debugging
|
|
//
|
|
// History: 07-Dec-93 BartoszM Created
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
#if CIDBG == 1
|
|
class CCumulTimer
|
|
{
|
|
public:
|
|
CCumulTimer ( WCHAR* szActivity )
|
|
:_szActivity ( szActivity ), _count(0), _totalTime(0)
|
|
{
|
|
END_CONSTRUCTION ( CCumulTimer );
|
|
}
|
|
|
|
~CCumulTimer();
|
|
|
|
void Start()
|
|
{
|
|
_startTime = GetTickCount();
|
|
}
|
|
|
|
void Stop ()
|
|
{
|
|
ULONG stopTime = GetTickCount();
|
|
_totalTime += stopTime - _startTime;
|
|
_count++;
|
|
}
|
|
|
|
private:
|
|
ULONG _startTime;
|
|
ULONG _totalTime;
|
|
ULONG _count;
|
|
WCHAR* _szActivity;
|
|
};
|
|
#endif // CIDBG
|
|
|
|
// Macros to be used with the timer
|
|
|
|
#if CIDBG == 1
|
|
#define TSTART(timer) timer.Start()
|
|
#define TSTOP(timer) timer.Stop()
|
|
#else
|
|
#define TSTART(timer)
|
|
#define TSTOP(timer)
|
|
#endif
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// Class: CDataRepository
|
|
//
|
|
// Purpose: Data repository for filter
|
|
//
|
|
// History: 7-Apr-91 BartoszM Created
|
|
// 30-May-91 t-WadeR Changed to be input-driven
|
|
// 01-July-91 t-WadeR Added _fIgnore
|
|
// 18-Sep-92 AmyA Added PutObject
|
|
// 23-Sep-92 AmyA Overloaded PutPhrase
|
|
// 20-Oct-92 AmyA Changed PutWord to Unicode
|
|
// 04-Feb-93 KyleP Use LARGE_INTEGER
|
|
// 21-Oct-93 DwightKr Added new methods; made PutPropID
|
|
// public
|
|
//
|
|
// Notes: Data Repository is a sink for data in the form
|
|
// of streams, phrases, words, numbers, and dates.
|
|
// Data is processed internally and it ends up
|
|
// in the key repository in the form of normalized
|
|
// keys. Internal processing is done in two pipelines:
|
|
// some data goes to the language dependednt key maker,
|
|
// some (date, number) to the language independent
|
|
// value normalizer. The language dependent key maker
|
|
// may dynamically change when PutLanguage is called.
|
|
// Both key makers are initialized with the key
|
|
// repository as their key sink.
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
|
|
class CDataRepository
|
|
{
|
|
public:
|
|
CDataRepository ( PKeyRepository& krep, IPhraseSink* pPhraseSink,
|
|
BOOL fQuery, ULONG fuzzy, CPidMapper & pidMap,
|
|
CLangList & langList);
|
|
|
|
void PutStream ( TEXT_SOURCE * stm );
|
|
|
|
void PutPhrase ( const WCHAR* str, unsigned cwc );
|
|
void PutPhrase ( const char* str, unsigned cc );
|
|
BOOL PutLanguage ( LCID lcid );
|
|
BOOL PutPropName ( CFullPropSpec const & Prop );
|
|
|
|
void PutValue ( CStorageVariant const & var );
|
|
|
|
inline BOOL StoreValue ( CFullPropSpec const & ps, CStorageVariant const & var );
|
|
inline BOOL StoreSecurity ( PSECURITY_DESCRIPTOR pSD, ULONG cbSD );
|
|
|
|
inline void PutWorkId ( WORKID wid );
|
|
|
|
inline const ULONG GetFilteredBlockCount() const { return _krep.GetFilteredBlockCount(); }
|
|
void InitFilteredBlockCount( ULONG ulMaxFilteredBlocks ) { _krep.InitFilteredBlockCount( ulMaxFilteredBlocks ); }
|
|
|
|
BOOL ContainedNoiseWords();
|
|
|
|
inline PROPID GetPropId ( ) const { return _pid; }
|
|
|
|
void NormalizeWStr( BYTE *pbOutBuf, unsigned *pcbOutBuf );
|
|
|
|
private:
|
|
|
|
BOOL PutPropId( PROPID pid );
|
|
BOOL LoadKeyMaker();
|
|
|
|
// Two key makers
|
|
|
|
XPtr<CKeyMaker> _xKeyMaker;
|
|
CValueNormalizer _valueNorm; // never changes
|
|
|
|
// Sink for keys
|
|
|
|
PKeyRepository& _krep;
|
|
|
|
// Pidmapper for pids
|
|
|
|
CPidMapper & _pidMap;
|
|
|
|
// Sink for phrases
|
|
|
|
IPhraseSink* _pPhraseSink;
|
|
|
|
// Source of key makers
|
|
|
|
WORKID _wid;
|
|
PROPID _pid; // Current property
|
|
PROPID _prevPid; // PROPID of previous _xKeyMaker
|
|
CSparseOccArray _occArray;
|
|
|
|
BOOL _fQuery;
|
|
ULONG _ulGenerateMethod;
|
|
|
|
LCID _lcid; // Current locale
|
|
LCID _prevLcid; // Locale of previous _xKeyMaker
|
|
LCID _lcidSystemDefault; // Default locale of system
|
|
ULONG _ulCodePage; // Codepage of current locale
|
|
|
|
CLangList & _langList;
|
|
|
|
#if CIDBG == 1
|
|
public:
|
|
CCumulTimer timerBind;
|
|
CCumulTimer timerNoBind;
|
|
CCumulTimer timerFilter;
|
|
#endif
|
|
|
|
unsigned _cwcFoldedPhrase;
|
|
XArray<WCHAR> _xwcsFoldedPhrase;
|
|
};
|
|
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// Member: CDataRepository::PutWorkId
|
|
//
|
|
// Synopsis: Sets work id
|
|
//
|
|
// Arguments: [wid] -- work id
|
|
//
|
|
// History: 18-Apr-91 BartoszM Created
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
inline void CDataRepository::PutWorkId ( WORKID wid )
|
|
{
|
|
_wid = wid;
|
|
_occArray.ReInitialize();
|
|
_krep.PutWorkId( wid );
|
|
}
|
|
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// Member: CDataRepository::StoreValue
|
|
//
|
|
// Synopsis: Store a property value.
|
|
//
|
|
// Arguments: [prop] -- Property descriptor
|
|
// [var] -- Value
|
|
//
|
|
// History: 21-Dec-95 KyleP Created
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
|
|
inline BOOL CDataRepository::StoreValue( CFullPropSpec const & ps,
|
|
CStorageVariant const & var )
|
|
{
|
|
return _krep.StoreValue( ps, var );
|
|
}
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// Member: CDataRepository::StoreSecurity
|
|
//
|
|
// Synopsis: Store a security identifier
|
|
//
|
|
// Arguments: [pSD] -- Security descriptor
|
|
// [cbSD] -- size in bytes of pSD
|
|
//
|
|
// Notes: Effective for the down-level CI only.
|
|
//
|
|
// History: 06 Feb 96 AlanW Created
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
|
|
inline BOOL CDataRepository::StoreSecurity( PSECURITY_DESCRIPTOR pSD, ULONG cbSD )
|
|
{
|
|
return _krep.StoreSecurity( pSD, cbSD );
|
|
}
|
|
|
|
|