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