Mercurial > hg > sv-dependency-builds
comparison osx/include/kj/vector.h @ 62:0994c39f1e94
Cap'n Proto v0.6 + build for OSX
author | Chris Cannam <cannam@all-day-breakfast.com> |
---|---|
date | Mon, 22 May 2017 10:01:37 +0100 |
parents | 3ab5a40c4e3b |
children |
comparison
equal
deleted
inserted
replaced
61:d101c4099725 | 62:0994c39f1e94 |
---|---|
93 builder.removeLast(); | 93 builder.removeLast(); |
94 } | 94 } |
95 | 95 |
96 inline void resize(size_t size) { | 96 inline void resize(size_t size) { |
97 if (size > builder.capacity()) grow(size); | 97 if (size > builder.capacity()) grow(size); |
98 while (builder.size() < size) { | 98 builder.resize(size); |
99 builder.add(T()); | |
100 } | |
101 while (builder.size() > size) { | |
102 builder.removeLast(); | |
103 } | |
104 } | 99 } |
105 | 100 |
106 inline void operator=(decltype(nullptr)) { | 101 inline void operator=(decltype(nullptr)) { |
107 builder = nullptr; | 102 builder = nullptr; |
108 } | 103 } |
112 builder.removeLast(); | 107 builder.removeLast(); |
113 } | 108 } |
114 } | 109 } |
115 | 110 |
116 inline void truncate(size_t size) { | 111 inline void truncate(size_t size) { |
117 while (builder.size() > size) { | 112 builder.truncate(size); |
118 builder.removeLast(); | 113 } |
114 | |
115 inline void reserve(size_t size) { | |
116 if (size > builder.capacity()) { | |
117 setCapacity(size); | |
119 } | 118 } |
120 } | 119 } |
121 | 120 |
122 private: | 121 private: |
123 ArrayBuilder<T> builder; | 122 ArrayBuilder<T> builder; |
124 | 123 |
125 void grow(size_t minCapacity = 0) { | 124 void grow(size_t minCapacity = 0) { |
126 setCapacity(kj::max(minCapacity, capacity() == 0 ? 4 : capacity() * 2)); | 125 setCapacity(kj::max(minCapacity, capacity() == 0 ? 4 : capacity() * 2)); |
127 } | 126 } |
128 void setCapacity(size_t newSize) { | 127 void setCapacity(size_t newSize) { |
128 if (builder.size() > newSize) { | |
129 builder.truncate(newSize); | |
130 } | |
129 ArrayBuilder<T> newBuilder = heapArrayBuilder<T>(newSize); | 131 ArrayBuilder<T> newBuilder = heapArrayBuilder<T>(newSize); |
130 size_t moveCount = kj::min(newSize, builder.size()); | 132 newBuilder.addAll(kj::mv(builder)); |
131 for (size_t i = 0; i < moveCount; i++) { | |
132 newBuilder.add(kj::mv(builder[i])); | |
133 } | |
134 builder = kj::mv(newBuilder); | 133 builder = kj::mv(newBuilder); |
135 } | 134 } |
136 }; | 135 }; |
137 | 136 |
138 template <typename T> | 137 template <typename T> |