// Copyright 2014 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef HeapTerminatedArray_h #define HeapTerminatedArray_h #include "platform/heap/Heap.h" #include "wtf/TerminatedArray.h" #include "wtf/TerminatedArrayBuilder.h" namespace blink { template class HeapTerminatedArray : public TerminatedArray { DISALLOW_ALLOCATION(); public: using TerminatedArray::begin; using TerminatedArray::end; void trace(Visitor* visitor) { for (typename TerminatedArray::iterator it = begin(); it != end(); ++it) visitor->trace(*it); } private: // Allocator describes how HeapTerminatedArrayBuilder should create new intances // of TerminateArray and manage their lifetimes. struct Allocator { typedef HeapTerminatedArray* PassPtr; typedef RawPtr Ptr; static PassPtr create(size_t capacity) { return reinterpret_cast(Heap::allocate(capacity * sizeof(T))); } static PassPtr resize(PassPtr ptr, size_t capacity) { return reinterpret_cast(Heap::reallocate(ptr, capacity * sizeof(T))); } }; // Prohibit construction. Allocator makes HeapTerminatedArray instances for // HeapTerminatedArrayBuilder by pointer casting. HeapTerminatedArray(); template class> friend class WTF::TerminatedArrayBuilder; }; } // namespace blink #endif // HeapTerminatedArray_h