// Copyright (c) 2002 David Muse // See the COPYING file for more information. #ifndef RUDIMENTS_MEMORYPOOL_H #define RUDIMENTS_MEMORYPOOL_H #include <rudiments/private/memorypoolincludes.h> #ifdef RUDIMENTS_NAMESPACE namespace rudiments { #endif // The memorypool class provides methods for creating and using a memory pool. // // If you have an iterative process that requires variable amounts of ram // for each iteration, using a memory pool can be faster than allocating // and deallocating memory on-demand and less resource-intensive than // allocating static buffers that are large enough to accommodate the maximum // amount of data you may have to store. class memorypoolprivate; class memorypool { public: memorypool(size_t initialsize, size_t increment, size_t resizeinterval); // Creates a memory pool of initial size "initialsize". // // When the pool needs to grow, it will grow by at least // "increment" bytes. If more than increment bytes // are requested, it will grow by that amount instead. // // When free() has been called "resizeinterval" times, // it will evaluate the average amount of memory // malloc'ed (since the last time it did this) and // resize the initial buffer size to this size. This // will ideally minimize the ~memorypool(); // Destroys the memory pool. unsigned char *malloc(size_t size); // Returns a pointer to a contiguous block of "size" // bytes in the pool. The pool will grow as necessary // to accomodate allocations. unsigned char *calloc(size_t size); // Returns a pointer to a contiguous block of "size" // bytes in the pool. The pool will grow as necessary // to accomodate allocations. Each byte of data in // the block of data is set to NULL. void free(); // Shrinks the pool back down to it's initial size // and frees all previously allocated blocks. void print(); // Prints a visual representation of the pool. #include <rudiments/private/memorypool.h> }; #ifdef RUDIMENTS_NAMESPACE } #endif #endif