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.
92 lines
2.2 KiB
92 lines
2.2 KiB
/**********************************************************************/
|
|
/** Microsoft Windows NT **/
|
|
/** Copyright(c) Microsoft Corp., 1994 **/
|
|
/**********************************************************************/
|
|
|
|
/*
|
|
filehash.hxx
|
|
|
|
This module defines the classes used for storing TS_OPEN_FILE_INFO
|
|
objects in a hash table.
|
|
|
|
FILE HISTORY:
|
|
MCourage 09-Dec-1997 Created
|
|
*/
|
|
|
|
#ifndef __FILEHASH_HXX__
|
|
#define __FILEHASH_HXX__
|
|
|
|
#include <lkrhash.h>
|
|
#include <mbstring.h>
|
|
|
|
#include <tsunami.hxx>
|
|
|
|
#include <dbgutil.h>
|
|
|
|
|
|
extern VOID I_DerefFileInfo(TS_OPEN_FILE_INFO *pOpenFile);
|
|
|
|
// Moved to tsunami.hxx
|
|
//
|
|
// class CFileKey {
|
|
// public:
|
|
// CHAR * m_pszFileName; // The file name in upper-case
|
|
// DWORD m_cbFileName; // The number of bytes in the file name
|
|
// };
|
|
|
|
|
|
class CFileHashTable
|
|
: public CTypedHashTable<CFileHashTable, TS_OPEN_FILE_INFO, const CFileKey*>
|
|
{
|
|
public:
|
|
CFileHashTable(
|
|
LPCSTR pszName)
|
|
: CTypedHashTable<CFileHashTable, TS_OPEN_FILE_INFO, const CFileKey*>(
|
|
pszName)
|
|
{}
|
|
|
|
static const CFileKey *
|
|
ExtractKey(const TS_OPEN_FILE_INFO *pOpenFile)
|
|
{
|
|
return pOpenFile->GetKey();
|
|
}
|
|
|
|
static DWORD
|
|
CalcKeyHash(const CFileKey * fileKey)
|
|
{
|
|
DBG_ASSERT( NULL != fileKey );
|
|
const CHAR * psz = fileKey->m_pszFileName;
|
|
if (fileKey->m_cbFileName > 80)
|
|
psz += fileKey->m_cbFileName - 80;
|
|
|
|
return HashString(psz, fileKey->m_cbFileName);
|
|
}
|
|
|
|
static bool
|
|
EqualKeys(const CFileKey * fileKey1, const CFileKey * fileKey2)
|
|
{
|
|
if ((fileKey1->m_cbFileName == fileKey2->m_cbFileName) &&
|
|
(memcmp(fileKey1->m_pszFileName,
|
|
fileKey2->m_pszFileName,
|
|
fileKey2->m_cbFileName) == 0)) {
|
|
return TRUE;
|
|
} else {
|
|
return FALSE;
|
|
}
|
|
}
|
|
|
|
static void
|
|
AddRefRecord(TS_OPEN_FILE_INFO * pOpenFile, int nIncr)
|
|
{
|
|
DBG_ASSERT( nIncr == +1 || nIncr == -1 );
|
|
|
|
if (nIncr == +1) {
|
|
pOpenFile->AddRef();
|
|
} else {
|
|
I_DerefFileInfo(pOpenFile);
|
|
}
|
|
}
|
|
};
|
|
|
|
#endif // __FILEHASH_HXX__
|
|
|