From 1a7a7fca804afa1cf67f8be5e71092898ba40334 Mon Sep 17 00:00:00 2001 From: Jisi Liu Date: Wed, 18 Oct 2017 12:22:18 -0700 Subject: Merge from google internal --- src/google/protobuf/generated_message_util.cc | 30 +++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) (limited to 'src/google/protobuf/generated_message_util.cc') diff --git a/src/google/protobuf/generated_message_util.cc b/src/google/protobuf/generated_message_util.cc index c9dfe61a..15d84222 100644 --- a/src/google/protobuf/generated_message_util.cc +++ b/src/google/protobuf/generated_message_util.cc @@ -43,14 +43,17 @@ #include #include #include +#include #include #include #include namespace google { + namespace protobuf { namespace internal { + double Infinity() { return std::numeric_limits::infinity(); } @@ -695,6 +698,33 @@ void UnknownFieldSerializerLite(const uint8* ptr, uint32 offset, uint32 tag, ->unknown_fields()); } +MessageLite* DuplicateIfNonNullInternal(MessageLite* message, Arena* arena) { + if (message) { + MessageLite* ret = message->New(arena); + ret->CheckTypeAndMergeFrom(*message); + return ret; + } else { + return NULL; + } +} + +// Returns a message owned by this Arena. This may require Own()ing or +// duplicating the message. +MessageLite* GetOwnedMessageInternal(Arena* message_arena, + MessageLite* submessage, + Arena* submessage_arena) { + GOOGLE_DCHECK(submessage->GetArena() == submessage_arena); + GOOGLE_DCHECK(message_arena != submessage_arena); + if (message_arena != NULL && submessage_arena == NULL) { + message_arena->Own(submessage); + return submessage; + } else { + MessageLite* ret = submessage->New(message_arena); + ret->CheckTypeAndMergeFrom(*submessage); + return ret; + } +} + } // namespace internal } // namespace protobuf } // namespace google -- cgit v1.2.3