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