| Index: third_party/protobuf/src/google/protobuf/repeated_field.h
|
| diff --git a/third_party/protobuf/src/google/protobuf/repeated_field.h b/third_party/protobuf/src/google/protobuf/repeated_field.h
|
| index cc07fdb81595d4593be46504fef4e2db0cb8f085..6080ddccce320b28f78a5d6d9745312969ccfcd3 100644
|
| --- a/third_party/protobuf/src/google/protobuf/repeated_field.h
|
| +++ b/third_party/protobuf/src/google/protobuf/repeated_field.h
|
| @@ -72,8 +72,11 @@ template <typename Element>
|
| class RepeatedField {
|
| public:
|
| RepeatedField();
|
| + RepeatedField(const RepeatedField& other);
|
| ~RepeatedField();
|
|
|
| + RepeatedField& operator=(const RepeatedField& other);
|
| +
|
| int size() const;
|
|
|
| const Element& Get(int index) const;
|
| @@ -90,6 +93,7 @@ class RepeatedField {
|
| void RemoveLast();
|
| void Clear();
|
| void MergeFrom(const RepeatedField& other);
|
| + void CopyFrom(const RepeatedField& other);
|
|
|
| // Reserve space to expand the field to at least the given size. If the
|
| // array is grown, it will always be at least doubled in size.
|
| @@ -116,6 +120,7 @@ class RepeatedField {
|
| // STL-like iterator support
|
| typedef Element* iterator;
|
| typedef const Element* const_iterator;
|
| + typedef Element value_type;
|
|
|
| iterator begin();
|
| const_iterator begin() const;
|
| @@ -127,8 +132,6 @@ class RepeatedField {
|
| int SpaceUsedExcludingSelf() const;
|
|
|
| private:
|
| - GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(RepeatedField);
|
| -
|
| static const int kInitialSize = 4;
|
|
|
| Element* elements_;
|
| @@ -203,6 +206,8 @@ class LIBPROTOBUF_EXPORT RepeatedPtrFieldBase {
|
| void Clear();
|
| template <typename TypeHandler>
|
| void MergeFrom(const RepeatedPtrFieldBase& other);
|
| + template <typename TypeHandler>
|
| + void CopyFrom(const RepeatedPtrFieldBase& other);
|
|
|
| void Reserve(int new_size);
|
|
|
| @@ -300,7 +305,7 @@ class LIBPROTOBUF_EXPORT StringTypeHandlerBase {
|
| static void Merge(const string& from, string* to) { *to = from; }
|
| };
|
|
|
| -class StringTypeHandler : public StringTypeHandlerBase {
|
| +class LIBPROTOBUF_EXPORT StringTypeHandler : public StringTypeHandlerBase {
|
| public:
|
| static int SpaceUsed(const string& value) {
|
| return sizeof(value) + StringSpaceUsedExcludingSelf(value);
|
| @@ -316,9 +321,11 @@ template <typename Element>
|
| class RepeatedPtrField : public internal::RepeatedPtrFieldBase {
|
| public:
|
| RepeatedPtrField();
|
| -
|
| + RepeatedPtrField(const RepeatedPtrField& other);
|
| ~RepeatedPtrField();
|
|
|
| + RepeatedPtrField& operator=(const RepeatedPtrField& other);
|
| +
|
| int size() const;
|
|
|
| const Element& Get(int index) const;
|
| @@ -327,6 +334,7 @@ class RepeatedPtrField : public internal::RepeatedPtrFieldBase {
|
| void RemoveLast(); // Remove the last element in the array.
|
| void Clear();
|
| void MergeFrom(const RepeatedPtrField& other);
|
| + void CopyFrom(const RepeatedPtrField& other);
|
|
|
| // Reserve space to expand the field to at least the given size. This only
|
| // resizes the pointer array; it doesn't allocate any objects. If the
|
| @@ -349,6 +357,7 @@ class RepeatedPtrField : public internal::RepeatedPtrFieldBase {
|
| // STL-like iterator support
|
| typedef internal::RepeatedPtrIterator<Element> iterator;
|
| typedef internal::RepeatedPtrIterator<const Element> const_iterator;
|
| + typedef Element value_type;
|
|
|
| iterator begin();
|
| const_iterator begin() const;
|
| @@ -365,11 +374,6 @@ class RepeatedPtrField : public internal::RepeatedPtrFieldBase {
|
| // excluding sizeof(*this).
|
| int SpaceUsedExcludingSelf() const;
|
|
|
| - // The spaced used just by the pointer array, not counting the objects pointed
|
| - // at. Returns zero if the array is inlined (i.e. initial_space_ is being
|
| - // used).
|
| - int SpaceUsedByArray() const;
|
| -
|
| // Advanced memory management --------------------------------------
|
| // When hardcore memory management becomes necessary -- as it often
|
| // does here at Google -- the following methods may be useful.
|
| @@ -410,9 +414,6 @@ class RepeatedPtrField : public internal::RepeatedPtrFieldBase {
|
| // methods on RepeatedPtrFieldBase.
|
| class TypeHandler;
|
|
|
| -
|
| - private:
|
| - GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(RepeatedPtrField);
|
| };
|
|
|
| // implementation ====================================================
|
| @@ -425,6 +426,14 @@ inline RepeatedField<Element>::RepeatedField()
|
| }
|
|
|
| template <typename Element>
|
| +inline RepeatedField<Element>::RepeatedField(const RepeatedField& other)
|
| + : elements_(initial_space_),
|
| + current_size_(0),
|
| + total_size_(kInitialSize) {
|
| + CopyFrom(other);
|
| +}
|
| +
|
| +template <typename Element>
|
| RepeatedField<Element>::~RepeatedField() {
|
| if (elements_ != initial_space_) {
|
| delete [] elements_;
|
| @@ -432,6 +441,13 @@ RepeatedField<Element>::~RepeatedField() {
|
| }
|
|
|
| template <typename Element>
|
| +inline RepeatedField<Element>&
|
| +RepeatedField<Element>::operator=(const RepeatedField& other) {
|
| + CopyFrom(other);
|
| + return *this;
|
| +}
|
| +
|
| +template <typename Element>
|
| inline int RepeatedField<Element>::size() const {
|
| return current_size_;
|
| }
|
| @@ -502,6 +518,12 @@ inline void RepeatedField<Element>::MergeFrom(const RepeatedField& other) {
|
| }
|
|
|
| template <typename Element>
|
| +inline void RepeatedField<Element>::CopyFrom(const RepeatedField& other) {
|
| + Clear();
|
| + MergeFrom(other);
|
| +}
|
| +
|
| +template <typename Element>
|
| inline Element* RepeatedField<Element>::mutable_data() {
|
| return elements_;
|
| }
|
| @@ -594,14 +616,14 @@ inline void RepeatedField<Element>::Truncate(int new_size) {
|
|
|
| template <typename Element>
|
| inline void RepeatedField<Element>::MoveArray(
|
| - Element to[], Element from[], int size) {
|
| - memcpy(to, from, size * sizeof(Element));
|
| + Element to[], Element from[], int array_size) {
|
| + memcpy(to, from, array_size * sizeof(Element));
|
| }
|
|
|
| template <typename Element>
|
| inline void RepeatedField<Element>::CopyArray(
|
| - Element to[], const Element from[], int size) {
|
| - memcpy(to, from, size * sizeof(Element));
|
| + Element to[], const Element from[], int array_size) {
|
| + memcpy(to, from, array_size * sizeof(Element));
|
| }
|
|
|
|
|
| @@ -679,6 +701,12 @@ inline void RepeatedPtrFieldBase::MergeFrom(const RepeatedPtrFieldBase& other) {
|
| }
|
| }
|
|
|
| +template <typename TypeHandler>
|
| +inline void RepeatedPtrFieldBase::CopyFrom(const RepeatedPtrFieldBase& other) {
|
| + RepeatedPtrFieldBase::Clear<TypeHandler>();
|
| + RepeatedPtrFieldBase::MergeFrom<TypeHandler>(other);
|
| +}
|
| +
|
| inline int RepeatedPtrFieldBase::Capacity() const {
|
| return total_size_;
|
| }
|
| @@ -805,11 +833,24 @@ template <typename Element>
|
| inline RepeatedPtrField<Element>::RepeatedPtrField() {}
|
|
|
| template <typename Element>
|
| +inline RepeatedPtrField<Element>::RepeatedPtrField(
|
| + const RepeatedPtrField& other) {
|
| + CopyFrom(other);
|
| +}
|
| +
|
| +template <typename Element>
|
| RepeatedPtrField<Element>::~RepeatedPtrField() {
|
| Destroy<TypeHandler>();
|
| }
|
|
|
| template <typename Element>
|
| +inline RepeatedPtrField<Element>& RepeatedPtrField<Element>::operator=(
|
| + const RepeatedPtrField& other) {
|
| + CopyFrom(other);
|
| + return *this;
|
| +}
|
| +
|
| +template <typename Element>
|
| inline int RepeatedPtrField<Element>::size() const {
|
| return RepeatedPtrFieldBase::size();
|
| }
|
| @@ -846,6 +887,12 @@ inline void RepeatedPtrField<Element>::MergeFrom(
|
| }
|
|
|
| template <typename Element>
|
| +inline void RepeatedPtrField<Element>::CopyFrom(
|
| + const RepeatedPtrField& other) {
|
| + RepeatedPtrFieldBase::CopyFrom<TypeHandler>(other);
|
| +}
|
| +
|
| +template <typename Element>
|
| inline Element** RepeatedPtrField<Element>::mutable_data() {
|
| return RepeatedPtrFieldBase::mutable_data<TypeHandler>();
|
| }
|
| @@ -944,7 +991,7 @@ class RepeatedPtrIterator
|
| template<typename OtherElement>
|
| RepeatedPtrIterator(const RepeatedPtrIterator<OtherElement>& other)
|
| : it_(other.it_) {
|
| - // Force a compiler error if the other type is not convertable to ours.
|
| + // Force a compiler error if the other type is not convertible to ours.
|
| if (false) {
|
| implicit_cast<Element*, OtherElement*>(0);
|
| }
|
| @@ -1152,7 +1199,7 @@ template<typename T> class RepeatedFieldBackInsertIterator
|
| }
|
|
|
| private:
|
| - RepeatedField<T>* const field_;
|
| + RepeatedField<T>* field_;
|
| };
|
|
|
| // A back inserter for RepeatedPtrField objects.
|
| @@ -1183,7 +1230,7 @@ template<typename T> class RepeatedPtrFieldBackInsertIterator
|
| }
|
|
|
| private:
|
| - RepeatedPtrField<T>* const field_;
|
| + RepeatedPtrField<T>* field_;
|
| };
|
|
|
| // A back inserter for RepeatedPtrFields that inserts by transfering ownership
|
| @@ -1212,7 +1259,7 @@ template<typename T> class AllocatedRepeatedPtrFieldBackInsertIterator
|
| }
|
|
|
| private:
|
| - RepeatedPtrField<T>* const field_;
|
| + RepeatedPtrField<T>* field_;
|
| };
|
| } // namespace internal
|
|
|
|
|