Upstream version 9.38.198.0
[platform/framework/web/crosswalk.git] / src / third_party / WebKit / Source / platform / heap / HeapTerminatedArray.h
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