diff options
Diffstat (limited to 'src/gpu/GrAllocPool.h')
-rw-r--r-- | src/gpu/GrAllocPool.h | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/src/gpu/GrAllocPool.h b/src/gpu/GrAllocPool.h new file mode 100644 index 0000000000..3ecc4aa189 --- /dev/null +++ b/src/gpu/GrAllocPool.h @@ -0,0 +1,64 @@ + +/* + * Copyright 2010 Google Inc. + * + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + + + +#ifndef GrAllocPool_DEFINED +#define GrAllocPool_DEFINED + +#include "GrNoncopyable.h" + +class GrAllocPool : GrNoncopyable { +public: + GrAllocPool(size_t blockSize = 0); + ~GrAllocPool(); + + /** + * Frees all blocks that have been allocated with alloc(). + */ + void reset(); + + /** + * Returns a block of memory bytes size big. This address must not be + * passed to realloc/free/delete or any other function that assumes the + * address was allocated by malloc or new (because it hasn't). + */ + void* alloc(size_t bytes); + + /** + * Releases the most recently allocated bytes back to allocpool. + */ + void release(size_t bytes); + +private: + struct Block; + + Block* fBlock; + size_t fMinBlockSize; + +#if GR_DEBUG + int fBlocksAllocated; + void validate() const; +#else + void validate() const {} +#endif +}; + +template <typename T> class GrTAllocPool { +public: + GrTAllocPool(int count) : fPool(count * sizeof(T)) {} + + void reset() { fPool.reset(); } + T* alloc() { return (T*)fPool.alloc(sizeof(T)); } + +private: + GrAllocPool fPool; +}; + +#endif + |