aboutsummaryrefslogtreecommitdiffstats
path: root/src/google/protobuf/repeated_field.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/google/protobuf/repeated_field.cc')
-rw-r--r--src/google/protobuf/repeated_field.cc12
1 files changed, 12 insertions, 0 deletions
diff --git a/src/google/protobuf/repeated_field.cc b/src/google/protobuf/repeated_field.cc
index 3230c04..f7beb11 100644
--- a/src/google/protobuf/repeated_field.cc
+++ b/src/google/protobuf/repeated_field.cc
@@ -39,6 +39,18 @@ namespace google {
namespace protobuf {
namespace internal {
+void RepeatedPtrFieldBase::Reserve(int new_size) {
+ if (total_size_ >= new_size) return;
+
+ void** old_elements = elements_;
+ total_size_ = max(total_size_ * 2, new_size);
+ elements_ = new void*[total_size_];
+ memcpy(elements_, old_elements, allocated_size_ * sizeof(elements_[0]));
+ if (old_elements != initial_space_) {
+ delete [] old_elements;
+ }
+}
+
void RepeatedPtrFieldBase::Swap(RepeatedPtrFieldBase* other) {
void** swap_elements = elements_;
int swap_current_size = current_size_;