|
|
//+---------------------------------------------------------------------------
//
// 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 ); }
|