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