class MemoryAllocator { public: ~MemoryAllocator (); MemoryAllocator (uint unit_size, uint block_size =16); MemoryAllocator (uint unit_size, uint block_size, bool debug); void* allocate (); void deallocate (void*); bool is_debug () const { return _debug; } private: struct Free { Free* next; }; uint _requested_size; // memory units requested for allocation uint _allocated_size; // memory units to be allocated uint _block_size; // The number of units in blocks void** _allocated_blocks; // Array of pointers to blocks uint _num_allocated_blocks; // Number of allocated blocks Free* _free; // Linked list of free units bool _debug; void more() throw(char*); void* debug_check(void*&) throw(char*); void* debug_correct(void*&); }; inline void* MemoryAllocator::allocate() { if (!_free) more(); void* storage = _free; _free = _free->next; return _debug ? debug_correct(storage) : storage; } inline void MemoryAllocator::deallocate(void* storage) { if (_debug) debug_check(storage); Free* new_free = (Free*) storage; new_free->next = _free; _free = new_free; } //End of File