| Index: third_party/protobuf/src/google/protobuf/message.cc
|
| diff --git a/third_party/protobuf/src/google/protobuf/message.cc b/third_party/protobuf/src/google/protobuf/message.cc
|
| index ab7efa990b143cc027fcc5acfc3c0f41624ec2b4..032748bdaa8b3e4674892de5840c5bcc6eca331c 100644
|
| --- a/third_party/protobuf/src/google/protobuf/message.cc
|
| +++ b/third_party/protobuf/src/google/protobuf/message.cc
|
| @@ -1,6 +1,6 @@
|
| // Protocol Buffers - Google's data interchange format
|
| // Copyright 2008 Google Inc. All rights reserved.
|
| -// http://code.google.com/p/protobuf/
|
| +// https://developers.google.com/protocol-buffers/
|
| //
|
| // Redistribution and use in source and binary forms, with or without
|
| // modification, are permitted provided that the following conditions are
|
| @@ -32,23 +32,28 @@
|
| // Based on original Protocol Buffers design by
|
| // Sanjay Ghemawat, Jeff Dean, and others.
|
|
|
| -#include <istream>
|
| +#include <iostream>
|
| #include <stack>
|
| #include <google/protobuf/stubs/hash.h>
|
|
|
| #include <google/protobuf/message.h>
|
|
|
| +#include <google/protobuf/stubs/logging.h>
|
| #include <google/protobuf/stubs/common.h>
|
| +#include <google/protobuf/stubs/mutex.h>
|
| #include <google/protobuf/stubs/once.h>
|
| +#include <google/protobuf/reflection_internal.h>
|
| #include <google/protobuf/io/coded_stream.h>
|
| #include <google/protobuf/io/zero_copy_stream_impl.h>
|
| #include <google/protobuf/descriptor.pb.h>
|
| +#include <google/protobuf/map_field.h>
|
| #include <google/protobuf/descriptor.h>
|
| #include <google/protobuf/generated_message_util.h>
|
| #include <google/protobuf/reflection_ops.h>
|
| #include <google/protobuf/wire_format.h>
|
| #include <google/protobuf/stubs/strutil.h>
|
| -#include <google/protobuf/stubs/map-util.h>
|
| +#include <google/protobuf/stubs/map_util.h>
|
| +#include <google/protobuf/stubs/singleton.h>
|
| #include <google/protobuf/stubs/stl_util.h>
|
|
|
| namespace google {
|
| @@ -75,7 +80,7 @@ void Message::CheckTypeAndMergeFrom(const MessageLite& other) {
|
| void Message::CopyFrom(const Message& from) {
|
| const Descriptor* descriptor = GetDescriptor();
|
| GOOGLE_CHECK_EQ(from.GetDescriptor(), descriptor)
|
| - << ": Tried to copy from a message with a different type."
|
| + << ": Tried to copy from a message with a different type. "
|
| "to: " << descriptor->full_name() << ", "
|
| "from:" << from.GetDescriptor()->full_name();
|
| ReflectionOps::Copy(from, this);
|
| @@ -100,7 +105,7 @@ void Message::FindInitializationErrors(vector<string>* errors) const {
|
| string Message::InitializationErrorString() const {
|
| vector<string> errors;
|
| FindInitializationErrors(&errors);
|
| - return JoinStrings(errors, ", ");
|
| + return Join(errors, ", ");
|
| }
|
|
|
| void Message::CheckInitialized() const {
|
| @@ -149,7 +154,7 @@ int Message::ByteSize() const {
|
| return size;
|
| }
|
|
|
| -void Message::SetCachedSize(int size) const {
|
| +void Message::SetCachedSize(int /* size */) const {
|
| GOOGLE_LOG(FATAL) << "Message class \"" << GetDescriptor()->full_name()
|
| << "\" implements neither SetCachedSize() nor ByteSize(). "
|
| "Must implement one or the other.";
|
| @@ -222,6 +227,54 @@ void* Reflection::MutableRawRepeatedString(
|
| }
|
|
|
|
|
| +// Default EnumValue API implementations. Real reflection implementations should
|
| +// override these. However, there are several legacy implementations that do
|
| +// not, and cannot easily be changed at the same time as the Reflection API, so
|
| +// we provide these for now.
|
| +// TODO: Remove these once all Reflection implementations are updated.
|
| +int Reflection::GetEnumValue(const Message& message,
|
| + const FieldDescriptor* field) const {
|
| + GOOGLE_LOG(FATAL) << "Unimplemented EnumValue API.";
|
| + return 0;
|
| +}
|
| +void Reflection::SetEnumValue(Message* message,
|
| + const FieldDescriptor* field,
|
| + int value) const {
|
| + GOOGLE_LOG(FATAL) << "Unimplemented EnumValue API.";
|
| +}
|
| +int Reflection::GetRepeatedEnumValue(
|
| + const Message& message,
|
| + const FieldDescriptor* field, int index) const {
|
| + GOOGLE_LOG(FATAL) << "Unimplemented EnumValue API.";
|
| + return 0;
|
| +}
|
| +void Reflection::SetRepeatedEnumValue(Message* message,
|
| + const FieldDescriptor* field, int index,
|
| + int value) const {
|
| + GOOGLE_LOG(FATAL) << "Unimplemented EnumValue API.";
|
| +}
|
| +void Reflection::AddEnumValue(Message* message,
|
| + const FieldDescriptor* field,
|
| + int value) const {
|
| + GOOGLE_LOG(FATAL) << "Unimplemented EnumValue API.";
|
| +}
|
| +
|
| +MapIterator Reflection::MapBegin(
|
| + Message* message,
|
| + const FieldDescriptor* field) const {
|
| + GOOGLE_LOG(FATAL) << "Unimplemented Map Reflection API.";
|
| + MapIterator iter(message, field);
|
| + return iter;
|
| +}
|
| +
|
| +MapIterator Reflection::MapEnd(
|
| + Message* message,
|
| + const FieldDescriptor* field) const {
|
| + GOOGLE_LOG(FATAL) << "Unimplemented Map Reflection API.";
|
| + MapIterator iter(message, field);
|
| + return iter;
|
| +}
|
| +
|
| // =============================================================================
|
| // MessageFactory
|
|
|
| @@ -354,5 +407,111 @@ void MessageFactory::InternalRegisterGeneratedMessage(
|
| }
|
|
|
|
|
| +MessageFactory* Reflection::GetMessageFactory() const {
|
| + GOOGLE_LOG(FATAL) << "Not implemented.";
|
| + return NULL;
|
| +}
|
| +
|
| +void* Reflection::RepeatedFieldData(
|
| + Message* message, const FieldDescriptor* field,
|
| + FieldDescriptor::CppType cpp_type,
|
| + const Descriptor* message_type) const {
|
| + GOOGLE_LOG(FATAL) << "Not implemented.";
|
| + return NULL;
|
| +}
|
| +
|
| +namespace internal {
|
| +RepeatedFieldAccessor::~RepeatedFieldAccessor() {
|
| +}
|
| +} // namespace internal
|
| +
|
| +const internal::RepeatedFieldAccessor* Reflection::RepeatedFieldAccessor(
|
| + const FieldDescriptor* field) const {
|
| + GOOGLE_CHECK(field->is_repeated());
|
| + switch (field->cpp_type()) {
|
| +#define HANDLE_PRIMITIVE_TYPE(TYPE, type) \
|
| + case FieldDescriptor::CPPTYPE_ ## TYPE: \
|
| + return internal::Singleton<internal::RepeatedFieldPrimitiveAccessor<type> >::get();
|
| + HANDLE_PRIMITIVE_TYPE(INT32, int32)
|
| + HANDLE_PRIMITIVE_TYPE(UINT32, uint32)
|
| + HANDLE_PRIMITIVE_TYPE(INT64, int64)
|
| + HANDLE_PRIMITIVE_TYPE(UINT64, uint64)
|
| + HANDLE_PRIMITIVE_TYPE(FLOAT, float)
|
| + HANDLE_PRIMITIVE_TYPE(DOUBLE, double)
|
| + HANDLE_PRIMITIVE_TYPE(BOOL, bool)
|
| + HANDLE_PRIMITIVE_TYPE(ENUM, int32)
|
| +#undef HANDLE_PRIMITIVE_TYPE
|
| + case FieldDescriptor::CPPTYPE_STRING:
|
| + switch (field->options().ctype()) {
|
| + default:
|
| + case FieldOptions::STRING:
|
| + return internal::Singleton<internal::RepeatedPtrFieldStringAccessor>::get();
|
| + }
|
| + break;
|
| + case FieldDescriptor::CPPTYPE_MESSAGE:
|
| + if (field->is_map()) {
|
| + return internal::Singleton<internal::MapFieldAccessor>::get();
|
| + } else {
|
| + return internal::Singleton<internal::RepeatedPtrFieldMessageAccessor>::get();
|
| + }
|
| + }
|
| + GOOGLE_LOG(FATAL) << "Should not reach here.";
|
| + return NULL;
|
| +}
|
| +
|
| +namespace internal {
|
| +namespace {
|
| +void ShutdownRepeatedFieldAccessor() {
|
| + internal::Singleton<internal::RepeatedFieldPrimitiveAccessor<int32> >::ShutDown();
|
| + internal::Singleton<internal::RepeatedFieldPrimitiveAccessor<uint32> >::ShutDown();
|
| + internal::Singleton<internal::RepeatedFieldPrimitiveAccessor<int64> >::ShutDown();
|
| + internal::Singleton<internal::RepeatedFieldPrimitiveAccessor<uint64> >::ShutDown();
|
| + internal::Singleton<internal::RepeatedFieldPrimitiveAccessor<float> >::ShutDown();
|
| + internal::Singleton<internal::RepeatedFieldPrimitiveAccessor<double> >::ShutDown();
|
| + internal::Singleton<internal::RepeatedFieldPrimitiveAccessor<bool> >::ShutDown();
|
| + internal::Singleton<internal::RepeatedPtrFieldStringAccessor>::ShutDown();
|
| + internal::Singleton<internal::RepeatedPtrFieldMessageAccessor>::ShutDown();
|
| + internal::Singleton<internal::MapFieldAccessor>::ShutDown();
|
| +}
|
| +
|
| +struct ShutdownRepeatedFieldRegister {
|
| + ShutdownRepeatedFieldRegister() {
|
| + OnShutdown(&ShutdownRepeatedFieldAccessor);
|
| + }
|
| +} shutdown_;
|
| +
|
| +} // namespace
|
| +} // namespace internal
|
| +
|
| +namespace internal {
|
| +template<>
|
| +#if defined(_MSC_VER) && (_MSC_VER >= 1900)
|
| +// Note: force noinline to workaround MSVC 2015 compiler bug, issue #240
|
| +GOOGLE_ATTRIBUTE_NOINLINE
|
| +#endif
|
| +Message* GenericTypeHandler<Message>::NewFromPrototype(
|
| + const Message* prototype, google::protobuf::Arena* arena) {
|
| + return prototype->New(arena);
|
| +}
|
| +template<>
|
| +#if defined(_MSC_VER) && (_MSC_VER >= 1900)
|
| +// Note: force noinline to workaround MSVC 2015 compiler bug, issue #240
|
| +GOOGLE_ATTRIBUTE_NOINLINE
|
| +#endif
|
| +google::protobuf::Arena* GenericTypeHandler<Message>::GetArena(
|
| + Message* value) {
|
| + return value->GetArena();
|
| +}
|
| +template<>
|
| +#if defined(_MSC_VER) && (_MSC_VER >= 1900)
|
| +// Note: force noinline to workaround MSVC 2015 compiler bug, issue #240
|
| +GOOGLE_ATTRIBUTE_NOINLINE
|
| +#endif
|
| +void* GenericTypeHandler<Message>::GetMaybeArenaPointer(
|
| + Message* value) {
|
| + return value->GetMaybeArenaPointer();
|
| +}
|
| +} // namespace internal
|
| +
|
| } // namespace protobuf
|
| } // namespace google
|
|
|