Source code of Windows XP (NT5)
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.
 
 
 
 
 
 

294 lines
7.0 KiB

//+---------------------------------------------------------------------------
//
// 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 <keycur.hxx>
#include <idxids.hxx>
#include <querble.hxx>
//+---------------------------------------------------------------------------
//
// 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;
}