| Index: third_party/protobuf/src/google/protobuf/repeated_field_reflection.h
|
| diff --git a/third_party/protobuf/src/google/protobuf/reflection.h b/third_party/protobuf/src/google/protobuf/repeated_field_reflection.h
|
| old mode 100755
|
| new mode 100644
|
| similarity index 59%
|
| copy from third_party/protobuf/src/google/protobuf/reflection.h
|
| copy to third_party/protobuf/src/google/protobuf/repeated_field_reflection.h
|
| index d5a6653cb9f82cf5ea18c0b92699e5e4710b56b5..44d14d5b3ca2efe2d7f4d851b918176bb192ada8
|
| --- a/third_party/protobuf/src/google/protobuf/reflection.h
|
| +++ b/third_party/protobuf/src/google/protobuf/repeated_field_reflection.h
|
| @@ -28,296 +28,21 @@
|
| // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
| // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
|
| -// This header defines the RepeatedFieldRef class template used to access
|
| -// repeated fields with protobuf reflection API.
|
| -#ifndef GOOGLE_PROTOBUF_REFLECTION_H__
|
| -#define GOOGLE_PROTOBUF_REFLECTION_H__
|
| +// This header file is protobuf internal. Users should not include this
|
| +// file directly.
|
| +#ifndef GOOGLE_PROTOBUF_REPEATED_FIELD_REFLECTION_H__
|
| +#define GOOGLE_PROTOBUF_REPEATED_FIELD_REFLECTION_H__
|
|
|
| #include <memory>
|
| #ifndef _SHARED_PTR_H
|
| #include <google/protobuf/stubs/shared_ptr.h>
|
| #endif
|
|
|
| -#include <google/protobuf/message.h>
|
| -#include <google/protobuf/generated_enum_util.h>
|
| +#include <google/protobuf/generated_enum_reflection.h>
|
|
|
| namespace google {
|
| namespace protobuf {
|
| namespace internal {
|
| -template<typename T, typename Enable = void>
|
| -struct RefTypeTraits;
|
| -} // namespace internal
|
| -
|
| -template<typename T>
|
| -RepeatedFieldRef<T> Reflection::GetRepeatedFieldRef(
|
| - const Message& message, const FieldDescriptor* field) const {
|
| - return RepeatedFieldRef<T>(message, field);
|
| -}
|
| -
|
| -template<typename T>
|
| -MutableRepeatedFieldRef<T> Reflection::GetMutableRepeatedFieldRef(
|
| - Message* message, const FieldDescriptor* field) const {
|
| - return MutableRepeatedFieldRef<T>(message, field);
|
| -}
|
| -
|
| -// RepeatedFieldRef definition for non-message types.
|
| -template<typename T>
|
| -class RepeatedFieldRef<
|
| - T, typename internal::enable_if<!internal::is_base_of<Message, T>::value>::type> {
|
| - typedef typename internal::RefTypeTraits<T>::iterator IteratorType;
|
| - typedef typename internal::RefTypeTraits<T>::AccessorType AccessorType;
|
| -
|
| - public:
|
| - bool empty() const {
|
| - return accessor_->IsEmpty(data_);
|
| - }
|
| - int size() const {
|
| - return accessor_->Size(data_);
|
| - }
|
| - T Get(int index) const {
|
| - return accessor_->template Get<T>(data_, index);
|
| - }
|
| -
|
| - typedef IteratorType iterator;
|
| - typedef IteratorType const_iterator;
|
| - typedef T value_type;
|
| - typedef T& reference;
|
| - typedef const T& const_reference;
|
| - typedef int size_type;
|
| - typedef ptrdiff_t difference_type;
|
| -
|
| - iterator begin() const {
|
| - return iterator(data_, accessor_, true);
|
| - }
|
| - iterator end() const {
|
| - return iterator(data_, accessor_, false);
|
| - }
|
| -
|
| - private:
|
| - friend class Reflection;
|
| - RepeatedFieldRef(
|
| - const Message& message,
|
| - const FieldDescriptor* field) {
|
| - const Reflection* reflection = message.GetReflection();
|
| - data_ = reflection->RepeatedFieldData(
|
| - const_cast<Message*>(&message), field,
|
| - internal::RefTypeTraits<T>::cpp_type, NULL);
|
| - accessor_ = reflection->RepeatedFieldAccessor(field);
|
| - }
|
| -
|
| - const void* data_;
|
| - const AccessorType* accessor_;
|
| -};
|
| -
|
| -// MutableRepeatedFieldRef definition for non-message types.
|
| -template<typename T>
|
| -class MutableRepeatedFieldRef<
|
| - T, typename internal::enable_if<!internal::is_base_of<Message, T>::value>::type> {
|
| - typedef typename internal::RefTypeTraits<T>::AccessorType AccessorType;
|
| -
|
| - public:
|
| - bool empty() const {
|
| - return accessor_->IsEmpty(data_);
|
| - }
|
| - int size() const {
|
| - return accessor_->Size(data_);
|
| - }
|
| - T Get(int index) const {
|
| - return accessor_->template Get<T>(data_, index);
|
| - }
|
| -
|
| - void Set(int index, const T& value) const {
|
| - accessor_->template Set<T>(data_, index, value);
|
| - }
|
| - void Add(const T& value) const {
|
| - accessor_->template Add<T>(data_, value);
|
| - }
|
| - void RemoveLast() const {
|
| - accessor_->RemoveLast(data_);
|
| - }
|
| - void SwapElements(int index1, int index2) const {
|
| - accessor_->SwapElements(data_, index1, index2);
|
| - }
|
| - void Clear() const {
|
| - accessor_->Clear(data_);
|
| - }
|
| -
|
| - void Swap(const MutableRepeatedFieldRef& other) const {
|
| - accessor_->Swap(data_, other.accessor_, other.data_);
|
| - }
|
| -
|
| - template<typename Container>
|
| - void MergeFrom(const Container& container) const {
|
| - typedef typename Container::const_iterator Iterator;
|
| - for (Iterator it = container.begin(); it != container.end(); ++it) {
|
| - Add(*it);
|
| - }
|
| - }
|
| - template<typename Container>
|
| - void CopyFrom(const Container& container) const {
|
| - Clear();
|
| - MergeFrom(container);
|
| - }
|
| -
|
| - private:
|
| - friend class Reflection;
|
| - MutableRepeatedFieldRef(
|
| - Message* message,
|
| - const FieldDescriptor* field) {
|
| - const Reflection* reflection = message->GetReflection();
|
| - data_ = reflection->RepeatedFieldData(
|
| - message, field, internal::RefTypeTraits<T>::cpp_type, NULL);
|
| - accessor_ = reflection->RepeatedFieldAccessor(field);
|
| - }
|
| -
|
| - void* data_;
|
| - const AccessorType* accessor_;
|
| -};
|
| -
|
| -// RepeatedFieldRef definition for message types.
|
| -template<typename T>
|
| -class RepeatedFieldRef<
|
| - T, typename internal::enable_if<internal::is_base_of<Message, T>::value>::type> {
|
| - typedef typename internal::RefTypeTraits<T>::iterator IteratorType;
|
| - typedef typename internal::RefTypeTraits<T>::AccessorType AccessorType;
|
| -
|
| - public:
|
| - bool empty() const {
|
| - return accessor_->IsEmpty(data_);
|
| - }
|
| - int size() const {
|
| - return accessor_->Size(data_);
|
| - }
|
| - // This method returns a reference to the underlying message object if it
|
| - // exists. If a message object doesn't exist (e.g., data stored in serialized
|
| - // form), scratch_space will be filled with the data and a reference to it
|
| - // will be returned.
|
| - //
|
| - // Example:
|
| - // RepeatedFieldRef<Message> h = ...
|
| - // unique_ptr<Message> scratch_space(h.NewMessage());
|
| - // const Message& item = h.Get(index, scratch_space.get());
|
| - const T& Get(int index, T* scratch_space) const {
|
| - return *static_cast<const T*>(accessor_->Get(data_, index, scratch_space));
|
| - }
|
| - // Create a new message of the same type as the messages stored in this
|
| - // repeated field. Caller takes ownership of the returned object.
|
| - T* NewMessage() const {
|
| - return static_cast<T*>(default_instance_->New());
|
| - }
|
| -
|
| - typedef IteratorType iterator;
|
| - typedef IteratorType const_iterator;
|
| - typedef T value_type;
|
| - typedef T& reference;
|
| - typedef const T& const_reference;
|
| - typedef int size_type;
|
| - typedef ptrdiff_t difference_type;
|
| -
|
| - iterator begin() const {
|
| - return iterator(data_, accessor_, true, NewMessage());
|
| - }
|
| - iterator end() const {
|
| - // The end iterator must not be dereferenced, no need for scratch space.
|
| - return iterator(data_, accessor_, false, NULL);
|
| - }
|
| -
|
| - private:
|
| - friend class Reflection;
|
| - RepeatedFieldRef(
|
| - const Message& message,
|
| - const FieldDescriptor* field) {
|
| - const Reflection* reflection = message.GetReflection();
|
| - data_ = reflection->RepeatedFieldData(
|
| - const_cast<Message*>(&message), field,
|
| - internal::RefTypeTraits<T>::cpp_type,
|
| - internal::RefTypeTraits<T>::GetMessageFieldDescriptor());
|
| - accessor_ = reflection->RepeatedFieldAccessor(field);
|
| - default_instance_ =
|
| - reflection->GetMessageFactory()->GetPrototype(field->message_type());
|
| - }
|
| -
|
| - const void* data_;
|
| - const AccessorType* accessor_;
|
| - const Message* default_instance_;
|
| -};
|
| -
|
| -// MutableRepeatedFieldRef definition for message types.
|
| -template<typename T>
|
| -class MutableRepeatedFieldRef<
|
| - T, typename internal::enable_if<internal::is_base_of<Message, T>::value>::type> {
|
| - typedef typename internal::RefTypeTraits<T>::AccessorType AccessorType;
|
| -
|
| - public:
|
| - bool empty() const {
|
| - return accessor_->IsEmpty(data_);
|
| - }
|
| - int size() const {
|
| - return accessor_->Size(data_);
|
| - }
|
| - // See comments for RepeatedFieldRef<Message>::Get()
|
| - const T& Get(int index, T* scratch_space) const {
|
| - return *static_cast<const T*>(accessor_->Get(data_, index, scratch_space));
|
| - }
|
| - // Create a new message of the same type as the messages stored in this
|
| - // repeated field. Caller takes ownership of the returned object.
|
| - T* NewMessage() const {
|
| - return static_cast<T*>(default_instance_->New());
|
| - }
|
| -
|
| - void Set(int index, const T& value) const {
|
| - accessor_->Set(data_, index, &value);
|
| - }
|
| - void Add(const T& value) const {
|
| - accessor_->Add(data_, &value);
|
| - }
|
| - void RemoveLast() const {
|
| - accessor_->RemoveLast(data_);
|
| - }
|
| - void SwapElements(int index1, int index2) const {
|
| - accessor_->SwapElements(data_, index1, index2);
|
| - }
|
| - void Clear() const {
|
| - accessor_->Clear(data_);
|
| - }
|
| -
|
| - void Swap(const MutableRepeatedFieldRef& other) const {
|
| - accessor_->Swap(data_, other.accessor_, other.data_);
|
| - }
|
| -
|
| - template<typename Container>
|
| - void MergeFrom(const Container& container) const {
|
| - typedef typename Container::const_iterator Iterator;
|
| - for (Iterator it = container.begin(); it != container.end(); ++it) {
|
| - Add(*it);
|
| - }
|
| - }
|
| - template<typename Container>
|
| - void CopyFrom(const Container& container) const {
|
| - Clear();
|
| - MergeFrom(container);
|
| - }
|
| -
|
| - private:
|
| - friend class Reflection;
|
| - MutableRepeatedFieldRef(
|
| - Message* message,
|
| - const FieldDescriptor* field) {
|
| - const Reflection* reflection = message->GetReflection();
|
| - data_ = reflection->RepeatedFieldData(
|
| - message, field, internal::RefTypeTraits<T>::cpp_type,
|
| - internal::RefTypeTraits<T>::GetMessageFieldDescriptor());
|
| - accessor_ = reflection->RepeatedFieldAccessor(field);
|
| - default_instance_ =
|
| - reflection->GetMessageFactory()->GetPrototype(field->message_type());
|
| - }
|
| -
|
| - void* data_;
|
| - const AccessorType* accessor_;
|
| - const Message* default_instance_;
|
| -};
|
| -
|
| -namespace internal {
|
| // Interfaces used to implement reflection RepeatedFieldRef API.
|
| // Reflection::GetRepeatedAccessor() should return a pointer to an singleton
|
| // object that implements the below interface.
|
| @@ -369,7 +94,7 @@ class LIBPROTOBUF_EXPORT RepeatedFieldAccessor {
|
| virtual void Swap(Field* data, const RepeatedFieldAccessor* other_mutator,
|
| Field* other_data) const = 0;
|
|
|
| - // Create an iterator that points at the beginning of the repeated field.
|
| + // Create an iterator that points at the begining of the repeated field.
|
| virtual Iterator* BeginIterator(const Field* data) const = 0;
|
| // Create an iterator that points at the end of the repeated field.
|
| virtual Iterator* EndIterator(const Field* data) const = 0;
|
| @@ -441,13 +166,13 @@ class RepeatedFieldRefIterator
|
| public:
|
| // Constructor for non-message fields.
|
| RepeatedFieldRefIterator(const void* data,
|
| - const RepeatedFieldAccessor* accessor, bool begin)
|
| - : data_(data),
|
| - accessor_(accessor),
|
| - iterator_(begin ? accessor->BeginIterator(data)
|
| - : accessor->EndIterator(data)),
|
| - // The end iterator must not be dereferenced, no need for scratch space.
|
| - scratch_space_(begin ? new AccessorValueType : NULL) {}
|
| + const RepeatedFieldAccessor* accessor,
|
| + bool begin)
|
| + : data_(data), accessor_(accessor),
|
| + iterator_(begin ? accessor->BeginIterator(data) :
|
| + accessor->EndIterator(data)),
|
| + scratch_space_(new AccessorValueType) {
|
| + }
|
| // Constructor for message fields.
|
| RepeatedFieldRefIterator(const void* data,
|
| const RepeatedFieldAccessor* accessor,
|
| @@ -566,7 +291,7 @@ struct RefTypeTraits<
|
|
|
| template<typename T>
|
| struct RefTypeTraits<
|
| - T, typename internal::enable_if< ::google::protobuf::internal::is_same<string, T>::value>::type> {
|
| + T, typename internal::enable_if<internal::is_same<string, T>::value>::type> {
|
| typedef RepeatedFieldRefIterator<T> iterator;
|
| typedef RepeatedFieldAccessor AccessorType;
|
| typedef string AccessorValueType;
|
| @@ -609,5 +334,4 @@ struct RefTypeTraits<
|
| } // namespace internal
|
| } // namespace protobuf
|
| } // namespace google
|
| -
|
| -#endif // GOOGLE_PROTOBUF_REFLECTION_H__
|
| +#endif // GOOGLE_PROTOBUF_REPEATED_FIELD_REFLECTION_H__
|
|
|