windows-nt/Source/XPSP1/NT/base/fs/utils/ulib/inc/membmgr.hxx
2020-09-26 16:20:57 +08:00

259 lines
3.9 KiB
C++

/*++
Copyright (c) 1992 Microsoft Corporation
Module Name:
membmgr.hxx
Abstract:
This class offers two classes for the management of fixed
size blocks of memory. The first class STATIC_MEM_BLOCK_MGR
allows the user to allocate and free fixed size memory blocks
up to the specified limit that the class was initialized to.
The second class MEM_BLOCK_MGR offers a scheme for memory block
management that will grow as the clients needs increase.
Author:
Norbert P. Kusters (norbertk) 29-May-92
--*/
#if !defined(_MEM_BLOCK_MGR_DEFN_)
#define _MEM_BLOCK_MGR_DEFN_
#include "array.hxx"
#include "bitvect.hxx"
DECLARE_CLASS( STATIC_MEM_BLOCK_MGR );
class STATIC_MEM_BLOCK_MGR : public OBJECT {
public:
DECLARE_CONSTRUCTOR( STATIC_MEM_BLOCK_MGR );
VIRTUAL
~STATIC_MEM_BLOCK_MGR(
);
NONVIRTUAL
BOOLEAN
Initialize(
IN ULONG MemBlockSize,
IN ULONG NumBlocks DEFAULT 128
);
NONVIRTUAL
PVOID
Alloc(
);
NONVIRTUAL
BOOLEAN
Free(
OUT PVOID MemBlock
);
NONVIRTUAL
ULONG
QueryBlockSize(
) CONST;
NONVIRTUAL
ULONG
QueryNumBlocks(
) CONST;
private:
NONVIRTUAL
VOID
Construct(
);
NONVIRTUAL
VOID
Destroy(
);
PCHAR _heap;
ULONG _num_blocks;
ULONG _block_size;
ULONG _num_allocated;
ULONG _next_alloc;
BITVECTOR _bitvector;
};
INLINE
ULONG
STATIC_MEM_BLOCK_MGR::QueryBlockSize(
) CONST
/*++
Routine Description:
This routine return the number of bytes in a block returned
by this object.
Arguments:
None.
Return Value:
The number of bytes per block.
--*/
{
return _block_size;
}
INLINE
ULONG
STATIC_MEM_BLOCK_MGR::QueryNumBlocks(
) CONST
/*++
Routine Description:
This routine return the number of blocks contained
by this object.
Arguments:
None.
Return Value:
The number of blocks.
--*/
{
return _num_blocks;
}
DECLARE_CLASS( MEM_BLOCK_MGR );
class MEM_BLOCK_MGR : public OBJECT {
public:
ULIB_EXPORT
DECLARE_CONSTRUCTOR( MEM_BLOCK_MGR );
VIRTUAL
ULIB_EXPORT
~MEM_BLOCK_MGR(
);
NONVIRTUAL
ULIB_EXPORT
BOOLEAN
Initialize(
IN ULONG MemBlockSize,
IN ULONG InitialNumBlocks DEFAULT 128
);
NONVIRTUAL
ULIB_EXPORT
PVOID
Alloc(
);
NONVIRTUAL
ULIB_EXPORT
BOOLEAN
Free(
OUT PVOID MemBlock
);
NONVIRTUAL
ULONG
QueryBlockSize(
) CONST;
private:
NONVIRTUAL
VOID
Construct(
);
NONVIRTUAL
VOID
Destroy(
);
PSTATIC_MEM_BLOCK_MGR _static_mem_list[32];
};
INLINE
ULONG
MEM_BLOCK_MGR::QueryBlockSize(
) CONST
/*++
Routine Description:
This routine return the number of bytes in a block returned
by this object.
Arguments:
None.
Return Value:
The number of bytes per block.
--*/
{
return _static_mem_list[0] ? _static_mem_list[0]->QueryBlockSize() : 0;
}
INLINE
PVOID
operator new(
IN size_t Size,
IN PVOID Pointer
)
/*++
Routine Description:
This is an explicit placement version of the 'new' operator
which clients of these classes may wish to use in order to
call the constructor on their newly allocated objects.
Arguments:
Size - Supplies the size of the buffer.
Pointer - Supplies a pointer to the buffer.
Return Value:
This function returns the passed in pointer.
--*/
{
return Pointer;
}
#endif // _MEM_BLOCK_MGR_DEFN_