NT4/private/windows/spooler/spllib/memblock.hxx
2020-09-30 17:12:29 +02:00

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