blob: 07ba05fd917738c0228e235490d27f6cab146937 [file] [log] [blame]
reed@google.comac10a2d2010-12-22 21:39:39 +00001/*
epoger@google.comec3ed6a2011-07-28 14:26:00 +00002 * Copyright 2010 Google Inc.
3 *
4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file.
reed@google.comac10a2d2010-12-22 21:39:39 +00006 */
7
reed@google.comac10a2d2010-12-22 21:39:39 +00008#ifndef GrAllocPool_DEFINED
9#define GrAllocPool_DEFINED
10
commit-bot@chromium.orga0b40282013-09-18 13:00:55 +000011#include "SkTypes.h"
reed@google.comac10a2d2010-12-22 21:39:39 +000012
commit-bot@chromium.orga0b40282013-09-18 13:00:55 +000013class GrAllocPool : public SkNoncopyable {
reed@google.comac10a2d2010-12-22 21:39:39 +000014public:
15 GrAllocPool(size_t blockSize = 0);
16 ~GrAllocPool();
17
18 /**
19 * Frees all blocks that have been allocated with alloc().
20 */
21 void reset();
22
23 /**
24 * Returns a block of memory bytes size big. This address must not be
25 * passed to realloc/free/delete or any other function that assumes the
bsalomon@google.com86afc2a2011-02-16 16:12:19 +000026 * address was allocated by malloc or new (because it hasn't).
reed@google.comac10a2d2010-12-22 21:39:39 +000027 */
28 void* alloc(size_t bytes);
rmistry@google.comfbfcd562012-08-23 18:09:54 +000029
reed@google.comac10a2d2010-12-22 21:39:39 +000030 /**
31 * Releases the most recently allocated bytes back to allocpool.
32 */
33 void release(size_t bytes);
34
35private:
36 struct Block;
37
38 Block* fBlock;
39 size_t fMinBlockSize;
40
commit-bot@chromium.org515dcd32013-08-28 14:17:03 +000041#ifdef SK_DEBUG
reed@google.comac10a2d2010-12-22 21:39:39 +000042 int fBlocksAllocated;
43 void validate() const;
44#else
45 void validate() const {}
46#endif
47};
48
49template <typename T> class GrTAllocPool {
50public:
51 GrTAllocPool(int count) : fPool(count * sizeof(T)) {}
52
53 void reset() { fPool.reset(); }
54 T* alloc() { return (T*)fPool.alloc(sizeof(T)); }
55
56private:
57 GrAllocPool fPool;
58};
59
60#endif