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.
203 lines
5.0 KiB
203 lines
5.0 KiB
//+---------------------------------------------------------------------------
|
|
//
|
|
// Microsoft Windows
|
|
// Copyright (C) Microsoft Corporation, 1991 - 1992.
|
|
//
|
|
// File: PARTLST.HXX
|
|
//
|
|
// Contents: Partition List
|
|
//
|
|
// Classes: CPartList
|
|
//
|
|
// History: 28-Mar-91 BartoszM Created.
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
|
|
#pragma once
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// Class: CPartList (pl)
|
|
//
|
|
// Purpose: List of partitions in Content Index
|
|
//
|
|
// Interface: CPartition
|
|
// ~CPartition
|
|
//
|
|
// History: 28-Mar-91 BartoszM Created.
|
|
//
|
|
// Notes:
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
|
|
#include <pidxtbl.hxx>
|
|
#include <frmutils.hxx>
|
|
|
|
#include "prtiflst.hxx"
|
|
|
|
class CPartition;
|
|
class PStorage;
|
|
class CContentIndex;
|
|
class CTransaction;
|
|
class CMergeTrans;
|
|
class CIndexId;
|
|
class CKeyList;
|
|
class CDiskIndex;
|
|
class CResManager;
|
|
|
|
typedef CDynArrayInPlace<INDEXID> CIndexIdList;
|
|
|
|
const unsigned maxPartitions = 255;
|
|
// const PARTITIONID partidDefault = 1;
|
|
|
|
DECL_DYNARRAY( CPartArray, CPartition );
|
|
|
|
class CIndexDesc
|
|
{
|
|
public:
|
|
inline CIndexDesc( CIndexRecord & rec )
|
|
: _iid( rec.Iid() ),
|
|
_objectid( rec.ObjectId() )
|
|
{
|
|
}
|
|
|
|
inline INDEXID const Iid() { return _iid; }
|
|
inline WORKID const ObjectId() { return _objectid; }
|
|
|
|
public:
|
|
|
|
INDEXID _iid;
|
|
WORKID _objectid;
|
|
};
|
|
|
|
|
|
DECL_DYNSTACK( CIidStack, CIndexDesc );
|
|
|
|
const LONGLONG eSigPartList = 0x5453494c54524150i64; // "PARTLIST"
|
|
|
|
class CPartList : INHERIT_UNWIND
|
|
{
|
|
DECLARE_UNWIND
|
|
|
|
friend class CPartIter;
|
|
friend class CPartIdIter;
|
|
|
|
public:
|
|
|
|
CPartList ( PStorage& storage, PIndexTable & idxTab,
|
|
XPtr<CKeyList> & sKeylist, CTransaction& xact,
|
|
CCiFrameworkParams & frmwrkParams );
|
|
|
|
CPartition* LokGetPartition ( PARTITIONID partid );
|
|
|
|
void LokSwapIndexes( CMergeTrans& xact,
|
|
PARTITIONID partid,
|
|
CDiskIndex * indexNew,
|
|
CShadowMergeSwapInfo & info );
|
|
|
|
void LokSwapIndexes( CMergeTrans& xact,
|
|
PARTITIONID partid,
|
|
CDiskIndex * indexNew,
|
|
CMasterMergeSwapInfo & info,
|
|
CKeyList const * pOldKeyList,
|
|
CKeyList const * pNewKeyList
|
|
);
|
|
|
|
void LokRemoveIndex ( CIndexId iid );
|
|
|
|
unsigned LokWlCount ();
|
|
|
|
unsigned LokIndexCount ();
|
|
|
|
unsigned LokIndexSize ();
|
|
|
|
#ifdef KEYLIST_ENABLED
|
|
void LokSwapKeyList( CKeyList const * pOldKeyList,
|
|
CKeyList const * pNewKeyList );
|
|
|
|
void LokRemoveKeyList( CKeyList const * pKeyList );
|
|
#endif // KEYLIST_ENABLED
|
|
|
|
WORKID GetChangeLogObjectId( PARTITIONID partid );
|
|
|
|
void RestoreMMergeState( CResManager & resman, PStorage & storage );
|
|
|
|
void LokAddIt( WORKID objectId, IndexType it, PARTITIONID partid );
|
|
|
|
#ifdef CIEXTMODE
|
|
void CiExtDump(void *ciExtSelf);
|
|
#endif
|
|
|
|
private:
|
|
|
|
|
|
CIndex* RestoreIndex ( CIndexRecord & rec,
|
|
CIndexIdList & iidsInUse,
|
|
CIidStack & stkZombie);
|
|
|
|
PARTITIONID MaxPartid () const
|
|
{
|
|
return (PARTITIONID)(_partArray.Size() - 1);
|
|
}
|
|
|
|
BOOL IsValid ( PARTITIONID partid ) const
|
|
{
|
|
return ( partid < _partArray.Size() &&
|
|
_partArray.Get(partid) != 0 );
|
|
}
|
|
|
|
const LONGLONG _sigPartList;
|
|
|
|
CCiFrameworkParams & _frmwrkParams;
|
|
PIndexTable & _idxTab; // index table
|
|
SPartInfoList _partInfoList;
|
|
CPartArray _partArray; // a dynamic array of partition pointers
|
|
|
|
};
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// Class: CPartIter
|
|
//
|
|
// Purpose: Partition Iterator
|
|
//
|
|
// History: 23-Jul-91 BartoszM Created.
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
|
|
class CPartIter
|
|
{
|
|
public:
|
|
void LokInit( CPartList& partList );
|
|
void LokAdvance ( CPartList& partLst );
|
|
BOOL LokAtEnd() { return _curPartId == partidInvalid; }
|
|
CPartition* LokGet() { return _pPart; }
|
|
private:
|
|
CPartition* _pPart;
|
|
PARTITIONID _curPartId;
|
|
};
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// Class: CPartIdIter
|
|
//
|
|
// Purpose: Partition ID Iterator
|
|
//
|
|
// History: 23-Jul-91 BartoszM Created.
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
|
|
class CPartIdIter
|
|
{
|
|
public:
|
|
|
|
void LokInit( CPartList& partList );
|
|
void LokAdvance ( CPartList& partList );
|
|
BOOL LokAtEnd() { return _curPartId == partidInvalid; }
|
|
PARTITIONID LokGetId () { return _curPartId; }
|
|
|
|
private:
|
|
|
|
PARTITIONID _curPartId;
|
|
};
|
|
|