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.
83 lines
2.2 KiB
83 lines
2.2 KiB
//+---------------------------------------------------------------------------
|
|
//
|
|
// Copyright (C) Microsoft Corporation, 1991 - 1998
|
|
//
|
|
// File: filidmap.hxx
|
|
//
|
|
// Contents: FileId to wid mapping using hashed access
|
|
//
|
|
// History: 07-May-97 SitaramR Created
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
|
|
#pragma once
|
|
|
|
#include "pershash.hxx"
|
|
#include "usnlist.hxx"
|
|
|
|
class CiCat;
|
|
|
|
//+-------------------------------------------------------------------------
|
|
//
|
|
// Class: CFileIdMap
|
|
//
|
|
// Purpose: FileId to wid mapping using hashed access
|
|
//
|
|
// History: 07-May-97 SitaramR Created
|
|
//
|
|
//--------------------------------------------------------------------------
|
|
|
|
class CFileIdMap : public CPersHash
|
|
{
|
|
public:
|
|
|
|
CFileIdMap( CPropStoreManager & propStoreMgr );
|
|
|
|
#if CIDBG == 1
|
|
~CFileIdMap()
|
|
{
|
|
ciDebugOut(( DEB_ITRACE,
|
|
"fileidmap cache hits %d, misses %d, negative hits %d, negative misses %d\n",
|
|
_cCacheHits, _cCacheMisses, _cCacheNegativeHits, _cCacheNegativeMisses ));
|
|
}
|
|
#endif // CIDBG == 1
|
|
|
|
BOOL FastInit ( CiStorage * pStorage, ULONG version );
|
|
void LongInit ( ULONG version, BOOL fDirtyShutdown );
|
|
void LokFlush();
|
|
|
|
WORKID LokFind( FILEID fileId, VOLUMEID volumeId );
|
|
void LokAdd ( FILEID fileId, WORKID wid, VOLUMEID volumeId );
|
|
void LokDelete( FILEID fileId, WORKID wid );
|
|
|
|
private:
|
|
|
|
unsigned HashFun ( FILEID fileId );
|
|
void HashAll();
|
|
|
|
void AddToCache( FILEID & fileId, WORKID wid, VOLUMEID volumeId );
|
|
BOOL FindInCache( FILEID & fileId, VOLUMEID volumeId, WORKID & wid );
|
|
void RemoveFromCache( FILEID & fileId, WORKID wid );
|
|
|
|
struct SFileIdMapEntry
|
|
{
|
|
FILEID fileId;
|
|
WORKID wid;
|
|
VOLUMEID volumeId;
|
|
};
|
|
|
|
enum { cFileIdMapCacheEntries = 6 };
|
|
|
|
SFileIdMapEntry _aCache[ cFileIdMapCacheEntries ];
|
|
unsigned _cCacheEntries;
|
|
|
|
#if CIDBG == 1
|
|
unsigned _cCacheHits;
|
|
unsigned _cCacheNegativeHits;
|
|
unsigned _cCacheMisses;
|
|
unsigned _cCacheNegativeMisses;
|
|
#endif // CIDBG == 1
|
|
};
|
|
|
|
|
|
|