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.
120 lines
3.0 KiB
120 lines
3.0 KiB
//+---------------------------------------------------------------------------
|
|
//
|
|
// Microsoft Windows
|
|
// Copyright (C) Microsoft Corporation, 1991 - 1998.
|
|
//
|
|
// File: FRESH.HXX
|
|
//
|
|
// Contents: Fresh indexes
|
|
//
|
|
// Classes: CFresh
|
|
//
|
|
// History: 16-May-91 BartoszM Created.
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
|
|
#pragma once
|
|
|
|
#include <xact.hxx>
|
|
#include <freshlog.hxx>
|
|
|
|
#include "fretest.hxx"
|
|
#include "dqueue.hxx"
|
|
|
|
class CIndexTrans;
|
|
class CMergeTrans;
|
|
class PStorage;
|
|
class CWidArray;
|
|
class CDocList;
|
|
class CResManager;
|
|
|
|
class CPartList;
|
|
class CPartition;
|
|
class CWordList;
|
|
|
|
class PSaveProgressTracker;
|
|
class CEnumWorkid;
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// Class: CFresh
|
|
//
|
|
// Purpose: Contains the mapping of work id's into the most current
|
|
// indexes for these work id's.
|
|
//
|
|
// History: 16-May-91 BartoszM Created.
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
|
|
class CFresh
|
|
{
|
|
friend class CFreshTest;
|
|
friend class CResManager;
|
|
friend class CMerge;
|
|
|
|
public:
|
|
|
|
CFresh ( PStorage& storage, CTransaction& xact,
|
|
CPartList & partList );
|
|
|
|
~CFresh ();
|
|
|
|
void LokInit();
|
|
|
|
CFreshTest* LokGetFreshTest();
|
|
|
|
unsigned LokCount() const { return _master->Count(); }
|
|
|
|
unsigned LokDeleteCount() const { return _master->DeleteCount(); }
|
|
|
|
WORKID LokUpdate ( CMerge & merge, CMergeTrans& xact,
|
|
CPersFresh & newFreshLog,
|
|
INDEXID new_iid,
|
|
int cInd,
|
|
INDEXID aIidOld[],
|
|
XPtr<CFreshTest> & xFreshTestAtMerge );
|
|
|
|
void LokAddIndex ( CIndexTrans& xact,
|
|
INDEXID iid, INDEXID iidDeleted,
|
|
CDocList& docList,
|
|
CWordList const & wordList );
|
|
|
|
WORKID LokRemoveIndexes ( CMergeTrans& xact, CPersFresh & newFreshLog,
|
|
unsigned cInd,
|
|
INDEXID aIidOld[],
|
|
INDEXID iidOldDeleted );
|
|
|
|
void LokDeleteDocuments (
|
|
CIndexTrans& xact,
|
|
CDocList& docList,
|
|
INDEXID iidDeleted );
|
|
|
|
void LokReleaseFreshTest( CFreshTest* test );
|
|
|
|
void LokCommitMaster ( CFreshTest* newMaster );
|
|
|
|
void LokEmpty();
|
|
|
|
void LokMakeFreshLogBackup( PStorage & storage,
|
|
PSaveProgressTracker & progressTracker,
|
|
XInterface<ICiEnumWorkids> & xWorkidEnum );
|
|
#if DEVL == 1
|
|
void Dump ();
|
|
#endif
|
|
|
|
#ifdef CIEXTMODE
|
|
void CiExtDump(void *ciExtSelf);
|
|
#endif
|
|
|
|
private:
|
|
|
|
WORKID LokBuildNewFreshLog( CFreshTest *newFreTest,
|
|
CPersFresh & newFreshLog,
|
|
CIdxSubstitution& subst);
|
|
|
|
PStorage & _storage;
|
|
CFreshTest* _master; // master copy of in-memory fresh test
|
|
CPersFresh _persFresh;
|
|
CPartList & _partList; // PartList
|
|
};
|
|
|