Source code of Windows XP (NT5)
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.
|
|
/*++
Copyright (c) 1996 Microsoft Corporation
Module Name :
cachep.cxx
Abstract: This module contains the internal tsunami caching routines
Author: Murali R. Krishnan ( MuraliK ) 16-Jan-1995
--*/
#include "TsunamiP.Hxx"
#pragma hdrstop
// specifies how many characters we will use for hashing string names
# define g_dwFastHashLength (16)
HASH_TYPE CalculateHashAndLengthOfPathName( LPCSTR pszPathName, PULONG pcbLength ) { HASH_TYPE hash = 0; CHAR ch;
DWORD start; DWORD index;
ASSERT( pszPathName != NULL ); ASSERT( pcbLength != NULL );
*pcbLength = strlen(pszPathName);
//
// hash the last g_dwFastHashLength characters
//
if ( *pcbLength < g_dwFastHashLength ) { start = 0; } else { start = *pcbLength - g_dwFastHashLength; }
for ( index = start; pszPathName[index] != '\0'; index++ ) {
//
// This is an extremely slimey way of getting upper case.
// Kids, don't try this at home
// -johnson
//
ch = pszPathName[index] & (CHAR)~0x20;
hash <<= 1; hash ^= ch; hash <<= 1; hash += ch; }
//
// Multiply by length. Murali said so.
//
return( hash * *pcbLength);
} // CalculateHashAndLengthOfPathName
BOOL DeCache( PCACHE_OBJECT pCacheObject, BOOL fLockCacheTable ) /*++
Description:
This function removes this cache object from any list it may be on.
The cache table lock must be taken if fLockCacheTable is FALSE.
Arguments:
pCacheObject - Object to decache fLockCacheTable - FALSE if the cache table lock has already been taken
--*/ { ASSERT( pCacheObject->Signature == CACHE_OBJ_SIGNATURE ); TSUNAMI_TRACE( TRACE_CACHE_DECACHE, pCacheObject );
//
// Already decached if not on any cache lists
//
if ( !RemoveCacheObjFromLists( pCacheObject, fLockCacheTable ) ) { return TRUE; }
//
// This undoes the initial reference. The last person to check in this
// cache object will cause it to be deleted after this point.
//
TsDereferenceCacheObj( pCacheObject, fLockCacheTable );
return( TRUE ); }
BOOL TsDeCacheCachedBlob( PVOID pBlobPayload ) /*++
Description:
This function removes a blob payload object from the cache
Arguments:
pCacheObject - Object to decache
--*/ { return DeCache( (((PBLOB_HEADER)pBlobPayload)-1)->pCache, TRUE ); }
|