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.
294 lines
7.0 KiB
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;
|
|
}
|
|
|