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 12 namespace blink { 13 14 template<typename T> 15 class HeapTerminatedArray : public TerminatedArray<T> { 16 DISALLOW_ALLOCATION(); 17 public: 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 27 private: 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