//+--------------------------------------------------------------------------- // // Microsoft Windows // Copyright (C) Microsoft Corporation, 1991 - 1992. // // File: index.hxx // // Contents: Internal classes related to index manipulation // // Classes: CIndex // // History: 06-Mar-91 KyleP Created. // //---------------------------------------------------------------------------- #pragma once #ifdef DISPLAY_INCLUDES #pragma message( "#include <" __FILE__ ">..." ) #endif #include #include #include //+--------------------------------------------------------------------------- // // Class: CIndex (ind) // // Purpose: Pure virtual class for all indexes (wordlist, shadow, master) // // Interface: Init - Initialize index. // QueryCursor - Obtain a cursor into the index // // History: 06-Mar-91 KyleP Created. // 30-Sep-91 BartoszM Added range cursor // 31-Jan-92 AmyA Added synonym cursor // // Notes: // //---------------------------------------------------------------------------- class CKeyCursor; class CKeyArray; class CIndexSnapshot; class CWKeyList; class PStorage; class PSaveProgressTracker; const LONGLONG eSigIndex = 0x2020205845444e49i64; // "INDEX" class CIndex: INHERIT_VIRTUAL_UNWIND, public CDoubleLink, public CQueriable { public: virtual ~CIndex(); virtual unsigned Size() const = 0; virtual void Remove () = 0; virtual void Reference(); virtual void Release (); BOOL InUse () const; void Zombify (); BOOL IsZombie() const; INDEXID GetId () const; void SetId ( INDEXID iid ) { _id = iid; } BOOL IsMaster () const { return _isMaster; } void MakeMaster () { _isMaster = TRUE; } void MakeShadow () { _isMaster = FALSE; } virtual WORKID MaxWorkId () const { return _widMax; } BOOL IsPersistent() const { return CIndexId(_id).IsPersistent();} BOOL IsWordlist() const { return !IsPersistent();} virtual BOOL IsMasterMergeIndex() const { return FALSE; } void SetUsn( USN usn ) { _usn = usn; } USN Usn() const { return _usn; } BOOL InMasterMerge() const { return _inMasterMerge; } void SetInMasterMerge() { Win4Assert( !_inMasterMerge ); _inMasterMerge = TRUE; } virtual CKeyCursor* QueryCursor() = 0; virtual CKeyCursor* QueryKeyCursor(const CKey * pKey) { return 0; } virtual void DebugDump(FILE *pfOut, ULONG fSummaryOnly ); virtual void MakeBackupCopy( PStorage & storage, WORKID wid, PSaveProgressTracker & tracker ) { Win4Assert( !"Must not be called" ); } #ifdef CIEXTMODE void CiExtDump(void *ciExtSelf); #endif protected: CIndex (); CIndex ( INDEXID id ); CIndex ( INDEXID id, WORKID widMax, BOOL isMaster ); virtual void SetMaxWorkId ( WORKID widMax ) { _widMax = widMax; ciDebugOut (( DEB_ITRACE, "SetWidMax %ld\n", _widMax )); } const LONGLONG _sigIndex; unsigned _refCount; INDEXID _id; USN _usn; WORKID _widMax; BOOL _zombie; BOOL _isMaster; BOOL _inMasterMerge; }; //+--------------------------------------------------------------------------- // // Member: CIndex::CIndex, protected // // History: 08-Oct-91 BartoszM Created. // //---------------------------------------------------------------------------- inline CIndex::CIndex () : _sigIndex(eSigIndex), _id(0), _refCount(0), _zombie ( FALSE ), _isMaster ( FALSE ), _widMax (0), _inMasterMerge(FALSE) {} //+--------------------------------------------------------------------------- // // Member: CIndex::CIndex, protected // // History: 08-Oct-91 BartoszM Created. // //---------------------------------------------------------------------------- inline CIndex::CIndex ( INDEXID id, WORKID widMax, BOOL isMaster ) : _sigIndex(eSigIndex), _id(id), _refCount(0), _zombie (FALSE), _isMaster(isMaster), _widMax(widMax), _inMasterMerge(FALSE) {} //+--------------------------------------------------------------------------- // // Member: CIndex::CIndex, protected // // History: 08-Oct-91 BartoszM Created. // //---------------------------------------------------------------------------- inline CIndex::CIndex ( INDEXID id ) : _sigIndex(eSigIndex), _id(id), _refCount(0), _zombie (FALSE), _isMaster(FALSE), _widMax(0), _inMasterMerge(FALSE) {} //+--------------------------------------------------------------------------- // // Member: CIndex::~CIndex, public // // History: 08-Oct-91 BartoszM Created. // //---------------------------------------------------------------------------- inline CIndex::~CIndex() { ciDebugOut (( DEB_ITRACE, "\t\tDeleting index %lx\n", GetId())); } //+--------------------------------------------------------------------------- // // Member: CIndex::GetId, public // // History: 08-Oct-91 BartoszM Created. // //---------------------------------------------------------------------------- inline INDEXID CIndex::GetId () const { return _id; } //+--------------------------------------------------------------------------- // // Member: CIndex::IsDeleted, public // // History: 08-Oct-91 BartoszM Created. // //---------------------------------------------------------------------------- inline BOOL CIndex::IsZombie() const { return _zombie; } //+--------------------------------------------------------------------------- // // Member: CIndex::Reference, public // // History: 08-Oct-91 BartoszM Created. // //---------------------------------------------------------------------------- inline void CIndex::Reference() { _refCount++; } //+--------------------------------------------------------------------------- // // Member: CIndex::Release, public // // History: 08-Oct-91 BartoszM Created. // //---------------------------------------------------------------------------- inline void CIndex::Release () { ciDebugOut (( DEB_ITRACE, "\trelease %lx\n", _id )); Win4Assert( _refCount > 0 ); _refCount--; } //+--------------------------------------------------------------------------- // // Member: CIndex::InUse, public // // History: 08-Oct-91 BartoszM Created. // //---------------------------------------------------------------------------- inline BOOL CIndex::InUse () const { return _refCount != 0; } //+--------------------------------------------------------------------------- // // Member: CIndex::Delete, public // // History: 08-Oct-91 BartoszM Created. // //---------------------------------------------------------------------------- inline void CIndex::Zombify () { _zombie = TRUE; }