| 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]);
|
| }
|
|
|