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.
|
|
//+---------------------------------------------------------------------------
//
// 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
};
|