Index: src/list-inl.h |
diff --git a/src/list-inl.h b/src/list-inl.h |
index 60a033df04527ca2678cf46931a8bc86d32163dc..7a84313cd6ad5ed5235b97c5442ef3f520a1cc1a 100644 |
--- a/src/list-inl.h |
+++ b/src/list-inl.h |
@@ -85,8 +85,9 @@ void List<T, P>::ResizeAddInternal(const T& element, P alloc) { |
template<typename T, class P> |
void List<T, P>::Resize(int new_capacity, P alloc) { |
+ ASSERT_LE(length_, new_capacity); |
T* new_data = NewData(new_capacity, alloc); |
- memcpy(new_data, data_, capacity_ * sizeof(T)); |
+ memcpy(new_data, data_, length_ * sizeof(T)); |
List<T, P>::DeleteData(data_); |
data_ = new_data; |
capacity_ = new_capacity; |
@@ -162,6 +163,14 @@ void List<T, P>::Rewind(int pos) { |
template<typename T, class P> |
+void List<T, P>::Trim(P alloc) { |
+ if (length_ < capacity_ / 4) { |
+ Resize(capacity_ / 2, alloc); |
+ } |
+} |
+ |
+ |
+template<typename T, class P> |
void List<T, P>::Iterate(void (*callback)(T* x)) { |
for (int i = 0; i < length_; i++) callback(&data_[i]); |
} |