windows-nt/Source/XPSP1/NT/inetsrv/query/cindex/pmcomp.hxx
2020-09-26 16:20:57 +08:00

106 lines
3.1 KiB
C++

//+---------------------------------------------------------------------------
//
// Microsoft Windows
// Copyright (C) Microsoft Corporation, 1991 - 1997.
//
// File: PMComp.hxx
//
// Contents: Persistent index decompressor using during master merge
//
// Classes: CMPersDeComp
//
// History: 21-Apr-94 DwightKr Created
//
//----------------------------------------------------------------------------
#pragma once
#include "pcomp.hxx"
class CSplitKeyInfo;
//+---------------------------------------------------------------------------
//
// Class: CMPersDeComp
//
// Purpose: Persistent index de-compressor uding during master merges
//
// History: 21-Apr-94 DwightKr Created.
//
// Notes: An implementation of the CPersDeComp class used during
// master merge only.
//----------------------------------------------------------------------------
class CMPersDeComp: public CKeyCursor
{
public:
CMPersDeComp(
PDirectory & curDir,
INDEXID curIid,
CPhysIndex & curIndex,
WORKID curWidMax,
PDirectory & newDir,
INDEXID newIid,
CPhysIndex & newIndex,
const CKey * pKey,
WORKID newWidMax,
const CSplitKeyInfo & splitKeyInfo,
CMutexSem & mutex );
virtual ~CMPersDeComp();
const CKeyBuf * GetKey();
const CKeyBuf * GetNextKey();
const CKeyBuf * GetNextKey( BitOffset * pbitOff );
WORKID WorkId();
WORKID NextWorkId();
ULONG WorkIdCount();
OCCURRENCE Occurrence();
OCCURRENCE NextOccurrence();
ULONG OccurrenceCount();
OCCURRENCE MaxOccurrence();
ULONG HitCount();
void RatioFinished ( ULONG& denom, ULONG& num )
{
_pActiveCursor->RatioFinished (denom, num);
}
void FreeStream() { _pActiveCursor->FreeStream(); }
void RefillStream() { _pActiveCursor->RefillStream(); }
protected:
PDirectory & _curDir; // Directory of the current master index
INDEXID _curIid; // Index id of the current master index
CPhysIndex & _curIndex; // Physical index containing current master
WORKID _curWidMax; // WidMax of current master index.
PDirectory & _newDir; // Directory of the new master index
INDEXID _newIid; // Index id of the new master index
CPhysIndex & _newIndex; // Physical index containing new master
WORKID _newWidMax; // Max WORKID in the new master index
const CSplitKeyInfo & _splitKeyInfo; // up to date split key info
BOOL _fUseNewIndex; // Currently using new or current master
CPersDeComp * _pActiveCursor; // Current active cursor
CKeyBuf _lastSplitKeyBuf; // most recent split key buf
BitOffset _lastSplitKeyOffset; // most recent split key offset
CMutexSem & _mutex; // serialize splitkeyinfo access
};