OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 #ifndef TerminatedArrayBuilder_h | 4 #ifndef TerminatedArrayBuilder_h |
5 #define TerminatedArrayBuilder_h | 5 #define TerminatedArrayBuilder_h |
6 | 6 |
7 #include "platform/wtf/Allocator.h" | 7 #include "platform/wtf/Allocator.h" |
8 | 8 |
9 namespace WTF { | 9 namespace WTF { |
10 | 10 |
(...skipping 23 matching lines...) Expand all Loading... |
34 DCHECK(array_->at(count_ - 1).IsLastInArray()); | 34 DCHECK(array_->at(count_ - 1).IsLastInArray()); |
35 capacity_ += count; | 35 capacity_ += count; |
36 array_ = ArrayType<T>::Allocator::Resize( | 36 array_ = ArrayType<T>::Allocator::Resize( |
37 ArrayType<T>::Allocator::Release(array_), capacity_); | 37 ArrayType<T>::Allocator::Release(array_), capacity_); |
38 array_->at(count_ - 1).SetLastInArray(false); | 38 array_->at(count_ - 1).SetLastInArray(false); |
39 } | 39 } |
40 array_->at(capacity_ - 1).SetLastInArray(true); | 40 array_->at(capacity_ - 1).SetLastInArray(true); |
41 } | 41 } |
42 | 42 |
43 void Append(const T& item) { | 43 void Append(const T& item) { |
44 RELEASE_ASSERT(count_ < capacity_); | 44 CHECK_LT(count_, capacity_); |
45 DCHECK(!item.IsLastInArray()); | 45 DCHECK(!item.IsLastInArray()); |
46 array_->at(count_++) = item; | 46 array_->at(count_++) = item; |
47 if (count_ == capacity_) | 47 if (count_ == capacity_) |
48 array_->at(capacity_ - 1).SetLastInArray(true); | 48 array_->at(capacity_ - 1).SetLastInArray(true); |
49 } | 49 } |
50 | 50 |
51 typename ArrayType<T>::Allocator::PassPtr Release() { | 51 typename ArrayType<T>::Allocator::PassPtr Release() { |
52 RELEASE_ASSERT(count_ == capacity_); | 52 CHECK_EQ(count_, capacity_); |
53 AssertValid(); | 53 AssertValid(); |
54 return ArrayType<T>::Allocator::Release(array_); | 54 return ArrayType<T>::Allocator::Release(array_); |
55 } | 55 } |
56 | 56 |
57 private: | 57 private: |
58 #if DCHECK_IS_ON() | 58 #if DCHECK_IS_ON() |
59 void AssertValid() { | 59 void AssertValid() { |
60 for (size_t i = 0; i < count_; ++i) { | 60 for (size_t i = 0; i < count_; ++i) { |
61 bool is_last_in_array = (i + 1 == count_); | 61 bool is_last_in_array = (i + 1 == count_); |
62 DCHECK_EQ(array_->at(i).IsLastInArray(), is_last_in_array); | 62 DCHECK_EQ(array_->at(i).IsLastInArray(), is_last_in_array); |
63 } | 63 } |
64 } | 64 } |
65 #else | 65 #else |
66 void AssertValid() {} | 66 void AssertValid() {} |
67 #endif | 67 #endif |
68 | 68 |
69 typename ArrayType<T>::Allocator::Ptr array_; | 69 typename ArrayType<T>::Allocator::Ptr array_; |
70 size_t count_; | 70 size_t count_; |
71 size_t capacity_; | 71 size_t capacity_; |
72 }; | 72 }; |
73 | 73 |
74 } // namespace WTF | 74 } // namespace WTF |
75 | 75 |
76 using WTF::TerminatedArrayBuilder; | 76 using WTF::TerminatedArrayBuilder; |
77 | 77 |
78 #endif // TerminatedArrayBuilder_h | 78 #endif // TerminatedArrayBuilder_h |
OLD | NEW |