125 lines
1.9 KiB
C++
125 lines
1.9 KiB
C++
/*++
|
|
|
|
Copyright (c) 1994 Microsoft Corporation
|
|
All rights reserved.
|
|
|
|
Module Name:
|
|
|
|
memblock.hxx
|
|
|
|
Abstract:
|
|
|
|
Memory allocater for chunks of read only memory header.
|
|
|
|
Author:
|
|
|
|
Albert Ting (AlbertT) 30-Aug-1994
|
|
|
|
Revision History:
|
|
|
|
--*/
|
|
|
|
#ifndef _MEMBLOCK_HXX
|
|
#define _MEMBLOCK_HXX
|
|
|
|
class TMemBlock {
|
|
|
|
SIGNATURE( 'memb' )
|
|
ALWAYS_VALID
|
|
SAFE_NEW
|
|
|
|
public:
|
|
|
|
enum _CONSTANTS {
|
|
kFlagGlobalNew = 0x1
|
|
};
|
|
|
|
TMemBlock(
|
|
UINT uGranularity,
|
|
DWORD fdwFlags
|
|
);
|
|
~TMemBlock(
|
|
VOID
|
|
);
|
|
|
|
PVOID
|
|
pvAlloc(
|
|
DWORD dwSize
|
|
);
|
|
PVOID
|
|
pvFirst(
|
|
VOID
|
|
);
|
|
PVOID
|
|
pvIter(
|
|
VOID
|
|
);
|
|
UINT
|
|
uSize(
|
|
PVOID pvUser
|
|
) const;
|
|
|
|
private:
|
|
|
|
typedef struct _DATA {
|
|
DWORD dwSize;
|
|
DWORD dwPadding;
|
|
} DATA, *PDATA;
|
|
|
|
typedef struct _BLOCK {
|
|
struct _BLOCK* pNext;
|
|
PDATA pDataLast;
|
|
} BLOCK, *PBLOCK;
|
|
|
|
PBLOCK _pFirst;
|
|
PBLOCK _pLast;
|
|
DWORD _uGranularity;
|
|
DWORD _dwNextFree;
|
|
DWORD _dwCount;
|
|
PDATA _pDataLast;
|
|
DWORD _dwIterCount;
|
|
PBLOCK _pIterBlock;
|
|
PDATA _pIterData;
|
|
DWORD _fdwFlags;
|
|
|
|
DWORD
|
|
dwBlockHeaderSize(
|
|
VOID
|
|
) const
|
|
{ return DWordAlign(sizeof(BLOCK)); }
|
|
|
|
PDATA
|
|
pBlockToData(
|
|
PBLOCK pBlock
|
|
) const
|
|
{ return (PDATA)((PBYTE)pBlock + dwBlockHeaderSize()); }
|
|
|
|
DWORD
|
|
dwDataHeaderSize(
|
|
VOID
|
|
) const
|
|
{ return DWordAlign(sizeof(DATA)); }
|
|
|
|
PVOID
|
|
pvDataToUser(
|
|
PDATA pData
|
|
) const
|
|
{ return (PVOID)((PBYTE)pData + dwDataHeaderSize()); }
|
|
|
|
PDATA
|
|
pvUserToData(
|
|
PVOID pvUser
|
|
) const
|
|
{ return (PDATA)((PBYTE)pvUser - dwDataHeaderSize()); }
|
|
|
|
PDATA
|
|
pDataNext(
|
|
PDATA pData
|
|
) const
|
|
{ return (PDATA) ((PBYTE)pData + pData->dwSize); }
|
|
};
|
|
|
|
|
|
#endif // ndef _MEMBLOCK_HXX
|
|
|