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.
105 lines
3.2 KiB
105 lines
3.2 KiB
//+---------------------------------------------------------------------------
|
|
//
|
|
// 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
|
|
};
|
|
|