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 #ifndef TerminatedArrayBuilder_h
5 #define TerminatedArrayBuilder_h
7 #include "wtf/OwnPtr.h"
11 template<typename T
, template <typename
> class ArrayType
= TerminatedArray
>
12 class TerminatedArrayBuilder
{
13 DISALLOW_ALLOCATION();
14 WTF_MAKE_NONCOPYABLE(TerminatedArrayBuilder
);
16 explicit TerminatedArrayBuilder(typename ArrayType
<T
>::Allocator::PassPtr array
)
23 m_capacity
= m_count
= m_array
->size();
26 void grow(size_t count
)
33 m_array
= ArrayType
<T
>::Allocator::create(m_capacity
);
37 m_array
= ArrayType
<T
>::Allocator::resize(m_array
.release(), m_capacity
);
38 m_array
->at(m_count
- 1).setLastInArray(false);
41 void append(const T
& item
)
43 RELEASE_ASSERT(m_count
< m_capacity
);
44 ASSERT(!item
.isLastInArray());
45 m_array
->at(m_count
++) = item
;
48 typename ArrayType
<T
>::Allocator::PassPtr
release()
50 RELEASE_ASSERT(m_count
== m_capacity
);
52 m_array
->at(m_count
- 1).setLastInArray(true);
54 return m_array
.release();
61 for (size_t i
= 0; i
< m_count
; ++i
) {
62 bool isLastInArray
= (i
+ 1 == m_count
);
63 ASSERT(m_array
->at(i
).isLastInArray() == isLastInArray
);
67 void assertValid() { }
70 typename ArrayType
<T
>::Allocator::Ptr m_array
;
77 using WTF::TerminatedArrayBuilder
;
79 #endif // TerminatedArrayBuilder_h