windows-nt/Source/XPSP1/NT/inetsrv/iis/iisrearc/iisplus/ulw3/methodhash.h
2020-09-26 16:20:57 +08:00

117 lines
2.2 KiB
C++

#ifndef _METHODHASH_HXX_
#define _METHODHASH_HXX_
class METHOD_HASH
: public CTypedHashTable< METHOD_HASH,
HEADER_RECORD,
CHAR * >
{
public:
METHOD_HASH()
: CTypedHashTable< METHOD_HASH,
HEADER_RECORD,
CHAR * >
("METHOD_HASH")
{
}
static
CHAR *
ExtractKey(
const HEADER_RECORD * pRecord
)
{
DBG_ASSERT( pRecord != NULL );
return pRecord->_pszName;
}
static
DWORD
CalcKeyHash(
CHAR * pszKey
)
{
return Hash( pszKey );
}
static
bool
EqualKeys(
CHAR * pszKey1,
CHAR * pszKey2
)
{
return strcmp( pszKey1, pszKey2 ) == 0;
}
static
void
AddRefRecord(
HEADER_RECORD * pEntry,
int nIncr
)
{
}
static
HRESULT
Initialize(
VOID
);
static
VOID
Terminate(
VOID
);
static
ULONG
GetIndex(
CHAR * pszName
)
{
HEADER_RECORD * pRecord = NULL;
LK_RETCODE retCode;
HRESULT hr;
retCode = sm_pMethodHash->FindKey( pszName,
&pRecord );
if ( retCode == LK_SUCCESS )
{
DBG_ASSERT( pRecord != NULL );
return pRecord->_ulHeaderIndex;
}
else
{
return HttpVerbUnknown;
}
}
static
CHAR *
GetString(
ULONG ulIndex,
USHORT * pcchLength
)
{
for (DWORD i = 0; sm_rgMethods[i]._pszName != NULL; i++)
{
if (ulIndex == sm_rgMethods[i]._ulHeaderIndex)
{
*pcchLength = sm_rgMethods[i]._cchName;
return sm_rgMethods[i]._pszName;
}
}
return NULL;
}
private:
static METHOD_HASH *sm_pMethodHash;
static HEADER_RECORD sm_rgMethods[];
};
#endif