1// Copyright 2014 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#ifndef HeapTerminatedArray_h 6#define HeapTerminatedArray_h 7 8#include "platform/heap/Heap.h" 9#include "wtf/TerminatedArray.h" 10#include "wtf/TerminatedArrayBuilder.h" 11 12namespace blink { 13 14template<typename T> 15class HeapTerminatedArray : public TerminatedArray<T> { 16 DISALLOW_ALLOCATION(); 17public: 18 using TerminatedArray<T>::begin; 19 using TerminatedArray<T>::end; 20 21 void trace(Visitor* visitor) 22 { 23 for (typename TerminatedArray<T>::iterator it = begin(); it != end(); ++it) 24 visitor->trace(*it); 25 } 26 27private: 28 // Allocator describes how HeapTerminatedArrayBuilder should create new intances 29 // of TerminateArray and manage their lifetimes. 30 struct Allocator { 31 typedef HeapTerminatedArray* PassPtr; 32 typedef RawPtr<HeapTerminatedArray> Ptr; 33 34 static PassPtr create(size_t capacity) 35 { 36 return reinterpret_cast<HeapTerminatedArray*>(Heap::allocate<HeapTerminatedArray>(capacity * sizeof(T))); 37 } 38 39 static PassPtr resize(PassPtr ptr, size_t capacity) 40 { 41 return reinterpret_cast<HeapTerminatedArray*>(Heap::reallocate<HeapTerminatedArray>(ptr, capacity * sizeof(T))); 42 } 43 }; 44 45 // Prohibit construction. Allocator makes HeapTerminatedArray instances for 46 // HeapTerminatedArrayBuilder by pointer casting. 47 HeapTerminatedArray(); 48 49 template<typename U, template <typename> class> friend class WTF::TerminatedArrayBuilder; 50}; 51 52} // namespace blink 53 54#endif // HeapTerminatedArray_h 55