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.
5 #ifndef HeapTerminatedArray_h
6 #define HeapTerminatedArray_h
8 #include "platform/heap/Heap.h"
9 #include "wtf/TerminatedArray.h"
10 #include "wtf/TerminatedArrayBuilder.h"
15 class HeapTerminatedArray : public TerminatedArray<T> {
17 IS_GARBAGE_COLLECTED_TYPE();
20 using TerminatedArray<T>::begin;
21 using TerminatedArray<T>::end;
23 DEFINE_INLINE_TRACE() {
24 for (typename TerminatedArray<T>::iterator it = begin(); it != end(); ++it)
29 // Allocator describes how HeapTerminatedArrayBuilder should create new
30 // instances of HeapTerminatedArray and manage their lifetimes.
31 struct Allocator final {
32 STATIC_ONLY(Allocator);
33 using PassPtr = HeapTerminatedArray*;
34 using Ptr = Member<HeapTerminatedArray>;
36 static PassPtr release(Ptr& ptr) { return ptr; }
38 static PassPtr create(size_t capacity) {
39 return reinterpret_cast<HeapTerminatedArray*>(
40 ThreadHeap::allocate<HeapTerminatedArray>(
41 capacity * sizeof(T), IsEagerlyFinalizedType<T>::value));
44 static PassPtr resize(PassPtr ptr, size_t capacity) {
45 return reinterpret_cast<HeapTerminatedArray*>(
46 ThreadHeap::reallocate<HeapTerminatedArray>(ptr,
47 capacity * sizeof(T)));
51 // Prohibit construction. Allocator makes HeapTerminatedArray instances for
52 // HeapTerminatedArrayBuilder by pointer casting.
53 HeapTerminatedArray();
55 template <typename U, template <typename> class>
56 friend class WTF::TerminatedArrayBuilder;
60 class TraceEagerlyTrait<HeapTerminatedArray<T>> {
62 static const bool value = TraceEagerlyTrait<T>::value;
67 #endif // HeapTerminatedArray_h