98 lines
2.4 KiB
C++
98 lines
2.4 KiB
C++
/*==========================================================================*\
|
|
|
|
Module: _smheap.h
|
|
|
|
Copyright Microsoft Corporation 1997, All Rights Reserved.
|
|
|
|
Author: mikepurt
|
|
|
|
Descriptions:
|
|
|
|
\*==========================================================================*/
|
|
|
|
#ifndef ___SMHEAP_H__
|
|
#define ___SMHEAP_H__
|
|
|
|
const DWORD SMH_MIN_HEAP_BLKSZ = 4; // 16 bytes
|
|
const DWORD SMH_MAX_HEAP_BLKSZ = 15; // 32k bytes
|
|
|
|
|
|
/*$--CSharedMemoryHeap======================================================*\
|
|
|
|
This class is mostly a shell that directs the calls to the correct
|
|
CSharedMemoryBlockHeap instance.
|
|
|
|
\*==========================================================================*/
|
|
|
|
class CSharedMemoryHeap
|
|
{
|
|
public:
|
|
CSharedMemoryHeap() {};
|
|
~CSharedMemoryHeap();
|
|
|
|
BOOL FInitialize(IN LPCWSTR pwszInstanceName);
|
|
|
|
void Deinitialize();
|
|
|
|
PVOID PvAlloc(IN DWORD cbData,
|
|
OUT SHMEMHANDLE * phSMBA);
|
|
|
|
void Free(IN SHMEMHANDLE hSMBA);
|
|
|
|
PVOID PvFromSMBA(IN SHMEMHANDLE hSMBA);
|
|
|
|
private:
|
|
|
|
CSharedMemoryBlockHeap m_rgsmbh[SMH_MAX_HEAP_BLKSZ - SMH_MIN_HEAP_BLKSZ + 1];
|
|
|
|
|
|
//
|
|
// We want anyone copying this around.
|
|
//
|
|
CSharedMemoryHeap& operator=(const CSharedMemoryHeap&);
|
|
CSharedMemoryHeap(const CSharedMemoryHeap&);
|
|
};
|
|
|
|
|
|
|
|
/*$--CSharedMemoryHeap::Free================================================*\
|
|
|
|
Determine which block heap the handle refers to and direct the call to that
|
|
block heap.
|
|
|
|
\*==========================================================================*/
|
|
|
|
inline
|
|
void
|
|
CSharedMemoryHeap::Free(IN SHMEMHANDLE hSMBA)
|
|
{
|
|
DWORD fBlkSz = FBlkSzFromSMBA(hSMBA);
|
|
|
|
Assert((fBlkSz <= SMH_MAX_HEAP_BLKSZ) && (fBlkSz >= SMH_MIN_HEAP_BLKSZ));
|
|
|
|
m_rgsmbh[fBlkSz-SMH_MIN_HEAP_BLKSZ].Free(hSMBA);
|
|
}
|
|
|
|
|
|
/*$--CSharedMemoryHeap::PvFromSMBA==========================================*\
|
|
|
|
Determine which block heap the handle refers to and direct the call to that
|
|
block heap.
|
|
|
|
\*==========================================================================*/
|
|
|
|
inline
|
|
PVOID
|
|
CSharedMemoryHeap::PvFromSMBA(IN SHMEMHANDLE hSMBA)
|
|
{
|
|
DWORD fBlkSz = FBlkSzFromSMBA(hSMBA);
|
|
|
|
Assert((fBlkSz <= SMH_MAX_HEAP_BLKSZ) && (fBlkSz >= SMH_MIN_HEAP_BLKSZ));
|
|
|
|
return m_rgsmbh[fBlkSz-SMH_MIN_HEAP_BLKSZ].PvFromSMBA(hSMBA);
|
|
}
|
|
|
|
|
|
#endif // ___SMHEAP_H__
|
|
|