145fa447460f70ec21d22cf4e1531490acfd3c578caryclark/*
245fa447460f70ec21d22cf4e1531490acfd3c578caryclark * Copyright 2014 Google Inc.
345fa447460f70ec21d22cf4e1531490acfd3c578caryclark *
445fa447460f70ec21d22cf4e1531490acfd3c578caryclark * Use of this source code is governed by a BSD-style license that can be
545fa447460f70ec21d22cf4e1531490acfd3c578caryclark * found in the LICENSE file.
645fa447460f70ec21d22cf4e1531490acfd3c578caryclark */
745fa447460f70ec21d22cf4e1531490acfd3c578caryclark#ifndef SkOpTAllocator_DEFINED
845fa447460f70ec21d22cf4e1531490acfd3c578caryclark#define SkOpTAllocator_DEFINED
945fa447460f70ec21d22cf4e1531490acfd3c578caryclark
1045fa447460f70ec21d22cf4e1531490acfd3c578caryclark#include "SkChunkAlloc.h"
1145fa447460f70ec21d22cf4e1531490acfd3c578caryclark
1245fa447460f70ec21d22cf4e1531490acfd3c578caryclark// T is SkOpAngle2, SkOpSpan2, or SkOpSegment2
1345fa447460f70ec21d22cf4e1531490acfd3c578caryclarktemplate<typename T>
1445fa447460f70ec21d22cf4e1531490acfd3c578caryclarkclass SkOpTAllocator {
1545fa447460f70ec21d22cf4e1531490acfd3c578caryclarkpublic:
1645fa447460f70ec21d22cf4e1531490acfd3c578caryclark    static T* Allocate(SkChunkAlloc* allocator) {
1745fa447460f70ec21d22cf4e1531490acfd3c578caryclark        void* ptr = allocator->allocThrow(sizeof(T));
1845fa447460f70ec21d22cf4e1531490acfd3c578caryclark        T* record = (T*) ptr;
1945fa447460f70ec21d22cf4e1531490acfd3c578caryclark        return record;
2045fa447460f70ec21d22cf4e1531490acfd3c578caryclark    }
2145fa447460f70ec21d22cf4e1531490acfd3c578caryclark
2254359294a7c9dc54802d512a5d891a35c1663392caryclark    static T* AllocateArray(SkChunkAlloc* allocator, int count) {
2354359294a7c9dc54802d512a5d891a35c1663392caryclark        void* ptr = allocator->allocThrow(sizeof(T) * count);
2454359294a7c9dc54802d512a5d891a35c1663392caryclark        T* record = (T*) ptr;
2554359294a7c9dc54802d512a5d891a35c1663392caryclark        return record;
2654359294a7c9dc54802d512a5d891a35c1663392caryclark    }
2754359294a7c9dc54802d512a5d891a35c1663392caryclark
2845fa447460f70ec21d22cf4e1531490acfd3c578caryclark    static T* New(SkChunkAlloc* allocator) {
2945fa447460f70ec21d22cf4e1531490acfd3c578caryclark        return new (Allocate(allocator)) T();
3045fa447460f70ec21d22cf4e1531490acfd3c578caryclark    }
3145fa447460f70ec21d22cf4e1531490acfd3c578caryclark};
3245fa447460f70ec21d22cf4e1531490acfd3c578caryclark
3345fa447460f70ec21d22cf4e1531490acfd3c578caryclark#endif
34