1// BlockReferenceManager.h
2
3#ifndef BLOCK_REFERENCE_MANAGER_H
4#define BLOCK_REFERENCE_MANAGER_H
5
6#include <new>
7#include "List.h"
8
9class AllocationInfo;
10class BlockReference;
11
12class BlockReferenceManager {
13public:
14	BlockReferenceManager();
15	~BlockReferenceManager();
16
17	BlockReference *AllocateReference();
18	void FreeReference(BlockReference *reference);
19
20	// debugging only
21	bool CheckReference(BlockReference *reference);
22	void GetAllocationInfo(AllocationInfo &info);
23
24private:
25	status_t _AddTable();
26
27private:
28	class Table {
29	public:
30		Table() : fSize(0), fReferences(NULL) {}
31		Table(int) : fSize(0), fReferences(NULL) {}
32		~Table();
33
34		status_t Init(int32 size);
35
36		BlockReference *GetReferences()	{ return fReferences; }
37
38		int32 GetSize() const { return fSize; }
39
40	private:
41		uint32			fSize;
42		BlockReference	*fReferences;
43	};
44
45	List<Table>			fTables;
46	BlockReference		*fFreeList;
47};
48
49#endif	// BLOCK_REFERENCE_MANAGER_H
50
51