
/*
 * 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

