unaccepted-pr8881-repeated-truncate.patch 1.0 KB

1234567891011121314151617181920212223242526272829
  1. --- a/src/google/protobuf/repeated_ptr_field.h (index)
  2. +++ b/src/google/protobuf/repeated_ptr_field.h (working tree)
  3. @@ -335,6 +335,15 @@ class PROTOBUF_EXPORT RepeatedPtrFieldBase {
  4. void Reserve(int new_size); // implemented in the cc file
  5. + template<typename TypeHandler>
  6. + void Truncate(int new_size) {
  7. + GOOGLE_DCHECK_LE(new_size, current_size_);
  8. + for (int i = new_size; i < current_size_; i++) {
  9. + TypeHandler::Clear(cast<TypeHandler>(rep_->elements[i]));
  10. + }
  11. + current_size_ = new_size;
  12. + }
  13. +
  14. template <typename TypeHandler>
  15. static inline typename TypeHandler::Type* copy(
  16. typename TypeHandler::Type* value) {
  17. @@ -907,6 +916,10 @@ class RepeatedPtrField : private internal::RepeatedPtrFieldBase {
  18. // array is grown, it will always be at least doubled in size.
  19. void Reserve(int new_size);
  20. + void Truncate(int new_size) {
  21. + return RepeatedPtrFieldBase::Truncate<TypeHandler>(new_size);
  22. + }
  23. +
  24. int Capacity() const;
  25. // Gets the underlying array. This pointer is possibly invalidated by