diff options
132 files changed, 0 insertions, 70866 deletions
diff --git a/include/google/protobuf/any.h b/include/google/protobuf/any.h deleted file mode 100644 index 92ea2bb2c7..0000000000 --- a/include/google/protobuf/any.h +++ /dev/null @@ -1,157 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// 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 -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -#ifndef GOOGLE_PROTOBUF_ANY_H__ -#define GOOGLE_PROTOBUF_ANY_H__ - -#include <string> - -#include <google/protobuf/stubs/common.h> -#include <google/protobuf/arenastring.h> -#include <google/protobuf/message_lite.h> - -// Must be included last. -#include <google/protobuf/port_def.inc> - -namespace google { -namespace protobuf { - -class FieldDescriptor; -class Message; - -namespace internal { - -extern const char kAnyFullTypeName[]; // "google.protobuf.Any". -extern const char kTypeGoogleApisComPrefix[]; // "type.googleapis.com/". -extern const char kTypeGoogleProdComPrefix[]; // "type.googleprod.com/". - -std::string GetTypeUrl(StringPiece message_name, - StringPiece type_url_prefix); - -// Helper class used to implement google::protobuf::Any. -class PROTOBUF_EXPORT AnyMetadata { - typedef ArenaStringPtr UrlType; - typedef ArenaStringPtr ValueType; - public: - // AnyMetadata does not take ownership of "type_url" and "value". - constexpr AnyMetadata(UrlType* type_url, ValueType* value) - : type_url_(type_url), value_(value) {} - - // Packs a message using the default type URL prefix: "type.googleapis.com". - // The resulted type URL will be "type.googleapis.com/<message_full_name>". - // Returns false if serializing the message failed. - template <typename T> - bool PackFrom(Arena* arena, const T& message) { - return InternalPackFrom(arena, message, kTypeGoogleApisComPrefix, - T::FullMessageName()); - } - - bool PackFrom(Arena* arena, const Message& message); - - // Packs a message using the given type URL prefix. The type URL will be - // constructed by concatenating the message type's full name to the prefix - // with an optional "/" separator if the prefix doesn't already end with "/". - // For example, both PackFrom(message, "type.googleapis.com") and - // PackFrom(message, "type.googleapis.com/") yield the same result type - // URL: "type.googleapis.com/<message_full_name>". - // Returns false if serializing the message failed. - template <typename T> - bool PackFrom(Arena* arena, const T& message, - StringPiece type_url_prefix) { - return InternalPackFrom(arena, message, type_url_prefix, - T::FullMessageName()); - } - - bool PackFrom(Arena* arena, const Message& message, - StringPiece type_url_prefix); - - // Unpacks the payload into the given message. Returns false if the message's - // type doesn't match the type specified in the type URL (i.e., the full - // name after the last "/" of the type URL doesn't match the message's actual - // full name) or parsing the payload has failed. - template <typename T> - bool UnpackTo(T* message) const { - return InternalUnpackTo(T::FullMessageName(), message); - } - - bool UnpackTo(Message* message) const; - - // Checks whether the type specified in the type URL matches the given type. - // A type is considered matching if its full name matches the full name after - // the last "/" in the type URL. - template <typename T> - bool Is() const { - return InternalIs(T::FullMessageName()); - } - - private: - bool InternalPackFrom(Arena* arena, const MessageLite& message, - StringPiece type_url_prefix, - StringPiece type_name); - bool InternalUnpackTo(StringPiece type_name, - MessageLite* message) const; - bool InternalIs(StringPiece type_name) const; - - UrlType* type_url_; - ValueType* value_; - - GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(AnyMetadata); -}; - -// Get the proto type name from Any::type_url value. For example, passing -// "type.googleapis.com/rpc.QueryOrigin" will return "rpc.QueryOrigin" in -// *full_type_name. Returns false if the type_url does not have a "/" -// in the type url separating the full type name. -// -// NOTE: this function is available publicly as a static method on the -// generated message type: google::protobuf::Any::ParseAnyTypeUrl() -bool ParseAnyTypeUrl(StringPiece type_url, std::string* full_type_name); - -// Get the proto type name and prefix from Any::type_url value. For example, -// passing "type.googleapis.com/rpc.QueryOrigin" will return -// "type.googleapis.com/" in *url_prefix and "rpc.QueryOrigin" in -// *full_type_name. Returns false if the type_url does not have a "/" in the -// type url separating the full type name. -bool ParseAnyTypeUrl(StringPiece type_url, std::string* url_prefix, - std::string* full_type_name); - -// See if message is of type google.protobuf.Any, if so, return the descriptors -// for "type_url" and "value" fields. -bool GetAnyFieldDescriptors(const Message& message, - const FieldDescriptor** type_url_field, - const FieldDescriptor** value_field); - -} // namespace internal -} // namespace protobuf -} // namespace google - -#include <google/protobuf/port_undef.inc> - -#endif // GOOGLE_PROTOBUF_ANY_H__ diff --git a/include/google/protobuf/any.pb.h b/include/google/protobuf/any.pb.h deleted file mode 100644 index 0a9ee260b2..0000000000 --- a/include/google/protobuf/any.pb.h +++ /dev/null @@ -1,384 +0,0 @@ -// Generated by the protocol buffer compiler. DO NOT EDIT! -// source: google/protobuf/any.proto - -#ifndef GOOGLE_PROTOBUF_INCLUDED_google_2fprotobuf_2fany_2eproto -#define GOOGLE_PROTOBUF_INCLUDED_google_2fprotobuf_2fany_2eproto - -#include <limits> -#include <string> - -#include <google/protobuf/port_def.inc> -#if PROTOBUF_VERSION < 3021000 -#error This file was generated by a newer version of protoc which is -#error incompatible with your Protocol Buffer headers. Please update -#error your headers. -#endif -#if 3021004 < PROTOBUF_MIN_PROTOC_VERSION -#error This file was generated by an older version of protoc which is -#error incompatible with your Protocol Buffer headers. Please -#error regenerate this file with a newer version of protoc. -#endif - -#include <google/protobuf/port_undef.inc> -#include <google/protobuf/io/coded_stream.h> -#include <google/protobuf/arena.h> -#include <google/protobuf/arenastring.h> -#include <google/protobuf/generated_message_util.h> -#include <google/protobuf/metadata_lite.h> -#include <google/protobuf/generated_message_reflection.h> -#include <google/protobuf/message.h> -#include <google/protobuf/repeated_field.h> // IWYU pragma: export -#include <google/protobuf/extension_set.h> // IWYU pragma: export -#include <google/protobuf/unknown_field_set.h> -// @@protoc_insertion_point(includes) -#include <google/protobuf/port_def.inc> -#define PROTOBUF_INTERNAL_EXPORT_google_2fprotobuf_2fany_2eproto PROTOBUF_EXPORT -PROTOBUF_NAMESPACE_OPEN -namespace internal { -class AnyMetadata; -} // namespace internal -PROTOBUF_NAMESPACE_CLOSE - -// Internal implementation detail -- do not use these members. -struct PROTOBUF_EXPORT TableStruct_google_2fprotobuf_2fany_2eproto { - static const uint32_t offsets[]; -}; -PROTOBUF_EXPORT extern const ::PROTOBUF_NAMESPACE_ID::internal::DescriptorTable descriptor_table_google_2fprotobuf_2fany_2eproto; -PROTOBUF_NAMESPACE_OPEN -class Any; -struct AnyDefaultTypeInternal; -PROTOBUF_EXPORT extern AnyDefaultTypeInternal _Any_default_instance_; -PROTOBUF_NAMESPACE_CLOSE -PROTOBUF_NAMESPACE_OPEN -template<> PROTOBUF_EXPORT ::PROTOBUF_NAMESPACE_ID::Any* Arena::CreateMaybeMessage<::PROTOBUF_NAMESPACE_ID::Any>(Arena*); -PROTOBUF_NAMESPACE_CLOSE -PROTOBUF_NAMESPACE_OPEN - -// =================================================================== - -class PROTOBUF_EXPORT Any final : - public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:google.protobuf.Any) */ { - public: - inline Any() : Any(nullptr) {} - ~Any() override; - explicit PROTOBUF_CONSTEXPR Any(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized); - - Any(const Any& from); - Any(Any&& from) noexcept - : Any() { - *this = ::std::move(from); - } - - inline Any& operator=(const Any& from) { - CopyFrom(from); - return *this; - } - inline Any& operator=(Any&& from) noexcept { - if (this == &from) return *this; - if (GetOwningArena() == from.GetOwningArena() - #ifdef PROTOBUF_FORCE_COPY_IN_MOVE - && GetOwningArena() != nullptr - #endif // !PROTOBUF_FORCE_COPY_IN_MOVE - ) { - InternalSwap(&from); - } else { - CopyFrom(from); - } - return *this; - } - - static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() { - return GetDescriptor(); - } - static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() { - return default_instance().GetMetadata().descriptor; - } - static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() { - return default_instance().GetMetadata().reflection; - } - static const Any& default_instance() { - return *internal_default_instance(); - } - static inline const Any* internal_default_instance() { - return reinterpret_cast<const Any*>( - &_Any_default_instance_); - } - static constexpr int kIndexInFileMessages = - 0; - - // implements Any ----------------------------------------------- - - bool PackFrom(const ::PROTOBUF_NAMESPACE_ID::Message& message) { - GOOGLE_DCHECK_NE(&message, this); - return _impl_._any_metadata_.PackFrom(GetArena(), message); - } - bool PackFrom(const ::PROTOBUF_NAMESPACE_ID::Message& message, - ::PROTOBUF_NAMESPACE_ID::ConstStringParam type_url_prefix) { - GOOGLE_DCHECK_NE(&message, this); - return _impl_._any_metadata_.PackFrom(GetArena(), message, type_url_prefix); - } - bool UnpackTo(::PROTOBUF_NAMESPACE_ID::Message* message) const { - return _impl_._any_metadata_.UnpackTo(message); - } - static bool GetAnyFieldDescriptors( - const ::PROTOBUF_NAMESPACE_ID::Message& message, - const ::PROTOBUF_NAMESPACE_ID::FieldDescriptor** type_url_field, - const ::PROTOBUF_NAMESPACE_ID::FieldDescriptor** value_field); - template <typename T, class = typename std::enable_if<!std::is_convertible<T, const ::PROTOBUF_NAMESPACE_ID::Message&>::value>::type> - bool PackFrom(const T& message) { - return _impl_._any_metadata_.PackFrom<T>(GetArena(), message); - } - template <typename T, class = typename std::enable_if<!std::is_convertible<T, const ::PROTOBUF_NAMESPACE_ID::Message&>::value>::type> - bool PackFrom(const T& message, - ::PROTOBUF_NAMESPACE_ID::ConstStringParam type_url_prefix) { - return _impl_._any_metadata_.PackFrom<T>(GetArena(), message, type_url_prefix);} - template <typename T, class = typename std::enable_if<!std::is_convertible<T, const ::PROTOBUF_NAMESPACE_ID::Message&>::value>::type> - bool UnpackTo(T* message) const { - return _impl_._any_metadata_.UnpackTo<T>(message); - } - template<typename T> bool Is() const { - return _impl_._any_metadata_.Is<T>(); - } - static bool ParseAnyTypeUrl(::PROTOBUF_NAMESPACE_ID::ConstStringParam type_url, - std::string* full_type_name); - friend void swap(Any& a, Any& b) { - a.Swap(&b); - } - inline void Swap(Any* other) { - if (other == this) return; - #ifdef PROTOBUF_FORCE_COPY_IN_SWAP - if (GetOwningArena() != nullptr && - GetOwningArena() == other->GetOwningArena()) { - #else // PROTOBUF_FORCE_COPY_IN_SWAP - if (GetOwningArena() == other->GetOwningArena()) { - #endif // !PROTOBUF_FORCE_COPY_IN_SWAP - InternalSwap(other); - } else { - ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other); - } - } - void UnsafeArenaSwap(Any* other) { - if (other == this) return; - GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena()); - InternalSwap(other); - } - - // implements Message ---------------------------------------------- - - Any* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final { - return CreateMaybeMessage<Any>(arena); - } - using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom; - void CopyFrom(const Any& from); - using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom; - void MergeFrom( const Any& from) { - Any::MergeImpl(*this, from); - } - private: - static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message& to_msg, const ::PROTOBUF_NAMESPACE_ID::Message& from_msg); - public: - PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final; - bool IsInitialized() const final; - - size_t ByteSizeLong() const final; - const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final; - uint8_t* _InternalSerialize( - uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final; - int GetCachedSize() const final { return _impl_._cached_size_.Get(); } - - private: - void SharedCtor(::PROTOBUF_NAMESPACE_ID::Arena* arena, bool is_message_owned); - void SharedDtor(); - void SetCachedSize(int size) const final; - void InternalSwap(Any* other); - - private: - friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata; - static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() { - return "google.protobuf.Any"; - } - protected: - explicit Any(::PROTOBUF_NAMESPACE_ID::Arena* arena, - bool is_message_owned = false); - public: - - static const ClassData _class_data_; - const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final; - - ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final; - - // nested types ---------------------------------------------------- - - // accessors ------------------------------------------------------- - - enum : int { - kTypeUrlFieldNumber = 1, - kValueFieldNumber = 2, - }; - // string type_url = 1; - void clear_type_url(); - const std::string& type_url() const; - template <typename ArgT0 = const std::string&, typename... ArgT> - void set_type_url(ArgT0&& arg0, ArgT... args); - std::string* mutable_type_url(); - PROTOBUF_NODISCARD std::string* release_type_url(); - void set_allocated_type_url(std::string* type_url); - private: - const std::string& _internal_type_url() const; - inline PROTOBUF_ALWAYS_INLINE void _internal_set_type_url(const std::string& value); - std::string* _internal_mutable_type_url(); - public: - - // bytes value = 2; - void clear_value(); - const std::string& value() const; - template <typename ArgT0 = const std::string&, typename... ArgT> - void set_value(ArgT0&& arg0, ArgT... args); - std::string* mutable_value(); - PROTOBUF_NODISCARD std::string* release_value(); - void set_allocated_value(std::string* value); - private: - const std::string& _internal_value() const; - inline PROTOBUF_ALWAYS_INLINE void _internal_set_value(const std::string& value); - std::string* _internal_mutable_value(); - public: - - // @@protoc_insertion_point(class_scope:google.protobuf.Any) - private: - class _Internal; - - template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper; - typedef void InternalArenaConstructable_; - typedef void DestructorSkippable_; - struct Impl_ { - ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr type_url_; - ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr value_; - mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_; - ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata _any_metadata_; - }; - union { Impl_ _impl_; }; - friend struct ::TableStruct_google_2fprotobuf_2fany_2eproto; -}; -// =================================================================== - - -// =================================================================== - -#ifdef __GNUC__ - #pragma GCC diagnostic push - #pragma GCC diagnostic ignored "-Wstrict-aliasing" -#endif // __GNUC__ -// Any - -// string type_url = 1; -inline void Any::clear_type_url() { - _impl_.type_url_.ClearToEmpty(); -} -inline const std::string& Any::type_url() const { - // @@protoc_insertion_point(field_get:google.protobuf.Any.type_url) - return _internal_type_url(); -} -template <typename ArgT0, typename... ArgT> -inline PROTOBUF_ALWAYS_INLINE -void Any::set_type_url(ArgT0&& arg0, ArgT... args) { - - _impl_.type_url_.Set(static_cast<ArgT0 &&>(arg0), args..., GetArenaForAllocation()); - // @@protoc_insertion_point(field_set:google.protobuf.Any.type_url) -} -inline std::string* Any::mutable_type_url() { - std::string* _s = _internal_mutable_type_url(); - // @@protoc_insertion_point(field_mutable:google.protobuf.Any.type_url) - return _s; -} -inline const std::string& Any::_internal_type_url() const { - return _impl_.type_url_.Get(); -} -inline void Any::_internal_set_type_url(const std::string& value) { - - _impl_.type_url_.Set(value, GetArenaForAllocation()); -} -inline std::string* Any::_internal_mutable_type_url() { - - return _impl_.type_url_.Mutable(GetArenaForAllocation()); -} -inline std::string* Any::release_type_url() { - // @@protoc_insertion_point(field_release:google.protobuf.Any.type_url) - return _impl_.type_url_.Release(); -} -inline void Any::set_allocated_type_url(std::string* type_url) { - if (type_url != nullptr) { - - } else { - - } - _impl_.type_url_.SetAllocated(type_url, GetArenaForAllocation()); -#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING - if (_impl_.type_url_.IsDefault()) { - _impl_.type_url_.Set("", GetArenaForAllocation()); - } -#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING - // @@protoc_insertion_point(field_set_allocated:google.protobuf.Any.type_url) -} - -// bytes value = 2; -inline void Any::clear_value() { - _impl_.value_.ClearToEmpty(); -} -inline const std::string& Any::value() const { - // @@protoc_insertion_point(field_get:google.protobuf.Any.value) - return _internal_value(); -} -template <typename ArgT0, typename... ArgT> -inline PROTOBUF_ALWAYS_INLINE -void Any::set_value(ArgT0&& arg0, ArgT... args) { - - _impl_.value_.SetBytes(static_cast<ArgT0 &&>(arg0), args..., GetArenaForAllocation()); - // @@protoc_insertion_point(field_set:google.protobuf.Any.value) -} -inline std::string* Any::mutable_value() { - std::string* _s = _internal_mutable_value(); - // @@protoc_insertion_point(field_mutable:google.protobuf.Any.value) - return _s; -} -inline const std::string& Any::_internal_value() const { - return _impl_.value_.Get(); -} -inline void Any::_internal_set_value(const std::string& value) { - - _impl_.value_.Set(value, GetArenaForAllocation()); -} -inline std::string* Any::_internal_mutable_value() { - - return _impl_.value_.Mutable(GetArenaForAllocation()); -} -inline std::string* Any::release_value() { - // @@protoc_insertion_point(field_release:google.protobuf.Any.value) - return _impl_.value_.Release(); -} -inline void Any::set_allocated_value(std::string* value) { - if (value != nullptr) { - - } else { - - } - _impl_.value_.SetAllocated(value, GetArenaForAllocation()); -#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING - if (_impl_.value_.IsDefault()) { - _impl_.value_.Set("", GetArenaForAllocation()); - } -#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING - // @@protoc_insertion_point(field_set_allocated:google.protobuf.Any.value) -} - -#ifdef __GNUC__ - #pragma GCC diagnostic pop -#endif // __GNUC__ - -// @@protoc_insertion_point(namespace_scope) - -PROTOBUF_NAMESPACE_CLOSE - -// @@protoc_insertion_point(global_scope) - -#include <google/protobuf/port_undef.inc> -#endif // GOOGLE_PROTOBUF_INCLUDED_GOOGLE_PROTOBUF_INCLUDED_google_2fprotobuf_2fany_2eproto diff --git a/include/google/protobuf/any.proto b/include/google/protobuf/any.proto deleted file mode 100644 index e2c2042fdc..0000000000 --- a/include/google/protobuf/any.proto +++ /dev/null @@ -1,158 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// 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 -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -syntax = "proto3"; - -package google.protobuf; - -option csharp_namespace = "Google.Protobuf.WellKnownTypes"; -option go_package = "google.golang.org/protobuf/types/known/anypb"; -option java_package = "com.google.protobuf"; -option java_outer_classname = "AnyProto"; -option java_multiple_files = true; -option objc_class_prefix = "GPB"; - -// `Any` contains an arbitrary serialized protocol buffer message along with a -// URL that describes the type of the serialized message. -// -// Protobuf library provides support to pack/unpack Any values in the form -// of utility functions or additional generated methods of the Any type. -// -// Example 1: Pack and unpack a message in C++. -// -// Foo foo = ...; -// Any any; -// any.PackFrom(foo); -// ... -// if (any.UnpackTo(&foo)) { -// ... -// } -// -// Example 2: Pack and unpack a message in Java. -// -// Foo foo = ...; -// Any any = Any.pack(foo); -// ... -// if (any.is(Foo.class)) { -// foo = any.unpack(Foo.class); -// } -// -// Example 3: Pack and unpack a message in Python. -// -// foo = Foo(...) -// any = Any() -// any.Pack(foo) -// ... -// if any.Is(Foo.DESCRIPTOR): -// any.Unpack(foo) -// ... -// -// Example 4: Pack and unpack a message in Go -// -// foo := &pb.Foo{...} -// any, err := anypb.New(foo) -// if err != nil { -// ... -// } -// ... -// foo := &pb.Foo{} -// if err := any.UnmarshalTo(foo); err != nil { -// ... -// } -// -// The pack methods provided by protobuf library will by default use -// 'type.googleapis.com/full.type.name' as the type URL and the unpack -// methods only use the fully qualified type name after the last '/' -// in the type URL, for example "foo.bar.com/x/y.z" will yield type -// name "y.z". -// -// -// JSON -// -// The JSON representation of an `Any` value uses the regular -// representation of the deserialized, embedded message, with an -// additional field `@type` which contains the type URL. Example: -// -// package google.profile; -// message Person { -// string first_name = 1; -// string last_name = 2; -// } -// -// { -// "@type": "type.googleapis.com/google.profile.Person", -// "firstName": <string>, -// "lastName": <string> -// } -// -// If the embedded message type is well-known and has a custom JSON -// representation, that representation will be embedded adding a field -// `value` which holds the custom JSON in addition to the `@type` -// field. Example (for message [google.protobuf.Duration][]): -// -// { -// "@type": "type.googleapis.com/google.protobuf.Duration", -// "value": "1.212s" -// } -// -message Any { - // A URL/resource name that uniquely identifies the type of the serialized - // protocol buffer message. This string must contain at least - // one "/" character. The last segment of the URL's path must represent - // the fully qualified name of the type (as in - // `path/google.protobuf.Duration`). The name should be in a canonical form - // (e.g., leading "." is not accepted). - // - // In practice, teams usually precompile into the binary all types that they - // expect it to use in the context of Any. However, for URLs which use the - // scheme `http`, `https`, or no scheme, one can optionally set up a type - // server that maps type URLs to message definitions as follows: - // - // * If no scheme is provided, `https` is assumed. - // * An HTTP GET on the URL must yield a [google.protobuf.Type][] - // value in binary format, or produce an error. - // * Applications are allowed to cache lookup results based on the - // URL, or have them precompiled into a binary to avoid any - // lookup. Therefore, binary compatibility needs to be preserved - // on changes to types. (Use versioned type names to manage - // breaking changes.) - // - // Note: this functionality is not currently available in the official - // protobuf release, and it is not used for type URLs beginning with - // type.googleapis.com. - // - // Schemes other than `http`, `https` (or the empty scheme) might be - // used with implementation specific semantics. - // - string type_url = 1; - - // Must be a valid serialized protocol buffer of the above specified type. - bytes value = 2; -} diff --git a/include/google/protobuf/api.pb.h b/include/google/protobuf/api.pb.h deleted file mode 100644 index 49032949b5..0000000000 --- a/include/google/protobuf/api.pb.h +++ /dev/null @@ -1,1437 +0,0 @@ -// Generated by the protocol buffer compiler. DO NOT EDIT! -// source: google/protobuf/api.proto - -#ifndef GOOGLE_PROTOBUF_INCLUDED_google_2fprotobuf_2fapi_2eproto -#define GOOGLE_PROTOBUF_INCLUDED_google_2fprotobuf_2fapi_2eproto - -#include <limits> -#include <string> - -#include <google/protobuf/port_def.inc> -#if PROTOBUF_VERSION < 3021000 -#error This file was generated by a newer version of protoc which is -#error incompatible with your Protocol Buffer headers. Please update -#error your headers. -#endif -#if 3021004 < PROTOBUF_MIN_PROTOC_VERSION -#error This file was generated by an older version of protoc which is -#error incompatible with your Protocol Buffer headers. Please -#error regenerate this file with a newer version of protoc. -#endif - -#include <google/protobuf/port_undef.inc> -#include <google/protobuf/io/coded_stream.h> -#include <google/protobuf/arena.h> -#include <google/protobuf/arenastring.h> -#include <google/protobuf/generated_message_util.h> -#include <google/protobuf/metadata_lite.h> -#include <google/protobuf/generated_message_reflection.h> -#include <google/protobuf/message.h> -#include <google/protobuf/repeated_field.h> // IWYU pragma: export -#include <google/protobuf/extension_set.h> // IWYU pragma: export -#include <google/protobuf/unknown_field_set.h> -#include <google/protobuf/source_context.pb.h> -#include <google/protobuf/type.pb.h> -// @@protoc_insertion_point(includes) -#include <google/protobuf/port_def.inc> -#define PROTOBUF_INTERNAL_EXPORT_google_2fprotobuf_2fapi_2eproto PROTOBUF_EXPORT -PROTOBUF_NAMESPACE_OPEN -namespace internal { -class AnyMetadata; -} // namespace internal -PROTOBUF_NAMESPACE_CLOSE - -// Internal implementation detail -- do not use these members. -struct PROTOBUF_EXPORT TableStruct_google_2fprotobuf_2fapi_2eproto { - static const uint32_t offsets[]; -}; -PROTOBUF_EXPORT extern const ::PROTOBUF_NAMESPACE_ID::internal::DescriptorTable descriptor_table_google_2fprotobuf_2fapi_2eproto; -PROTOBUF_NAMESPACE_OPEN -class Api; -struct ApiDefaultTypeInternal; -PROTOBUF_EXPORT extern ApiDefaultTypeInternal _Api_default_instance_; -class Method; -struct MethodDefaultTypeInternal; -PROTOBUF_EXPORT extern MethodDefaultTypeInternal _Method_default_instance_; -class Mixin; -struct MixinDefaultTypeInternal; -PROTOBUF_EXPORT extern MixinDefaultTypeInternal _Mixin_default_instance_; -PROTOBUF_NAMESPACE_CLOSE -PROTOBUF_NAMESPACE_OPEN -template<> PROTOBUF_EXPORT ::PROTOBUF_NAMESPACE_ID::Api* Arena::CreateMaybeMessage<::PROTOBUF_NAMESPACE_ID::Api>(Arena*); -template<> PROTOBUF_EXPORT ::PROTOBUF_NAMESPACE_ID::Method* Arena::CreateMaybeMessage<::PROTOBUF_NAMESPACE_ID::Method>(Arena*); -template<> PROTOBUF_EXPORT ::PROTOBUF_NAMESPACE_ID::Mixin* Arena::CreateMaybeMessage<::PROTOBUF_NAMESPACE_ID::Mixin>(Arena*); -PROTOBUF_NAMESPACE_CLOSE -PROTOBUF_NAMESPACE_OPEN - -// =================================================================== - -class PROTOBUF_EXPORT Api final : - public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:google.protobuf.Api) */ { - public: - inline Api() : Api(nullptr) {} - ~Api() override; - explicit PROTOBUF_CONSTEXPR Api(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized); - - Api(const Api& from); - Api(Api&& from) noexcept - : Api() { - *this = ::std::move(from); - } - - inline Api& operator=(const Api& from) { - CopyFrom(from); - return *this; - } - inline Api& operator=(Api&& from) noexcept { - if (this == &from) return *this; - if (GetOwningArena() == from.GetOwningArena() - #ifdef PROTOBUF_FORCE_COPY_IN_MOVE - && GetOwningArena() != nullptr - #endif // !PROTOBUF_FORCE_COPY_IN_MOVE - ) { - InternalSwap(&from); - } else { - CopyFrom(from); - } - return *this; - } - - static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() { - return GetDescriptor(); - } - static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() { - return default_instance().GetMetadata().descriptor; - } - static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() { - return default_instance().GetMetadata().reflection; - } - static const Api& default_instance() { - return *internal_default_instance(); - } - static inline const Api* internal_default_instance() { - return reinterpret_cast<const Api*>( - &_Api_default_instance_); - } - static constexpr int kIndexInFileMessages = - 0; - - friend void swap(Api& a, Api& b) { - a.Swap(&b); - } - inline void Swap(Api* other) { - if (other == this) return; - #ifdef PROTOBUF_FORCE_COPY_IN_SWAP - if (GetOwningArena() != nullptr && - GetOwningArena() == other->GetOwningArena()) { - #else // PROTOBUF_FORCE_COPY_IN_SWAP - if (GetOwningArena() == other->GetOwningArena()) { - #endif // !PROTOBUF_FORCE_COPY_IN_SWAP - InternalSwap(other); - } else { - ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other); - } - } - void UnsafeArenaSwap(Api* other) { - if (other == this) return; - GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena()); - InternalSwap(other); - } - - // implements Message ---------------------------------------------- - - Api* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final { - return CreateMaybeMessage<Api>(arena); - } - using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom; - void CopyFrom(const Api& from); - using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom; - void MergeFrom( const Api& from) { - Api::MergeImpl(*this, from); - } - private: - static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message& to_msg, const ::PROTOBUF_NAMESPACE_ID::Message& from_msg); - public: - PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final; - bool IsInitialized() const final; - - size_t ByteSizeLong() const final; - const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final; - uint8_t* _InternalSerialize( - uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final; - int GetCachedSize() const final { return _impl_._cached_size_.Get(); } - - private: - void SharedCtor(::PROTOBUF_NAMESPACE_ID::Arena* arena, bool is_message_owned); - void SharedDtor(); - void SetCachedSize(int size) const final; - void InternalSwap(Api* other); - - private: - friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata; - static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() { - return "google.protobuf.Api"; - } - protected: - explicit Api(::PROTOBUF_NAMESPACE_ID::Arena* arena, - bool is_message_owned = false); - public: - - static const ClassData _class_data_; - const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final; - - ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final; - - // nested types ---------------------------------------------------- - - // accessors ------------------------------------------------------- - - enum : int { - kMethodsFieldNumber = 2, - kOptionsFieldNumber = 3, - kMixinsFieldNumber = 6, - kNameFieldNumber = 1, - kVersionFieldNumber = 4, - kSourceContextFieldNumber = 5, - kSyntaxFieldNumber = 7, - }; - // repeated .google.protobuf.Method methods = 2; - int methods_size() const; - private: - int _internal_methods_size() const; - public: - void clear_methods(); - ::PROTOBUF_NAMESPACE_ID::Method* mutable_methods(int index); - ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::Method >* - mutable_methods(); - private: - const ::PROTOBUF_NAMESPACE_ID::Method& _internal_methods(int index) const; - ::PROTOBUF_NAMESPACE_ID::Method* _internal_add_methods(); - public: - const ::PROTOBUF_NAMESPACE_ID::Method& methods(int index) const; - ::PROTOBUF_NAMESPACE_ID::Method* add_methods(); - const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::Method >& - methods() const; - - // repeated .google.protobuf.Option options = 3; - int options_size() const; - private: - int _internal_options_size() const; - public: - void clear_options(); - ::PROTOBUF_NAMESPACE_ID::Option* mutable_options(int index); - ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::Option >* - mutable_options(); - private: - const ::PROTOBUF_NAMESPACE_ID::Option& _internal_options(int index) const; - ::PROTOBUF_NAMESPACE_ID::Option* _internal_add_options(); - public: - const ::PROTOBUF_NAMESPACE_ID::Option& options(int index) const; - ::PROTOBUF_NAMESPACE_ID::Option* add_options(); - const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::Option >& - options() const; - - // repeated .google.protobuf.Mixin mixins = 6; - int mixins_size() const; - private: - int _internal_mixins_size() const; - public: - void clear_mixins(); - ::PROTOBUF_NAMESPACE_ID::Mixin* mutable_mixins(int index); - ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::Mixin >* - mutable_mixins(); - private: - const ::PROTOBUF_NAMESPACE_ID::Mixin& _internal_mixins(int index) const; - ::PROTOBUF_NAMESPACE_ID::Mixin* _internal_add_mixins(); - public: - const ::PROTOBUF_NAMESPACE_ID::Mixin& mixins(int index) const; - ::PROTOBUF_NAMESPACE_ID::Mixin* add_mixins(); - const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::Mixin >& - mixins() const; - - // string name = 1; - void clear_name(); - const std::string& name() const; - template <typename ArgT0 = const std::string&, typename... ArgT> - void set_name(ArgT0&& arg0, ArgT... args); - std::string* mutable_name(); - PROTOBUF_NODISCARD std::string* release_name(); - void set_allocated_name(std::string* name); - private: - const std::string& _internal_name() const; - inline PROTOBUF_ALWAYS_INLINE void _internal_set_name(const std::string& value); - std::string* _internal_mutable_name(); - public: - - // string version = 4; - void clear_version(); - const std::string& version() const; - template <typename ArgT0 = const std::string&, typename... ArgT> - void set_version(ArgT0&& arg0, ArgT... args); - std::string* mutable_version(); - PROTOBUF_NODISCARD std::string* release_version(); - void set_allocated_version(std::string* version); - private: - const std::string& _internal_version() const; - inline PROTOBUF_ALWAYS_INLINE void _internal_set_version(const std::string& value); - std::string* _internal_mutable_version(); - public: - - // .google.protobuf.SourceContext source_context = 5; - bool has_source_context() const; - private: - bool _internal_has_source_context() const; - public: - void clear_source_context(); - const ::PROTOBUF_NAMESPACE_ID::SourceContext& source_context() const; - PROTOBUF_NODISCARD ::PROTOBUF_NAMESPACE_ID::SourceContext* release_source_context(); - ::PROTOBUF_NAMESPACE_ID::SourceContext* mutable_source_context(); - void set_allocated_source_context(::PROTOBUF_NAMESPACE_ID::SourceContext* source_context); - private: - const ::PROTOBUF_NAMESPACE_ID::SourceContext& _internal_source_context() const; - ::PROTOBUF_NAMESPACE_ID::SourceContext* _internal_mutable_source_context(); - public: - void unsafe_arena_set_allocated_source_context( - ::PROTOBUF_NAMESPACE_ID::SourceContext* source_context); - ::PROTOBUF_NAMESPACE_ID::SourceContext* unsafe_arena_release_source_context(); - - // .google.protobuf.Syntax syntax = 7; - void clear_syntax(); - ::PROTOBUF_NAMESPACE_ID::Syntax syntax() const; - void set_syntax(::PROTOBUF_NAMESPACE_ID::Syntax value); - private: - ::PROTOBUF_NAMESPACE_ID::Syntax _internal_syntax() const; - void _internal_set_syntax(::PROTOBUF_NAMESPACE_ID::Syntax value); - public: - - // @@protoc_insertion_point(class_scope:google.protobuf.Api) - private: - class _Internal; - - template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper; - typedef void InternalArenaConstructable_; - typedef void DestructorSkippable_; - struct Impl_ { - ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::Method > methods_; - ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::Option > options_; - ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::Mixin > mixins_; - ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr name_; - ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr version_; - ::PROTOBUF_NAMESPACE_ID::SourceContext* source_context_; - int syntax_; - mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_; - }; - union { Impl_ _impl_; }; - friend struct ::TableStruct_google_2fprotobuf_2fapi_2eproto; -}; -// ------------------------------------------------------------------- - -class PROTOBUF_EXPORT Method final : - public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:google.protobuf.Method) */ { - public: - inline Method() : Method(nullptr) {} - ~Method() override; - explicit PROTOBUF_CONSTEXPR Method(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized); - - Method(const Method& from); - Method(Method&& from) noexcept - : Method() { - *this = ::std::move(from); - } - - inline Method& operator=(const Method& from) { - CopyFrom(from); - return *this; - } - inline Method& operator=(Method&& from) noexcept { - if (this == &from) return *this; - if (GetOwningArena() == from.GetOwningArena() - #ifdef PROTOBUF_FORCE_COPY_IN_MOVE - && GetOwningArena() != nullptr - #endif // !PROTOBUF_FORCE_COPY_IN_MOVE - ) { - InternalSwap(&from); - } else { - CopyFrom(from); - } - return *this; - } - - static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() { - return GetDescriptor(); - } - static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() { - return default_instance().GetMetadata().descriptor; - } - static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() { - return default_instance().GetMetadata().reflection; - } - static const Method& default_instance() { - return *internal_default_instance(); - } - static inline const Method* internal_default_instance() { - return reinterpret_cast<const Method*>( - &_Method_default_instance_); - } - static constexpr int kIndexInFileMessages = - 1; - - friend void swap(Method& a, Method& b) { - a.Swap(&b); - } - inline void Swap(Method* other) { - if (other == this) return; - #ifdef PROTOBUF_FORCE_COPY_IN_SWAP - if (GetOwningArena() != nullptr && - GetOwningArena() == other->GetOwningArena()) { - #else // PROTOBUF_FORCE_COPY_IN_SWAP - if (GetOwningArena() == other->GetOwningArena()) { - #endif // !PROTOBUF_FORCE_COPY_IN_SWAP - InternalSwap(other); - } else { - ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other); - } - } - void UnsafeArenaSwap(Method* other) { - if (other == this) return; - GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena()); - InternalSwap(other); - } - - // implements Message ---------------------------------------------- - - Method* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final { - return CreateMaybeMessage<Method>(arena); - } - using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom; - void CopyFrom(const Method& from); - using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom; - void MergeFrom( const Method& from) { - Method::MergeImpl(*this, from); - } - private: - static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message& to_msg, const ::PROTOBUF_NAMESPACE_ID::Message& from_msg); - public: - PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final; - bool IsInitialized() const final; - - size_t ByteSizeLong() const final; - const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final; - uint8_t* _InternalSerialize( - uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final; - int GetCachedSize() const final { return _impl_._cached_size_.Get(); } - - private: - void SharedCtor(::PROTOBUF_NAMESPACE_ID::Arena* arena, bool is_message_owned); - void SharedDtor(); - void SetCachedSize(int size) const final; - void InternalSwap(Method* other); - - private: - friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata; - static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() { - return "google.protobuf.Method"; - } - protected: - explicit Method(::PROTOBUF_NAMESPACE_ID::Arena* arena, - bool is_message_owned = false); - public: - - static const ClassData _class_data_; - const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final; - - ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final; - - // nested types ---------------------------------------------------- - - // accessors ------------------------------------------------------- - - enum : int { - kOptionsFieldNumber = 6, - kNameFieldNumber = 1, - kRequestTypeUrlFieldNumber = 2, - kResponseTypeUrlFieldNumber = 4, - kRequestStreamingFieldNumber = 3, - kResponseStreamingFieldNumber = 5, - kSyntaxFieldNumber = 7, - }; - // repeated .google.protobuf.Option options = 6; - int options_size() const; - private: - int _internal_options_size() const; - public: - void clear_options(); - ::PROTOBUF_NAMESPACE_ID::Option* mutable_options(int index); - ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::Option >* - mutable_options(); - private: - const ::PROTOBUF_NAMESPACE_ID::Option& _internal_options(int index) const; - ::PROTOBUF_NAMESPACE_ID::Option* _internal_add_options(); - public: - const ::PROTOBUF_NAMESPACE_ID::Option& options(int index) const; - ::PROTOBUF_NAMESPACE_ID::Option* add_options(); - const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::Option >& - options() const; - - // string name = 1; - void clear_name(); - const std::string& name() const; - template <typename ArgT0 = const std::string&, typename... ArgT> - void set_name(ArgT0&& arg0, ArgT... args); - std::string* mutable_name(); - PROTOBUF_NODISCARD std::string* release_name(); - void set_allocated_name(std::string* name); - private: - const std::string& _internal_name() const; - inline PROTOBUF_ALWAYS_INLINE void _internal_set_name(const std::string& value); - std::string* _internal_mutable_name(); - public: - - // string request_type_url = 2; - void clear_request_type_url(); - const std::string& request_type_url() const; - template <typename ArgT0 = const std::string&, typename... ArgT> - void set_request_type_url(ArgT0&& arg0, ArgT... args); - std::string* mutable_request_type_url(); - PROTOBUF_NODISCARD std::string* release_request_type_url(); - void set_allocated_request_type_url(std::string* request_type_url); - private: - const std::string& _internal_request_type_url() const; - inline PROTOBUF_ALWAYS_INLINE void _internal_set_request_type_url(const std::string& value); - std::string* _internal_mutable_request_type_url(); - public: - - // string response_type_url = 4; - void clear_response_type_url(); - const std::string& response_type_url() const; - template <typename ArgT0 = const std::string&, typename... ArgT> - void set_response_type_url(ArgT0&& arg0, ArgT... args); - std::string* mutable_response_type_url(); - PROTOBUF_NODISCARD std::string* release_response_type_url(); - void set_allocated_response_type_url(std::string* response_type_url); - private: - const std::string& _internal_response_type_url() const; - inline PROTOBUF_ALWAYS_INLINE void _internal_set_response_type_url(const std::string& value); - std::string* _internal_mutable_response_type_url(); - public: - - // bool request_streaming = 3; - void clear_request_streaming(); - bool request_streaming() const; - void set_request_streaming(bool value); - private: - bool _internal_request_streaming() const; - void _internal_set_request_streaming(bool value); - public: - - // bool response_streaming = 5; - void clear_response_streaming(); - bool response_streaming() const; - void set_response_streaming(bool value); - private: - bool _internal_response_streaming() const; - void _internal_set_response_streaming(bool value); - public: - - // .google.protobuf.Syntax syntax = 7; - void clear_syntax(); - ::PROTOBUF_NAMESPACE_ID::Syntax syntax() const; - void set_syntax(::PROTOBUF_NAMESPACE_ID::Syntax value); - private: - ::PROTOBUF_NAMESPACE_ID::Syntax _internal_syntax() const; - void _internal_set_syntax(::PROTOBUF_NAMESPACE_ID::Syntax value); - public: - - // @@protoc_insertion_point(class_scope:google.protobuf.Method) - private: - class _Internal; - - template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper; - typedef void InternalArenaConstructable_; - typedef void DestructorSkippable_; - struct Impl_ { - ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::Option > options_; - ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr name_; - ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr request_type_url_; - ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr response_type_url_; - bool request_streaming_; - bool response_streaming_; - int syntax_; - mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_; - }; - union { Impl_ _impl_; }; - friend struct ::TableStruct_google_2fprotobuf_2fapi_2eproto; -}; -// ------------------------------------------------------------------- - -class PROTOBUF_EXPORT Mixin final : - public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:google.protobuf.Mixin) */ { - public: - inline Mixin() : Mixin(nullptr) {} - ~Mixin() override; - explicit PROTOBUF_CONSTEXPR Mixin(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized); - - Mixin(const Mixin& from); - Mixin(Mixin&& from) noexcept - : Mixin() { - *this = ::std::move(from); - } - - inline Mixin& operator=(const Mixin& from) { - CopyFrom(from); - return *this; - } - inline Mixin& operator=(Mixin&& from) noexcept { - if (this == &from) return *this; - if (GetOwningArena() == from.GetOwningArena() - #ifdef PROTOBUF_FORCE_COPY_IN_MOVE - && GetOwningArena() != nullptr - #endif // !PROTOBUF_FORCE_COPY_IN_MOVE - ) { - InternalSwap(&from); - } else { - CopyFrom(from); - } - return *this; - } - - static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() { - return GetDescriptor(); - } - static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() { - return default_instance().GetMetadata().descriptor; - } - static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() { - return default_instance().GetMetadata().reflection; - } - static const Mixin& default_instance() { - return *internal_default_instance(); - } - static inline const Mixin* internal_default_instance() { - return reinterpret_cast<const Mixin*>( - &_Mixin_default_instance_); - } - static constexpr int kIndexInFileMessages = - 2; - - friend void swap(Mixin& a, Mixin& b) { - a.Swap(&b); - } - inline void Swap(Mixin* other) { - if (other == this) return; - #ifdef PROTOBUF_FORCE_COPY_IN_SWAP - if (GetOwningArena() != nullptr && - GetOwningArena() == other->GetOwningArena()) { - #else // PROTOBUF_FORCE_COPY_IN_SWAP - if (GetOwningArena() == other->GetOwningArena()) { - #endif // !PROTOBUF_FORCE_COPY_IN_SWAP - InternalSwap(other); - } else { - ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other); - } - } - void UnsafeArenaSwap(Mixin* other) { - if (other == this) return; - GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena()); - InternalSwap(other); - } - - // implements Message ---------------------------------------------- - - Mixin* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final { - return CreateMaybeMessage<Mixin>(arena); - } - using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom; - void CopyFrom(const Mixin& from); - using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom; - void MergeFrom( const Mixin& from) { - Mixin::MergeImpl(*this, from); - } - private: - static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message& to_msg, const ::PROTOBUF_NAMESPACE_ID::Message& from_msg); - public: - PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final; - bool IsInitialized() const final; - - size_t ByteSizeLong() const final; - const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final; - uint8_t* _InternalSerialize( - uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final; - int GetCachedSize() const final { return _impl_._cached_size_.Get(); } - - private: - void SharedCtor(::PROTOBUF_NAMESPACE_ID::Arena* arena, bool is_message_owned); - void SharedDtor(); - void SetCachedSize(int size) const final; - void InternalSwap(Mixin* other); - - private: - friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata; - static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() { - return "google.protobuf.Mixin"; - } - protected: - explicit Mixin(::PROTOBUF_NAMESPACE_ID::Arena* arena, - bool is_message_owned = false); - public: - - static const ClassData _class_data_; - const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final; - - ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final; - - // nested types ---------------------------------------------------- - - // accessors ------------------------------------------------------- - - enum : int { - kNameFieldNumber = 1, - kRootFieldNumber = 2, - }; - // string name = 1; - void clear_name(); - const std::string& name() const; - template <typename ArgT0 = const std::string&, typename... ArgT> - void set_name(ArgT0&& arg0, ArgT... args); - std::string* mutable_name(); - PROTOBUF_NODISCARD std::string* release_name(); - void set_allocated_name(std::string* name); - private: - const std::string& _internal_name() const; - inline PROTOBUF_ALWAYS_INLINE void _internal_set_name(const std::string& value); - std::string* _internal_mutable_name(); - public: - - // string root = 2; - void clear_root(); - const std::string& root() const; - template <typename ArgT0 = const std::string&, typename... ArgT> - void set_root(ArgT0&& arg0, ArgT... args); - std::string* mutable_root(); - PROTOBUF_NODISCARD std::string* release_root(); - void set_allocated_root(std::string* root); - private: - const std::string& _internal_root() const; - inline PROTOBUF_ALWAYS_INLINE void _internal_set_root(const std::string& value); - std::string* _internal_mutable_root(); - public: - - // @@protoc_insertion_point(class_scope:google.protobuf.Mixin) - private: - class _Internal; - - template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper; - typedef void InternalArenaConstructable_; - typedef void DestructorSkippable_; - struct Impl_ { - ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr name_; - ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr root_; - mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_; - }; - union { Impl_ _impl_; }; - friend struct ::TableStruct_google_2fprotobuf_2fapi_2eproto; -}; -// =================================================================== - - -// =================================================================== - -#ifdef __GNUC__ - #pragma GCC diagnostic push - #pragma GCC diagnostic ignored "-Wstrict-aliasing" -#endif // __GNUC__ -// Api - -// string name = 1; -inline void Api::clear_name() { - _impl_.name_.ClearToEmpty(); -} -inline const std::string& Api::name() const { - // @@protoc_insertion_point(field_get:google.protobuf.Api.name) - return _internal_name(); -} -template <typename ArgT0, typename... ArgT> -inline PROTOBUF_ALWAYS_INLINE -void Api::set_name(ArgT0&& arg0, ArgT... args) { - - _impl_.name_.Set(static_cast<ArgT0 &&>(arg0), args..., GetArenaForAllocation()); - // @@protoc_insertion_point(field_set:google.protobuf.Api.name) -} -inline std::string* Api::mutable_name() { - std::string* _s = _internal_mutable_name(); - // @@protoc_insertion_point(field_mutable:google.protobuf.Api.name) - return _s; -} -inline const std::string& Api::_internal_name() const { - return _impl_.name_.Get(); -} -inline void Api::_internal_set_name(const std::string& value) { - - _impl_.name_.Set(value, GetArenaForAllocation()); -} -inline std::string* Api::_internal_mutable_name() { - - return _impl_.name_.Mutable(GetArenaForAllocation()); -} -inline std::string* Api::release_name() { - // @@protoc_insertion_point(field_release:google.protobuf.Api.name) - return _impl_.name_.Release(); -} -inline void Api::set_allocated_name(std::string* name) { - if (name != nullptr) { - - } else { - - } - _impl_.name_.SetAllocated(name, GetArenaForAllocation()); -#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING - if (_impl_.name_.IsDefault()) { - _impl_.name_.Set("", GetArenaForAllocation()); - } -#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING - // @@protoc_insertion_point(field_set_allocated:google.protobuf.Api.name) -} - -// repeated .google.protobuf.Method methods = 2; -inline int Api::_internal_methods_size() const { - return _impl_.methods_.size(); -} -inline int Api::methods_size() const { - return _internal_methods_size(); -} -inline void Api::clear_methods() { - _impl_.methods_.Clear(); -} -inline ::PROTOBUF_NAMESPACE_ID::Method* Api::mutable_methods(int index) { - // @@protoc_insertion_point(field_mutable:google.protobuf.Api.methods) - return _impl_.methods_.Mutable(index); -} -inline ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::Method >* -Api::mutable_methods() { - // @@protoc_insertion_point(field_mutable_list:google.protobuf.Api.methods) - return &_impl_.methods_; -} -inline const ::PROTOBUF_NAMESPACE_ID::Method& Api::_internal_methods(int index) const { - return _impl_.methods_.Get(index); -} -inline const ::PROTOBUF_NAMESPACE_ID::Method& Api::methods(int index) const { - // @@protoc_insertion_point(field_get:google.protobuf.Api.methods) - return _internal_methods(index); -} -inline ::PROTOBUF_NAMESPACE_ID::Method* Api::_internal_add_methods() { - return _impl_.methods_.Add(); -} -inline ::PROTOBUF_NAMESPACE_ID::Method* Api::add_methods() { - ::PROTOBUF_NAMESPACE_ID::Method* _add = _internal_add_methods(); - // @@protoc_insertion_point(field_add:google.protobuf.Api.methods) - return _add; -} -inline const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::Method >& -Api::methods() const { - // @@protoc_insertion_point(field_list:google.protobuf.Api.methods) - return _impl_.methods_; -} - -// repeated .google.protobuf.Option options = 3; -inline int Api::_internal_options_size() const { - return _impl_.options_.size(); -} -inline int Api::options_size() const { - return _internal_options_size(); -} -inline ::PROTOBUF_NAMESPACE_ID::Option* Api::mutable_options(int index) { - // @@protoc_insertion_point(field_mutable:google.protobuf.Api.options) - return _impl_.options_.Mutable(index); -} -inline ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::Option >* -Api::mutable_options() { - // @@protoc_insertion_point(field_mutable_list:google.protobuf.Api.options) - return &_impl_.options_; -} -inline const ::PROTOBUF_NAMESPACE_ID::Option& Api::_internal_options(int index) const { - return _impl_.options_.Get(index); -} -inline const ::PROTOBUF_NAMESPACE_ID::Option& Api::options(int index) const { - // @@protoc_insertion_point(field_get:google.protobuf.Api.options) - return _internal_options(index); -} -inline ::PROTOBUF_NAMESPACE_ID::Option* Api::_internal_add_options() { - return _impl_.options_.Add(); -} -inline ::PROTOBUF_NAMESPACE_ID::Option* Api::add_options() { - ::PROTOBUF_NAMESPACE_ID::Option* _add = _internal_add_options(); - // @@protoc_insertion_point(field_add:google.protobuf.Api.options) - return _add; -} -inline const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::Option >& -Api::options() const { - // @@protoc_insertion_point(field_list:google.protobuf.Api.options) - return _impl_.options_; -} - -// string version = 4; -inline void Api::clear_version() { - _impl_.version_.ClearToEmpty(); -} -inline const std::string& Api::version() const { - // @@protoc_insertion_point(field_get:google.protobuf.Api.version) - return _internal_version(); -} -template <typename ArgT0, typename... ArgT> -inline PROTOBUF_ALWAYS_INLINE -void Api::set_version(ArgT0&& arg0, ArgT... args) { - - _impl_.version_.Set(static_cast<ArgT0 &&>(arg0), args..., GetArenaForAllocation()); - // @@protoc_insertion_point(field_set:google.protobuf.Api.version) -} -inline std::string* Api::mutable_version() { - std::string* _s = _internal_mutable_version(); - // @@protoc_insertion_point(field_mutable:google.protobuf.Api.version) - return _s; -} -inline const std::string& Api::_internal_version() const { - return _impl_.version_.Get(); -} -inline void Api::_internal_set_version(const std::string& value) { - - _impl_.version_.Set(value, GetArenaForAllocation()); -} -inline std::string* Api::_internal_mutable_version() { - - return _impl_.version_.Mutable(GetArenaForAllocation()); -} -inline std::string* Api::release_version() { - // @@protoc_insertion_point(field_release:google.protobuf.Api.version) - return _impl_.version_.Release(); -} -inline void Api::set_allocated_version(std::string* version) { - if (version != nullptr) { - - } else { - - } - _impl_.version_.SetAllocated(version, GetArenaForAllocation()); -#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING - if (_impl_.version_.IsDefault()) { - _impl_.version_.Set("", GetArenaForAllocation()); - } -#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING - // @@protoc_insertion_point(field_set_allocated:google.protobuf.Api.version) -} - -// .google.protobuf.SourceContext source_context = 5; -inline bool Api::_internal_has_source_context() const { - return this != internal_default_instance() && _impl_.source_context_ != nullptr; -} -inline bool Api::has_source_context() const { - return _internal_has_source_context(); -} -inline const ::PROTOBUF_NAMESPACE_ID::SourceContext& Api::_internal_source_context() const { - const ::PROTOBUF_NAMESPACE_ID::SourceContext* p = _impl_.source_context_; - return p != nullptr ? *p : reinterpret_cast<const ::PROTOBUF_NAMESPACE_ID::SourceContext&>( - ::PROTOBUF_NAMESPACE_ID::_SourceContext_default_instance_); -} -inline const ::PROTOBUF_NAMESPACE_ID::SourceContext& Api::source_context() const { - // @@protoc_insertion_point(field_get:google.protobuf.Api.source_context) - return _internal_source_context(); -} -inline void Api::unsafe_arena_set_allocated_source_context( - ::PROTOBUF_NAMESPACE_ID::SourceContext* source_context) { - if (GetArenaForAllocation() == nullptr) { - delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(_impl_.source_context_); - } - _impl_.source_context_ = source_context; - if (source_context) { - - } else { - - } - // @@protoc_insertion_point(field_unsafe_arena_set_allocated:google.protobuf.Api.source_context) -} -inline ::PROTOBUF_NAMESPACE_ID::SourceContext* Api::release_source_context() { - - ::PROTOBUF_NAMESPACE_ID::SourceContext* temp = _impl_.source_context_; - _impl_.source_context_ = nullptr; -#ifdef PROTOBUF_FORCE_COPY_IN_RELEASE - auto* old = reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(temp); - temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp); - if (GetArenaForAllocation() == nullptr) { delete old; } -#else // PROTOBUF_FORCE_COPY_IN_RELEASE - if (GetArenaForAllocation() != nullptr) { - temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp); - } -#endif // !PROTOBUF_FORCE_COPY_IN_RELEASE - return temp; -} -inline ::PROTOBUF_NAMESPACE_ID::SourceContext* Api::unsafe_arena_release_source_context() { - // @@protoc_insertion_point(field_release:google.protobuf.Api.source_context) - - ::PROTOBUF_NAMESPACE_ID::SourceContext* temp = _impl_.source_context_; - _impl_.source_context_ = nullptr; - return temp; -} -inline ::PROTOBUF_NAMESPACE_ID::SourceContext* Api::_internal_mutable_source_context() { - - if (_impl_.source_context_ == nullptr) { - auto* p = CreateMaybeMessage<::PROTOBUF_NAMESPACE_ID::SourceContext>(GetArenaForAllocation()); - _impl_.source_context_ = p; - } - return _impl_.source_context_; -} -inline ::PROTOBUF_NAMESPACE_ID::SourceContext* Api::mutable_source_context() { - ::PROTOBUF_NAMESPACE_ID::SourceContext* _msg = _internal_mutable_source_context(); - // @@protoc_insertion_point(field_mutable:google.protobuf.Api.source_context) - return _msg; -} -inline void Api::set_allocated_source_context(::PROTOBUF_NAMESPACE_ID::SourceContext* source_context) { - ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation(); - if (message_arena == nullptr) { - delete reinterpret_cast< ::PROTOBUF_NAMESPACE_ID::MessageLite*>(_impl_.source_context_); - } - if (source_context) { - ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena = - ::PROTOBUF_NAMESPACE_ID::Arena::InternalGetOwningArena( - reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(source_context)); - if (message_arena != submessage_arena) { - source_context = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage( - message_arena, source_context, submessage_arena); - } - - } else { - - } - _impl_.source_context_ = source_context; - // @@protoc_insertion_point(field_set_allocated:google.protobuf.Api.source_context) -} - -// repeated .google.protobuf.Mixin mixins = 6; -inline int Api::_internal_mixins_size() const { - return _impl_.mixins_.size(); -} -inline int Api::mixins_size() const { - return _internal_mixins_size(); -} -inline void Api::clear_mixins() { - _impl_.mixins_.Clear(); -} -inline ::PROTOBUF_NAMESPACE_ID::Mixin* Api::mutable_mixins(int index) { - // @@protoc_insertion_point(field_mutable:google.protobuf.Api.mixins) - return _impl_.mixins_.Mutable(index); -} -inline ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::Mixin >* -Api::mutable_mixins() { - // @@protoc_insertion_point(field_mutable_list:google.protobuf.Api.mixins) - return &_impl_.mixins_; -} -inline const ::PROTOBUF_NAMESPACE_ID::Mixin& Api::_internal_mixins(int index) const { - return _impl_.mixins_.Get(index); -} -inline const ::PROTOBUF_NAMESPACE_ID::Mixin& Api::mixins(int index) const { - // @@protoc_insertion_point(field_get:google.protobuf.Api.mixins) - return _internal_mixins(index); -} -inline ::PROTOBUF_NAMESPACE_ID::Mixin* Api::_internal_add_mixins() { - return _impl_.mixins_.Add(); -} -inline ::PROTOBUF_NAMESPACE_ID::Mixin* Api::add_mixins() { - ::PROTOBUF_NAMESPACE_ID::Mixin* _add = _internal_add_mixins(); - // @@protoc_insertion_point(field_add:google.protobuf.Api.mixins) - return _add; -} -inline const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::Mixin >& -Api::mixins() const { - // @@protoc_insertion_point(field_list:google.protobuf.Api.mixins) - return _impl_.mixins_; -} - -// .google.protobuf.Syntax syntax = 7; -inline void Api::clear_syntax() { - _impl_.syntax_ = 0; -} -inline ::PROTOBUF_NAMESPACE_ID::Syntax Api::_internal_syntax() const { - return static_cast< ::PROTOBUF_NAMESPACE_ID::Syntax >(_impl_.syntax_); -} -inline ::PROTOBUF_NAMESPACE_ID::Syntax Api::syntax() const { - // @@protoc_insertion_point(field_get:google.protobuf.Api.syntax) - return _internal_syntax(); -} -inline void Api::_internal_set_syntax(::PROTOBUF_NAMESPACE_ID::Syntax value) { - - _impl_.syntax_ = value; -} -inline void Api::set_syntax(::PROTOBUF_NAMESPACE_ID::Syntax value) { - _internal_set_syntax(value); - // @@protoc_insertion_point(field_set:google.protobuf.Api.syntax) -} - -// ------------------------------------------------------------------- - -// Method - -// string name = 1; -inline void Method::clear_name() { - _impl_.name_.ClearToEmpty(); -} -inline const std::string& Method::name() const { - // @@protoc_insertion_point(field_get:google.protobuf.Method.name) - return _internal_name(); -} -template <typename ArgT0, typename... ArgT> -inline PROTOBUF_ALWAYS_INLINE -void Method::set_name(ArgT0&& arg0, ArgT... args) { - - _impl_.name_.Set(static_cast<ArgT0 &&>(arg0), args..., GetArenaForAllocation()); - // @@protoc_insertion_point(field_set:google.protobuf.Method.name) -} -inline std::string* Method::mutable_name() { - std::string* _s = _internal_mutable_name(); - // @@protoc_insertion_point(field_mutable:google.protobuf.Method.name) - return _s; -} -inline const std::string& Method::_internal_name() const { - return _impl_.name_.Get(); -} -inline void Method::_internal_set_name(const std::string& value) { - - _impl_.name_.Set(value, GetArenaForAllocation()); -} -inline std::string* Method::_internal_mutable_name() { - - return _impl_.name_.Mutable(GetArenaForAllocation()); -} -inline std::string* Method::release_name() { - // @@protoc_insertion_point(field_release:google.protobuf.Method.name) - return _impl_.name_.Release(); -} -inline void Method::set_allocated_name(std::string* name) { - if (name != nullptr) { - - } else { - - } - _impl_.name_.SetAllocated(name, GetArenaForAllocation()); -#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING - if (_impl_.name_.IsDefault()) { - _impl_.name_.Set("", GetArenaForAllocation()); - } -#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING - // @@protoc_insertion_point(field_set_allocated:google.protobuf.Method.name) -} - -// string request_type_url = 2; -inline void Method::clear_request_type_url() { - _impl_.request_type_url_.ClearToEmpty(); -} -inline const std::string& Method::request_type_url() const { - // @@protoc_insertion_point(field_get:google.protobuf.Method.request_type_url) - return _internal_request_type_url(); -} -template <typename ArgT0, typename... ArgT> -inline PROTOBUF_ALWAYS_INLINE -void Method::set_request_type_url(ArgT0&& arg0, ArgT... args) { - - _impl_.request_type_url_.Set(static_cast<ArgT0 &&>(arg0), args..., GetArenaForAllocation()); - // @@protoc_insertion_point(field_set:google.protobuf.Method.request_type_url) -} -inline std::string* Method::mutable_request_type_url() { - std::string* _s = _internal_mutable_request_type_url(); - // @@protoc_insertion_point(field_mutable:google.protobuf.Method.request_type_url) - return _s; -} -inline const std::string& Method::_internal_request_type_url() const { - return _impl_.request_type_url_.Get(); -} -inline void Method::_internal_set_request_type_url(const std::string& value) { - - _impl_.request_type_url_.Set(value, GetArenaForAllocation()); -} -inline std::string* Method::_internal_mutable_request_type_url() { - - return _impl_.request_type_url_.Mutable(GetArenaForAllocation()); -} -inline std::string* Method::release_request_type_url() { - // @@protoc_insertion_point(field_release:google.protobuf.Method.request_type_url) - return _impl_.request_type_url_.Release(); -} -inline void Method::set_allocated_request_type_url(std::string* request_type_url) { - if (request_type_url != nullptr) { - - } else { - - } - _impl_.request_type_url_.SetAllocated(request_type_url, GetArenaForAllocation()); -#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING - if (_impl_.request_type_url_.IsDefault()) { - _impl_.request_type_url_.Set("", GetArenaForAllocation()); - } -#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING - // @@protoc_insertion_point(field_set_allocated:google.protobuf.Method.request_type_url) -} - -// bool request_streaming = 3; -inline void Method::clear_request_streaming() { - _impl_.request_streaming_ = false; -} -inline bool Method::_internal_request_streaming() const { - return _impl_.request_streaming_; -} -inline bool Method::request_streaming() const { - // @@protoc_insertion_point(field_get:google.protobuf.Method.request_streaming) - return _internal_request_streaming(); -} -inline void Method::_internal_set_request_streaming(bool value) { - - _impl_.request_streaming_ = value; -} -inline void Method::set_request_streaming(bool value) { - _internal_set_request_streaming(value); - // @@protoc_insertion_point(field_set:google.protobuf.Method.request_streaming) -} - -// string response_type_url = 4; -inline void Method::clear_response_type_url() { - _impl_.response_type_url_.ClearToEmpty(); -} -inline const std::string& Method::response_type_url() const { - // @@protoc_insertion_point(field_get:google.protobuf.Method.response_type_url) - return _internal_response_type_url(); -} -template <typename ArgT0, typename... ArgT> -inline PROTOBUF_ALWAYS_INLINE -void Method::set_response_type_url(ArgT0&& arg0, ArgT... args) { - - _impl_.response_type_url_.Set(static_cast<ArgT0 &&>(arg0), args..., GetArenaForAllocation()); - // @@protoc_insertion_point(field_set:google.protobuf.Method.response_type_url) -} -inline std::string* Method::mutable_response_type_url() { - std::string* _s = _internal_mutable_response_type_url(); - // @@protoc_insertion_point(field_mutable:google.protobuf.Method.response_type_url) - return _s; -} -inline const std::string& Method::_internal_response_type_url() const { - return _impl_.response_type_url_.Get(); -} -inline void Method::_internal_set_response_type_url(const std::string& value) { - - _impl_.response_type_url_.Set(value, GetArenaForAllocation()); -} -inline std::string* Method::_internal_mutable_response_type_url() { - - return _impl_.response_type_url_.Mutable(GetArenaForAllocation()); -} -inline std::string* Method::release_response_type_url() { - // @@protoc_insertion_point(field_release:google.protobuf.Method.response_type_url) - return _impl_.response_type_url_.Release(); -} -inline void Method::set_allocated_response_type_url(std::string* response_type_url) { - if (response_type_url != nullptr) { - - } else { - - } - _impl_.response_type_url_.SetAllocated(response_type_url, GetArenaForAllocation()); -#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING - if (_impl_.response_type_url_.IsDefault()) { - _impl_.response_type_url_.Set("", GetArenaForAllocation()); - } -#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING - // @@protoc_insertion_point(field_set_allocated:google.protobuf.Method.response_type_url) -} - -// bool response_streaming = 5; -inline void Method::clear_response_streaming() { - _impl_.response_streaming_ = false; -} -inline bool Method::_internal_response_streaming() const { - return _impl_.response_streaming_; -} -inline bool Method::response_streaming() const { - // @@protoc_insertion_point(field_get:google.protobuf.Method.response_streaming) - return _internal_response_streaming(); -} -inline void Method::_internal_set_response_streaming(bool value) { - - _impl_.response_streaming_ = value; -} -inline void Method::set_response_streaming(bool value) { - _internal_set_response_streaming(value); - // @@protoc_insertion_point(field_set:google.protobuf.Method.response_streaming) -} - -// repeated .google.protobuf.Option options = 6; -inline int Method::_internal_options_size() const { - return _impl_.options_.size(); -} -inline int Method::options_size() const { - return _internal_options_size(); -} -inline ::PROTOBUF_NAMESPACE_ID::Option* Method::mutable_options(int index) { - // @@protoc_insertion_point(field_mutable:google.protobuf.Method.options) - return _impl_.options_.Mutable(index); -} -inline ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::Option >* -Method::mutable_options() { - // @@protoc_insertion_point(field_mutable_list:google.protobuf.Method.options) - return &_impl_.options_; -} -inline const ::PROTOBUF_NAMESPACE_ID::Option& Method::_internal_options(int index) const { - return _impl_.options_.Get(index); -} -inline const ::PROTOBUF_NAMESPACE_ID::Option& Method::options(int index) const { - // @@protoc_insertion_point(field_get:google.protobuf.Method.options) - return _internal_options(index); -} -inline ::PROTOBUF_NAMESPACE_ID::Option* Method::_internal_add_options() { - return _impl_.options_.Add(); -} -inline ::PROTOBUF_NAMESPACE_ID::Option* Method::add_options() { - ::PROTOBUF_NAMESPACE_ID::Option* _add = _internal_add_options(); - // @@protoc_insertion_point(field_add:google.protobuf.Method.options) - return _add; -} -inline const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::Option >& -Method::options() const { - // @@protoc_insertion_point(field_list:google.protobuf.Method.options) - return _impl_.options_; -} - -// .google.protobuf.Syntax syntax = 7; -inline void Method::clear_syntax() { - _impl_.syntax_ = 0; -} -inline ::PROTOBUF_NAMESPACE_ID::Syntax Method::_internal_syntax() const { - return static_cast< ::PROTOBUF_NAMESPACE_ID::Syntax >(_impl_.syntax_); -} -inline ::PROTOBUF_NAMESPACE_ID::Syntax Method::syntax() const { - // @@protoc_insertion_point(field_get:google.protobuf.Method.syntax) - return _internal_syntax(); -} -inline void Method::_internal_set_syntax(::PROTOBUF_NAMESPACE_ID::Syntax value) { - - _impl_.syntax_ = value; -} -inline void Method::set_syntax(::PROTOBUF_NAMESPACE_ID::Syntax value) { - _internal_set_syntax(value); - // @@protoc_insertion_point(field_set:google.protobuf.Method.syntax) -} - -// ------------------------------------------------------------------- - -// Mixin - -// string name = 1; -inline void Mixin::clear_name() { - _impl_.name_.ClearToEmpty(); -} -inline const std::string& Mixin::name() const { - // @@protoc_insertion_point(field_get:google.protobuf.Mixin.name) - return _internal_name(); -} -template <typename ArgT0, typename... ArgT> -inline PROTOBUF_ALWAYS_INLINE -void Mixin::set_name(ArgT0&& arg0, ArgT... args) { - - _impl_.name_.Set(static_cast<ArgT0 &&>(arg0), args..., GetArenaForAllocation()); - // @@protoc_insertion_point(field_set:google.protobuf.Mixin.name) -} -inline std::string* Mixin::mutable_name() { - std::string* _s = _internal_mutable_name(); - // @@protoc_insertion_point(field_mutable:google.protobuf.Mixin.name) - return _s; -} -inline const std::string& Mixin::_internal_name() const { - return _impl_.name_.Get(); -} -inline void Mixin::_internal_set_name(const std::string& value) { - - _impl_.name_.Set(value, GetArenaForAllocation()); -} -inline std::string* Mixin::_internal_mutable_name() { - - return _impl_.name_.Mutable(GetArenaForAllocation()); -} -inline std::string* Mixin::release_name() { - // @@protoc_insertion_point(field_release:google.protobuf.Mixin.name) - return _impl_.name_.Release(); -} -inline void Mixin::set_allocated_name(std::string* name) { - if (name != nullptr) { - - } else { - - } - _impl_.name_.SetAllocated(name, GetArenaForAllocation()); -#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING - if (_impl_.name_.IsDefault()) { - _impl_.name_.Set("", GetArenaForAllocation()); - } -#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING - // @@protoc_insertion_point(field_set_allocated:google.protobuf.Mixin.name) -} - -// string root = 2; -inline void Mixin::clear_root() { - _impl_.root_.ClearToEmpty(); -} -inline const std::string& Mixin::root() const { - // @@protoc_insertion_point(field_get:google.protobuf.Mixin.root) - return _internal_root(); -} -template <typename ArgT0, typename... ArgT> -inline PROTOBUF_ALWAYS_INLINE -void Mixin::set_root(ArgT0&& arg0, ArgT... args) { - - _impl_.root_.Set(static_cast<ArgT0 &&>(arg0), args..., GetArenaForAllocation()); - // @@protoc_insertion_point(field_set:google.protobuf.Mixin.root) -} -inline std::string* Mixin::mutable_root() { - std::string* _s = _internal_mutable_root(); - // @@protoc_insertion_point(field_mutable:google.protobuf.Mixin.root) - return _s; -} -inline const std::string& Mixin::_internal_root() const { - return _impl_.root_.Get(); -} -inline void Mixin::_internal_set_root(const std::string& value) { - - _impl_.root_.Set(value, GetArenaForAllocation()); -} -inline std::string* Mixin::_internal_mutable_root() { - - return _impl_.root_.Mutable(GetArenaForAllocation()); -} -inline std::string* Mixin::release_root() { - // @@protoc_insertion_point(field_release:google.protobuf.Mixin.root) - return _impl_.root_.Release(); -} -inline void Mixin::set_allocated_root(std::string* root) { - if (root != nullptr) { - - } else { - - } - _impl_.root_.SetAllocated(root, GetArenaForAllocation()); -#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING - if (_impl_.root_.IsDefault()) { - _impl_.root_.Set("", GetArenaForAllocation()); - } -#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING - // @@protoc_insertion_point(field_set_allocated:google.protobuf.Mixin.root) -} - -#ifdef __GNUC__ - #pragma GCC diagnostic pop -#endif // __GNUC__ -// ------------------------------------------------------------------- - -// ------------------------------------------------------------------- - - -// @@protoc_insertion_point(namespace_scope) - -PROTOBUF_NAMESPACE_CLOSE - -// @@protoc_insertion_point(global_scope) - -#include <google/protobuf/port_undef.inc> -#endif // GOOGLE_PROTOBUF_INCLUDED_GOOGLE_PROTOBUF_INCLUDED_google_2fprotobuf_2fapi_2eproto diff --git a/include/google/protobuf/api.proto b/include/google/protobuf/api.proto deleted file mode 100644 index 3d598fc859..0000000000 --- a/include/google/protobuf/api.proto +++ /dev/null @@ -1,208 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// 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 -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -syntax = "proto3"; - -package google.protobuf; - -import "google/protobuf/source_context.proto"; -import "google/protobuf/type.proto"; - -option csharp_namespace = "Google.Protobuf.WellKnownTypes"; -option java_package = "com.google.protobuf"; -option java_outer_classname = "ApiProto"; -option java_multiple_files = true; -option objc_class_prefix = "GPB"; -option go_package = "google.golang.org/protobuf/types/known/apipb"; - -// Api is a light-weight descriptor for an API Interface. -// -// Interfaces are also described as "protocol buffer services" in some contexts, -// such as by the "service" keyword in a .proto file, but they are different -// from API Services, which represent a concrete implementation of an interface -// as opposed to simply a description of methods and bindings. They are also -// sometimes simply referred to as "APIs" in other contexts, such as the name of -// this message itself. See https://cloud.google.com/apis/design/glossary for -// detailed terminology. -message Api { - // The fully qualified name of this interface, including package name - // followed by the interface's simple name. - string name = 1; - - // The methods of this interface, in unspecified order. - repeated Method methods = 2; - - // Any metadata attached to the interface. - repeated Option options = 3; - - // A version string for this interface. If specified, must have the form - // `major-version.minor-version`, as in `1.10`. If the minor version is - // omitted, it defaults to zero. If the entire version field is empty, the - // major version is derived from the package name, as outlined below. If the - // field is not empty, the version in the package name will be verified to be - // consistent with what is provided here. - // - // The versioning schema uses [semantic - // versioning](http://semver.org) where the major version number - // indicates a breaking change and the minor version an additive, - // non-breaking change. Both version numbers are signals to users - // what to expect from different versions, and should be carefully - // chosen based on the product plan. - // - // The major version is also reflected in the package name of the - // interface, which must end in `v<major-version>`, as in - // `google.feature.v1`. For major versions 0 and 1, the suffix can - // be omitted. Zero major versions must only be used for - // experimental, non-GA interfaces. - // - // - string version = 4; - - // Source context for the protocol buffer service represented by this - // message. - SourceContext source_context = 5; - - // Included interfaces. See [Mixin][]. - repeated Mixin mixins = 6; - - // The source syntax of the service. - Syntax syntax = 7; -} - -// Method represents a method of an API interface. -message Method { - // The simple name of this method. - string name = 1; - - // A URL of the input message type. - string request_type_url = 2; - - // If true, the request is streamed. - bool request_streaming = 3; - - // The URL of the output message type. - string response_type_url = 4; - - // If true, the response is streamed. - bool response_streaming = 5; - - // Any metadata attached to the method. - repeated Option options = 6; - - // The source syntax of this method. - Syntax syntax = 7; -} - -// Declares an API Interface to be included in this interface. The including -// interface must redeclare all the methods from the included interface, but -// documentation and options are inherited as follows: -// -// - If after comment and whitespace stripping, the documentation -// string of the redeclared method is empty, it will be inherited -// from the original method. -// -// - Each annotation belonging to the service config (http, -// visibility) which is not set in the redeclared method will be -// inherited. -// -// - If an http annotation is inherited, the path pattern will be -// modified as follows. Any version prefix will be replaced by the -// version of the including interface plus the [root][] path if -// specified. -// -// Example of a simple mixin: -// -// package google.acl.v1; -// service AccessControl { -// // Get the underlying ACL object. -// rpc GetAcl(GetAclRequest) returns (Acl) { -// option (google.api.http).get = "/v1/{resource=**}:getAcl"; -// } -// } -// -// package google.storage.v2; -// service Storage { -// rpc GetAcl(GetAclRequest) returns (Acl); -// -// // Get a data record. -// rpc GetData(GetDataRequest) returns (Data) { -// option (google.api.http).get = "/v2/{resource=**}"; -// } -// } -// -// Example of a mixin configuration: -// -// apis: -// - name: google.storage.v2.Storage -// mixins: -// - name: google.acl.v1.AccessControl -// -// The mixin construct implies that all methods in `AccessControl` are -// also declared with same name and request/response types in -// `Storage`. A documentation generator or annotation processor will -// see the effective `Storage.GetAcl` method after inheriting -// documentation and annotations as follows: -// -// service Storage { -// // Get the underlying ACL object. -// rpc GetAcl(GetAclRequest) returns (Acl) { -// option (google.api.http).get = "/v2/{resource=**}:getAcl"; -// } -// ... -// } -// -// Note how the version in the path pattern changed from `v1` to `v2`. -// -// If the `root` field in the mixin is specified, it should be a -// relative path under which inherited HTTP paths are placed. Example: -// -// apis: -// - name: google.storage.v2.Storage -// mixins: -// - name: google.acl.v1.AccessControl -// root: acls -// -// This implies the following inherited HTTP annotation: -// -// service Storage { -// // Get the underlying ACL object. -// rpc GetAcl(GetAclRequest) returns (Acl) { -// option (google.api.http).get = "/v2/acls/{resource=**}:getAcl"; -// } -// ... -// } -message Mixin { - // The fully qualified name of the interface which is included. - string name = 1; - - // If non-empty specifies a path under which inherited HTTP paths - // are rooted. - string root = 2; -} diff --git a/include/google/protobuf/arena.h b/include/google/protobuf/arena.h deleted file mode 100644 index 3b5f16c389..0000000000 --- a/include/google/protobuf/arena.h +++ /dev/null @@ -1,851 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// 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 -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (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 file defines an Arena allocator for better allocation performance. - -#ifndef GOOGLE_PROTOBUF_ARENA_H__ -#define GOOGLE_PROTOBUF_ARENA_H__ - - -#include <limits> -#include <type_traits> -#include <utility> -#if defined(_MSC_VER) && !defined(_LIBCPP_STD_VER) && !_HAS_EXCEPTIONS -// Work around bugs in MSVC <typeinfo> header when _HAS_EXCEPTIONS=0. -#include <exception> -#include <typeinfo> -namespace std { -using type_info = ::type_info; -} -#else -#include <typeinfo> -#endif - -#include <type_traits> -#include <google/protobuf/arena_impl.h> -#include <google/protobuf/port.h> - -// Must be included last. -#include <google/protobuf/port_def.inc> - -#ifdef SWIG -#error "You cannot SWIG proto headers" -#endif - -namespace google { -namespace protobuf { - -struct ArenaOptions; // defined below -class Arena; // defined below -class Message; // defined in message.h -class MessageLite; -template <typename Key, typename T> -class Map; - -namespace arena_metrics { - -void EnableArenaMetrics(ArenaOptions* options); - -} // namespace arena_metrics - -namespace TestUtil { -class ReflectionTester; // defined in test_util.h -} // namespace TestUtil - -namespace internal { - -struct ArenaTestPeer; // defined in arena_test_util.h -class InternalMetadata; // defined in metadata_lite.h -class LazyField; // defined in lazy_field.h -class EpsCopyInputStream; // defined in parse_context.h -class RepeatedPtrFieldBase; // defined in repeated_ptr_field.h - -template <typename Type> -class GenericTypeHandler; // defined in repeated_field.h - -inline PROTOBUF_ALWAYS_INLINE -void* AlignTo(void* ptr, size_t align) { - return reinterpret_cast<void*>( - (reinterpret_cast<uintptr_t>(ptr) + align - 1) & (~align + 1)); -} - -// Templated cleanup methods. -template <typename T> -void arena_destruct_object(void* object) { - reinterpret_cast<T*>(object)->~T(); -} - -template <bool destructor_skippable, typename T> -struct ObjectDestructor { - constexpr static void (*destructor)(void*) = &arena_destruct_object<T>; -}; - -template <typename T> -struct ObjectDestructor<true, T> { - constexpr static void (*destructor)(void*) = nullptr; -}; - -template <typename T> -void arena_delete_object(void* object) { - delete reinterpret_cast<T*>(object); -} -} // namespace internal - -// ArenaOptions provides optional additional parameters to arena construction -// that control its block-allocation behavior. -struct ArenaOptions { - // This defines the size of the first block requested from the system malloc. - // Subsequent block sizes will increase in a geometric series up to a maximum. - size_t start_block_size; - - // This defines the maximum block size requested from system malloc (unless an - // individual arena allocation request occurs with a size larger than this - // maximum). Requested block sizes increase up to this value, then remain - // here. - size_t max_block_size; - - // An initial block of memory for the arena to use, or NULL for none. If - // provided, the block must live at least as long as the arena itself. The - // creator of the Arena retains ownership of the block after the Arena is - // destroyed. - char* initial_block; - - // The size of the initial block, if provided. - size_t initial_block_size; - - // A function pointer to an alloc method that returns memory blocks of size - // requested. By default, it contains a ptr to the malloc function. - // - // NOTE: block_alloc and dealloc functions are expected to behave like - // malloc and free, including Asan poisoning. - void* (*block_alloc)(size_t); - // A function pointer to a dealloc method that takes ownership of the blocks - // from the arena. By default, it contains a ptr to a wrapper function that - // calls free. - void (*block_dealloc)(void*, size_t); - - ArenaOptions() - : start_block_size(internal::AllocationPolicy::kDefaultStartBlockSize), - max_block_size(internal::AllocationPolicy::kDefaultMaxBlockSize), - initial_block(NULL), - initial_block_size(0), - block_alloc(nullptr), - block_dealloc(nullptr), - make_metrics_collector(nullptr) {} - - private: - // If make_metrics_collector is not nullptr, it will be called at Arena init - // time. It may return a pointer to a collector instance that will be notified - // of interesting events related to the arena. - internal::ArenaMetricsCollector* (*make_metrics_collector)(); - - internal::ArenaMetricsCollector* MetricsCollector() const { - return make_metrics_collector ? (*make_metrics_collector)() : nullptr; - } - - internal::AllocationPolicy AllocationPolicy() const { - internal::AllocationPolicy res; - res.start_block_size = start_block_size; - res.max_block_size = max_block_size; - res.block_alloc = block_alloc; - res.block_dealloc = block_dealloc; - res.metrics_collector = MetricsCollector(); - return res; - } - - friend void arena_metrics::EnableArenaMetrics(ArenaOptions*); - - friend class Arena; - friend class ArenaOptionsTestFriend; -}; - -// Support for non-RTTI environments. (The metrics hooks API uses type -// information.) -#if PROTOBUF_RTTI -#define RTTI_TYPE_ID(type) (&typeid(type)) -#else -#define RTTI_TYPE_ID(type) (NULL) -#endif - -// Arena allocator. Arena allocation replaces ordinary (heap-based) allocation -// with new/delete, and improves performance by aggregating allocations into -// larger blocks and freeing allocations all at once. Protocol messages are -// allocated on an arena by using Arena::CreateMessage<T>(Arena*), below, and -// are automatically freed when the arena is destroyed. -// -// This is a thread-safe implementation: multiple threads may allocate from the -// arena concurrently. Destruction is not thread-safe and the destructing -// thread must synchronize with users of the arena first. -// -// An arena provides two allocation interfaces: CreateMessage<T>, which works -// for arena-enabled proto2 message types as well as other types that satisfy -// the appropriate protocol (described below), and Create<T>, which works for -// any arbitrary type T. CreateMessage<T> is better when the type T supports it, -// because this interface (i) passes the arena pointer to the created object so -// that its sub-objects and internal allocations can use the arena too, and (ii) -// elides the object's destructor call when possible. Create<T> does not place -// any special requirements on the type T, and will invoke the object's -// destructor when the arena is destroyed. -// -// The arena message allocation protocol, required by -// CreateMessage<T>(Arena* arena, Args&&... args), is as follows: -// -// - The type T must have (at least) two constructors: a constructor callable -// with `args` (without `arena`), called when a T is allocated on the heap; -// and a constructor callable with `Arena* arena, Args&&... args`, called when -// a T is allocated on an arena. If the second constructor is called with a -// NULL arena pointer, it must be equivalent to invoking the first -// (`args`-only) constructor. -// -// - The type T must have a particular type trait: a nested type -// |InternalArenaConstructable_|. This is usually a typedef to |void|. If no -// such type trait exists, then the instantiation CreateMessage<T> will fail -// to compile. -// -// - The type T *may* have the type trait |DestructorSkippable_|. If this type -// trait is present in the type, then its destructor will not be called if and -// only if it was passed a non-NULL arena pointer. If this type trait is not -// present on the type, then its destructor is always called when the -// containing arena is destroyed. -// -// This protocol is implemented by all arena-enabled proto2 message classes as -// well as protobuf container types like RepeatedPtrField and Map. The protocol -// is internal to protobuf and is not guaranteed to be stable. Non-proto types -// should not rely on this protocol. -class PROTOBUF_EXPORT PROTOBUF_ALIGNAS(8) Arena final { - public: - // Default constructor with sensible default options, tuned for average - // use-cases. - inline Arena() : impl_() {} - - // Construct an arena with default options, except for the supplied - // initial block. It is more efficient to use this constructor - // instead of passing ArenaOptions if the only configuration needed - // by the caller is supplying an initial block. - inline Arena(char* initial_block, size_t initial_block_size) - : impl_(initial_block, initial_block_size) {} - - // Arena constructor taking custom options. See ArenaOptions above for - // descriptions of the options available. - explicit Arena(const ArenaOptions& options) - : impl_(options.initial_block, options.initial_block_size, - options.AllocationPolicy()) {} - - // Block overhead. Use this as a guide for how much to over-allocate the - // initial block if you want an allocation of size N to fit inside it. - // - // WARNING: if you allocate multiple objects, it is difficult to guarantee - // that a series of allocations will fit in the initial block, especially if - // Arena changes its alignment guarantees in the future! - static const size_t kBlockOverhead = - internal::ThreadSafeArena::kBlockHeaderSize + - internal::ThreadSafeArena::kSerialArenaSize; - - inline ~Arena() {} - - // TODO(protobuf-team): Fix callers to use constructor and delete this method. - void Init(const ArenaOptions&) {} - - // API to create proto2 message objects on the arena. If the arena passed in - // is NULL, then a heap allocated object is returned. Type T must be a message - // defined in a .proto file with cc_enable_arenas set to true, otherwise a - // compilation error will occur. - // - // RepeatedField and RepeatedPtrField may also be instantiated directly on an - // arena with this method. - // - // This function also accepts any type T that satisfies the arena message - // allocation protocol, documented above. - template <typename T, typename... Args> - PROTOBUF_ALWAYS_INLINE static T* CreateMessage(Arena* arena, Args&&... args) { - static_assert( - InternalHelper<T>::is_arena_constructable::value, - "CreateMessage can only construct types that are ArenaConstructable"); - // We must delegate to CreateMaybeMessage() and NOT CreateMessageInternal() - // because protobuf generated classes specialize CreateMaybeMessage() and we - // need to use that specialization for code size reasons. - return Arena::CreateMaybeMessage<T>(arena, static_cast<Args&&>(args)...); - } - - // API to create any objects on the arena. Note that only the object will - // be created on the arena; the underlying ptrs (in case of a proto2 message) - // will be still heap allocated. Proto messages should usually be allocated - // with CreateMessage<T>() instead. - // - // Note that even if T satisfies the arena message construction protocol - // (InternalArenaConstructable_ trait and optional DestructorSkippable_ - // trait), as described above, this function does not follow the protocol; - // instead, it treats T as a black-box type, just as if it did not have these - // traits. Specifically, T's constructor arguments will always be only those - // passed to Create<T>() -- no additional arena pointer is implicitly added. - // Furthermore, the destructor will always be called at arena destruction time - // (unless the destructor is trivial). Hence, from T's point of view, it is as - // if the object were allocated on the heap (except that the underlying memory - // is obtained from the arena). - template <typename T, typename... Args> - PROTOBUF_NDEBUG_INLINE static T* Create(Arena* arena, Args&&... args) { - return CreateInternal<T>(arena, std::is_convertible<T*, MessageLite*>(), - static_cast<Args&&>(args)...); - } - - // Allocates memory with the specific size and alignment. - void* AllocateAligned(size_t size, size_t align = 8) { - if (align <= 8) { - return AllocateAlignedNoHook(internal::AlignUpTo8(size)); - } else { - // We are wasting space by over allocating align - 8 bytes. Compared - // to a dedicated function that takes current alignment in consideration. - // Such a scheme would only waste (align - 8)/2 bytes on average, but - // requires a dedicated function in the outline arena allocation - // functions. Possibly re-evaluate tradeoffs later. - return internal::AlignTo(AllocateAlignedNoHook(size + align - 8), align); - } - } - - // Create an array of object type T on the arena *without* invoking the - // constructor of T. If `arena` is null, then the return value should be freed - // with `delete[] x;` (or `::operator delete[](x);`). - // To ensure safe uses, this function checks at compile time - // (when compiled as C++11) that T is trivially default-constructible and - // trivially destructible. - template <typename T> - PROTOBUF_NDEBUG_INLINE static T* CreateArray(Arena* arena, - size_t num_elements) { - static_assert(std::is_trivial<T>::value, - "CreateArray requires a trivially constructible type"); - static_assert(std::is_trivially_destructible<T>::value, - "CreateArray requires a trivially destructible type"); - GOOGLE_CHECK_LE(num_elements, std::numeric_limits<size_t>::max() / sizeof(T)) - << "Requested size is too large to fit into size_t."; - if (arena == NULL) { - return static_cast<T*>(::operator new[](num_elements * sizeof(T))); - } else { - return arena->CreateInternalRawArray<T>(num_elements); - } - } - - // The following are routines are for monitoring. They will approximate the - // total sum allocated and used memory, but the exact value is an - // implementation deal. For instance allocated space depends on growth - // policies. Do not use these in unit tests. - // Returns the total space allocated by the arena, which is the sum of the - // sizes of the underlying blocks. - uint64_t SpaceAllocated() const { return impl_.SpaceAllocated(); } - // Returns the total space used by the arena. Similar to SpaceAllocated but - // does not include free space and block overhead. The total space returned - // may not include space used by other threads executing concurrently with - // the call to this method. - uint64_t SpaceUsed() const { return impl_.SpaceUsed(); } - - // Frees all storage allocated by this arena after calling destructors - // registered with OwnDestructor() and freeing objects registered with Own(). - // Any objects allocated on this arena are unusable after this call. It also - // returns the total space used by the arena which is the sums of the sizes - // of the allocated blocks. This method is not thread-safe. - uint64_t Reset() { return impl_.Reset(); } - - // Adds |object| to a list of heap-allocated objects to be freed with |delete| - // when the arena is destroyed or reset. - template <typename T> - PROTOBUF_ALWAYS_INLINE void Own(T* object) { - OwnInternal(object, std::is_convertible<T*, MessageLite*>()); - } - - // Adds |object| to a list of objects whose destructors will be manually - // called when the arena is destroyed or reset. This differs from Own() in - // that it does not free the underlying memory with |delete|; hence, it is - // normally only used for objects that are placement-newed into - // arena-allocated memory. - template <typename T> - PROTOBUF_ALWAYS_INLINE void OwnDestructor(T* object) { - if (object != NULL) { - impl_.AddCleanup(object, &internal::arena_destruct_object<T>); - } - } - - // Adds a custom member function on an object to the list of destructors that - // will be manually called when the arena is destroyed or reset. This differs - // from OwnDestructor() in that any member function may be specified, not only - // the class destructor. - PROTOBUF_ALWAYS_INLINE void OwnCustomDestructor(void* object, - void (*destruct)(void*)) { - impl_.AddCleanup(object, destruct); - } - - // Retrieves the arena associated with |value| if |value| is an arena-capable - // message, or NULL otherwise. If possible, the call resolves at compile time. - // Note that we can often devirtualize calls to `value->GetArena()` so usually - // calling this method is unnecessary. - template <typename T> - PROTOBUF_ALWAYS_INLINE static Arena* GetArena(const T* value) { - return GetArenaInternal(value); - } - - template <typename T> - class InternalHelper { - private: - // Provides access to protected GetOwningArena to generated messages. - static Arena* GetOwningArena(const T* p) { return p->GetOwningArena(); } - - static void InternalSwap(T* a, T* b) { a->InternalSwap(b); } - - static Arena* GetArenaForAllocationInternal( - const T* p, std::true_type /*is_derived_from<MessageLite>*/) { - return p->GetArenaForAllocation(); - } - - static Arena* GetArenaForAllocationInternal( - const T* p, std::false_type /*is_derived_from<MessageLite>*/) { - return GetArenaForAllocationForNonMessage( - p, typename is_arena_constructable::type()); - } - - static Arena* GetArenaForAllocationForNonMessage( - const T* p, std::true_type /*is_arena_constructible*/) { - return p->GetArena(); - } - - static Arena* GetArenaForAllocationForNonMessage( - const T* p, std::false_type /*is_arena_constructible*/) { - return GetArenaForAllocationForNonMessageNonArenaConstructible( - p, typename has_get_arena::type()); - } - - static Arena* GetArenaForAllocationForNonMessageNonArenaConstructible( - const T* p, std::true_type /*has_get_arena*/) { - return p->GetArena(); - } - - static Arena* GetArenaForAllocationForNonMessageNonArenaConstructible( - const T* /* p */, std::false_type /*has_get_arena*/) { - return nullptr; - } - - template <typename U> - static char DestructorSkippable(const typename U::DestructorSkippable_*); - template <typename U> - static double DestructorSkippable(...); - - typedef std::integral_constant< - bool, sizeof(DestructorSkippable<T>(static_cast<const T*>(0))) == - sizeof(char) || - std::is_trivially_destructible<T>::value> - is_destructor_skippable; - - template <typename U> - static char ArenaConstructable( - const typename U::InternalArenaConstructable_*); - template <typename U> - static double ArenaConstructable(...); - - typedef std::integral_constant<bool, sizeof(ArenaConstructable<T>( - static_cast<const T*>(0))) == - sizeof(char)> - is_arena_constructable; - - template <typename U, - typename std::enable_if< - std::is_same<Arena*, decltype(std::declval<const U>() - .GetArena())>::value, - int>::type = 0> - static char HasGetArena(decltype(&U::GetArena)); - template <typename U> - static double HasGetArena(...); - - typedef std::integral_constant<bool, sizeof(HasGetArena<T>(nullptr)) == - sizeof(char)> - has_get_arena; - - template <typename... Args> - static T* Construct(void* ptr, Args&&... args) { - return new (ptr) T(static_cast<Args&&>(args)...); - } - - static inline PROTOBUF_ALWAYS_INLINE T* New() { - return new T(nullptr); - } - - static Arena* GetArena(const T* p) { return p->GetArena(); } - - friend class Arena; - friend class TestUtil::ReflectionTester; - }; - - // Provides access to protected GetOwningArena to generated messages. For - // internal use only. - template <typename T> - static Arena* InternalGetOwningArena(const T* p) { - return InternalHelper<T>::GetOwningArena(p); - } - - // Provides access to protected GetArenaForAllocation to generated messages. - // For internal use only. - template <typename T> - static Arena* InternalGetArenaForAllocation(const T* p) { - return InternalHelper<T>::GetArenaForAllocationInternal( - p, std::is_convertible<T*, MessageLite*>()); - } - - // Creates message-owned arena. For internal use only. - static Arena* InternalCreateMessageOwnedArena() { - return new Arena(internal::MessageOwned{}); - } - - // Checks whether this arena is message-owned. For internal use only. - bool InternalIsMessageOwnedArena() { return IsMessageOwned(); } - - // Helper typetraits that indicates support for arenas in a type T at compile - // time. This is public only to allow construction of higher-level templated - // utilities. - // - // is_arena_constructable<T>::value is true if the message type T has arena - // support enabled, and false otherwise. - // - // is_destructor_skippable<T>::value is true if the message type T has told - // the arena that it is safe to skip the destructor, and false otherwise. - // - // This is inside Arena because only Arena has the friend relationships - // necessary to see the underlying generated code traits. - template <typename T> - struct is_arena_constructable : InternalHelper<T>::is_arena_constructable {}; - template <typename T> - struct is_destructor_skippable : InternalHelper<T>::is_destructor_skippable { - }; - - private: - internal::ThreadSafeArena impl_; - - template <typename T> - struct has_get_arena : InternalHelper<T>::has_get_arena {}; - - // Constructor solely used by message-owned arena. - inline Arena(internal::MessageOwned) : impl_(internal::MessageOwned{}) {} - - // Checks whether this arena is message-owned. - PROTOBUF_ALWAYS_INLINE bool IsMessageOwned() const { - return impl_.IsMessageOwned(); - } - - void ReturnArrayMemory(void* p, size_t size) { - impl_.ReturnArrayMemory(p, size); - } - - template <typename T, typename... Args> - PROTOBUF_NDEBUG_INLINE static T* CreateMessageInternal(Arena* arena, - Args&&... args) { - static_assert( - InternalHelper<T>::is_arena_constructable::value, - "CreateMessage can only construct types that are ArenaConstructable"); - if (arena == NULL) { - return new T(nullptr, static_cast<Args&&>(args)...); - } else { - return arena->DoCreateMessage<T>(static_cast<Args&&>(args)...); - } - } - - // This specialization for no arguments is necessary, because its behavior is - // slightly different. When the arena pointer is nullptr, it calls T() - // instead of T(nullptr). - template <typename T> - PROTOBUF_NDEBUG_INLINE static T* CreateMessageInternal(Arena* arena) { - static_assert( - InternalHelper<T>::is_arena_constructable::value, - "CreateMessage can only construct types that are ArenaConstructable"); - if (arena == NULL) { - // Generated arena constructor T(Arena*) is protected. Call via - // InternalHelper. - return InternalHelper<T>::New(); - } else { - return arena->DoCreateMessage<T>(); - } - } - - // Allocate and also optionally call collector with the allocated type info - // when allocation recording is enabled. - PROTOBUF_NDEBUG_INLINE void* AllocateInternal(size_t size, size_t align, - void (*destructor)(void*), - const std::type_info* type) { - // Monitor allocation if needed. - if (destructor == nullptr) { - return AllocateAlignedWithHook(size, align, type); - } else { - if (align <= 8) { - auto res = AllocateAlignedWithCleanup(internal::AlignUpTo8(size), type); - res.second->elem = res.first; - res.second->cleanup = destructor; - return res.first; - } else { - auto res = AllocateAlignedWithCleanup(size + align - 8, type); - auto ptr = internal::AlignTo(res.first, align); - res.second->elem = ptr; - res.second->cleanup = destructor; - return ptr; - } - } - } - - // CreateMessage<T> requires that T supports arenas, but this private method - // works whether or not T supports arenas. These are not exposed to user code - // as it can cause confusing API usages, and end up having double free in - // user code. These are used only internally from LazyField and Repeated - // fields, since they are designed to work in all mode combinations. - template <typename Msg, typename... Args> - PROTOBUF_ALWAYS_INLINE static Msg* DoCreateMaybeMessage(Arena* arena, - std::true_type, - Args&&... args) { - return CreateMessageInternal<Msg>(arena, std::forward<Args>(args)...); - } - - template <typename T, typename... Args> - PROTOBUF_ALWAYS_INLINE static T* DoCreateMaybeMessage(Arena* arena, - std::false_type, - Args&&... args) { - return Create<T>(arena, std::forward<Args>(args)...); - } - - template <typename T, typename... Args> - PROTOBUF_ALWAYS_INLINE static T* CreateMaybeMessage(Arena* arena, - Args&&... args) { - return DoCreateMaybeMessage<T>(arena, is_arena_constructable<T>(), - std::forward<Args>(args)...); - } - - // Just allocate the required size for the given type assuming the - // type has a trivial constructor. - template <typename T> - PROTOBUF_NDEBUG_INLINE T* CreateInternalRawArray(size_t num_elements) { - GOOGLE_CHECK_LE(num_elements, std::numeric_limits<size_t>::max() / sizeof(T)) - << "Requested size is too large to fit into size_t."; - // We count on compiler to realize that if sizeof(T) is a multiple of - // 8 AlignUpTo can be elided. - const size_t n = sizeof(T) * num_elements; - return static_cast<T*>( - AllocateAlignedWithHookForArray(n, alignof(T), RTTI_TYPE_ID(T))); - } - - template <typename T, typename... Args> - PROTOBUF_NDEBUG_INLINE T* DoCreateMessage(Args&&... args) { - return InternalHelper<T>::Construct( - AllocateInternal(sizeof(T), alignof(T), - internal::ObjectDestructor< - InternalHelper<T>::is_destructor_skippable::value, - T>::destructor, - RTTI_TYPE_ID(T)), - this, std::forward<Args>(args)...); - } - - // CreateInArenaStorage is used to implement map field. Without it, - // Map need to call generated message's protected arena constructor, - // which needs to declare Map as friend of generated message. - template <typename T, typename... Args> - static void CreateInArenaStorage(T* ptr, Arena* arena, Args&&... args) { - CreateInArenaStorageInternal(ptr, arena, - typename is_arena_constructable<T>::type(), - std::forward<Args>(args)...); - if (arena != nullptr) { - RegisterDestructorInternal( - ptr, arena, - typename InternalHelper<T>::is_destructor_skippable::type()); - } - } - - template <typename T, typename... Args> - static void CreateInArenaStorageInternal(T* ptr, Arena* arena, - std::true_type, Args&&... args) { - InternalHelper<T>::Construct(ptr, arena, std::forward<Args>(args)...); - } - template <typename T, typename... Args> - static void CreateInArenaStorageInternal(T* ptr, Arena* /* arena */, - std::false_type, Args&&... args) { - new (ptr) T(std::forward<Args>(args)...); - } - - template <typename T> - static void RegisterDestructorInternal(T* /* ptr */, Arena* /* arena */, - std::true_type) {} - template <typename T> - static void RegisterDestructorInternal(T* ptr, Arena* arena, - std::false_type) { - arena->OwnDestructor(ptr); - } - - // These implement Create(). The second parameter has type 'true_type' if T is - // a subtype of Message and 'false_type' otherwise. - template <typename T, typename... Args> - PROTOBUF_ALWAYS_INLINE static T* CreateInternal(Arena* arena, std::true_type, - Args&&... args) { - if (arena == nullptr) { - return new T(std::forward<Args>(args)...); - } else { - auto destructor = - internal::ObjectDestructor<std::is_trivially_destructible<T>::value, - T>::destructor; - T* result = - new (arena->AllocateInternal(sizeof(T), alignof(T), destructor, - RTTI_TYPE_ID(T))) - T(std::forward<Args>(args)...); - return result; - } - } - template <typename T, typename... Args> - PROTOBUF_ALWAYS_INLINE static T* CreateInternal(Arena* arena, std::false_type, - Args&&... args) { - if (arena == nullptr) { - return new T(std::forward<Args>(args)...); - } else { - auto destructor = - internal::ObjectDestructor<std::is_trivially_destructible<T>::value, - T>::destructor; - return new (arena->AllocateInternal(sizeof(T), alignof(T), destructor, - RTTI_TYPE_ID(T))) - T(std::forward<Args>(args)...); - } - } - - // These implement Own(), which registers an object for deletion (destructor - // call and operator delete()). The second parameter has type 'true_type' if T - // is a subtype of Message and 'false_type' otherwise. Collapsing - // all template instantiations to one for generic Message reduces code size, - // using the virtual destructor instead. - template <typename T> - PROTOBUF_ALWAYS_INLINE void OwnInternal(T* object, std::true_type) { - if (object != NULL) { - impl_.AddCleanup(object, &internal::arena_delete_object<MessageLite>); - } - } - template <typename T> - PROTOBUF_ALWAYS_INLINE void OwnInternal(T* object, std::false_type) { - if (object != NULL) { - impl_.AddCleanup(object, &internal::arena_delete_object<T>); - } - } - - // Implementation for GetArena(). Only message objects with - // InternalArenaConstructable_ tags can be associated with an arena, and such - // objects must implement a GetArena() method. - template <typename T, typename std::enable_if< - is_arena_constructable<T>::value, int>::type = 0> - PROTOBUF_ALWAYS_INLINE static Arena* GetArenaInternal(const T* value) { - return InternalHelper<T>::GetArena(value); - } - template <typename T, - typename std::enable_if<!is_arena_constructable<T>::value && - has_get_arena<T>::value, - int>::type = 0> - PROTOBUF_ALWAYS_INLINE static Arena* GetArenaInternal(const T* value) { - return value->GetArena(); - } - template <typename T, - typename std::enable_if<!is_arena_constructable<T>::value && - !has_get_arena<T>::value, - int>::type = 0> - PROTOBUF_ALWAYS_INLINE static Arena* GetArenaInternal(const T* value) { - (void)value; - return nullptr; - } - - template <typename T> - PROTOBUF_ALWAYS_INLINE static Arena* GetOwningArena(const T* value) { - return GetOwningArenaInternal( - value, std::is_convertible<T*, MessageLite*>()); - } - - // Implementation for GetOwningArena(). All and only message objects have - // GetOwningArena() method. - template <typename T> - PROTOBUF_ALWAYS_INLINE static Arena* GetOwningArenaInternal( - const T* value, std::true_type) { - return InternalHelper<T>::GetOwningArena(value); - } - template <typename T> - PROTOBUF_ALWAYS_INLINE static Arena* GetOwningArenaInternal( - const T* /* value */, std::false_type) { - return nullptr; - } - - void* AllocateAlignedWithHookForArray(size_t n, size_t align, - const std::type_info* type) { - if (align <= 8) { - return AllocateAlignedWithHookForArray(internal::AlignUpTo8(n), type); - } else { - // We are wasting space by over allocating align - 8 bytes. Compared - // to a dedicated function that takes current alignment in consideration. - // Such a scheme would only waste (align - 8)/2 bytes on average, but - // requires a dedicated function in the outline arena allocation - // functions. Possibly re-evaluate tradeoffs later. - return internal::AlignTo( - AllocateAlignedWithHookForArray(n + align - 8, type), align); - } - } - - void* AllocateAlignedWithHook(size_t n, size_t align, - const std::type_info* type) { - if (align <= 8) { - return AllocateAlignedWithHook(internal::AlignUpTo8(n), type); - } else { - // We are wasting space by over allocating align - 8 bytes. Compared - // to a dedicated function that takes current alignment in consideration. - // Such a scheme would only waste (align - 8)/2 bytes on average, but - // requires a dedicated function in the outline arena allocation - // functions. Possibly re-evaluate tradeoffs later. - return internal::AlignTo(AllocateAlignedWithHook(n + align - 8, type), - align); - } - } - - void* AllocateAlignedNoHook(size_t n); - void* AllocateAlignedWithHook(size_t n, const std::type_info* type); - void* AllocateAlignedWithHookForArray(size_t n, const std::type_info* type); - std::pair<void*, internal::SerialArena::CleanupNode*> - AllocateAlignedWithCleanup(size_t n, const std::type_info* type); - - template <typename Type> - friend class internal::GenericTypeHandler; - friend class internal::InternalMetadata; // For user_arena(). - friend class internal::LazyField; // For CreateMaybeMessage. - friend class internal::EpsCopyInputStream; // For parser performance - friend class MessageLite; - template <typename Key, typename T> - friend class Map; - template <typename> - friend class RepeatedField; // For ReturnArrayMemory - friend class internal::RepeatedPtrFieldBase; // For ReturnArrayMemory - friend struct internal::ArenaTestPeer; -}; - -// Defined above for supporting environments without RTTI. -#undef RTTI_TYPE_ID - -} // namespace protobuf -} // namespace google - -#include <google/protobuf/port_undef.inc> - -#endif // GOOGLE_PROTOBUF_ARENA_H__ diff --git a/include/google/protobuf/arena_impl.h b/include/google/protobuf/arena_impl.h deleted file mode 100644 index 76727688b5..0000000000 --- a/include/google/protobuf/arena_impl.h +++ /dev/null @@ -1,686 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// 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 -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (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 file defines an Arena allocator for better allocation performance. - -#ifndef GOOGLE_PROTOBUF_ARENA_IMPL_H__ -#define GOOGLE_PROTOBUF_ARENA_IMPL_H__ - -#include <atomic> -#include <limits> -#include <typeinfo> - -#include <google/protobuf/stubs/common.h> -#include <google/protobuf/stubs/logging.h> -#include <google/protobuf/stubs/port.h> - -#ifdef ADDRESS_SANITIZER -#include <sanitizer/asan_interface.h> -#endif // ADDRESS_SANITIZER - -#include <google/protobuf/arenaz_sampler.h> - -// Must be included last. -#include <google/protobuf/port_def.inc> - - -namespace google { -namespace protobuf { -namespace internal { - -// To prevent sharing cache lines between threads -#ifdef __cpp_aligned_new -enum { kCacheAlignment = 64 }; -#else -enum { kCacheAlignment = alignof(max_align_t) }; // do the best we can -#endif - -inline constexpr size_t AlignUpTo8(size_t n) { - // Align n to next multiple of 8 (from Hacker's Delight, Chapter 3.) - return (n + 7) & static_cast<size_t>(-8); -} - -using LifecycleIdAtomic = uint64_t; - -// MetricsCollector collects stats for a particular arena. -class PROTOBUF_EXPORT ArenaMetricsCollector { - public: - ArenaMetricsCollector(bool record_allocs) : record_allocs_(record_allocs) {} - - // Invoked when the arena is about to be destroyed. This method will - // typically finalize any metric collection and delete the collector. - // space_allocated is the space used by the arena. - virtual void OnDestroy(uint64_t space_allocated) = 0; - - // OnReset() is called when the associated arena is reset. - // space_allocated is the space used by the arena just before the reset. - virtual void OnReset(uint64_t space_allocated) = 0; - - // OnAlloc is called when an allocation happens. - // type_info is promised to be static - its lifetime extends to - // match program's lifetime (It is given by typeid operator). - // Note: typeid(void) will be passed as allocated_type every time we - // intentionally want to avoid monitoring an allocation. (i.e. internal - // allocations for managing the arena) - virtual void OnAlloc(const std::type_info* allocated_type, - uint64_t alloc_size) = 0; - - // Does OnAlloc() need to be called? If false, metric collection overhead - // will be reduced since we will not do extra work per allocation. - bool RecordAllocs() { return record_allocs_; } - - protected: - // This class is destructed by the call to OnDestroy(). - ~ArenaMetricsCollector() = default; - const bool record_allocs_; -}; - -struct AllocationPolicy { - static constexpr size_t kDefaultStartBlockSize = 256; - static constexpr size_t kDefaultMaxBlockSize = 8192; - - size_t start_block_size = kDefaultStartBlockSize; - size_t max_block_size = kDefaultMaxBlockSize; - void* (*block_alloc)(size_t) = nullptr; - void (*block_dealloc)(void*, size_t) = nullptr; - ArenaMetricsCollector* metrics_collector = nullptr; - - bool IsDefault() const { - return start_block_size == kDefaultMaxBlockSize && - max_block_size == kDefaultMaxBlockSize && block_alloc == nullptr && - block_dealloc == nullptr && metrics_collector == nullptr; - } -}; - -// Tagged pointer to an AllocationPolicy. -class TaggedAllocationPolicyPtr { - public: - constexpr TaggedAllocationPolicyPtr() : policy_(0) {} - - explicit TaggedAllocationPolicyPtr(AllocationPolicy* policy) - : policy_(reinterpret_cast<uintptr_t>(policy)) {} - - void set_policy(AllocationPolicy* policy) { - auto bits = policy_ & kTagsMask; - policy_ = reinterpret_cast<uintptr_t>(policy) | bits; - } - - AllocationPolicy* get() { - return reinterpret_cast<AllocationPolicy*>(policy_ & kPtrMask); - } - const AllocationPolicy* get() const { - return reinterpret_cast<const AllocationPolicy*>(policy_ & kPtrMask); - } - - AllocationPolicy& operator*() { return *get(); } - const AllocationPolicy& operator*() const { return *get(); } - - AllocationPolicy* operator->() { return get(); } - const AllocationPolicy* operator->() const { return get(); } - - bool is_user_owned_initial_block() const { - return static_cast<bool>(get_mask<kUserOwnedInitialBlock>()); - } - void set_is_user_owned_initial_block(bool v) { - set_mask<kUserOwnedInitialBlock>(v); - } - - bool should_record_allocs() const { - return static_cast<bool>(get_mask<kRecordAllocs>()); - } - void set_should_record_allocs(bool v) { set_mask<kRecordAllocs>(v); } - - uintptr_t get_raw() const { return policy_; } - - inline void RecordAlloc(const std::type_info* allocated_type, - size_t n) const { - get()->metrics_collector->OnAlloc(allocated_type, n); - } - - private: - enum : uintptr_t { - kUserOwnedInitialBlock = 1, - kRecordAllocs = 2, - }; - - static constexpr uintptr_t kTagsMask = 7; - static constexpr uintptr_t kPtrMask = ~kTagsMask; - - template <uintptr_t kMask> - uintptr_t get_mask() const { - return policy_ & kMask; - } - template <uintptr_t kMask> - void set_mask(bool v) { - if (v) { - policy_ |= kMask; - } else { - policy_ &= ~kMask; - } - } - uintptr_t policy_; -}; - -enum class AllocationClient { kDefault, kArray }; - -// A simple arena allocator. Calls to allocate functions must be properly -// serialized by the caller, hence this class cannot be used as a general -// purpose allocator in a multi-threaded program. It serves as a building block -// for ThreadSafeArena, which provides a thread-safe arena allocator. -// -// This class manages -// 1) Arena bump allocation + owning memory blocks. -// 2) Maintaining a cleanup list. -// It delagetes the actual memory allocation back to ThreadSafeArena, which -// contains the information on block growth policy and backing memory allocation -// used. -class PROTOBUF_EXPORT SerialArena { - public: - struct Memory { - void* ptr; - size_t size; - }; - - // Node contains the ptr of the object to be cleaned up and the associated - // cleanup function ptr. - struct CleanupNode { - void* elem; // Pointer to the object to be cleaned up. - void (*cleanup)(void*); // Function pointer to the destructor or deleter. - }; - - void CleanupList(); - uint64_t SpaceAllocated() const { - return space_allocated_.load(std::memory_order_relaxed); - } - uint64_t SpaceUsed() const; - - bool HasSpace(size_t n) const { - return n <= static_cast<size_t>(limit_ - ptr_); - } - - // See comments on `cached_blocks_` member for details. - PROTOBUF_ALWAYS_INLINE void* TryAllocateFromCachedBlock(size_t size) { - if (PROTOBUF_PREDICT_FALSE(size < 16)) return nullptr; - // We round up to the next larger block in case the memory doesn't match - // the pattern we are looking for. - const size_t index = Bits::Log2FloorNonZero64(size - 1) - 3; - - if (index >= cached_block_length_) return nullptr; - auto& cached_head = cached_blocks_[index]; - if (cached_head == nullptr) return nullptr; - - void* ret = cached_head; -#ifdef ADDRESS_SANITIZER - ASAN_UNPOISON_MEMORY_REGION(ret, size); -#endif // ADDRESS_SANITIZER - cached_head = cached_head->next; - return ret; - } - - // In kArray mode we look through cached blocks. - // We do not do this by default because most non-array allocations will not - // have the right size and will fail to find an appropriate cached block. - // - // TODO(sbenza): Evaluate if we should use cached blocks for message types of - // the right size. We can statically know if the allocation size can benefit - // from it. - template <AllocationClient alloc_client = AllocationClient::kDefault> - void* AllocateAligned(size_t n, const AllocationPolicy* policy) { - GOOGLE_DCHECK_EQ(internal::AlignUpTo8(n), n); // Must be already aligned. - GOOGLE_DCHECK_GE(limit_, ptr_); - - if (alloc_client == AllocationClient::kArray) { - if (void* res = TryAllocateFromCachedBlock(n)) { - return res; - } - } - - if (PROTOBUF_PREDICT_FALSE(!HasSpace(n))) { - return AllocateAlignedFallback(n, policy); - } - return AllocateFromExisting(n); - } - - private: - void* AllocateFromExisting(size_t n) { - void* ret = ptr_; - ptr_ += n; -#ifdef ADDRESS_SANITIZER - ASAN_UNPOISON_MEMORY_REGION(ret, n); -#endif // ADDRESS_SANITIZER - return ret; - } - - // See comments on `cached_blocks_` member for details. - void ReturnArrayMemory(void* p, size_t size) { - // We only need to check for 32-bit platforms. - // In 64-bit platforms the minimum allocation size from Repeated*Field will - // be 16 guaranteed. - if (sizeof(void*) < 8) { - if (PROTOBUF_PREDICT_FALSE(size < 16)) return; - } else { - GOOGLE_DCHECK(size >= 16); - } - - // We round down to the next smaller block in case the memory doesn't match - // the pattern we are looking for. eg, someone might have called Reserve() - // on the repeated field. - const size_t index = Bits::Log2FloorNonZero64(size) - 4; - - if (PROTOBUF_PREDICT_FALSE(index >= cached_block_length_)) { - // We can't put this object on the freelist so make this object the - // freelist. It is guaranteed it is larger than the one we have, and - // large enough to hold another allocation of `size`. - CachedBlock** new_list = static_cast<CachedBlock**>(p); - size_t new_size = size / sizeof(CachedBlock*); - - std::copy(cached_blocks_, cached_blocks_ + cached_block_length_, - new_list); - std::fill(new_list + cached_block_length_, new_list + new_size, nullptr); - cached_blocks_ = new_list; - // Make the size fit in uint8_t. This is the power of two, so we don't - // need anything larger. - cached_block_length_ = - static_cast<uint8_t>(std::min(size_t{64}, new_size)); - - return; - } - - auto& cached_head = cached_blocks_[index]; - auto* new_node = static_cast<CachedBlock*>(p); - new_node->next = cached_head; - cached_head = new_node; -#ifdef ADDRESS_SANITIZER - ASAN_POISON_MEMORY_REGION(p, size); -#endif // ADDRESS_SANITIZER - } - - public: - // Allocate space if the current region provides enough space. - bool MaybeAllocateAligned(size_t n, void** out) { - GOOGLE_DCHECK_EQ(internal::AlignUpTo8(n), n); // Must be already aligned. - GOOGLE_DCHECK_GE(limit_, ptr_); - if (PROTOBUF_PREDICT_FALSE(!HasSpace(n))) return false; - *out = AllocateFromExisting(n); - return true; - } - - std::pair<void*, CleanupNode*> AllocateAlignedWithCleanup( - size_t n, const AllocationPolicy* policy) { - GOOGLE_DCHECK_EQ(internal::AlignUpTo8(n), n); // Must be already aligned. - if (PROTOBUF_PREDICT_FALSE(!HasSpace(n + kCleanupSize))) { - return AllocateAlignedWithCleanupFallback(n, policy); - } - return AllocateFromExistingWithCleanupFallback(n); - } - - private: - std::pair<void*, CleanupNode*> AllocateFromExistingWithCleanupFallback( - size_t n) { - void* ret = ptr_; - ptr_ += n; - limit_ -= kCleanupSize; -#ifdef ADDRESS_SANITIZER - ASAN_UNPOISON_MEMORY_REGION(ret, n); - ASAN_UNPOISON_MEMORY_REGION(limit_, kCleanupSize); -#endif // ADDRESS_SANITIZER - return CreatePair(ret, reinterpret_cast<CleanupNode*>(limit_)); - } - - public: - void AddCleanup(void* elem, void (*cleanup)(void*), - const AllocationPolicy* policy) { - auto res = AllocateAlignedWithCleanup(0, policy); - res.second->elem = elem; - res.second->cleanup = cleanup; - } - - void* owner() const { return owner_; } - SerialArena* next() const { return next_; } - void set_next(SerialArena* next) { next_ = next; } - - private: - friend class ThreadSafeArena; - friend class ArenaBenchmark; - - // Creates a new SerialArena inside mem using the remaining memory as for - // future allocations. - static SerialArena* New(SerialArena::Memory mem, void* owner, - ThreadSafeArenaStats* stats); - // Free SerialArena returning the memory passed in to New - template <typename Deallocator> - Memory Free(Deallocator deallocator); - - // Blocks are variable length malloc-ed objects. The following structure - // describes the common header for all blocks. - struct Block { - Block(Block* next, size_t size) : next(next), size(size), start(nullptr) {} - - char* Pointer(size_t n) { - GOOGLE_DCHECK(n <= size); - return reinterpret_cast<char*>(this) + n; - } - - Block* const next; - const size_t size; - CleanupNode* start; - // data follows - }; - - void* owner_; // &ThreadCache of this thread; - Block* head_; // Head of linked list of blocks. - SerialArena* next_; // Next SerialArena in this linked list. - size_t space_used_ = 0; // Necessary for metrics. - std::atomic<size_t> space_allocated_; - - // Next pointer to allocate from. Always 8-byte aligned. Points inside - // head_ (and head_->pos will always be non-canonical). We keep these - // here to reduce indirection. - char* ptr_; - // Limiting address up to which memory can be allocated from the head block. - char* limit_; - // For holding sampling information. The pointer is owned by the - // ThreadSafeArena that holds this serial arena. - ThreadSafeArenaStats* arena_stats_; - - // Repeated*Field and Arena play together to reduce memory consumption by - // reusing blocks. Currently, natural growth of the repeated field types makes - // them allocate blocks of size `8 + 2^N, N>=3`. - // When the repeated field grows returns the previous block and we put it in - // this free list. - // `cached_blocks_[i]` points to the free list for blocks of size `8+2^(i+3)`. - // The array of freelists is grown when needed in `ReturnArrayMemory()`. - struct CachedBlock { - // Simple linked list. - CachedBlock* next; - }; - uint8_t cached_block_length_ = 0; - CachedBlock** cached_blocks_ = nullptr; - - // Constructor is private as only New() should be used. - inline SerialArena(Block* b, void* owner, ThreadSafeArenaStats* stats); - void* AllocateAlignedFallback(size_t n, const AllocationPolicy* policy); - std::pair<void*, CleanupNode*> AllocateAlignedWithCleanupFallback( - size_t n, const AllocationPolicy* policy); - void AllocateNewBlock(size_t n, const AllocationPolicy* policy); - - std::pair<void*, CleanupNode*> CreatePair(void* ptr, CleanupNode* node) { - return {ptr, node}; - } - - public: - static constexpr size_t kBlockHeaderSize = AlignUpTo8(sizeof(Block)); - static constexpr size_t kCleanupSize = AlignUpTo8(sizeof(CleanupNode)); -}; - -// Tag type used to invoke the constructor of message-owned arena. -// Only message-owned arenas use this constructor for creation. -// Such constructors are internal implementation details of the library. -struct MessageOwned { - explicit MessageOwned() = default; -}; - -// This class provides the core Arena memory allocation library. Different -// implementations only need to implement the public interface below. -// Arena is not a template type as that would only be useful if all protos -// in turn would be templates, which will/cannot happen. However separating -// the memory allocation part from the cruft of the API users expect we can -// use #ifdef the select the best implementation based on hardware / OS. -class PROTOBUF_EXPORT ThreadSafeArena { - public: - ThreadSafeArena() { Init(); } - - // Constructor solely used by message-owned arena. - ThreadSafeArena(internal::MessageOwned) : tag_and_id_(kMessageOwnedArena) { - Init(); - } - - ThreadSafeArena(char* mem, size_t size) { InitializeFrom(mem, size); } - - explicit ThreadSafeArena(void* mem, size_t size, - const AllocationPolicy& policy) { - InitializeWithPolicy(mem, size, policy); - } - - // Destructor deletes all owned heap allocated objects, and destructs objects - // that have non-trivial destructors, except for proto2 message objects whose - // destructors can be skipped. Also, frees all blocks except the initial block - // if it was passed in. - ~ThreadSafeArena(); - - uint64_t Reset(); - - uint64_t SpaceAllocated() const; - uint64_t SpaceUsed() const; - - template <AllocationClient alloc_client = AllocationClient::kDefault> - void* AllocateAligned(size_t n, const std::type_info* type) { - SerialArena* arena; - if (PROTOBUF_PREDICT_TRUE(!alloc_policy_.should_record_allocs() && - GetSerialArenaFast(&arena))) { - return arena->AllocateAligned<alloc_client>(n, AllocPolicy()); - } else { - return AllocateAlignedFallback(n, type); - } - } - - void ReturnArrayMemory(void* p, size_t size) { - SerialArena* arena; - if (PROTOBUF_PREDICT_TRUE(GetSerialArenaFast(&arena))) { - arena->ReturnArrayMemory(p, size); - } - } - - // This function allocates n bytes if the common happy case is true and - // returns true. Otherwise does nothing and returns false. This strange - // semantics is necessary to allow callers to program functions that only - // have fallback function calls in tail position. This substantially improves - // code for the happy path. - PROTOBUF_NDEBUG_INLINE bool MaybeAllocateAligned(size_t n, void** out) { - SerialArena* arena; - if (PROTOBUF_PREDICT_TRUE(!alloc_policy_.should_record_allocs() && - GetSerialArenaFromThreadCache(&arena))) { - return arena->MaybeAllocateAligned(n, out); - } - return false; - } - - std::pair<void*, SerialArena::CleanupNode*> AllocateAlignedWithCleanup( - size_t n, const std::type_info* type); - - // Add object pointer and cleanup function pointer to the list. - void AddCleanup(void* elem, void (*cleanup)(void*)); - - // Checks whether this arena is message-owned. - PROTOBUF_ALWAYS_INLINE bool IsMessageOwned() const { - return tag_and_id_ & kMessageOwnedArena; - } - - private: - // Unique for each arena. Changes on Reset(). - uint64_t tag_and_id_ = 0; - // The LSB of tag_and_id_ indicates if the arena is message-owned. - enum : uint64_t { kMessageOwnedArena = 1 }; - - TaggedAllocationPolicyPtr alloc_policy_; // Tagged pointer to AllocPolicy. - - static_assert(std::is_trivially_destructible<SerialArena>{}, - "SerialArena needs to be trivially destructible."); - // Pointer to a linked list of SerialArena. - std::atomic<SerialArena*> threads_; - std::atomic<SerialArena*> hint_; // Fast thread-local block access - - const AllocationPolicy* AllocPolicy() const { return alloc_policy_.get(); } - void InitializeFrom(void* mem, size_t size); - void InitializeWithPolicy(void* mem, size_t size, AllocationPolicy policy); - void* AllocateAlignedFallback(size_t n, const std::type_info* type); - std::pair<void*, SerialArena::CleanupNode*> - AllocateAlignedWithCleanupFallback(size_t n, const std::type_info* type); - - void Init(); - void SetInitialBlock(void* mem, size_t size); - - // Delete or Destruct all objects owned by the arena. - void CleanupList(); - - inline uint64_t LifeCycleId() const { - return tag_and_id_ & ~kMessageOwnedArena; - } - - inline void CacheSerialArena(SerialArena* serial) { - thread_cache().last_serial_arena = serial; - thread_cache().last_lifecycle_id_seen = tag_and_id_; - // TODO(haberman): evaluate whether we would gain efficiency by getting rid - // of hint_. It's the only write we do to ThreadSafeArena in the allocation - // path, which will dirty the cache line. - - hint_.store(serial, std::memory_order_release); - } - - PROTOBUF_NDEBUG_INLINE bool GetSerialArenaFast(SerialArena** arena) { - if (GetSerialArenaFromThreadCache(arena)) return true; - - // Check whether we own the last accessed SerialArena on this arena. This - // fast path optimizes the case where a single thread uses multiple arenas. - ThreadCache* tc = &thread_cache(); - SerialArena* serial = hint_.load(std::memory_order_acquire); - if (PROTOBUF_PREDICT_TRUE(serial != nullptr && serial->owner() == tc)) { - *arena = serial; - return true; - } - return false; - } - - PROTOBUF_NDEBUG_INLINE bool GetSerialArenaFromThreadCache( - SerialArena** arena) { - // If this thread already owns a block in this arena then try to use that. - // This fast path optimizes the case where multiple threads allocate from - // the same arena. - ThreadCache* tc = &thread_cache(); - if (PROTOBUF_PREDICT_TRUE(tc->last_lifecycle_id_seen == tag_and_id_)) { - *arena = tc->last_serial_arena; - return true; - } - return false; - } - SerialArena* GetSerialArenaFallback(void* me); - - template <typename Functor> - void PerSerialArena(Functor fn) { - // By omitting an Acquire barrier we ensure that any user code that doesn't - // properly synchronize Reset() or the destructor will throw a TSAN warning. - SerialArena* serial = threads_.load(std::memory_order_relaxed); - - for (; serial; serial = serial->next()) fn(serial); - } - - // Releases all memory except the first block which it returns. The first - // block might be owned by the user and thus need some extra checks before - // deleting. - SerialArena::Memory Free(size_t* space_allocated); - -#ifdef _MSC_VER -#pragma warning(disable : 4324) -#endif - struct alignas(kCacheAlignment) ThreadCache { -#if defined(GOOGLE_PROTOBUF_NO_THREADLOCAL) - // If we are using the ThreadLocalStorage class to store the ThreadCache, - // then the ThreadCache's default constructor has to be responsible for - // initializing it. - ThreadCache() - : next_lifecycle_id(0), - last_lifecycle_id_seen(-1), - last_serial_arena(nullptr) {} -#endif - - // Number of per-thread lifecycle IDs to reserve. Must be power of two. - // To reduce contention on a global atomic, each thread reserves a batch of - // IDs. The following number is calculated based on a stress test with - // ~6500 threads all frequently allocating a new arena. - static constexpr size_t kPerThreadIds = 256; - // Next lifecycle ID available to this thread. We need to reserve a new - // batch, if `next_lifecycle_id & (kPerThreadIds - 1) == 0`. - uint64_t next_lifecycle_id; - // The ThreadCache is considered valid as long as this matches the - // lifecycle_id of the arena being used. - uint64_t last_lifecycle_id_seen; - SerialArena* last_serial_arena; - }; - - // Lifecycle_id can be highly contended variable in a situation of lots of - // arena creation. Make sure that other global variables are not sharing the - // cacheline. -#ifdef _MSC_VER -#pragma warning(disable : 4324) -#endif - struct alignas(kCacheAlignment) CacheAlignedLifecycleIdGenerator { - std::atomic<LifecycleIdAtomic> id; - }; - static CacheAlignedLifecycleIdGenerator lifecycle_id_generator_; -#if defined(GOOGLE_PROTOBUF_NO_THREADLOCAL) - // iOS does not support __thread keyword so we use a custom thread local - // storage class we implemented. - static ThreadCache& thread_cache(); -#elif defined(PROTOBUF_USE_DLLS) - // Thread local variables cannot be exposed through DLL interface but we can - // wrap them in static functions. - static ThreadCache& thread_cache(); -#else - static PROTOBUF_THREAD_LOCAL ThreadCache thread_cache_; - static ThreadCache& thread_cache() { return thread_cache_; } -#endif - - ThreadSafeArenaStatsHandle arena_stats_; - - GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(ThreadSafeArena); - // All protos have pointers back to the arena hence Arena must have - // pointer stability. - ThreadSafeArena(ThreadSafeArena&&) = delete; - ThreadSafeArena& operator=(ThreadSafeArena&&) = delete; - - public: - // kBlockHeaderSize is sizeof(Block), aligned up to the nearest multiple of 8 - // to protect the invariant that pos is always at a multiple of 8. - static constexpr size_t kBlockHeaderSize = SerialArena::kBlockHeaderSize; - static constexpr size_t kSerialArenaSize = - (sizeof(SerialArena) + 7) & static_cast<size_t>(-8); - static_assert(kBlockHeaderSize % 8 == 0, - "kBlockHeaderSize must be a multiple of 8."); - static_assert(kSerialArenaSize % 8 == 0, - "kSerialArenaSize must be a multiple of 8."); -}; - -} // namespace internal -} // namespace protobuf -} // namespace google - -#include <google/protobuf/port_undef.inc> - -#endif // GOOGLE_PROTOBUF_ARENA_IMPL_H__ diff --git a/include/google/protobuf/arenastring.h b/include/google/protobuf/arenastring.h deleted file mode 100644 index 6bc8395f23..0000000000 --- a/include/google/protobuf/arenastring.h +++ /dev/null @@ -1,480 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// 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 -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -#ifndef GOOGLE_PROTOBUF_ARENASTRING_H__ -#define GOOGLE_PROTOBUF_ARENASTRING_H__ - -#include <algorithm> -#include <string> -#include <type_traits> -#include <utility> - -#include <google/protobuf/stubs/logging.h> -#include <google/protobuf/stubs/common.h> -#include <google/protobuf/arena.h> -#include <google/protobuf/port.h> -#include <google/protobuf/explicitly_constructed.h> - -// must be last: -#include <google/protobuf/port_def.inc> - -#ifdef SWIG -#error "You cannot SWIG proto headers" -#endif - - -namespace google { -namespace protobuf { -namespace internal { -class EpsCopyInputStream; - -class SwapFieldHelper; - -// Declared in message_lite.h -PROTOBUF_EXPORT extern ExplicitlyConstructedArenaString - fixed_address_empty_string; - -// Lazy string instance to support string fields with non-empty default. -// These are initialized on the first call to .get(). -class PROTOBUF_EXPORT LazyString { - public: - // We explicitly make LazyString an aggregate so that MSVC can do constant - // initialization on it without marking it `constexpr`. - // We do not want to use `constexpr` because it makes it harder to have extern - // storage for it and causes library bloat. - struct InitValue { - const char* ptr; - size_t size; - }; - // We keep a union of the initialization value and the std::string to save on - // space. We don't need the string array after Init() is done. - union { - mutable InitValue init_value_; - alignas(std::string) mutable char string_buf_[sizeof(std::string)]; - }; - mutable std::atomic<const std::string*> inited_; - - const std::string& get() const { - // This check generates less code than a call-once invocation. - auto* res = inited_.load(std::memory_order_acquire); - if (PROTOBUF_PREDICT_FALSE(res == nullptr)) return Init(); - return *res; - } - - private: - // Initialize the string in `string_buf_`, update `inited_` and return it. - // We return it here to avoid having to read it again in the inlined code. - const std::string& Init() const; -}; - -class TaggedStringPtr { - public: - // Bit flags qualifying string properties. We can use 2 bits as - // ptr_ is guaranteed and enforced to be aligned on 4 byte boundaries. - enum Flags { - kArenaBit = 0x1, // ptr is arena allocated - kMutableBit = 0x2, // ptr contents are fully mutable - kMask = 0x3 // Bit mask - }; - - // Composed logical types - enum Type { - // Default strings are immutable and never owned. - kDefault = 0, - - // Allocated strings are mutable and (as the name implies) owned. - // A heap allocated string must be deleted. - kAllocated = kMutableBit, - - // Mutable arena strings are strings where the string instance is owned - // by the arena, but the string contents itself are owned by the string - // instance. Mutable arena string instances need to be destroyed which is - // typically done through a cleanup action added to the arena owning it. - kMutableArena = kArenaBit | kMutableBit, - - // Fixed size arena strings are strings where both the string instance and - // the string contents are fully owned by the arena. Fixed size arena - // strings are a platform and c++ library specific customization. Fixed - // size arena strings are immutable, with the exception of custom internal - // updates to the content that fit inside the existing capacity. - // Fixed size arena strings must never be deleted or destroyed. - kFixedSizeArena = kArenaBit, - }; - - TaggedStringPtr() = default; - explicit constexpr TaggedStringPtr(ExplicitlyConstructedArenaString* ptr) - : ptr_(ptr) {} - - // Sets the value to `p`, tagging the value as being a 'default' value. - // See documentation for kDefault for more info. - inline const std::string* SetDefault(const std::string* p) { - return TagAs(kDefault, const_cast<std::string*>(p)); - } - - // Sets the value to `p`, tagging the value as a heap allocated value. - // Allocated strings are mutable and (as the name implies) owned. - // `p` must not be null - inline std::string* SetAllocated(std::string* p) { - return TagAs(kAllocated, p); - } - - // Sets the value to `p`, tagging the value as a fixed size arena string. - // See documentation for kFixedSizeArena for more info. - // `p` must not be null - inline std::string* SetFixedSizeArena(std::string* p) { - return TagAs(kFixedSizeArena, p); - } - - // Sets the value to `p`, tagging the value as a mutable arena string. - // See documentation for kMutableArena for more info. - // `p` must not be null - inline std::string* SetMutableArena(std::string* p) { - return TagAs(kMutableArena, p); - } - - // Returns true if the contents of the current string are fully mutable. - inline bool IsMutable() const { return as_int() & kMutableBit; } - - // Returns true if the current string is an immutable default value. - inline bool IsDefault() const { return (as_int() & kMask) == kDefault; } - - // If the current string is a heap-allocated mutable value, returns a pointer - // to it. Returns nullptr otherwise. - inline std::string *GetIfAllocated() const { - auto allocated = as_int() ^ kAllocated; - if (allocated & kMask) return nullptr; - - auto ptr = reinterpret_cast<std::string*>(allocated); - PROTOBUF_ASSUME(ptr != nullptr); - return ptr; - } - - // Returns true if the current string is an arena allocated value. - // This means it's either a mutable or fixed size arena string. - inline bool IsArena() const { return as_int() & kArenaBit; } - - // Returns true if the current string is a fixed size arena allocated value. - inline bool IsFixedSizeArena() const { - return (as_int() & kMask) == kFixedSizeArena; - } - - // Returns the contained string pointer. - inline std::string* Get() const { - return reinterpret_cast<std::string*>(as_int() & ~kMask); - } - - // Returns true if the contained pointer is null, indicating some error. - // The Null value is only used during parsing for temporary values. - // A persisted ArenaStringPtr value is never null. - inline bool IsNull() { return ptr_ == nullptr; } - - private: - static inline void assert_aligned(const void* p) { - GOOGLE_DCHECK_EQ(reinterpret_cast<uintptr_t>(p) & kMask, 0UL); - } - - inline std::string* TagAs(Type type, std::string* p) { - GOOGLE_DCHECK(p != nullptr); - assert_aligned(p); - ptr_ = reinterpret_cast<void*>(reinterpret_cast<uintptr_t>(p) | type); - return p; - } - - uintptr_t as_int() const { return reinterpret_cast<uintptr_t>(ptr_); } - void* ptr_; -}; - -static_assert(std::is_trivial<TaggedStringPtr>::value, - "TaggedStringPtr must be trivial"); - -// This class encapsulates a pointer to a std::string with or without arena -// owned contents, tagged by the bottom bits of the string pointer. It is a -// high-level wrapper that almost directly corresponds to the interface required -// by string fields in generated code. It replaces the old std::string* pointer -// in such cases. -// -// The string pointer is tagged to be either a default, externally owned value, -// a mutable heap allocated value, or an arena allocated value. The object uses -// a single global instance of an empty string that is used as the initial -// default value. Fields that have empty default values directly use this global -// default. Fields that have non empty default values are supported through -// lazily initialized default values managed by the LazyString class. -// -// Generated code and reflection code both ensure that ptr_ is never null. -// Because ArenaStringPtr is used in oneof unions, its constructor is a NOP and -// the field is always manually initialized via method calls. -// -// See TaggedStringPtr for more information about the types of string values -// being held, and the mutable and ownership invariants for each type. -struct PROTOBUF_EXPORT ArenaStringPtr { - ArenaStringPtr() = default; - constexpr ArenaStringPtr(ExplicitlyConstructedArenaString* default_value, - ConstantInitialized) - : tagged_ptr_(default_value) {} - - // Called from generated code / reflection runtime only. Resets value to point - // to a default string pointer, with the semantics that this ArenaStringPtr - // does not own the pointed-to memory. Disregards initial value of ptr_ (so - // this is the *ONLY* safe method to call after construction or when - // reinitializing after becoming the active field in a oneof union). - inline void InitDefault(); - - // Similar to `InitDefault` except that it allows the default value to be - // initialized to an externally owned string. This method is called from - // parsing code. `str` must not be null and outlive this instance. - inline void InitExternal(const std::string* str); - - // Called from generated code / reflection runtime only. Resets the value of - // this instances to the heap allocated value in `str`. `str` must not be - // null. Invokes `arena->Own(str)` to transfer ownership into the arena if - // `arena` is not null, else, `str` will be owned by ArenaStringPtr. This - // function should only be used to initialize a ArenaStringPtr or on an - // instance known to not carry any heap allocated value. - inline void InitAllocated(std::string* str, Arena* arena); - - void Set(ConstStringParam value, Arena* arena); - void Set(std::string&& value, Arena* arena); - void Set(const char* s, Arena* arena); - void Set(const char* s, size_t n, Arena* arena); - - void SetBytes(ConstStringParam value, Arena* arena); - void SetBytes(std::string&& value, Arena* arena); - void SetBytes(const char* s, Arena* arena); - void SetBytes(const void* p, size_t n, Arena* arena); - - template <typename RefWrappedType> - void Set(std::reference_wrapper<RefWrappedType> const_string_ref, - ::google::protobuf::Arena* arena) { - Set(const_string_ref.get(), arena); - } - - // Returns a mutable std::string reference. - // The version accepting a `LazyString` value is used in the generated code to - // initialize mutable copies for fields with a non-empty default where the - // default value is lazily initialized. - std::string* Mutable(Arena* arena); - std::string* Mutable(const LazyString& default_value, Arena* arena); - - // Gets a mutable pointer with unspecified contents. - // This function is identical to Mutable(), except it is optimized for the - // case where the caller is not interested in the current contents. For - // example, if the current field is not mutable, it will re-initialize the - // value with an empty string rather than a (non-empty) default value. - // Likewise, if the current value is a fixed size arena string with contents, - // it will be initialized into an empty mutable arena string. - std::string* MutableNoCopy(Arena* arena); - - // Basic accessors. - PROTOBUF_NDEBUG_INLINE const std::string& Get() const { - // Unconditionally mask away the tag. - return *tagged_ptr_.Get(); - } - - // Returns a pointer to the stored contents for this instance. - // This method is for internal debugging and tracking purposes only. - PROTOBUF_NDEBUG_INLINE const std::string* UnsafeGetPointer() const - PROTOBUF_RETURNS_NONNULL { - return tagged_ptr_.Get(); - } - - // Release returns a std::string* instance that is heap-allocated and is not - // Own()'d by any arena. If the field is not set, this returns nullptr. The - // caller retains ownership. Clears this field back to the default state. - // Used to implement release_<field>() methods on generated classes. - PROTOBUF_NODISCARD std::string* Release(); - - // Takes a std::string that is heap-allocated, and takes ownership. The - // std::string's destructor is registered with the arena. Used to implement - // set_allocated_<field> in generated classes. - void SetAllocated(std::string* value, Arena* arena); - - // Frees storage (if not on an arena). - void Destroy(); - - // Clears content, but keeps allocated std::string, to avoid the overhead of - // heap operations. After this returns, the content (as seen by the user) will - // always be the empty std::string. Assumes that |default_value| is an empty - // std::string. - void ClearToEmpty(); - - // Clears content, assuming that the current value is not the empty - // string default. - void ClearNonDefaultToEmpty(); - - // Clears content, but keeps allocated std::string if arena != nullptr, to - // avoid the overhead of heap operations. After this returns, the content - // (as seen by the user) will always be equal to |default_value|. - void ClearToDefault(const LazyString& default_value, ::google::protobuf::Arena* arena); - - // Swaps internal pointers. Arena-safety semantics: this is guarded by the - // logic in Swap()/UnsafeArenaSwap() at the message level, so this method is - // 'unsafe' if called directly. - inline PROTOBUF_NDEBUG_INLINE static void InternalSwap(ArenaStringPtr* rhs, - Arena* rhs_arena, - ArenaStringPtr* lhs, - Arena* lhs_arena); - - // Internal setter used only at parse time to directly set a donated string - // value. - void UnsafeSetTaggedPointer(TaggedStringPtr value) { tagged_ptr_ = value; } - // Generated code only! An optimization, in certain cases the generated - // code is certain we can obtain a std::string with no default checks and - // tag tests. - std::string* UnsafeMutablePointer() PROTOBUF_RETURNS_NONNULL; - - // Returns true if this instances holds an immutable default value. - inline bool IsDefault() const { return tagged_ptr_.IsDefault(); } - - private: - template <typename... Args> - inline std::string* NewString(Arena* arena, Args&&... args) { - if (arena == nullptr) { - auto* s = new std::string(std::forward<Args>(args)...); - return tagged_ptr_.SetAllocated(s); - } else { - auto* s = Arena::Create<std::string>(arena, std::forward<Args>(args)...); - return tagged_ptr_.SetMutableArena(s); - } - } - - TaggedStringPtr tagged_ptr_; - - bool IsFixedSizeArena() const { return false; } - - // Swaps tagged pointer without debug hardening. This is to allow python - // protobuf to maintain pointer stability even in DEBUG builds. - inline PROTOBUF_NDEBUG_INLINE static void UnsafeShallowSwap( - ArenaStringPtr* rhs, ArenaStringPtr* lhs) { - std::swap(lhs->tagged_ptr_, rhs->tagged_ptr_); - } - - friend class ::google::protobuf::internal::SwapFieldHelper; - friend class TcParser; - - // Slow paths. - - // MutableSlow requires that !IsString() || IsDefault - // Variadic to support 0 args for empty default and 1 arg for LazyString. - template <typename... Lazy> - std::string* MutableSlow(::google::protobuf::Arena* arena, const Lazy&... lazy_default); - - friend class EpsCopyInputStream; -}; - -inline void ArenaStringPtr::InitDefault() { - tagged_ptr_ = TaggedStringPtr(&fixed_address_empty_string); -} - -inline void ArenaStringPtr::InitExternal(const std::string* str) { - tagged_ptr_.SetDefault(str); -} - -inline void ArenaStringPtr::InitAllocated(std::string* str, Arena* arena) { - if (arena != nullptr) { - tagged_ptr_.SetMutableArena(str); - arena->Own(str); - } else { - tagged_ptr_.SetAllocated(str); - } -} - -inline void ArenaStringPtr::Set(const char* s, Arena* arena) { - Set(ConstStringParam{s}, arena); -} - -inline void ArenaStringPtr::Set(const char* s, size_t n, Arena* arena) { - Set(ConstStringParam{s, n}, arena); -} - -inline void ArenaStringPtr::SetBytes(ConstStringParam value, Arena* arena) { - Set(value, arena); -} - -inline void ArenaStringPtr::SetBytes(std::string&& value, Arena* arena) { - Set(std::move(value), arena); -} - -inline void ArenaStringPtr::SetBytes(const char* s, Arena* arena) { - Set(s, arena); -} - -inline void ArenaStringPtr::SetBytes(const void* p, size_t n, Arena* arena) { - Set(ConstStringParam{static_cast<const char*>(p), n}, arena); -} - -// Make sure rhs_arena allocated rhs, and lhs_arena allocated lhs. -inline PROTOBUF_NDEBUG_INLINE void ArenaStringPtr::InternalSwap( // - ArenaStringPtr* rhs, Arena* rhs_arena, // - ArenaStringPtr* lhs, Arena* lhs_arena) { - // Silence unused variable warnings in release buildls. - (void)rhs_arena; - (void)lhs_arena; - std::swap(lhs->tagged_ptr_, rhs->tagged_ptr_); -#ifdef PROTOBUF_FORCE_COPY_IN_SWAP - auto force_realloc = [](ArenaStringPtr* p, Arena* arena) { - if (p->IsDefault()) return; - std::string* old_value = p->tagged_ptr_.Get(); - std::string* new_value = - p->IsFixedSizeArena() - ? Arena::Create<std::string>(arena, *old_value) - : Arena::Create<std::string>(arena, std::move(*old_value)); - if (arena == nullptr) { - delete old_value; - p->tagged_ptr_.SetAllocated(new_value); - } else { - p->tagged_ptr_.SetMutableArena(new_value); - } - }; - // Because, at this point, tagged_ptr_ has been swapped, arena should also be - // swapped. - force_realloc(lhs, rhs_arena); - force_realloc(rhs, lhs_arena); -#endif // PROTOBUF_FORCE_COPY_IN_SWAP -} - -inline void ArenaStringPtr::ClearNonDefaultToEmpty() { - // Unconditionally mask away the tag. - tagged_ptr_.Get()->clear(); -} - -inline std::string* ArenaStringPtr::UnsafeMutablePointer() { - GOOGLE_DCHECK(tagged_ptr_.IsMutable()); - GOOGLE_DCHECK(tagged_ptr_.Get() != nullptr); - return tagged_ptr_.Get(); -} - - -} // namespace internal -} // namespace protobuf -} // namespace google - -#include <google/protobuf/port_undef.inc> - -#endif // GOOGLE_PROTOBUF_ARENASTRING_H__ diff --git a/include/google/protobuf/arenaz_sampler.h b/include/google/protobuf/arenaz_sampler.h deleted file mode 100644 index b04b0cc678..0000000000 --- a/include/google/protobuf/arenaz_sampler.h +++ /dev/null @@ -1,207 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// 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 -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -#ifndef GOOGLE_PROTOBUF_SRC_GOOGLE_PROTOBUF_ARENAZ_SAMPLER_H__ -#define GOOGLE_PROTOBUF_SRC_GOOGLE_PROTOBUF_ARENAZ_SAMPLER_H__ - -#include <atomic> -#include <cstddef> -#include <cstdint> - - -// Must be included last. -#include <google/protobuf/port_def.inc> - -namespace google { -namespace protobuf { -namespace internal { - -#if defined(PROTOBUF_ARENAZ_SAMPLE) -struct ThreadSafeArenaStats; -void RecordResetSlow(ThreadSafeArenaStats* info); -void RecordAllocateSlow(ThreadSafeArenaStats* info, size_t requested, - size_t allocated, size_t wasted); -// Stores information about a sampled thread safe arena. All mutations to this -// *must* be made through `Record*` functions below. All reads from this *must* -// only occur in the callback to `ThreadSafeArenazSampler::Iterate`. -struct ThreadSafeArenaStats - : public absl::profiling_internal::Sample<ThreadSafeArenaStats> { - // Constructs the object but does not fill in any fields. - ThreadSafeArenaStats(); - ~ThreadSafeArenaStats(); - - // Puts the object into a clean state, fills in the logically `const` members, - // blocking for any readers that are currently sampling the object. - void PrepareForSampling() ABSL_EXCLUSIVE_LOCKS_REQUIRED(init_mu); - - // These fields are mutated by the various Record* APIs and need to be - // thread-safe. - std::atomic<int> num_allocations; - std::atomic<int> num_resets; - std::atomic<size_t> bytes_requested; - std::atomic<size_t> bytes_allocated; - std::atomic<size_t> bytes_wasted; - // Records the largest size an arena ever had. Maintained across resets. - std::atomic<size_t> max_bytes_allocated; - // Bit i when set to 1 indicates that a thread with tid % 63 = i accessed the - // underlying arena. The field is maintained across resets. - std::atomic<uint64_t> thread_ids; - - // All of the fields below are set by `PrepareForSampling`, they must not - // be mutated in `Record*` functions. They are logically `const` in that - // sense. These are guarded by init_mu, but that is not externalized to - // clients, who can only read them during - // `ThreadSafeArenazSampler::Iterate` which will hold the lock. - static constexpr int kMaxStackDepth = 64; - int32_t depth; - void* stack[kMaxStackDepth]; - static void RecordAllocateStats(ThreadSafeArenaStats* info, size_t requested, - size_t allocated, size_t wasted) { - if (PROTOBUF_PREDICT_TRUE(info == nullptr)) return; - RecordAllocateSlow(info, requested, allocated, wasted); - } -}; - -ThreadSafeArenaStats* SampleSlow(int64_t* next_sample); -void UnsampleSlow(ThreadSafeArenaStats* info); - -class ThreadSafeArenaStatsHandle { - public: - explicit ThreadSafeArenaStatsHandle() = default; - explicit ThreadSafeArenaStatsHandle(ThreadSafeArenaStats* info) - : info_(info) {} - - ~ThreadSafeArenaStatsHandle() { - if (PROTOBUF_PREDICT_TRUE(info_ == nullptr)) return; - UnsampleSlow(info_); - } - - ThreadSafeArenaStatsHandle(ThreadSafeArenaStatsHandle&& other) noexcept - : info_(absl::exchange(other.info_, nullptr)) {} - - ThreadSafeArenaStatsHandle& operator=( - ThreadSafeArenaStatsHandle&& other) noexcept { - if (PROTOBUF_PREDICT_FALSE(info_ != nullptr)) { - UnsampleSlow(info_); - } - info_ = absl::exchange(other.info_, nullptr); - return *this; - } - - void RecordReset() { - if (PROTOBUF_PREDICT_TRUE(info_ == nullptr)) return; - RecordResetSlow(info_); - } - - ThreadSafeArenaStats* MutableStats() { return info_; } - - friend void swap(ThreadSafeArenaStatsHandle& lhs, - ThreadSafeArenaStatsHandle& rhs) { - std::swap(lhs.info_, rhs.info_); - } - - friend class ThreadSafeArenaStatsHandlePeer; - - private: - ThreadSafeArenaStats* info_ = nullptr; -}; - -using ThreadSafeArenazSampler = - ::absl::profiling_internal::SampleRecorder<ThreadSafeArenaStats>; - -extern PROTOBUF_THREAD_LOCAL int64_t global_next_sample; - -// Returns an RAII sampling handle that manages registration and unregistation -// with the global sampler. -inline ThreadSafeArenaStatsHandle Sample() { - if (PROTOBUF_PREDICT_TRUE(--global_next_sample > 0)) { - return ThreadSafeArenaStatsHandle(nullptr); - } - return ThreadSafeArenaStatsHandle(SampleSlow(&global_next_sample)); -} - -#else -struct ThreadSafeArenaStats { - static void RecordAllocateStats(ThreadSafeArenaStats*, size_t /*requested*/, - size_t /*allocated*/, size_t /*wasted*/) {} -}; - -ThreadSafeArenaStats* SampleSlow(int64_t* next_sample); -void UnsampleSlow(ThreadSafeArenaStats* info); - -class ThreadSafeArenaStatsHandle { - public: - explicit ThreadSafeArenaStatsHandle() = default; - explicit ThreadSafeArenaStatsHandle(ThreadSafeArenaStats*) {} - - void RecordReset() {} - - ThreadSafeArenaStats* MutableStats() { return nullptr; } - - friend void swap(ThreadSafeArenaStatsHandle&, ThreadSafeArenaStatsHandle&) {} - - private: - friend class ThreadSafeArenaStatsHandlePeer; -}; - -class ThreadSafeArenazSampler { - public: - void Unregister(ThreadSafeArenaStats*) {} - void SetMaxSamples(int32_t) {} -}; - -// Returns an RAII sampling handle that manages registration and unregistation -// with the global sampler. -inline ThreadSafeArenaStatsHandle Sample() { - return ThreadSafeArenaStatsHandle(nullptr); -} -#endif // defined(PROTOBUF_ARENAZ_SAMPLE) - -// Returns a global Sampler. -ThreadSafeArenazSampler& GlobalThreadSafeArenazSampler(); - -// Enables or disables sampling for thread safe arenas. -void SetThreadSafeArenazEnabled(bool enabled); - -// Sets the rate at which thread safe arena will be sampled. -void SetThreadSafeArenazSampleParameter(int32_t rate); - -// Sets a soft max for the number of samples that will be kept. -void SetThreadSafeArenazMaxSamples(int32_t max); - -// Sets the current value for when arenas should be next sampled. -void SetThreadSafeArenazGlobalNextSample(int64_t next_sample); - -} // namespace internal -} // namespace protobuf -} // namespace google - -#include <google/protobuf/port_undef.inc> -#endif // GOOGLE_PROTOBUF_SRC_PROTOBUF_ARENAZ_SAMPLER_H__ diff --git a/include/google/protobuf/compiler/code_generator.h b/include/google/protobuf/compiler/code_generator.h deleted file mode 100644 index 9c0b115cf1..0000000000 --- a/include/google/protobuf/compiler/code_generator.h +++ /dev/null @@ -1,207 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// 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 -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -// Author: kenton@google.com (Kenton Varda) -// Based on original Protocol Buffers design by -// Sanjay Ghemawat, Jeff Dean, and others. -// -// Defines the abstract interface implemented by each of the language-specific -// code generators. - -#ifndef GOOGLE_PROTOBUF_COMPILER_CODE_GENERATOR_H__ -#define GOOGLE_PROTOBUF_COMPILER_CODE_GENERATOR_H__ - -#include <string> -#include <utility> -#include <vector> -#include <google/protobuf/stubs/common.h> - -// Must be included last. -#include <google/protobuf/port_def.inc> - -namespace google { -namespace protobuf { - -namespace io { -class ZeroCopyOutputStream; -} -class FileDescriptor; -class GeneratedCodeInfo; - -namespace compiler { -class AccessInfoMap; - -class Version; - -// Defined in this file. -class CodeGenerator; -class GeneratorContext; - -// The abstract interface to a class which generates code implementing a -// particular proto file in a particular language. A number of these may -// be registered with CommandLineInterface to support various languages. -class PROTOC_EXPORT CodeGenerator { - public: - inline CodeGenerator() {} - virtual ~CodeGenerator(); - - // Generates code for the given proto file, generating one or more files in - // the given output directory. - // - // A parameter to be passed to the generator can be specified on the command - // line. This is intended to be used to pass generator specific parameters. - // It is empty if no parameter was given. ParseGeneratorParameter (below), - // can be used to accept multiple parameters within the single parameter - // command line flag. - // - // Returns true if successful. Otherwise, sets *error to a description of - // the problem (e.g. "invalid parameter") and returns false. - virtual bool Generate(const FileDescriptor* file, - const std::string& parameter, - GeneratorContext* generator_context, - std::string* error) const = 0; - - // Generates code for all given proto files. - // - // WARNING: The canonical code generator design produces one or two output - // files per input .proto file, and we do not wish to encourage alternate - // designs. - // - // A parameter is given as passed on the command line, as in |Generate()| - // above. - // - // Returns true if successful. Otherwise, sets *error to a description of - // the problem (e.g. "invalid parameter") and returns false. - virtual bool GenerateAll(const std::vector<const FileDescriptor*>& files, - const std::string& parameter, - GeneratorContext* generator_context, - std::string* error) const; - - // This must be kept in sync with plugin.proto. See that file for - // documentation on each value. - enum Feature { - FEATURE_PROTO3_OPTIONAL = 1, - }; - - // Implement this to indicate what features this code generator supports. - // - // This must be a bitwise OR of values from the Feature enum above (or zero). - virtual uint64_t GetSupportedFeatures() const { return 0; } - - // This is no longer used, but this class is part of the opensource protobuf - // library, so it has to remain to keep vtables the same for the current - // version of the library. When protobufs does a api breaking change, the - // method can be removed. - virtual bool HasGenerateAll() const { return true; } - - private: - GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(CodeGenerator); -}; - -// CodeGenerators generate one or more files in a given directory. This -// abstract interface represents the directory to which the CodeGenerator is -// to write and other information about the context in which the Generator -// runs. -class PROTOC_EXPORT GeneratorContext { - public: - inline GeneratorContext() { - } - virtual ~GeneratorContext(); - - // Opens the given file, truncating it if it exists, and returns a - // ZeroCopyOutputStream that writes to the file. The caller takes ownership - // of the returned object. This method never fails (a dummy stream will be - // returned instead). - // - // The filename given should be relative to the root of the source tree. - // E.g. the C++ generator, when generating code for "foo/bar.proto", will - // generate the files "foo/bar.pb.h" and "foo/bar.pb.cc"; note that - // "foo/" is included in these filenames. The filename is not allowed to - // contain "." or ".." components. - virtual io::ZeroCopyOutputStream* Open(const std::string& filename) = 0; - - // Similar to Open() but the output will be appended to the file if exists - virtual io::ZeroCopyOutputStream* OpenForAppend(const std::string& filename); - - // Creates a ZeroCopyOutputStream which will insert code into the given file - // at the given insertion point. See plugin.proto (plugin.pb.h) for more - // information on insertion points. The default implementation - // assert-fails -- it exists only for backwards-compatibility. - // - // WARNING: This feature is currently EXPERIMENTAL and is subject to change. - virtual io::ZeroCopyOutputStream* OpenForInsert( - const std::string& filename, const std::string& insertion_point); - - // Similar to OpenForInsert, but if `info` is non-empty, will open (or create) - // filename.pb.meta and insert info at the appropriate place with the - // necessary shifts. The default implementation ignores `info`. - // - // WARNING: This feature will be REMOVED in the near future. - virtual io::ZeroCopyOutputStream* OpenForInsertWithGeneratedCodeInfo( - const std::string& filename, const std::string& insertion_point, - const google::protobuf::GeneratedCodeInfo& info); - - // Returns a vector of FileDescriptors for all the files being compiled - // in this run. Useful for languages, such as Go, that treat files - // differently when compiled as a set rather than individually. - virtual void ListParsedFiles(std::vector<const FileDescriptor*>* output); - - // Retrieves the version number of the protocol compiler associated with - // this GeneratorContext. - virtual void GetCompilerVersion(Version* version) const; - - - private: - GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(GeneratorContext); -}; - -// The type GeneratorContext was once called OutputDirectory. This typedef -// provides backward compatibility. -typedef GeneratorContext OutputDirectory; - -// Several code generators treat the parameter argument as holding a -// list of options separated by commas. This helper function parses -// a set of comma-delimited name/value pairs: e.g., -// "foo=bar,baz,moo=corge" -// parses to the pairs: -// ("foo", "bar"), ("baz", ""), ("moo", "corge") -PROTOC_EXPORT void ParseGeneratorParameter( - const std::string&, std::vector<std::pair<std::string, std::string> >*); - -// Strips ".proto" or ".protodevel" from the end of a filename. -PROTOC_EXPORT std::string StripProto(const std::string& filename); - -} // namespace compiler -} // namespace protobuf -} // namespace google - -#include <google/protobuf/port_undef.inc> - -#endif // GOOGLE_PROTOBUF_COMPILER_CODE_GENERATOR_H__ diff --git a/include/google/protobuf/compiler/command_line_interface.h b/include/google/protobuf/compiler/command_line_interface.h deleted file mode 100644 index e8425508b1..0000000000 --- a/include/google/protobuf/compiler/command_line_interface.h +++ /dev/null @@ -1,464 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// 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 -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -// Author: kenton@google.com (Kenton Varda) -// Based on original Protocol Buffers design by -// Sanjay Ghemawat, Jeff Dean, and others. -// -// Implements the Protocol Compiler front-end such that it may be reused by -// custom compilers written to support other languages. - -#ifndef GOOGLE_PROTOBUF_COMPILER_COMMAND_LINE_INTERFACE_H__ -#define GOOGLE_PROTOBUF_COMPILER_COMMAND_LINE_INTERFACE_H__ - -#include <cstdint> -#include <map> -#include <memory> -#include <set> -#include <string> -#include <unordered_map> -#include <unordered_set> -#include <utility> -#include <vector> - -#include <google/protobuf/stubs/common.h> - -// Must be included last. -#include <google/protobuf/port_def.inc> - -namespace google { -namespace protobuf { - -class Descriptor; // descriptor.h -class DescriptorDatabase; // descriptor_database.h -class DescriptorPool; // descriptor.h -class FileDescriptor; // descriptor.h -class FileDescriptorSet; // descriptor.h -class FileDescriptorProto; // descriptor.pb.h -template <typename T> -class RepeatedPtrField; // repeated_field.h -class SimpleDescriptorDatabase; // descriptor_database.h - -namespace compiler { - -class CodeGenerator; // code_generator.h -class GeneratorContext; // code_generator.h -class DiskSourceTree; // importer.h - -// This class implements the command-line interface to the protocol compiler. -// It is designed to make it very easy to create a custom protocol compiler -// supporting the languages of your choice. For example, if you wanted to -// create a custom protocol compiler binary which includes both the regular -// C++ support plus support for your own custom output "Foo", you would -// write a class "FooGenerator" which implements the CodeGenerator interface, -// then write a main() procedure like this: -// -// int main(int argc, char* argv[]) { -// google::protobuf::compiler::CommandLineInterface cli; -// -// // Support generation of C++ source and headers. -// google::protobuf::compiler::cpp::CppGenerator cpp_generator; -// cli.RegisterGenerator("--cpp_out", &cpp_generator, -// "Generate C++ source and header."); -// -// // Support generation of Foo code. -// FooGenerator foo_generator; -// cli.RegisterGenerator("--foo_out", &foo_generator, -// "Generate Foo file."); -// -// return cli.Run(argc, argv); -// } -// -// The compiler is invoked with syntax like: -// protoc --cpp_out=outdir --foo_out=outdir --proto_path=src src/foo.proto -// -// The .proto file to compile can be specified on the command line using either -// its physical file path, or a virtual path relative to a directory specified -// in --proto_path. For example, for src/foo.proto, the following two protoc -// invocations work the same way: -// 1. protoc --proto_path=src src/foo.proto (physical file path) -// 2. protoc --proto_path=src foo.proto (virtual path relative to src) -// -// If a file path can be interpreted both as a physical file path and as a -// relative virtual path, the physical file path takes precedence. -// -// For a full description of the command-line syntax, invoke it with --help. -class PROTOC_EXPORT CommandLineInterface { - public: - static const char* const kPathSeparator; - - CommandLineInterface(); - ~CommandLineInterface(); - - // Register a code generator for a language. - // - // Parameters: - // * flag_name: The command-line flag used to specify an output file of - // this type. The name must start with a '-'. If the name is longer - // than one letter, it must start with two '-'s. - // * generator: The CodeGenerator which will be called to generate files - // of this type. - // * help_text: Text describing this flag in the --help output. - // - // Some generators accept extra parameters. You can specify this parameter - // on the command-line by placing it before the output directory, separated - // by a colon: - // protoc --foo_out=enable_bar:outdir - // The text before the colon is passed to CodeGenerator::Generate() as the - // "parameter". - void RegisterGenerator(const std::string& flag_name, CodeGenerator* generator, - const std::string& help_text); - - // Register a code generator for a language. - // Besides flag_name you can specify another option_flag_name that could be - // used to pass extra parameters to the registered code generator. - // Suppose you have registered a generator by calling: - // command_line_interface.RegisterGenerator("--foo_out", "--foo_opt", ...) - // Then you could invoke the compiler with a command like: - // protoc --foo_out=enable_bar:outdir --foo_opt=enable_baz - // This will pass "enable_bar,enable_baz" as the parameter to the generator. - void RegisterGenerator(const std::string& flag_name, - const std::string& option_flag_name, - CodeGenerator* generator, - const std::string& help_text); - - // Enables "plugins". In this mode, if a command-line flag ends with "_out" - // but does not match any registered generator, the compiler will attempt to - // find a "plugin" to implement the generator. Plugins are just executables. - // They should live somewhere in the PATH. - // - // The compiler determines the executable name to search for by concatenating - // exe_name_prefix with the unrecognized flag name, removing "_out". So, for - // example, if exe_name_prefix is "protoc-" and you pass the flag --foo_out, - // the compiler will try to run the program "protoc-gen-foo". - // - // The plugin program should implement the following usage: - // plugin [--out=OUTDIR] [--parameter=PARAMETER] PROTO_FILES < DESCRIPTORS - // --out indicates the output directory (as passed to the --foo_out - // parameter); if omitted, the current directory should be used. --parameter - // gives the generator parameter, if any was provided (see below). The - // PROTO_FILES list the .proto files which were given on the compiler - // command-line; these are the files for which the plugin is expected to - // generate output code. Finally, DESCRIPTORS is an encoded FileDescriptorSet - // (as defined in descriptor.proto). This is piped to the plugin's stdin. - // The set will include descriptors for all the files listed in PROTO_FILES as - // well as all files that they import. The plugin MUST NOT attempt to read - // the PROTO_FILES directly -- it must use the FileDescriptorSet. - // - // The plugin should generate whatever files are necessary, as code generators - // normally do. It should write the names of all files it generates to - // stdout. The names should be relative to the output directory, NOT absolute - // names or relative to the current directory. If any errors occur, error - // messages should be written to stderr. If an error is fatal, the plugin - // should exit with a non-zero exit code. - // - // Plugins can have generator parameters similar to normal built-in - // generators. Extra generator parameters can be passed in via a matching - // "_opt" parameter. For example: - // protoc --plug_out=enable_bar:outdir --plug_opt=enable_baz - // This will pass "enable_bar,enable_baz" as the parameter to the plugin. - // - void AllowPlugins(const std::string& exe_name_prefix); - - // Run the Protocol Compiler with the given command-line parameters. - // Returns the error code which should be returned by main(). - // - // It may not be safe to call Run() in a multi-threaded environment because - // it calls strerror(). I'm not sure why you'd want to do this anyway. - int Run(int argc, const char* const argv[]); - - // DEPRECATED. Calling this method has no effect. Protocol compiler now - // always try to find the .proto file relative to the current directory - // first and if the file is not found, it will then treat the input path - // as a virtual path. - void SetInputsAreProtoPathRelative(bool /* enable */) {} - - // Provides some text which will be printed when the --version flag is - // used. The version of libprotoc will also be printed on the next line - // after this text. - void SetVersionInfo(const std::string& text) { version_info_ = text; } - - - private: - // ----------------------------------------------------------------- - - class ErrorPrinter; - class GeneratorContextImpl; - class MemoryOutputStream; - typedef std::unordered_map<std::string, std::unique_ptr<GeneratorContextImpl>> - GeneratorContextMap; - - // Clear state from previous Run(). - void Clear(); - - // Remaps the proto file so that it is relative to one of the directories - // in proto_path_. Returns false if an error occurred. - bool MakeProtoProtoPathRelative(DiskSourceTree* source_tree, - std::string* proto, - DescriptorDatabase* fallback_database); - - // Remaps each file in input_files_ so that it is relative to one of the - // directories in proto_path_. Returns false if an error occurred. - bool MakeInputsBeProtoPathRelative(DiskSourceTree* source_tree, - DescriptorDatabase* fallback_database); - - // Fails if these files use proto3 optional and the code generator doesn't - // support it. This is a permanent check. - bool EnforceProto3OptionalSupport( - const std::string& codegen_name, uint64_t supported_features, - const std::vector<const FileDescriptor*>& parsed_files) const; - - - // Return status for ParseArguments() and InterpretArgument(). - enum ParseArgumentStatus { - PARSE_ARGUMENT_DONE_AND_CONTINUE, - PARSE_ARGUMENT_DONE_AND_EXIT, - PARSE_ARGUMENT_FAIL - }; - - // Parse all command-line arguments. - ParseArgumentStatus ParseArguments(int argc, const char* const argv[]); - - // Read an argument file and append the file's content to the list of - // arguments. Return false if the file cannot be read. - bool ExpandArgumentFile(const std::string& file, - std::vector<std::string>* arguments); - - // Parses a command-line argument into a name/value pair. Returns - // true if the next argument in the argv should be used as the value, - // false otherwise. - // - // Examples: - // "-Isrc/protos" -> - // name = "-I", value = "src/protos" - // "--cpp_out=src/foo.pb2.cc" -> - // name = "--cpp_out", value = "src/foo.pb2.cc" - // "foo.proto" -> - // name = "", value = "foo.proto" - bool ParseArgument(const char* arg, std::string* name, std::string* value); - - // Interprets arguments parsed with ParseArgument. - ParseArgumentStatus InterpretArgument(const std::string& name, - const std::string& value); - - // Print the --help text to stderr. - void PrintHelpText(); - - // Loads proto_path_ into the provided source_tree. - bool InitializeDiskSourceTree(DiskSourceTree* source_tree, - DescriptorDatabase* fallback_database); - - // Verify that all the input files exist in the given database. - bool VerifyInputFilesInDescriptors(DescriptorDatabase* fallback_database); - - // Parses input_files_ into parsed_files - bool ParseInputFiles(DescriptorPool* descriptor_pool, - DiskSourceTree* source_tree, - std::vector<const FileDescriptor*>* parsed_files); - - // Generate the given output file from the given input. - struct OutputDirective; // see below - bool GenerateOutput(const std::vector<const FileDescriptor*>& parsed_files, - const OutputDirective& output_directive, - GeneratorContext* generator_context); - bool GeneratePluginOutput( - const std::vector<const FileDescriptor*>& parsed_files, - const std::string& plugin_name, const std::string& parameter, - GeneratorContext* generator_context, std::string* error); - - // Implements --encode and --decode. - bool EncodeOrDecode(const DescriptorPool* pool); - - // Implements the --descriptor_set_out option. - bool WriteDescriptorSet( - const std::vector<const FileDescriptor*>& parsed_files); - - // Implements the --dependency_out option - bool GenerateDependencyManifestFile( - const std::vector<const FileDescriptor*>& parsed_files, - const GeneratorContextMap& output_directories, - DiskSourceTree* source_tree); - - // Get all transitive dependencies of the given file (including the file - // itself), adding them to the given list of FileDescriptorProtos. The - // protos will be ordered such that every file is listed before any file that - // depends on it, so that you can call DescriptorPool::BuildFile() on them - // in order. Any files in *already_seen will not be added, and each file - // added will be inserted into *already_seen. If include_source_code_info is - // true then include the source code information in the FileDescriptorProtos. - // If include_json_name is true, populate the json_name field of - // FieldDescriptorProto for all fields. - static void GetTransitiveDependencies( - const FileDescriptor* file, bool include_json_name, - bool include_source_code_info, - std::set<const FileDescriptor*>* already_seen, - RepeatedPtrField<FileDescriptorProto>* output); - - // Implements the --print_free_field_numbers. This function prints free field - // numbers into stdout for the message and it's nested message types in - // post-order, i.e. nested types first. Printed range are left-right - // inclusive, i.e. [a, b]. - // - // Groups: - // For historical reasons, groups are considered to share the same - // field number space with the parent message, thus it will not print free - // field numbers for groups. The field numbers used in the groups are - // excluded in the free field numbers of the parent message. - // - // Extension Ranges: - // Extension ranges are considered ocuppied field numbers and they will not be - // listed as free numbers in the output. - void PrintFreeFieldNumbers(const Descriptor* descriptor); - - // ----------------------------------------------------------------- - - // The name of the executable as invoked (i.e. argv[0]). - std::string executable_name_; - - // Version info set with SetVersionInfo(). - std::string version_info_; - - // Registered generators. - struct GeneratorInfo { - std::string flag_name; - std::string option_flag_name; - CodeGenerator* generator; - std::string help_text; - }; - typedef std::map<std::string, GeneratorInfo> GeneratorMap; - GeneratorMap generators_by_flag_name_; - GeneratorMap generators_by_option_name_; - // A map from generator names to the parameters specified using the option - // flag. For example, if the user invokes the compiler with: - // protoc --foo_out=outputdir --foo_opt=enable_bar ... - // Then there will be an entry ("--foo_out", "enable_bar") in this map. - std::map<std::string, std::string> generator_parameters_; - // Similar to generator_parameters_, but stores the parameters for plugins. - std::map<std::string, std::string> plugin_parameters_; - - // See AllowPlugins(). If this is empty, plugins aren't allowed. - std::string plugin_prefix_; - - // Maps specific plugin names to files. When executing a plugin, this map - // is searched first to find the plugin executable. If not found here, the - // PATH (or other OS-specific search strategy) is searched. - std::map<std::string, std::string> plugins_; - - // Stuff parsed from command line. - enum Mode { - MODE_COMPILE, // Normal mode: parse .proto files and compile them. - MODE_ENCODE, // --encode: read text from stdin, write binary to stdout. - MODE_DECODE, // --decode: read binary from stdin, write text to stdout. - MODE_PRINT, // Print mode: print info of the given .proto files and exit. - }; - - Mode mode_ = MODE_COMPILE; - - enum PrintMode { - PRINT_NONE, // Not in MODE_PRINT - PRINT_FREE_FIELDS, // --print_free_fields - }; - - PrintMode print_mode_ = PRINT_NONE; - - enum ErrorFormat { - ERROR_FORMAT_GCC, // GCC error output format (default). - ERROR_FORMAT_MSVS // Visual Studio output (--error_format=msvs). - }; - - ErrorFormat error_format_ = ERROR_FORMAT_GCC; - - // True if we should treat warnings as errors that fail the compilation. - bool fatal_warnings_ = false; - - std::vector<std::pair<std::string, std::string> > - proto_path_; // Search path for proto files. - std::vector<std::string> input_files_; // Names of the input proto files. - - // Names of proto files which are allowed to be imported. Used by build - // systems to enforce depend-on-what-you-import. - std::set<std::string> direct_dependencies_; - bool direct_dependencies_explicitly_set_ = false; - - // If there's a violation of depend-on-what-you-import, this string will be - // presented to the user. "%s" will be replaced with the violating import. - std::string direct_dependencies_violation_msg_; - - // output_directives_ lists all the files we are supposed to output and what - // generator to use for each. - struct OutputDirective { - std::string name; // E.g. "--foo_out" - CodeGenerator* generator; // NULL for plugins - std::string parameter; - std::string output_location; - }; - std::vector<OutputDirective> output_directives_; - - // When using --encode or --decode, this names the type we are encoding or - // decoding. (Empty string indicates --decode_raw.) - std::string codec_type_; - - // If --descriptor_set_in was given, these are filenames containing - // parsed FileDescriptorSets to be used for loading protos. Otherwise, empty. - std::vector<std::string> descriptor_set_in_names_; - - // If --descriptor_set_out was given, this is the filename to which the - // FileDescriptorSet should be written. Otherwise, empty. - std::string descriptor_set_out_name_; - - // If --dependency_out was given, this is the path to the file where the - // dependency file will be written. Otherwise, empty. - std::string dependency_out_name_; - - // True if --include_imports was given, meaning that we should - // write all transitive dependencies to the DescriptorSet. Otherwise, only - // the .proto files listed on the command-line are added. - bool imports_in_descriptor_set_; - - // True if --include_source_info was given, meaning that we should not strip - // SourceCodeInfo from the DescriptorSet. - bool source_info_in_descriptor_set_ = false; - - // Was the --disallow_services flag used? - bool disallow_services_ = false; - - // When using --encode, this will be passed to SetSerializationDeterministic. - bool deterministic_output_ = false; - - GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(CommandLineInterface); -}; - -} // namespace compiler -} // namespace protobuf -} // namespace google - -#include <google/protobuf/port_undef.inc> - -#endif // GOOGLE_PROTOBUF_COMPILER_COMMAND_LINE_INTERFACE_H__ diff --git a/include/google/protobuf/compiler/cpp/cpp_generator.h b/include/google/protobuf/compiler/cpp/cpp_generator.h deleted file mode 100644 index 1716ab20de..0000000000 --- a/include/google/protobuf/compiler/cpp/cpp_generator.h +++ /dev/null @@ -1,6 +0,0 @@ -#ifndef GOOGLE_PROTOBUF_COMPILER_CPP_CPP_GENERATOR_H_ -#define GOOGLE_PROTOBUF_COMPILER_CPP_CPP_GENERATOR_H_ - -#include <google/protobuf/compiler/cpp/generator.h> - -#endif // GOOGLE_PROTOBUF_COMPILER_CPP_CPP_GENERATOR_H_ diff --git a/include/google/protobuf/compiler/cpp/file.h b/include/google/protobuf/compiler/cpp/file.h deleted file mode 100644 index ca05361b42..0000000000 --- a/include/google/protobuf/compiler/cpp/file.h +++ /dev/null @@ -1,209 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// 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 -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -// Author: kenton@google.com (Kenton Varda) -// Based on original Protocol Buffers design by -// Sanjay Ghemawat, Jeff Dean, and others. - -#ifndef GOOGLE_PROTOBUF_COMPILER_CPP_FILE_H__ -#define GOOGLE_PROTOBUF_COMPILER_CPP_FILE_H__ - -#include <algorithm> -#include <memory> -#include <set> -#include <string> -#include <vector> - -#include <google/protobuf/stubs/common.h> -#include <google/protobuf/compiler/cpp/field.h> -#include <google/protobuf/compiler/cpp/helpers.h> -#include <google/protobuf/compiler/scc.h> -#include <google/protobuf/compiler/cpp/options.h> - -namespace google { -namespace protobuf { -class FileDescriptor; // descriptor.h -namespace io { -class Printer; // printer.h -} -} // namespace protobuf -} // namespace google - -namespace google { -namespace protobuf { -namespace compiler { -namespace cpp { - -class EnumGenerator; // enum.h -class MessageGenerator; // message.h -class ServiceGenerator; // service.h -class ExtensionGenerator; // extension.h - -class FileGenerator { - public: - // See generator.cc for the meaning of dllexport_decl. - FileGenerator(const FileDescriptor* file, const Options& options); - ~FileGenerator(); - - // Shared code between the two header generators below. - void GenerateHeader(io::Printer* printer); - - // info_path, if non-empty, should be the path (relative to printer's - // output) to the metadata file describing this proto header. - void GenerateProtoHeader(io::Printer* printer, const std::string& info_path); - // info_path, if non-empty, should be the path (relative to printer's - // output) to the metadata file describing this PB header. - void GeneratePBHeader(io::Printer* printer, const std::string& info_path); - void GenerateSource(io::Printer* printer); - - // The following member functions are used when the lite_implicit_weak_fields - // option is set. In this mode the code is organized a bit differently to - // promote better linker stripping of unused code. In particular, we generate - // one .cc file per message, one .cc file per extension, and a main pb.cc file - // containing everything else. - - int NumMessages() const { return message_generators_.size(); } - int NumExtensions() const { return extension_generators_.size(); } - // Generates the source file for one message. - void GenerateSourceForMessage(int idx, io::Printer* printer); - // Generates the source file for one extension. - void GenerateSourceForExtension(int idx, io::Printer* printer); - // Generates a source file containing everything except messages and - // extensions. - void GenerateGlobalSource(io::Printer* printer); - - private: - // Internal type used by GenerateForwardDeclarations (defined in file.cc). - class ForwardDeclarations; - struct CrossFileReferences; - - void IncludeFile(const std::string& google3_name, io::Printer* printer) { - DoIncludeFile(google3_name, false, printer); - } - void IncludeFileAndExport(const std::string& google3_name, - io::Printer* printer) { - DoIncludeFile(google3_name, true, printer); - } - void DoIncludeFile(const std::string& google3_name, bool do_export, - io::Printer* printer); - - std::string CreateHeaderInclude(const std::string& basename, - const FileDescriptor* file); - void GetCrossFileReferencesForField(const FieldDescriptor* field, - CrossFileReferences* refs); - void GetCrossFileReferencesForFile(const FileDescriptor* file, - CrossFileReferences* refs); - void GenerateInternalForwardDeclarations(const CrossFileReferences& refs, - io::Printer* printer); - void GenerateSourceIncludes(io::Printer* printer); - void GenerateSourcePrelude(io::Printer* printer); - void GenerateSourceDefaultInstance(int idx, io::Printer* printer); - - void GenerateInitForSCC(const SCC* scc, const CrossFileReferences& refs, - io::Printer* printer); - void GenerateReflectionInitializationCode(io::Printer* printer); - - // For other imports, generates their forward-declarations. - void GenerateForwardDeclarations(io::Printer* printer); - - // Generates top or bottom of a header file. - void GenerateTopHeaderGuard(io::Printer* printer, bool pb_h); - void GenerateBottomHeaderGuard(io::Printer* printer, bool pb_h); - - // Generates #include directives. - void GenerateLibraryIncludes(io::Printer* printer); - void GenerateDependencyIncludes(io::Printer* printer); - - // Generate a pragma to pull in metadata using the given info_path (if - // non-empty). info_path should be relative to printer's output. - void GenerateMetadataPragma(io::Printer* printer, - const std::string& info_path); - - // Generates a couple of different pieces before definitions: - void GenerateGlobalStateFunctionDeclarations(io::Printer* printer); - - // Generates types for classes. - void GenerateMessageDefinitions(io::Printer* printer); - - void GenerateEnumDefinitions(io::Printer* printer); - - // Generates generic service definitions. - void GenerateServiceDefinitions(io::Printer* printer); - - // Generates extension identifiers. - void GenerateExtensionIdentifiers(io::Printer* printer); - - // Generates inline function definitions. - void GenerateInlineFunctionDefinitions(io::Printer* printer); - - void GenerateProto2NamespaceEnumSpecializations(io::Printer* printer); - - // Sometimes the names we use in a .proto file happen to be defined as - // macros on some platforms (e.g., macro/minor used in plugin.proto are - // defined as macros in sys/types.h on FreeBSD and a few other platforms). - // To make the generated code compile on these platforms, we either have to - // undef the macro for these few platforms, or rename the field name for all - // platforms. Since these names are part of protobuf public API, renaming is - // generally a breaking change so we prefer the #undef approach. - void GenerateMacroUndefs(io::Printer* printer); - - bool IsDepWeak(const FileDescriptor* dep) const { - if (weak_deps_.count(dep) != 0) { - GOOGLE_CHECK(!options_.opensource_runtime); - return true; - } - return false; - } - - std::set<const FileDescriptor*> weak_deps_; - - const FileDescriptor* file_; - const Options options_; - - MessageSCCAnalyzer scc_analyzer_; - - std::map<std::string, std::string> variables_; - - // Contains the post-order walk of all the messages (and child messages) in - // this file. If you need a pre-order walk just reverse iterate. - std::vector<std::unique_ptr<MessageGenerator>> message_generators_; - std::vector<std::unique_ptr<EnumGenerator>> enum_generators_; - std::vector<std::unique_ptr<ServiceGenerator>> service_generators_; - std::vector<std::unique_ptr<ExtensionGenerator>> extension_generators_; - - GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(FileGenerator); -}; - -} // namespace cpp -} // namespace compiler -} // namespace protobuf -} // namespace google - -#endif // GOOGLE_PROTOBUF_COMPILER_CPP_FILE_H__ diff --git a/include/google/protobuf/compiler/cpp/generator.h b/include/google/protobuf/compiler/cpp/generator.h deleted file mode 100644 index 1a374b9f16..0000000000 --- a/include/google/protobuf/compiler/cpp/generator.h +++ /dev/null @@ -1,107 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// 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 -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -// Author: kenton@google.com (Kenton Varda) -// Based on original Protocol Buffers design by -// Sanjay Ghemawat, Jeff Dean, and others. -// -// Generates C++ code for a given .proto file. - -#ifndef GOOGLE_PROTOBUF_COMPILER_CPP_GENERATOR_H__ -#define GOOGLE_PROTOBUF_COMPILER_CPP_GENERATOR_H__ - -#include <string> -#include <google/protobuf/compiler/code_generator.h> - -// Must be included last. -#include <google/protobuf/port_def.inc> - -namespace google { -namespace protobuf { -namespace compiler { -namespace cpp { - -// CodeGenerator implementation which generates a C++ source file and -// header. If you create your own protocol compiler binary and you want -// it to support C++ output, you can do so by registering an instance of this -// CodeGenerator with the CommandLineInterface in your main() function. -class PROTOC_EXPORT CppGenerator : public CodeGenerator { - public: - CppGenerator(); - ~CppGenerator() override; - - enum class Runtime { - kGoogle3, // Use the internal google3 runtime. - kOpensource, // Use the open-source runtime. - - // Use the open-source runtime with google3 #include paths. We make these - // absolute to avoid ambiguity, so the runtime will be #included like: - // #include "third_party/protobuf/.../google/protobuf/message.h" - kOpensourceGoogle3 - }; - - void set_opensource_runtime(bool opensource) { - opensource_runtime_ = opensource; - } - - // If set to a non-empty string, generated code will do: - // #include "<BASE>/google/protobuf/message.h" - // instead of: - // #include <google/protobuf/message.h> - // This has no effect if opensource_runtime = false. - void set_runtime_include_base(const std::string& base) { - runtime_include_base_ = base; - } - - // implements CodeGenerator ---------------------------------------- - bool Generate(const FileDescriptor* file, const std::string& parameter, - GeneratorContext* generator_context, - std::string* error) const override; - - uint64_t GetSupportedFeatures() const override { - // We don't fully support this yet, but this is needed to unblock the tests, - // and we will have full support before the experimental flag is removed. - return FEATURE_PROTO3_OPTIONAL; - } - - private: - bool opensource_runtime_ = true; - std::string runtime_include_base_; - GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(CppGenerator); -}; - -} // namespace cpp -} // namespace compiler -} // namespace protobuf -} // namespace google - -#include <google/protobuf/port_undef.inc> - -#endif // GOOGLE_PROTOBUF_COMPILER_CPP_GENERATOR_H__ diff --git a/include/google/protobuf/compiler/cpp/helpers.h b/include/google/protobuf/compiler/cpp/helpers.h deleted file mode 100644 index d8dcda7248..0000000000 --- a/include/google/protobuf/compiler/cpp/helpers.h +++ /dev/null @@ -1,1064 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// 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 -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -// Author: kenton@google.com (Kenton Varda) -// Based on original Protocol Buffers design by -// Sanjay Ghemawat, Jeff Dean, and others. - -#ifndef GOOGLE_PROTOBUF_COMPILER_CPP_HELPERS_H__ -#define GOOGLE_PROTOBUF_COMPILER_CPP_HELPERS_H__ - -#include <algorithm> -#include <cstdint> -#include <iterator> -#include <map> -#include <string> - -#include <google/protobuf/compiler/scc.h> -#include <google/protobuf/compiler/code_generator.h> -#include <google/protobuf/compiler/cpp/names.h> -#include <google/protobuf/compiler/cpp/options.h> -#include <google/protobuf/descriptor.pb.h> -#include <google/protobuf/io/printer.h> -#include <google/protobuf/descriptor.h> -#include <google/protobuf/port.h> -#include <google/protobuf/stubs/strutil.h> - -// Must be included last. -#include <google/protobuf/port_def.inc> - -namespace google { -namespace protobuf { -namespace compiler { -namespace cpp { - -enum class ArenaDtorNeeds { kNone = 0, kOnDemand = 1, kRequired = 2 }; - -inline std::string ProtobufNamespace(const Options& /* options */) { - return "PROTOBUF_NAMESPACE_ID"; -} - -inline std::string MacroPrefix(const Options& /* options */) { - return "GOOGLE_PROTOBUF"; -} - -inline std::string DeprecatedAttribute(const Options& /* options */, - const FieldDescriptor* d) { - return d->options().deprecated() ? "PROTOBUF_DEPRECATED " : ""; -} - -inline std::string DeprecatedAttribute(const Options& /* options */, - const EnumValueDescriptor* d) { - return d->options().deprecated() ? "PROTOBUF_DEPRECATED_ENUM " : ""; -} - -// Commonly-used separator comments. Thick is a line of '=', thin is a line -// of '-'. -extern const char kThickSeparator[]; -extern const char kThinSeparator[]; - -void SetCommonVars(const Options& options, - std::map<std::string, std::string>* variables); - -// Variables to access message data from the message scope. -void SetCommonMessageDataVariables( - const Descriptor* descriptor, - std::map<std::string, std::string>* variables); - -void SetUnknownFieldsVariable(const Descriptor* descriptor, - const Options& options, - std::map<std::string, std::string>* variables); - -bool GetBootstrapBasename(const Options& options, const std::string& basename, - std::string* bootstrap_basename); -bool MaybeBootstrap(const Options& options, GeneratorContext* generator_context, - bool bootstrap_flag, std::string* basename); -bool IsBootstrapProto(const Options& options, const FileDescriptor* file); - -// Name space of the proto file. This namespace is such that the string -// "<namespace>::some_name" is the correct fully qualified namespace. -// This means if the package is empty the namespace is "", and otherwise -// the namespace is "::foo::bar::...::baz" without trailing semi-colons. -std::string Namespace(const FileDescriptor* d, const Options& options); -std::string Namespace(const Descriptor* d, const Options& options); -std::string Namespace(const FieldDescriptor* d, const Options& options); -std::string Namespace(const EnumDescriptor* d, const Options& options); - -// Returns true if it's safe to reset "field" to zero. -bool CanInitializeByZeroing(const FieldDescriptor* field); - -std::string ClassName(const Descriptor* descriptor); -std::string ClassName(const EnumDescriptor* enum_descriptor); - -std::string QualifiedClassName(const Descriptor* d, const Options& options); -std::string QualifiedClassName(const EnumDescriptor* d, const Options& options); - -std::string QualifiedClassName(const Descriptor* d); -std::string QualifiedClassName(const EnumDescriptor* d); - -// DEPRECATED just use ClassName or QualifiedClassName, a boolean is very -// unreadable at the callsite. -// Returns the non-nested type name for the given type. If "qualified" is -// true, prefix the type with the full namespace. For example, if you had: -// package foo.bar; -// message Baz { message Moo {} } -// Then the qualified ClassName for Moo would be: -// ::foo::bar::Baz_Moo -// While the non-qualified version would be: -// Baz_Moo -inline std::string ClassName(const Descriptor* descriptor, bool qualified) { - return qualified ? QualifiedClassName(descriptor, Options()) - : ClassName(descriptor); -} - -inline std::string ClassName(const EnumDescriptor* descriptor, bool qualified) { - return qualified ? QualifiedClassName(descriptor, Options()) - : ClassName(descriptor); -} - -// Returns the extension name prefixed with the class name if nested but without -// the package name. -std::string ExtensionName(const FieldDescriptor* d); - -std::string QualifiedExtensionName(const FieldDescriptor* d, - const Options& options); -std::string QualifiedExtensionName(const FieldDescriptor* d); - -// Type name of default instance. -std::string DefaultInstanceType(const Descriptor* descriptor, - const Options& options, bool split = false); - -// Non-qualified name of the default_instance of this message. -std::string DefaultInstanceName(const Descriptor* descriptor, - const Options& options, bool split = false); - -// Non-qualified name of the default instance pointer. This is used only for -// implicit weak fields, where we need an extra indirection. -std::string DefaultInstancePtr(const Descriptor* descriptor, - const Options& options, bool split = false); - -// Fully qualified name of the default_instance of this message. -std::string QualifiedDefaultInstanceName(const Descriptor* descriptor, - const Options& options, - bool split = false); - -// Fully qualified name of the default instance pointer. -std::string QualifiedDefaultInstancePtr(const Descriptor* descriptor, - const Options& options, - bool split = false); - -// DescriptorTable variable name. -std::string DescriptorTableName(const FileDescriptor* file, - const Options& options); - -// When declaring symbol externs from another file, this macro will supply the -// dllexport needed for the target file, if any. -std::string FileDllExport(const FileDescriptor* file, const Options& options); - -// Name of the base class: google::protobuf::Message or google::protobuf::MessageLite. -std::string SuperClassName(const Descriptor* descriptor, - const Options& options); - -// Adds an underscore if necessary to prevent conflicting with a keyword. -std::string ResolveKeyword(const std::string& name); - -// Get the (unqualified) name that should be used for this field in C++ code. -// The name is coerced to lower-case to emulate proto1 behavior. People -// should be using lowercase-with-underscores style for proto field names -// anyway, so normally this just returns field->name(). -std::string FieldName(const FieldDescriptor* field); - -// Returns the (unqualified) private member name for this field in C++ code. -std::string FieldMemberName(const FieldDescriptor* field, bool split); - -// Returns an estimate of the compiler's alignment for the field. This -// can't guarantee to be correct because the generated code could be compiled on -// different systems with different alignment rules. The estimates below assume -// 64-bit pointers. -int EstimateAlignmentSize(const FieldDescriptor* field); - -// Get the unqualified name that should be used for a field's field -// number constant. -std::string FieldConstantName(const FieldDescriptor* field); - -// Returns the scope where the field was defined (for extensions, this is -// different from the message type to which the field applies). -inline const Descriptor* FieldScope(const FieldDescriptor* field) { - return field->is_extension() ? field->extension_scope() - : field->containing_type(); -} - -// Returns the fully-qualified type name field->message_type(). Usually this -// is just ClassName(field->message_type(), true); -std::string FieldMessageTypeName(const FieldDescriptor* field, - const Options& options); - -// Get the C++ type name for a primitive type (e.g. "double", "::google::protobuf::int32", etc.). -const char* PrimitiveTypeName(FieldDescriptor::CppType type); -std::string PrimitiveTypeName(const Options& options, - FieldDescriptor::CppType type); - -// Get the declared type name in CamelCase format, as is used e.g. for the -// methods of WireFormat. For example, TYPE_INT32 becomes "Int32". -const char* DeclaredTypeMethodName(FieldDescriptor::Type type); - -// Return the code that evaluates to the number when compiled. -std::string Int32ToString(int number); - -// Get code that evaluates to the field's default value. -std::string DefaultValue(const Options& options, const FieldDescriptor* field); - -// Compatibility function for callers outside proto2. -std::string DefaultValue(const FieldDescriptor* field); - -// Convert a file name into a valid identifier. -std::string FilenameIdentifier(const std::string& filename); - -// For each .proto file generates a unique name. To prevent collisions of -// symbols in the global namespace -std::string UniqueName(const std::string& name, const std::string& filename, - const Options& options); -inline std::string UniqueName(const std::string& name, const FileDescriptor* d, - const Options& options) { - return UniqueName(name, d->name(), options); -} -inline std::string UniqueName(const std::string& name, const Descriptor* d, - const Options& options) { - return UniqueName(name, d->file(), options); -} -inline std::string UniqueName(const std::string& name, const EnumDescriptor* d, - const Options& options) { - return UniqueName(name, d->file(), options); -} -inline std::string UniqueName(const std::string& name, - const ServiceDescriptor* d, - const Options& options) { - return UniqueName(name, d->file(), options); -} - -// Versions for call sites that only support the internal runtime (like proto1 -// support). -inline Options InternalRuntimeOptions() { - Options options; - options.opensource_runtime = false; - return options; -} -inline std::string UniqueName(const std::string& name, - const std::string& filename) { - return UniqueName(name, filename, InternalRuntimeOptions()); -} -inline std::string UniqueName(const std::string& name, - const FileDescriptor* d) { - return UniqueName(name, d->name(), InternalRuntimeOptions()); -} -inline std::string UniqueName(const std::string& name, const Descriptor* d) { - return UniqueName(name, d->file(), InternalRuntimeOptions()); -} -inline std::string UniqueName(const std::string& name, - const EnumDescriptor* d) { - return UniqueName(name, d->file(), InternalRuntimeOptions()); -} -inline std::string UniqueName(const std::string& name, - const ServiceDescriptor* d) { - return UniqueName(name, d->file(), InternalRuntimeOptions()); -} - -// Return the qualified C++ name for a file level symbol. -std::string QualifiedFileLevelSymbol(const FileDescriptor* file, - const std::string& name, - const Options& options); - -// Escape C++ trigraphs by escaping question marks to \? -std::string EscapeTrigraphs(const std::string& to_escape); - -// Escaped function name to eliminate naming conflict. -std::string SafeFunctionName(const Descriptor* descriptor, - const FieldDescriptor* field, - const std::string& prefix); - -// Returns true if generated messages have public unknown fields accessors -inline bool PublicUnknownFieldsAccessors(const Descriptor* message) { - return message->file()->syntax() != FileDescriptor::SYNTAX_PROTO3; -} - -// Returns the optimize mode for <file>, respecting <options.enforce_lite>. -FileOptions_OptimizeMode GetOptimizeFor(const FileDescriptor* file, - const Options& options); - -// Determines whether unknown fields will be stored in an UnknownFieldSet or -// a string. -inline bool UseUnknownFieldSet(const FileDescriptor* file, - const Options& options) { - return GetOptimizeFor(file, options) != FileOptions::LITE_RUNTIME; -} - -inline bool IsWeak(const FieldDescriptor* field, const Options& options) { - if (field->options().weak()) { - GOOGLE_CHECK(!options.opensource_runtime); - return true; - } - return false; -} - -bool IsStringInlined(const FieldDescriptor* descriptor, const Options& options); - -// For a string field, returns the effective ctype. If the actual ctype is -// not supported, returns the default of STRING. -FieldOptions::CType EffectiveStringCType(const FieldDescriptor* field, - const Options& options); - -inline bool IsCord(const FieldDescriptor* field, const Options& options) { - return field->cpp_type() == FieldDescriptor::CPPTYPE_STRING && - EffectiveStringCType(field, options) == FieldOptions::CORD; -} - -inline bool IsString(const FieldDescriptor* field, const Options& options) { - return field->cpp_type() == FieldDescriptor::CPPTYPE_STRING && - EffectiveStringCType(field, options) == FieldOptions::STRING; -} - -inline bool IsStringPiece(const FieldDescriptor* field, - const Options& options) { - return field->cpp_type() == FieldDescriptor::CPPTYPE_STRING && - EffectiveStringCType(field, options) == FieldOptions::STRING_PIECE; -} - -class MessageSCCAnalyzer; - -// Does the given FileDescriptor use lazy fields? -bool HasLazyFields(const FileDescriptor* file, const Options& options, - MessageSCCAnalyzer* scc_analyzer); - -// Is the given field a supported lazy field? -bool IsLazy(const FieldDescriptor* field, const Options& options, - MessageSCCAnalyzer* scc_analyzer); - -// Is this an explicit (non-profile driven) lazy field, as denoted by -// lazy/unverified_lazy in the descriptor? -inline bool IsExplicitLazy(const FieldDescriptor* field) { - return field->options().lazy() || field->options().unverified_lazy(); -} - -bool IsEagerlyVerifiedLazy(const FieldDescriptor* field, const Options& options, - MessageSCCAnalyzer* scc_analyzer); - -bool IsLazilyVerifiedLazy(const FieldDescriptor* field, const Options& options); - -// Is the given message being split (go/pdsplit)? -bool ShouldSplit(const Descriptor* desc, const Options& options); - -// Is the given field being split out? -bool ShouldSplit(const FieldDescriptor* field, const Options& options); - -inline bool IsFieldUsed(const FieldDescriptor* /* field */, - const Options& /* options */) { - return true; -} - -// Returns true if "field" is stripped. -inline bool IsFieldStripped(const FieldDescriptor* /*field*/, - const Options& /*options*/) { - return false; -} - -// Does the file contain any definitions that need extension_set.h? -bool HasExtensionsOrExtendableMessage(const FileDescriptor* file); - -// Does the file have any repeated fields, necessitating the file to include -// repeated_field.h? This does not include repeated extensions, since those are -// all stored internally in an ExtensionSet, not a separate RepeatedField*. -bool HasRepeatedFields(const FileDescriptor* file); - -// Does the file have any string/bytes fields with ctype=STRING_PIECE? This -// does not include extensions, since ctype is ignored for extensions. -bool HasStringPieceFields(const FileDescriptor* file, const Options& options); - -// Does the file have any string/bytes fields with ctype=CORD? This does not -// include extensions, since ctype is ignored for extensions. -bool HasCordFields(const FileDescriptor* file, const Options& options); - -// Does the file have any map fields, necessitating the file to include -// map_field_inl.h and map.h. -bool HasMapFields(const FileDescriptor* file); - -// Does this file have any enum type definitions? -bool HasEnumDefinitions(const FileDescriptor* file); - -// Does this file have generated parsing, serialization, and other -// standard methods for which reflection-based fallback implementations exist? -inline bool HasGeneratedMethods(const FileDescriptor* file, - const Options& options) { - return GetOptimizeFor(file, options) != FileOptions::CODE_SIZE; -} - -// Do message classes in this file have descriptor and reflection methods? -inline bool HasDescriptorMethods(const FileDescriptor* file, - const Options& options) { - return GetOptimizeFor(file, options) != FileOptions::LITE_RUNTIME; -} - -// Should we generate generic services for this file? -inline bool HasGenericServices(const FileDescriptor* file, - const Options& options) { - return file->service_count() > 0 && - GetOptimizeFor(file, options) != FileOptions::LITE_RUNTIME && - file->options().cc_generic_services(); -} - -inline bool IsProto2MessageSet(const Descriptor* descriptor, - const Options& options) { - return !options.opensource_runtime && - options.enforce_mode != EnforceOptimizeMode::kLiteRuntime && - !options.lite_implicit_weak_fields && - descriptor->options().message_set_wire_format() && - descriptor->full_name() == "google.protobuf.bridge.MessageSet"; -} - -inline bool IsMapEntryMessage(const Descriptor* descriptor) { - return descriptor->options().map_entry(); -} - -// Returns true if the field's CPPTYPE is string or message. -bool IsStringOrMessage(const FieldDescriptor* field); - -std::string UnderscoresToCamelCase(const std::string& input, - bool cap_next_letter); - -inline bool IsProto3(const FileDescriptor* file) { - return file->syntax() == FileDescriptor::SYNTAX_PROTO3; -} - -inline bool HasHasbit(const FieldDescriptor* field) { - // This predicate includes proto3 message fields only if they have "optional". - // Foo submsg1 = 1; // HasHasbit() == false - // optional Foo submsg2 = 2; // HasHasbit() == true - // This is slightly odd, as adding "optional" to a singular proto3 field does - // not change the semantics or API. However whenever any field in a message - // has a hasbit, it forces reflection to include hasbit offsets for *all* - // fields, even if almost all of them are set to -1 (no hasbit). So to avoid - // causing a sudden size regression for ~all proto3 messages, we give proto3 - // message fields a hasbit only if "optional" is present. If the user is - // explicitly writing "optional", it is likely they are writing it on - // primitive fields also. - return (field->has_optional_keyword() || field->is_required()) && - !field->options().weak(); -} - -// Returns true if 'enum' semantics are such that unknown values are preserved -// in the enum field itself, rather than going to the UnknownFieldSet. -inline bool HasPreservingUnknownEnumSemantics(const FieldDescriptor* field) { - return field->file()->syntax() == FileDescriptor::SYNTAX_PROTO3; -} - -inline bool IsCrossFileMessage(const FieldDescriptor* field) { - return field->type() == FieldDescriptor::TYPE_MESSAGE && - field->message_type()->file() != field->file(); -} - -inline std::string MakeDefaultName(const FieldDescriptor* field) { - return StrCat("_i_give_permission_to_break_this_code_default_", - FieldName(field), "_"); -} - -// Semantically distinct from MakeDefaultName in that it gives the C++ code -// referencing a default field from the message scope, rather than just the -// variable name. -// For example, declarations of default variables should always use just -// MakeDefaultName to produce code like: -// Type _i_give_permission_to_break_this_code_default_field_; -// -// Code that references these should use MakeDefaultFieldName, in case the field -// exists at some nested level like: -// internal_container_._i_give_permission_to_break_this_code_default_field_; -inline std::string MakeDefaultFieldName(const FieldDescriptor* field) { - return StrCat("Impl_::", MakeDefaultName(field)); -} - -inline std::string MakeVarintCachedSizeName(const FieldDescriptor* field) { - return StrCat("_", FieldName(field), "_cached_byte_size_"); -} - -// Semantically distinct from MakeVarintCachedSizeName in that it gives the C++ -// code referencing the object from the message scope, rather than just the -// variable name. -// For example, declarations of default variables should always use just -// MakeVarintCachedSizeName to produce code like: -// Type _field_cached_byte_size_; -// -// Code that references these variables should use -// MakeVarintCachedSizeFieldName, in case the field exists at some nested level -// like: -// internal_container_._field_cached_byte_size_; -inline std::string MakeVarintCachedSizeFieldName(const FieldDescriptor* field, - bool split) { - return StrCat("_impl_.", split ? "_split_->" : "", "_", - FieldName(field), "_cached_byte_size_"); -} - -// Note: A lot of libraries detect Any protos based on Descriptor::full_name() -// while the two functions below use FileDescriptor::name(). In a sane world the -// two approaches should be equivalent. But if you are dealing with descriptors -// from untrusted sources, you might need to match semantics across libraries. -bool IsAnyMessage(const FileDescriptor* descriptor, const Options& options); -bool IsAnyMessage(const Descriptor* descriptor, const Options& options); - -bool IsWellKnownMessage(const FileDescriptor* descriptor); - -inline std::string IncludeGuard(const FileDescriptor* file, bool pb_h, - const Options& options) { - // If we are generating a .pb.h file and the proto_h option is enabled, then - // the .pb.h gets an extra suffix. - std::string filename_identifier = FilenameIdentifier( - file->name() + (pb_h && options.proto_h ? ".pb.h" : "")); - - if (IsWellKnownMessage(file)) { - // For well-known messages we need third_party/protobuf and net/proto2 to - // have distinct include guards, because some source files include both and - // both need to be defined (the third_party copies will be in the - // google::protobuf_opensource namespace). - return MacroPrefix(options) + "_INCLUDED_" + filename_identifier; - } else { - // Ideally this case would use distinct include guards for opensource and - // google3 protos also. (The behavior of "first #included wins" is not - // ideal). But unfortunately some legacy code includes both and depends on - // the identical include guards to avoid compile errors. - // - // We should clean this up so that this case can be removed. - return "GOOGLE_PROTOBUF_INCLUDED_" + filename_identifier; - } -} - -// Returns the OptimizeMode for this file, furthermore it updates a status -// bool if has_opt_codesize_extension is non-null. If this status bool is true -// it means this file contains an extension that itself is defined as -// optimized_for = CODE_SIZE. -FileOptions_OptimizeMode GetOptimizeFor(const FileDescriptor* file, - const Options& options, - bool* has_opt_codesize_extension); -inline FileOptions_OptimizeMode GetOptimizeFor(const FileDescriptor* file, - const Options& options) { - return GetOptimizeFor(file, options, nullptr); -} -inline bool NeedsEagerDescriptorAssignment(const FileDescriptor* file, - const Options& options) { - bool has_opt_codesize_extension; - if (GetOptimizeFor(file, options, &has_opt_codesize_extension) == - FileOptions::CODE_SIZE && - has_opt_codesize_extension) { - // If this filedescriptor contains an extension from another file which - // is optimized_for = CODE_SIZE. We need to be careful in the ordering so - // we eagerly build the descriptors in the dependencies before building - // the descriptors of this file. - return true; - } else { - // If we have a generated code based parser we never need eager - // initialization of descriptors of our deps. - return false; - } -} - -// This orders the messages in a .pb.cc as it's outputted by file.cc -void FlattenMessagesInFile(const FileDescriptor* file, - std::vector<const Descriptor*>* result); -inline std::vector<const Descriptor*> FlattenMessagesInFile( - const FileDescriptor* file) { - std::vector<const Descriptor*> result; - FlattenMessagesInFile(file, &result); - return result; -} - -template <typename F> -void ForEachMessage(const Descriptor* descriptor, F&& func) { - for (int i = 0; i < descriptor->nested_type_count(); i++) - ForEachMessage(descriptor->nested_type(i), std::forward<F&&>(func)); - func(descriptor); -} - -template <typename F> -void ForEachMessage(const FileDescriptor* descriptor, F&& func) { - for (int i = 0; i < descriptor->message_type_count(); i++) - ForEachMessage(descriptor->message_type(i), std::forward<F&&>(func)); -} - -bool HasWeakFields(const Descriptor* desc, const Options& options); -bool HasWeakFields(const FileDescriptor* desc, const Options& options); - -// Returns true if the "required" restriction check should be ignored for the -// given field. -inline static bool ShouldIgnoreRequiredFieldCheck(const FieldDescriptor* field, - const Options& options) { - // Do not check "required" for lazily verified lazy fields. - return IsLazilyVerifiedLazy(field, options); -} - -struct MessageAnalysis { - bool is_recursive = false; - bool contains_cord = false; - bool contains_extension = false; - bool contains_required = false; - bool contains_weak = false; // Implicit weak as well. -}; - -// This class is used in FileGenerator, to ensure linear instead of -// quadratic performance, if we do this per message we would get O(V*(V+E)). -// Logically this is just only used in message.cc, but in the header for -// FileGenerator to help share it. -class PROTOC_EXPORT MessageSCCAnalyzer { - public: - explicit MessageSCCAnalyzer(const Options& options) : options_(options) {} - - MessageAnalysis GetSCCAnalysis(const SCC* scc); - - bool HasRequiredFields(const Descriptor* descriptor) { - MessageAnalysis result = GetSCCAnalysis(GetSCC(descriptor)); - return result.contains_required || result.contains_extension; - } - bool HasWeakField(const Descriptor* descriptor) { - MessageAnalysis result = GetSCCAnalysis(GetSCC(descriptor)); - return result.contains_weak; - } - const SCC* GetSCC(const Descriptor* descriptor) { - return analyzer_.GetSCC(descriptor); - } - - private: - struct DepsGenerator { - std::vector<const Descriptor*> operator()(const Descriptor* desc) const { - std::vector<const Descriptor*> deps; - for (int i = 0; i < desc->field_count(); i++) { - if (desc->field(i)->message_type()) { - deps.push_back(desc->field(i)->message_type()); - } - } - return deps; - } - }; - SCCAnalyzer<DepsGenerator> analyzer_; - Options options_; - std::map<const SCC*, MessageAnalysis> analysis_cache_; -}; - -void ListAllFields(const Descriptor* d, - std::vector<const FieldDescriptor*>* fields); -void ListAllFields(const FileDescriptor* d, - std::vector<const FieldDescriptor*>* fields); - -template <class T> -void ForEachField(const Descriptor* d, T&& func) { - for (int i = 0; i < d->nested_type_count(); i++) { - ForEachField(d->nested_type(i), std::forward<T&&>(func)); - } - for (int i = 0; i < d->extension_count(); i++) { - func(d->extension(i)); - } - for (int i = 0; i < d->field_count(); i++) { - func(d->field(i)); - } -} - -template <class T> -void ForEachField(const FileDescriptor* d, T&& func) { - for (int i = 0; i < d->message_type_count(); i++) { - ForEachField(d->message_type(i), std::forward<T&&>(func)); - } - for (int i = 0; i < d->extension_count(); i++) { - func(d->extension(i)); - } -} - -void ListAllTypesForServices(const FileDescriptor* fd, - std::vector<const Descriptor*>* types); - -// Indicates whether we should use implicit weak fields for this file. -bool UsingImplicitWeakFields(const FileDescriptor* file, - const Options& options); - -// Indicates whether to treat this field as implicitly weak. -bool IsImplicitWeakField(const FieldDescriptor* field, const Options& options, - MessageSCCAnalyzer* scc_analyzer); - -inline bool HasSimpleBaseClass(const Descriptor* desc, const Options& options) { - if (!HasDescriptorMethods(desc->file(), options)) return false; - if (desc->extension_range_count() != 0) return false; - if (desc->field_count() == 0) return true; - // TODO(jorg): Support additional common message types with only one - // or two fields - return false; -} - -inline bool HasSimpleBaseClasses(const FileDescriptor* file, - const Options& options) { - bool v = false; - ForEachMessage(file, [&v, &options](const Descriptor* desc) { - v |= HasSimpleBaseClass(desc, options); - }); - return v; -} - -inline std::string SimpleBaseClass(const Descriptor* desc, - const Options& options) { - if (!HasDescriptorMethods(desc->file(), options)) return ""; - if (desc->extension_range_count() != 0) return ""; - if (desc->field_count() == 0) { - return "ZeroFieldsBase"; - } - // TODO(jorg): Support additional common message types with only one - // or two fields - return ""; -} - -// Returns true if this message has a _tracker_ field. -inline bool HasTracker(const Descriptor* desc, const Options& options) { - return options.field_listener_options.inject_field_listener_events && - desc->file()->options().optimize_for() != - google::protobuf::FileOptions::LITE_RUNTIME; -} - -// Returns true if this message needs an Impl_ struct for it's data. -inline bool HasImplData(const Descriptor* desc, const Options& options) { - return !HasSimpleBaseClass(desc, options); -} - -// Formatter is a functor class which acts as a closure around printer and -// the variable map. It's much like printer->Print except it supports both named -// variables that are substituted using a key value map and direct arguments. In -// the format string $1$, $2$, etc... are substituted for the first, second, ... -// direct argument respectively in the format call, it accepts both strings and -// integers. The implementation verifies all arguments are used and are "first" -// used in order of appearance in the argument list. For example, -// -// Format("return array[$1$];", 3) -> "return array[3];" -// Format("array[$2$] = $1$;", "Bla", 3) -> FATAL error (wrong order) -// Format("array[$1$] = $2$;", 3, "Bla") -> "array[3] = Bla;" -// -// The arguments can be used more than once like -// -// Format("array[$1$] = $2$; // Index = $1$", 3, "Bla") -> -// "array[3] = Bla; // Index = 3" -// -// If you use more arguments use the following style to help the reader, -// -// Format("int $1$() {\n" -// " array[$2$] = $3$;\n" -// " return $4$;" -// "}\n", -// funname, // 1 -// idx, // 2 -// varname, // 3 -// retval); // 4 -// -// but consider using named variables. Named variables like $foo$, with some -// identifier foo, are looked up in the map. One additional feature is that -// spaces are accepted between the '$' delimiters, $ foo$ will -// substitute to " bar" if foo stands for "bar", but in case it's empty -// will substitute to "". Hence, for example, -// -// Format(vars, "$dllexport $void fun();") -> "void fun();" -// "__declspec(export) void fun();" -// -// which is convenient to prevent double, leading or trailing spaces. -class PROTOC_EXPORT Formatter { - public: - explicit Formatter(io::Printer* printer) : printer_(printer) {} - Formatter(io::Printer* printer, - const std::map<std::string, std::string>& vars) - : printer_(printer), vars_(vars) {} - - template <typename T> - void Set(const std::string& key, const T& value) { - vars_[key] = ToString(value); - } - - void AddMap(const std::map<std::string, std::string>& vars) { - for (const auto& keyval : vars) vars_[keyval.first] = keyval.second; - } - - template <typename... Args> - void operator()(const char* format, const Args&... args) const { - printer_->FormatInternal({ToString(args)...}, vars_, format); - } - - void Indent() const { printer_->Indent(); } - void Outdent() const { printer_->Outdent(); } - io::Printer* printer() const { return printer_; } - - class PROTOC_EXPORT ScopedIndenter { - public: - explicit ScopedIndenter(Formatter* format) : format_(format) { - format_->Indent(); - } - ~ScopedIndenter() { format_->Outdent(); } - - private: - Formatter* format_; - }; - - PROTOBUF_NODISCARD ScopedIndenter ScopedIndent() { - return ScopedIndenter(this); - } - template <typename... Args> - PROTOBUF_NODISCARD ScopedIndenter ScopedIndent(const char* format, - const Args&&... args) { - (*this)(format, static_cast<Args&&>(args)...); - return ScopedIndenter(this); - } - - class PROTOC_EXPORT SaveState { - public: - explicit SaveState(Formatter* format) - : format_(format), vars_(format->vars_) {} - ~SaveState() { format_->vars_.swap(vars_); } - - private: - Formatter* format_; - std::map<std::string, std::string> vars_; - }; - - private: - io::Printer* printer_; - std::map<std::string, std::string> vars_; - - // Convenience overloads to accept different types as arguments. - static std::string ToString(const std::string& s) { return s; } - template <typename I, typename = typename std::enable_if< - std::is_integral<I>::value>::type> - static std::string ToString(I x) { - return StrCat(x); - } - static std::string ToString(strings::Hex x) { return StrCat(x); } - static std::string ToString(const FieldDescriptor* d) { return Payload(d); } - static std::string ToString(const Descriptor* d) { return Payload(d); } - static std::string ToString(const EnumDescriptor* d) { return Payload(d); } - static std::string ToString(const EnumValueDescriptor* d) { - return Payload(d); - } - static std::string ToString(const OneofDescriptor* d) { return Payload(d); } - - template <typename Descriptor> - static std::string Payload(const Descriptor* descriptor) { - std::vector<int> path; - descriptor->GetLocationPath(&path); - GeneratedCodeInfo::Annotation annotation; - for (int index : path) { - annotation.add_path(index); - } - annotation.set_source_file(descriptor->file()->name()); - return annotation.SerializeAsString(); - } -}; - -template <class T> -void PrintFieldComment(const Formatter& format, const T* field) { - // Print the field's (or oneof's) proto-syntax definition as a comment. - // We don't want to print group bodies so we cut off after the first - // line. - DebugStringOptions options; - options.elide_group_body = true; - options.elide_oneof_body = true; - std::string def = field->DebugStringWithOptions(options); - format("// $1$\n", def.substr(0, def.find_first_of('\n'))); -} - -class PROTOC_EXPORT NamespaceOpener { - public: - explicit NamespaceOpener(const Formatter& format) - : printer_(format.printer()) {} - NamespaceOpener(const std::string& name, const Formatter& format) - : NamespaceOpener(format) { - ChangeTo(name); - } - ~NamespaceOpener() { ChangeTo(""); } - - void ChangeTo(const std::string& name) { - std::vector<std::string> new_stack_ = - Split(name, "::", true); - size_t len = std::min(name_stack_.size(), new_stack_.size()); - size_t common_idx = 0; - while (common_idx < len) { - if (name_stack_[common_idx] != new_stack_[common_idx]) break; - common_idx++; - } - for (auto it = name_stack_.crbegin(); - it != name_stack_.crend() - common_idx; ++it) { - if (*it == "PROTOBUF_NAMESPACE_ID") { - printer_->Print("PROTOBUF_NAMESPACE_CLOSE\n"); - } else { - printer_->Print("} // namespace $ns$\n", "ns", *it); - } - } - name_stack_.swap(new_stack_); - for (size_t i = common_idx; i < name_stack_.size(); ++i) { - if (name_stack_[i] == "PROTOBUF_NAMESPACE_ID") { - printer_->Print("PROTOBUF_NAMESPACE_OPEN\n"); - } else { - printer_->Print("namespace $ns$ {\n", "ns", name_stack_[i]); - } - } - } - - private: - io::Printer* printer_; - std::vector<std::string> name_stack_; -}; - -enum class Utf8CheckMode { - kStrict = 0, // Parsing will fail if non UTF-8 data is in string fields. - kVerify = 1, // Only log an error but parsing will succeed. - kNone = 2, // No UTF-8 check. -}; - -Utf8CheckMode GetUtf8CheckMode(const FieldDescriptor* field, - const Options& options); - -void GenerateUtf8CheckCodeForString(const FieldDescriptor* field, - const Options& options, bool for_parse, - const char* parameters, - const Formatter& format); - -void GenerateUtf8CheckCodeForCord(const FieldDescriptor* field, - const Options& options, bool for_parse, - const char* parameters, - const Formatter& format); - -template <typename T> -struct FieldRangeImpl { - struct Iterator { - using iterator_category = std::forward_iterator_tag; - using value_type = const FieldDescriptor*; - using difference_type = int; - - value_type operator*() { return descriptor->field(idx); } - - friend bool operator==(const Iterator& a, const Iterator& b) { - GOOGLE_DCHECK(a.descriptor == b.descriptor); - return a.idx == b.idx; - } - friend bool operator!=(const Iterator& a, const Iterator& b) { - return !(a == b); - } - - Iterator& operator++() { - idx++; - return *this; - } - - int idx; - const T* descriptor; - }; - - Iterator begin() const { return {0, descriptor}; } - Iterator end() const { return {descriptor->field_count(), descriptor}; } - - const T* descriptor; -}; - -template <typename T> -FieldRangeImpl<T> FieldRange(const T* desc) { - return {desc}; -} - -struct OneOfRangeImpl { - struct Iterator { - using iterator_category = std::forward_iterator_tag; - using value_type = const OneofDescriptor*; - using difference_type = int; - - value_type operator*() { return descriptor->oneof_decl(idx); } - - friend bool operator==(const Iterator& a, const Iterator& b) { - GOOGLE_DCHECK(a.descriptor == b.descriptor); - return a.idx == b.idx; - } - friend bool operator!=(const Iterator& a, const Iterator& b) { - return !(a == b); - } - - Iterator& operator++() { - idx++; - return *this; - } - - int idx; - const Descriptor* descriptor; - }; - - Iterator begin() const { return {0, descriptor}; } - Iterator end() const { - return {descriptor->real_oneof_decl_count(), descriptor}; - } - - const Descriptor* descriptor; -}; - -inline OneOfRangeImpl OneOfRange(const Descriptor* desc) { return {desc}; } - -PROTOC_EXPORT std::string StripProto(const std::string& filename); - -bool EnableMessageOwnedArena(const Descriptor* desc, const Options& options); - -bool EnableMessageOwnedArenaTrial(const Descriptor* desc, - const Options& options); - -bool ShouldVerify(const Descriptor* descriptor, const Options& options, - MessageSCCAnalyzer* scc_analyzer); -bool ShouldVerify(const FileDescriptor* file, const Options& options, - MessageSCCAnalyzer* scc_analyzer); - -// Indicates whether to use predefined verify methods for a given message. If a -// message is "simple" and needs no special verification per field (e.g. message -// field, repeated packed, UTF8 string, etc.), we can use either VerifySimple or -// VerifySimpleAlwaysCheckInt32 methods as all verification can be done based on -// the wire type. -// -// Otherwise, we need "custom" verify methods tailored to a message to pass -// which field needs a special verification; i.e. InternalVerify. -enum class VerifySimpleType { - kSimpleInt32Never, // Use VerifySimple - kSimpleInt32Always, // Use VerifySimpleAlwaysCheckInt32 - kCustom, // Use InternalVerify and check only for int32 - kCustomInt32Never, // Use InternalVerify but never check for int32 - kCustomInt32Always, // Use InternalVerify and always check for int32 -}; - -// Returns VerifySimpleType if messages can be verified by predefined methods. -VerifySimpleType ShouldVerifySimple(const Descriptor* descriptor); - -bool IsUtf8String(const FieldDescriptor* field); - -bool HasMessageFieldOrExtension(const Descriptor* desc); - -} // namespace cpp -} // namespace compiler -} // namespace protobuf -} // namespace google - -#include <google/protobuf/port_undef.inc> - -#endif // GOOGLE_PROTOBUF_COMPILER_CPP_HELPERS_H__ diff --git a/include/google/protobuf/compiler/cpp/names.h b/include/google/protobuf/compiler/cpp/names.h deleted file mode 100644 index 7404ac530f..0000000000 --- a/include/google/protobuf/compiler/cpp/names.h +++ /dev/null @@ -1,97 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// 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 -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -#ifndef GOOGLE_PROTOBUF_COMPILER_CPP_NAMES_H__ -#define GOOGLE_PROTOBUF_COMPILER_CPP_NAMES_H__ - -#include <string> - -// Must be included last. -#include <google/protobuf/port_def.inc> - -namespace google { -namespace protobuf { - -class Descriptor; -class EnumDescriptor; -class EnumValueDescriptor; -class FieldDescriptor; - -namespace compiler { -namespace cpp { - -// Returns the unqualified C++ name. -// -// For example, if you had: -// package foo.bar; -// message Baz { message Moo {} } -// Then the non-qualified version would be: -// Baz_Moo -std::string ClassName(const Descriptor* descriptor); -std::string ClassName(const EnumDescriptor* enum_descriptor); - -// Returns the fully qualified C++ name. -// -// For example, if you had: -// package foo.bar; -// message Baz { message Moo {} } -// Then the qualified ClassName for Moo would be: -// ::foo::bar::Baz_Moo -std::string QualifiedClassName(const Descriptor* d); -std::string QualifiedClassName(const EnumDescriptor* d); -std::string QualifiedExtensionName(const FieldDescriptor* d); - -// Get the (unqualified) name that should be used for this field in C++ code. -// The name is coerced to lower-case to emulate proto1 behavior. People -// should be using lowercase-with-underscores style for proto field names -// anyway, so normally this just returns field->name(). -std::string FieldName(const FieldDescriptor* field); - -// Requires that this field is in a oneof. Returns the (unqualified) case -// constant for this field. -std::string OneofCaseConstantName(const FieldDescriptor* field); -// Returns the quafilied case constant for this field. -std::string QualifiedOneofCaseConstantName(const FieldDescriptor* field); - -// Get the (unqualified) name that should be used for this enum value in C++ -// code. -std::string EnumValueName(const EnumValueDescriptor* enum_value); - -// Strips ".proto" or ".protodevel" from the end of a filename. -PROTOC_EXPORT std::string StripProto(const std::string& filename); - -} // namespace cpp -} // namespace compiler -} // namespace protobuf -} // namespace google - -#include <google/protobuf/port_undef.inc> - -#endif // GOOGLE_PROTOBUF_COMPILER_CPP_NAMES_H__ diff --git a/include/google/protobuf/compiler/csharp/csharp_doc_comment.h b/include/google/protobuf/compiler/csharp/csharp_doc_comment.h deleted file mode 100644 index 75eb0ea04d..0000000000 --- a/include/google/protobuf/compiler/csharp/csharp_doc_comment.h +++ /dev/null @@ -1,51 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// 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 -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -#ifndef GOOGLE_PROTOBUF_COMPILER_CSHARP_DOC_COMMENT_H__ -#define GOOGLE_PROTOBUF_COMPILER_CSHARP_DOC_COMMENT_H__ - -#include <google/protobuf/io/printer.h> -#include <google/protobuf/descriptor.h> - -namespace google { -namespace protobuf { -namespace compiler { -namespace csharp { - void WriteMessageDocComment(io::Printer* printer, const Descriptor* message); - void WritePropertyDocComment(io::Printer* printer, const FieldDescriptor* field); - void WriteEnumDocComment(io::Printer* printer, const EnumDescriptor* enumDescriptor); - void WriteEnumValueDocComment(io::Printer* printer, const EnumValueDescriptor* value); - void WriteMethodDocComment(io::Printer* printer, const MethodDescriptor* method); -} // namespace csharp -} // namespace compiler -} // namespace protobuf -} // namespace google -#endif // GOOGLE_PROTOBUF_COMPILER_CSHARP_DOC_COMMENT_H__ diff --git a/include/google/protobuf/compiler/csharp/csharp_generator.h b/include/google/protobuf/compiler/csharp/csharp_generator.h deleted file mode 100644 index f41f9b8358..0000000000 --- a/include/google/protobuf/compiler/csharp/csharp_generator.h +++ /dev/null @@ -1,70 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// 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 -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -// Generates C# code for a given .proto file. - -#ifndef GOOGLE_PROTOBUF_COMPILER_CSHARP_GENERATOR_H__ -#define GOOGLE_PROTOBUF_COMPILER_CSHARP_GENERATOR_H__ - -#include <string> - -#include <google/protobuf/compiler/code_generator.h> - -#include <google/protobuf/port_def.inc> - -namespace google { -namespace protobuf { -namespace compiler { -namespace csharp { - -// CodeGenerator implementation which generates a C# source file and -// header. If you create your own protocol compiler binary and you want -// it to support C# output, you can do so by registering an instance of this -// CodeGenerator with the CommandLineInterface in your main() function. -class PROTOC_EXPORT Generator : public CodeGenerator { - public: - Generator(); - ~Generator(); - bool Generate( - const FileDescriptor* file, - const std::string& parameter, - GeneratorContext* generator_context, - std::string* error) const override; - uint64_t GetSupportedFeatures() const override; -}; - -} // namespace csharp -} // namespace compiler -} // namespace protobuf -} // namespace google - -#include <google/protobuf/port_undef.inc> - -#endif // GOOGLE_PROTOBUF_COMPILER_CSHARP_GENERATOR_H__ diff --git a/include/google/protobuf/compiler/csharp/csharp_names.h b/include/google/protobuf/compiler/csharp/csharp_names.h deleted file mode 100644 index 67e53b6401..0000000000 --- a/include/google/protobuf/compiler/csharp/csharp_names.h +++ /dev/null @@ -1,109 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// 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 -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -// Author: kenton@google.com (Kenton Varda) -// Based on original Protocol Buffers design by -// Sanjay Ghemawat, Jeff Dean, and others. -// -// Provides a mechanism for mapping a descriptor to the -// fully-qualified name of the corresponding C# class. - -#ifndef GOOGLE_PROTOBUF_COMPILER_CSHARP_NAMES_H__ -#define GOOGLE_PROTOBUF_COMPILER_CSHARP_NAMES_H__ - -#include <string> -#include <google/protobuf/port.h> -#include <google/protobuf/stubs/common.h> - -#include <google/protobuf/port_def.inc> - -namespace google { -namespace protobuf { - -class Descriptor; -class EnumDescriptor; -class FileDescriptor; -class ServiceDescriptor; - -namespace compiler { -namespace csharp { - -// Requires: -// descriptor != NULL -// -// Returns: -// The namespace to use for given file descriptor. -std::string PROTOC_EXPORT GetFileNamespace(const FileDescriptor* descriptor); - -// Requires: -// descriptor != NULL -// -// Returns: -// The fully-qualified C# class name. -std::string PROTOC_EXPORT GetClassName(const Descriptor* descriptor); - -// Requires: -// descriptor != NULL -// -// Returns: -// The fully-qualified name of the C# class that provides -// access to the file descriptor. Proto compiler generates -// such class for each .proto file processed. -std::string PROTOC_EXPORT -GetReflectionClassName(const FileDescriptor* descriptor); - -// Generates output file name for given file descriptor. If generate_directories -// is true, the output file will be put under directory corresponding to file's -// namespace. base_namespace can be used to strip some of the top level -// directories. E.g. for file with namespace "Bar.Foo" and base_namespace="Bar", -// the resulting file will be put under directory "Foo" (and not "Bar/Foo"). -// -// Requires: -// descriptor != NULL -// error != NULL -// -// Returns: -// The file name to use as output file for given file descriptor. In case -// of failure, this function will return empty string and error parameter -// will contain the error message. -std::string PROTOC_EXPORT GetOutputFile(const FileDescriptor* descriptor, - const std::string file_extension, - const bool generate_directories, - const std::string base_namespace, - std::string* error); - -} // namespace csharp -} // namespace compiler -} // namespace protobuf -} // namespace google - -#include <google/protobuf/port_undef.inc> - -#endif // GOOGLE_PROTOBUF_COMPILER_CSHARP_NAMES_H__ diff --git a/include/google/protobuf/compiler/csharp/csharp_options.h b/include/google/protobuf/compiler/csharp/csharp_options.h deleted file mode 100644 index 42ff6d8662..0000000000 --- a/include/google/protobuf/compiler/csharp/csharp_options.h +++ /dev/null @@ -1,81 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// 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 -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -#ifndef GOOGLE_PROTOBUF_COMPILER_CSHARP_OPTIONS_H__ -#define GOOGLE_PROTOBUF_COMPILER_CSHARP_OPTIONS_H__ - -#include <string> - -namespace google { -namespace protobuf { -namespace compiler { -namespace csharp { - -// Generator options (used by csharp_generator.cc): -struct Options { - Options() : - file_extension(".cs"), - base_namespace(""), - base_namespace_specified(false), - internal_access(false), - serializable(false) { - } - // Extension of the generated file. Defaults to ".cs" - std::string file_extension; - // Base namespace to use to create directory hierarchy. Defaults to "". - // This option allows the simple creation of a conventional C# file layout, - // where directories are created relative to a project-specific base - // namespace. For example, in a project with a base namespace of PetShop, a - // proto of user.proto with a C# namespace of PetShop.Model.Shared would - // generate Model/Shared/User.cs underneath the specified --csharp_out - // directory. - // - // If no base namespace is specified, all files are generated in the - // --csharp_out directory, with no subdirectories created automatically. - std::string base_namespace; - // Whether the base namespace has been explicitly specified by the user. - // This is required as the base namespace can be explicitly set to the empty - // string, meaning "create a full directory hierarchy, starting from the first - // segment of the namespace." - bool base_namespace_specified; - // Whether the generated classes should have accessibility level of "internal". - // Defaults to false that generates "public" classes. - bool internal_access; - // Whether the generated classes should have a global::System.Serializable attribute added - // Defaults to false - bool serializable; -}; - -} // namespace csharp -} // namespace compiler -} // namespace protobuf -} // namespace google - -#endif // GOOGLE_PROTOBUF_COMPILER_CSHARP_OPTIONS_H__ diff --git a/include/google/protobuf/compiler/importer.h b/include/google/protobuf/compiler/importer.h deleted file mode 100644 index 2fb88b923e..0000000000 --- a/include/google/protobuf/compiler/importer.h +++ /dev/null @@ -1,338 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// 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 -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -// Author: kenton@google.com (Kenton Varda) -// Based on original Protocol Buffers design by -// Sanjay Ghemawat, Jeff Dean, and others. -// -// This file is the public interface to the .proto file parser. - -#ifndef GOOGLE_PROTOBUF_COMPILER_IMPORTER_H__ -#define GOOGLE_PROTOBUF_COMPILER_IMPORTER_H__ - -#include <set> -#include <string> -#include <utility> -#include <vector> - -#include <google/protobuf/compiler/parser.h> -#include <google/protobuf/descriptor.h> -#include <google/protobuf/descriptor_database.h> - -// Must be included last. -#include <google/protobuf/port_def.inc> - -namespace google { -namespace protobuf { - -namespace io { -class ZeroCopyInputStream; -} - -namespace compiler { - -// Defined in this file. -class Importer; -class MultiFileErrorCollector; -class SourceTree; -class DiskSourceTree; - -// TODO(kenton): Move all SourceTree stuff to a separate file? - -// An implementation of DescriptorDatabase which loads files from a SourceTree -// and parses them. -// -// Note: This class is not thread-safe since it maintains a table of source -// code locations for error reporting. However, when a DescriptorPool wraps -// a DescriptorDatabase, it uses mutex locking to make sure only one method -// of the database is called at a time, even if the DescriptorPool is used -// from multiple threads. Therefore, there is only a problem if you create -// multiple DescriptorPools wrapping the same SourceTreeDescriptorDatabase -// and use them from multiple threads. -// -// Note: This class does not implement FindFileContainingSymbol() or -// FindFileContainingExtension(); these will always return false. -class PROTOBUF_EXPORT SourceTreeDescriptorDatabase : public DescriptorDatabase { - public: - SourceTreeDescriptorDatabase(SourceTree* source_tree); - - // If non-NULL, fallback_database will be checked if a file doesn't exist in - // the specified source_tree. - SourceTreeDescriptorDatabase(SourceTree* source_tree, - DescriptorDatabase* fallback_database); - ~SourceTreeDescriptorDatabase() override; - - // Instructs the SourceTreeDescriptorDatabase to report any parse errors - // to the given MultiFileErrorCollector. This should be called before - // parsing. error_collector must remain valid until either this method - // is called again or the SourceTreeDescriptorDatabase is destroyed. - void RecordErrorsTo(MultiFileErrorCollector* error_collector) { - error_collector_ = error_collector; - } - - // Gets a DescriptorPool::ErrorCollector which records errors to the - // MultiFileErrorCollector specified with RecordErrorsTo(). This collector - // has the ability to determine exact line and column numbers of errors - // from the information given to it by the DescriptorPool. - DescriptorPool::ErrorCollector* GetValidationErrorCollector() { - using_validation_error_collector_ = true; - return &validation_error_collector_; - } - - // implements DescriptorDatabase ----------------------------------- - bool FindFileByName(const std::string& filename, - FileDescriptorProto* output) override; - bool FindFileContainingSymbol(const std::string& symbol_name, - FileDescriptorProto* output) override; - bool FindFileContainingExtension(const std::string& containing_type, - int field_number, - FileDescriptorProto* output) override; - - private: - class SingleFileErrorCollector; - - SourceTree* source_tree_; - DescriptorDatabase* fallback_database_; - MultiFileErrorCollector* error_collector_; - - class PROTOBUF_EXPORT ValidationErrorCollector - : public DescriptorPool::ErrorCollector { - public: - ValidationErrorCollector(SourceTreeDescriptorDatabase* owner); - ~ValidationErrorCollector() override; - - // implements ErrorCollector --------------------------------------- - void AddError(const std::string& filename, const std::string& element_name, - const Message* descriptor, ErrorLocation location, - const std::string& message) override; - - void AddWarning(const std::string& filename, - const std::string& element_name, const Message* descriptor, - ErrorLocation location, - const std::string& message) override; - - private: - SourceTreeDescriptorDatabase* owner_; - }; - friend class ValidationErrorCollector; - - bool using_validation_error_collector_; - SourceLocationTable source_locations_; - ValidationErrorCollector validation_error_collector_; -}; - -// Simple interface for parsing .proto files. This wraps the process -// of opening the file, parsing it with a Parser, recursively parsing all its -// imports, and then cross-linking the results to produce a FileDescriptor. -// -// This is really just a thin wrapper around SourceTreeDescriptorDatabase. -// You may find that SourceTreeDescriptorDatabase is more flexible. -// -// TODO(kenton): I feel like this class is not well-named. -class PROTOBUF_EXPORT Importer { - public: - Importer(SourceTree* source_tree, MultiFileErrorCollector* error_collector); - ~Importer(); - - // Import the given file and build a FileDescriptor representing it. If - // the file is already in the DescriptorPool, the existing FileDescriptor - // will be returned. The FileDescriptor is property of the DescriptorPool, - // and will remain valid until it is destroyed. If any errors occur, they - // will be reported using the error collector and Import() will return NULL. - // - // A particular Importer object will only report errors for a particular - // file once. All future attempts to import the same file will return NULL - // without reporting any errors. The idea is that you might want to import - // a lot of files without seeing the same errors over and over again. If - // you want to see errors for the same files repeatedly, you can use a - // separate Importer object to import each one (but use the same - // DescriptorPool so that they can be cross-linked). - const FileDescriptor* Import(const std::string& filename); - - // The DescriptorPool in which all imported FileDescriptors and their - // contents are stored. - inline const DescriptorPool* pool() const { return &pool_; } - - void AddUnusedImportTrackFile(const std::string& file_name, - bool is_error = false); - void ClearUnusedImportTrackFiles(); - - - private: - SourceTreeDescriptorDatabase database_; - DescriptorPool pool_; - - GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(Importer); -}; - -// If the importer encounters problems while trying to import the proto files, -// it reports them to a MultiFileErrorCollector. -class PROTOBUF_EXPORT MultiFileErrorCollector { - public: - inline MultiFileErrorCollector() {} - virtual ~MultiFileErrorCollector(); - - // Line and column numbers are zero-based. A line number of -1 indicates - // an error with the entire file (e.g. "not found"). - virtual void AddError(const std::string& filename, int line, int column, - const std::string& message) = 0; - - virtual void AddWarning(const std::string& /* filename */, int /* line */, - int /* column */, const std::string& /* message */) {} - - private: - GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(MultiFileErrorCollector); -}; - -// Abstract interface which represents a directory tree containing proto files. -// Used by the default implementation of Importer to resolve import statements -// Most users will probably want to use the DiskSourceTree implementation, -// below. -class PROTOBUF_EXPORT SourceTree { - public: - inline SourceTree() {} - virtual ~SourceTree(); - - // Open the given file and return a stream that reads it, or NULL if not - // found. The caller takes ownership of the returned object. The filename - // must be a path relative to the root of the source tree and must not - // contain "." or ".." components. - virtual io::ZeroCopyInputStream* Open(const std::string& filename) = 0; - - // If Open() returns NULL, calling this method immediately will return an - // description of the error. - // Subclasses should implement this method and return a meaningful value for - // better error reporting. - // TODO(xiaofeng): change this to a pure virtual function. - virtual std::string GetLastErrorMessage(); - - private: - GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(SourceTree); -}; - -// An implementation of SourceTree which loads files from locations on disk. -// Multiple mappings can be set up to map locations in the DiskSourceTree to -// locations in the physical filesystem. -class PROTOBUF_EXPORT DiskSourceTree : public SourceTree { - public: - DiskSourceTree(); - ~DiskSourceTree() override; - - // Map a path on disk to a location in the SourceTree. The path may be - // either a file or a directory. If it is a directory, the entire tree - // under it will be mapped to the given virtual location. To map a directory - // to the root of the source tree, pass an empty string for virtual_path. - // - // If multiple mapped paths apply when opening a file, they will be searched - // in order. For example, if you do: - // MapPath("bar", "foo/bar"); - // MapPath("", "baz"); - // and then you do: - // Open("bar/qux"); - // the DiskSourceTree will first try to open foo/bar/qux, then baz/bar/qux, - // returning the first one that opens successfully. - // - // disk_path may be an absolute path or relative to the current directory, - // just like a path you'd pass to open(). - void MapPath(const std::string& virtual_path, const std::string& disk_path); - - // Return type for DiskFileToVirtualFile(). - enum DiskFileToVirtualFileResult { - SUCCESS, - SHADOWED, - CANNOT_OPEN, - NO_MAPPING - }; - - // Given a path to a file on disk, find a virtual path mapping to that - // file. The first mapping created with MapPath() whose disk_path contains - // the filename is used. However, that virtual path may not actually be - // usable to open the given file. Possible return values are: - // * SUCCESS: The mapping was found. *virtual_file is filled in so that - // calling Open(*virtual_file) will open the file named by disk_file. - // * SHADOWED: A mapping was found, but using Open() to open this virtual - // path will end up returning some different file. This is because some - // other mapping with a higher precedence also matches this virtual path - // and maps it to a different file that exists on disk. *virtual_file - // is filled in as it would be in the SUCCESS case. *shadowing_disk_file - // is filled in with the disk path of the file which would be opened if - // you were to call Open(*virtual_file). - // * CANNOT_OPEN: The mapping was found and was not shadowed, but the - // file specified cannot be opened. When this value is returned, - // errno will indicate the reason the file cannot be opened. *virtual_file - // will be set to the virtual path as in the SUCCESS case, even though - // it is not useful. - // * NO_MAPPING: Indicates that no mapping was found which contains this - // file. - DiskFileToVirtualFileResult DiskFileToVirtualFile( - const std::string& disk_file, std::string* virtual_file, - std::string* shadowing_disk_file); - - // Given a virtual path, find the path to the file on disk. - // Return true and update disk_file with the on-disk path if the file exists. - // Return false and leave disk_file untouched if the file doesn't exist. - bool VirtualFileToDiskFile(const std::string& virtual_file, - std::string* disk_file); - - // implements SourceTree ------------------------------------------- - io::ZeroCopyInputStream* Open(const std::string& filename) override; - - std::string GetLastErrorMessage() override; - - private: - struct Mapping { - std::string virtual_path; - std::string disk_path; - - inline Mapping(const std::string& virtual_path_param, - const std::string& disk_path_param) - : virtual_path(virtual_path_param), disk_path(disk_path_param) {} - }; - std::vector<Mapping> mappings_; - std::string last_error_message_; - - // Like Open(), but returns the on-disk path in disk_file if disk_file is - // non-NULL and the file could be successfully opened. - io::ZeroCopyInputStream* OpenVirtualFile(const std::string& virtual_file, - std::string* disk_file); - - // Like Open() but given the actual on-disk path. - io::ZeroCopyInputStream* OpenDiskFile(const std::string& filename); - - GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(DiskSourceTree); -}; - -} // namespace compiler -} // namespace protobuf -} // namespace google - -#include <google/protobuf/port_undef.inc> - -#endif // GOOGLE_PROTOBUF_COMPILER_IMPORTER_H__ diff --git a/include/google/protobuf/compiler/java/generator.h b/include/google/protobuf/compiler/java/generator.h deleted file mode 100644 index bbc71700c6..0000000000 --- a/include/google/protobuf/compiler/java/generator.h +++ /dev/null @@ -1,77 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// 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 -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -// Author: kenton@google.com (Kenton Varda) -// Based on original Protocol Buffers design by -// Sanjay Ghemawat, Jeff Dean, and others. -// -// Generates Java code for a given .proto file. - -#ifndef GOOGLE_PROTOBUF_COMPILER_JAVA_GENERATOR_H__ -#define GOOGLE_PROTOBUF_COMPILER_JAVA_GENERATOR_H__ - -#include <string> -#include <google/protobuf/compiler/code_generator.h> - -// Must be included last. -#include <google/protobuf/port_def.inc> - -namespace google { -namespace protobuf { -namespace compiler { -namespace java { - -// CodeGenerator implementation which generates Java code. If you create your -// own protocol compiler binary and you want it to support Java output, you -// can do so by registering an instance of this CodeGenerator with the -// CommandLineInterface in your main() function. -class PROTOC_EXPORT JavaGenerator : public CodeGenerator { - public: - JavaGenerator(); - ~JavaGenerator() override; - - // implements CodeGenerator ---------------------------------------- - bool Generate(const FileDescriptor* file, const std::string& parameter, - GeneratorContext* context, std::string* error) const override; - - uint64_t GetSupportedFeatures() const override; - - private: - GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(JavaGenerator); -}; - -} // namespace java -} // namespace compiler -} // namespace protobuf -} // namespace google - -#include <google/protobuf/port_undef.inc> - -#endif // GOOGLE_PROTOBUF_COMPILER_JAVA_GENERATOR_H__ diff --git a/include/google/protobuf/compiler/java/java_generator.h b/include/google/protobuf/compiler/java/java_generator.h deleted file mode 100644 index 294b1bde02..0000000000 --- a/include/google/protobuf/compiler/java/java_generator.h +++ /dev/null @@ -1,6 +0,0 @@ -#ifndef GOOGLE_PROTOBUF_COMPILER_JAVA_JAVA_GENERATOR_H_ -#define GOOGLE_PROTOBUF_COMPILER_JAVA_JAVA_GENERATOR_H_ - -#include <google/protobuf/compiler/java/generator.h> - -#endif // GOOGLE_PROTOBUF_COMPILER_JAVA_JAVA_GENERATOR_H_ diff --git a/include/google/protobuf/compiler/java/kotlin_generator.h b/include/google/protobuf/compiler/java/kotlin_generator.h deleted file mode 100644 index ccd9688ca0..0000000000 --- a/include/google/protobuf/compiler/java/kotlin_generator.h +++ /dev/null @@ -1,74 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// 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 -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -// Generates Kotlin code for a given .proto file. - -#ifndef GOOGLE_PROTOBUF_COMPILER_JAVA_KOTLIN_GENERATOR_H__ -#define GOOGLE_PROTOBUF_COMPILER_JAVA_KOTLIN_GENERATOR_H__ - -#include <string> - -#include <google/protobuf/compiler/code_generator.h> - -// Must be included last. -#include <google/protobuf/port_def.inc> - -namespace google { -namespace protobuf { -namespace compiler { -namespace java { - -// CodeGenerator implementation which generates Kotlin code. If you create your -// own protocol compiler binary and you want it to support Kotlin output, you -// can do so by registering an instance of this CodeGenerator with the -// CommandLineInterface in your main() function. -class PROTOC_EXPORT KotlinGenerator : public CodeGenerator { - public: - KotlinGenerator(); - ~KotlinGenerator() override; - - // implements CodeGenerator ---------------------------------------- - bool Generate(const FileDescriptor* file, const std::string& parameter, - GeneratorContext* context, std::string* error) const override; - - uint64_t GetSupportedFeatures() const override; - - private: - GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(KotlinGenerator); -}; - -} // namespace java -} // namespace compiler -} // namespace protobuf -} // namespace google - -#include <google/protobuf/port_undef.inc> - -#endif // GOOGLE_PROTOBUF_COMPILER_JAVA_KOTLIN_GENERATOR_H__ diff --git a/include/google/protobuf/compiler/java/names.h b/include/google/protobuf/compiler/java/names.h deleted file mode 100644 index 313ace4feb..0000000000 --- a/include/google/protobuf/compiler/java/names.h +++ /dev/null @@ -1,100 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// 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 -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -// Author: kenton@google.com (Kenton Varda) -// Based on original Protocol Buffers design by -// Sanjay Ghemawat, Jeff Dean, and others. -// -// Provides a mechanism for mapping a descriptor to the -// fully-qualified name of the corresponding Java class. - -#ifndef GOOGLE_PROTOBUF_COMPILER_JAVA_NAMES_H__ -#define GOOGLE_PROTOBUF_COMPILER_JAVA_NAMES_H__ - -#include <string> - -namespace google { -namespace protobuf { - -class Descriptor; -class EnumDescriptor; -class FileDescriptor; -class FieldDescriptor; -class ServiceDescriptor; - -namespace compiler { -namespace java { - -// Requires: -// descriptor != NULL -// -// Returns: -// The fully-qualified Java class name. -std::string ClassName(const Descriptor* descriptor); - -// Requires: -// descriptor != NULL -// -// Returns: -// The fully-qualified Java class name. -std::string ClassName(const EnumDescriptor* descriptor); - -// Requires: -// descriptor != NULL -// -// Returns: -// The fully-qualified Java class name. -std::string ClassName(const FileDescriptor* descriptor); - -// Requires: -// descriptor != NULL -// -// Returns: -// The fully-qualified Java class name. -std::string ClassName(const ServiceDescriptor* descriptor); - -// Requires: -// descriptor != NULL -// -// Returns: -// Java package name. -std::string FileJavaPackage(const FileDescriptor* descriptor); - -// Requires: -// descriptor != NULL -// Returns: -// Capitalized camel case name field name. -std::string CapitalizedFieldName(const FieldDescriptor* descriptor); - -} // namespace java -} // namespace compiler -} // namespace protobuf -} // namespace google -#endif // GOOGLE_PROTOBUF_COMPILER_JAVA_NAMES_H__ diff --git a/include/google/protobuf/compiler/objectivec/objectivec_generator.h b/include/google/protobuf/compiler/objectivec/objectivec_generator.h deleted file mode 100644 index 1dbc666af1..0000000000 --- a/include/google/protobuf/compiler/objectivec/objectivec_generator.h +++ /dev/null @@ -1,79 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// 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 -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -// Generates ObjectiveC code for a given .proto file. - -#ifndef GOOGLE_PROTOBUF_COMPILER_OBJECTIVEC_GENERATOR_H__ -#define GOOGLE_PROTOBUF_COMPILER_OBJECTIVEC_GENERATOR_H__ - -#include <string> -#include <google/protobuf/compiler/code_generator.h> -#include <google/protobuf/descriptor.h> - -#include <google/protobuf/port_def.inc> - -namespace google { -namespace protobuf { -namespace compiler { -namespace objectivec { - -// CodeGenerator implementation which generates a ObjectiveC source file and -// header. If you create your own protocol compiler binary and you want it to -// support ObjectiveC output, you can do so by registering an instance of this -// CodeGenerator with the CommandLineInterface in your main() function. -class PROTOC_EXPORT ObjectiveCGenerator : public CodeGenerator { - public: - ObjectiveCGenerator(); - ~ObjectiveCGenerator(); - - ObjectiveCGenerator(const ObjectiveCGenerator&) = delete; - ObjectiveCGenerator& operator=(const ObjectiveCGenerator&) = delete; - - // implements CodeGenerator ---------------------------------------- - bool HasGenerateAll() const override; - bool Generate(const FileDescriptor* file, const std::string& parameter, - GeneratorContext* context, std::string* error) const override; - bool GenerateAll(const std::vector<const FileDescriptor*>& files, - const std::string& parameter, GeneratorContext* context, - std::string* error) const override; - - uint64_t GetSupportedFeatures() const override { - return FEATURE_PROTO3_OPTIONAL; - } -}; - -} // namespace objectivec -} // namespace compiler -} // namespace protobuf -} // namespace google - -#include <google/protobuf/port_undef.inc> - -#endif // GOOGLE_PROTOBUF_COMPILER_OBJECTIVEC_GENERATOR_H__ diff --git a/include/google/protobuf/compiler/objectivec/objectivec_helpers.h b/include/google/protobuf/compiler/objectivec/objectivec_helpers.h deleted file mode 100644 index d21fed215a..0000000000 --- a/include/google/protobuf/compiler/objectivec/objectivec_helpers.h +++ /dev/null @@ -1,353 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// 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 -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -// Helper functions for generating ObjectiveC code. - -#ifndef GOOGLE_PROTOBUF_COMPILER_OBJECTIVEC_HELPERS_H__ -#define GOOGLE_PROTOBUF_COMPILER_OBJECTIVEC_HELPERS_H__ - -#include <string> -#include <vector> - -#include <google/protobuf/descriptor.h> -#include <google/protobuf/descriptor.pb.h> -#include <google/protobuf/io/zero_copy_stream.h> - -#include <google/protobuf/port_def.inc> - -namespace google { -namespace protobuf { -namespace compiler { -namespace objectivec { - -// Get/Set the path to a file to load for objc class prefix lookups. -std::string PROTOC_EXPORT GetPackageToPrefixMappingsPath(); -void PROTOC_EXPORT SetPackageToPrefixMappingsPath( - const std::string& file_path); -// Get/Set if the proto package should be used to make the default prefix for -// symbols. This will then impact most of the type naming apis below. It is done -// as a global to not break any other generator reusing the methods since they -// are exported. -bool PROTOC_EXPORT UseProtoPackageAsDefaultPrefix(); -void PROTOC_EXPORT SetUseProtoPackageAsDefaultPrefix(bool on_or_off); -// Get/Set the path to a file to load as exceptions when -// `UseProtoPackageAsDefaultPrefix()` is `true`. An empty string means there -// should be no exceptions. -std::string PROTOC_EXPORT GetProtoPackagePrefixExceptionList(); -void PROTOC_EXPORT SetProtoPackagePrefixExceptionList( - const std::string& file_path); - -// Generator Prefix Validation Options (see objectivec_generator.cc for a -// description of each): -struct Options { - Options(); - std::string expected_prefixes_path; - std::vector<std::string> expected_prefixes_suppressions; - bool prefixes_must_be_registered; - bool require_prefixes; -}; - -// Escape C++ trigraphs by escaping question marks to "\?". -std::string PROTOC_EXPORT EscapeTrigraphs(const std::string& to_escape); - -// Remove white space from either end of a StringPiece. -void PROTOC_EXPORT TrimWhitespace(StringPiece* input); - -// Returns true if the name requires a ns_returns_not_retained attribute applied -// to it. -bool PROTOC_EXPORT IsRetainedName(const std::string& name); - -// Returns true if the name starts with "init" and will need to have special -// handling under ARC. -bool PROTOC_EXPORT IsInitName(const std::string& name); - -// Gets the objc_class_prefix or the prefix made from the proto package. -std::string PROTOC_EXPORT FileClassPrefix(const FileDescriptor* file); - -// Gets the path of the file we're going to generate (sans the .pb.h -// extension). The path will be dependent on the objectivec package -// declared in the proto package. -std::string PROTOC_EXPORT FilePath(const FileDescriptor* file); - -// Just like FilePath(), but without the directory part. -std::string PROTOC_EXPORT FilePathBasename(const FileDescriptor* file); - -// Gets the name of the root class we'll generate in the file. This class -// is not meant for external consumption, but instead contains helpers that -// the rest of the classes need -std::string PROTOC_EXPORT FileClassName(const FileDescriptor* file); - -// These return the fully-qualified class name corresponding to the given -// descriptor. -std::string PROTOC_EXPORT ClassName(const Descriptor* descriptor); -std::string PROTOC_EXPORT ClassName(const Descriptor* descriptor, - std::string* out_suffix_added); -std::string PROTOC_EXPORT EnumName(const EnumDescriptor* descriptor); - -// Returns the fully-qualified name of the enum value corresponding to the -// the descriptor. -std::string PROTOC_EXPORT EnumValueName(const EnumValueDescriptor* descriptor); - -// Returns the name of the enum value corresponding to the descriptor. -std::string PROTOC_EXPORT EnumValueShortName(const EnumValueDescriptor* descriptor); - -// Reverse what an enum does. -std::string PROTOC_EXPORT UnCamelCaseEnumShortName(const std::string& name); - -// Returns the name to use for the extension (used as the method off the file's -// Root class). -std::string PROTOC_EXPORT ExtensionMethodName(const FieldDescriptor* descriptor); - -// Returns the transformed field name. -std::string PROTOC_EXPORT FieldName(const FieldDescriptor* field); -std::string PROTOC_EXPORT FieldNameCapitalized(const FieldDescriptor* field); - -// Returns the transformed oneof name. -std::string PROTOC_EXPORT OneofEnumName(const OneofDescriptor* descriptor); -std::string PROTOC_EXPORT OneofName(const OneofDescriptor* descriptor); -std::string PROTOC_EXPORT OneofNameCapitalized(const OneofDescriptor* descriptor); - -// Returns a symbol that can be used in C code to refer to an Objective C -// class without initializing the class. -std::string PROTOC_EXPORT ObjCClass(const std::string& class_name); - -// Declares an Objective C class without initializing the class so that it can -// be refrerred to by ObjCClass. -std::string PROTOC_EXPORT ObjCClassDeclaration(const std::string& class_name); - -inline bool HasPreservingUnknownEnumSemantics(const FileDescriptor* file) { - return file->syntax() == FileDescriptor::SYNTAX_PROTO3; -} - -inline bool IsMapEntryMessage(const Descriptor* descriptor) { - return descriptor->options().map_entry(); -} - -// Reverse of the above. -std::string PROTOC_EXPORT UnCamelCaseFieldName(const std::string& name, - const FieldDescriptor* field); - -enum ObjectiveCType { - OBJECTIVECTYPE_INT32, - OBJECTIVECTYPE_UINT32, - OBJECTIVECTYPE_INT64, - OBJECTIVECTYPE_UINT64, - OBJECTIVECTYPE_FLOAT, - OBJECTIVECTYPE_DOUBLE, - OBJECTIVECTYPE_BOOLEAN, - OBJECTIVECTYPE_STRING, - OBJECTIVECTYPE_DATA, - OBJECTIVECTYPE_ENUM, - OBJECTIVECTYPE_MESSAGE -}; - -enum FlagType { - FLAGTYPE_DESCRIPTOR_INITIALIZATION, - FLAGTYPE_EXTENSION, - FLAGTYPE_FIELD -}; - -template <class TDescriptor> -std::string GetOptionalDeprecatedAttribute(const TDescriptor* descriptor, - const FileDescriptor* file = NULL, - bool preSpace = true, - bool postNewline = false) { - bool isDeprecated = descriptor->options().deprecated(); - // The file is only passed when checking Messages & Enums, so those types - // get tagged. At the moment, it doesn't seem to make sense to tag every - // field or enum value with when the file is deprecated. - bool isFileLevelDeprecation = false; - if (!isDeprecated && file) { - isFileLevelDeprecation = file->options().deprecated(); - isDeprecated = isFileLevelDeprecation; - } - if (isDeprecated) { - std::string message; - const FileDescriptor* sourceFile = descriptor->file(); - if (isFileLevelDeprecation) { - message = sourceFile->name() + " is deprecated."; - } else { - message = descriptor->full_name() + " is deprecated (see " + - sourceFile->name() + ")."; - } - - std::string result = std::string("GPB_DEPRECATED_MSG(\"") + message + "\")"; - if (preSpace) { - result.insert(0, " "); - } - if (postNewline) { - result.append("\n"); - } - return result; - } else { - return ""; - } -} - -std::string PROTOC_EXPORT GetCapitalizedType(const FieldDescriptor* field); - -ObjectiveCType PROTOC_EXPORT -GetObjectiveCType(FieldDescriptor::Type field_type); - -inline ObjectiveCType GetObjectiveCType(const FieldDescriptor* field) { - return GetObjectiveCType(field->type()); -} - -bool PROTOC_EXPORT IsPrimitiveType(const FieldDescriptor* field); -bool PROTOC_EXPORT IsReferenceType(const FieldDescriptor* field); - -std::string PROTOC_EXPORT -GPBGenericValueFieldName(const FieldDescriptor* field); -std::string PROTOC_EXPORT DefaultValue(const FieldDescriptor* field); -bool PROTOC_EXPORT HasNonZeroDefaultValue(const FieldDescriptor* field); - -std::string PROTOC_EXPORT -BuildFlagsString(const FlagType type, const std::vector<std::string>& strings); - -// Builds HeaderDoc/appledoc style comments out of the comments in the .proto -// file. -std::string PROTOC_EXPORT BuildCommentsString(const SourceLocation& location, - bool prefer_single_line); - -// The name the commonly used by the library when built as a framework. -// This lines up to the name used in the CocoaPod. -extern PROTOC_EXPORT const char* const ProtobufLibraryFrameworkName; -// Returns the CPP symbol name to use as the gate for framework style imports -// for the given framework name to use. -std::string PROTOC_EXPORT -ProtobufFrameworkImportSymbol(const std::string& framework_name); - -// Checks if the file is one of the proto's bundled with the library. -bool PROTOC_EXPORT -IsProtobufLibraryBundledProtoFile(const FileDescriptor* file); - -// Checks the prefix for the given files and outputs any warnings as needed. If -// there are flat out errors, then out_error is filled in with the first error -// and the result is false. -bool PROTOC_EXPORT ValidateObjCClassPrefixes( - const std::vector<const FileDescriptor*>& files, - const Options& validation_options, std::string* out_error); -// Same was the other ValidateObjCClassPrefixes() calls, but the options all -// come from the environment variables. -bool PROTOC_EXPORT ValidateObjCClassPrefixes( - const std::vector<const FileDescriptor*>& files, std::string* out_error); - -// Generate decode data needed for ObjC's GPBDecodeTextFormatName() to transform -// the input into the expected output. -class PROTOC_EXPORT TextFormatDecodeData { - public: - TextFormatDecodeData(); - ~TextFormatDecodeData(); - - TextFormatDecodeData(const TextFormatDecodeData&) = delete; - TextFormatDecodeData& operator=(const TextFormatDecodeData&) = delete; - - void AddString(int32_t key, const std::string& input_for_decode, - const std::string& desired_output); - size_t num_entries() const { return entries_.size(); } - std::string Data() const; - - static std::string DecodeDataForString(const std::string& input_for_decode, - const std::string& desired_output); - - private: - typedef std::pair<int32_t, std::string> DataEntry; - std::vector<DataEntry> entries_; -}; - -// Helper for parsing simple files. -class PROTOC_EXPORT LineConsumer { - public: - LineConsumer(); - virtual ~LineConsumer(); - virtual bool ConsumeLine(const StringPiece& line, std::string* out_error) = 0; -}; - -bool PROTOC_EXPORT ParseSimpleFile(const std::string& path, - LineConsumer* line_consumer, - std::string* out_error); - -bool PROTOC_EXPORT ParseSimpleStream(io::ZeroCopyInputStream& input_stream, - const std::string& stream_name, - LineConsumer* line_consumer, - std::string* out_error); - -// Helper class for parsing framework import mappings and generating -// import statements. -class PROTOC_EXPORT ImportWriter { - public: - ImportWriter(const std::string& generate_for_named_framework, - const std::string& named_framework_to_proto_path_mappings_path, - const std::string& runtime_import_prefix, - bool include_wkt_imports); - ~ImportWriter(); - - void AddFile(const FileDescriptor* file, const std::string& header_extension); - void Print(io::Printer* printer) const; - - static void PrintRuntimeImports(io::Printer* printer, - const std::vector<std::string>& header_to_import, - const std::string& runtime_import_prefix, - bool default_cpp_symbol = false); - - private: - class ProtoFrameworkCollector : public LineConsumer { - public: - ProtoFrameworkCollector(std::map<std::string, std::string>* inout_proto_file_to_framework_name) - : map_(inout_proto_file_to_framework_name) {} - - virtual bool ConsumeLine(const StringPiece& line, std::string* out_error) override; - - private: - std::map<std::string, std::string>* map_; - }; - - void ParseFrameworkMappings(); - - const std::string generate_for_named_framework_; - const std::string named_framework_to_proto_path_mappings_path_; - const std::string runtime_import_prefix_; - const bool include_wkt_imports_; - std::map<std::string, std::string> proto_file_to_framework_name_; - bool need_to_parse_mapping_file_; - - std::vector<std::string> protobuf_imports_; - std::vector<std::string> other_framework_imports_; - std::vector<std::string> other_imports_; -}; - -} // namespace objectivec -} // namespace compiler -} // namespace protobuf -} // namespace google - -#include <google/protobuf/port_undef.inc> - -#endif // GOOGLE_PROTOBUF_COMPILER_OBJECTIVEC_HELPERS_H__ diff --git a/include/google/protobuf/compiler/parser.h b/include/google/protobuf/compiler/parser.h deleted file mode 100644 index d4eb76302c..0000000000 --- a/include/google/protobuf/compiler/parser.h +++ /dev/null @@ -1,602 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// 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 -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -// Author: kenton@google.com (Kenton Varda) -// Based on original Protocol Buffers design by -// Sanjay Ghemawat, Jeff Dean, and others. -// -// Implements parsing of .proto files to FileDescriptorProtos. - -#ifndef GOOGLE_PROTOBUF_COMPILER_PARSER_H__ -#define GOOGLE_PROTOBUF_COMPILER_PARSER_H__ - -#include <cstdint> -#include <map> -#include <string> -#include <utility> - -#include <google/protobuf/descriptor.h> -#include <google/protobuf/descriptor.pb.h> -#include <google/protobuf/io/tokenizer.h> -#include <google/protobuf/repeated_field.h> - -// Must be included last. -#include <google/protobuf/port_def.inc> - -namespace google { -namespace protobuf { - -class Message; - -namespace compiler { - -// Defined in this file. -class Parser; -class SourceLocationTable; - -// Implements parsing of protocol definitions (such as .proto files). -// -// Note that most users will be more interested in the Importer class. -// Parser is a lower-level class which simply converts a single .proto file -// to a FileDescriptorProto. It does not resolve import directives or perform -// many other kinds of validation needed to construct a complete -// FileDescriptor. -class PROTOBUF_EXPORT Parser { - public: - Parser(); - ~Parser(); - - // Parse the entire input and construct a FileDescriptorProto representing - // it. Returns true if no errors occurred, false otherwise. - bool Parse(io::Tokenizer* input, FileDescriptorProto* file); - - // Optional features: - - // DEPRECATED: New code should use the SourceCodeInfo embedded in the - // FileDescriptorProto. - // - // Requests that locations of certain definitions be recorded to the given - // SourceLocationTable while parsing. This can be used to look up exact line - // and column numbers for errors reported by DescriptorPool during validation. - // Set to NULL (the default) to discard source location information. - void RecordSourceLocationsTo(SourceLocationTable* location_table) { - source_location_table_ = location_table; - } - - // Requests that errors be recorded to the given ErrorCollector while - // parsing. Set to NULL (the default) to discard error messages. - void RecordErrorsTo(io::ErrorCollector* error_collector) { - error_collector_ = error_collector; - } - - // Returns the identifier used in the "syntax = " declaration, if one was - // seen during the last call to Parse(), or the empty string otherwise. - const std::string& GetSyntaxIdentifier() { return syntax_identifier_; } - - // If set true, input files will be required to begin with a syntax - // identifier. Otherwise, files may omit this. If a syntax identifier - // is provided, it must be 'syntax = "proto2";' and must appear at the - // top of this file regardless of whether or not it was required. - void SetRequireSyntaxIdentifier(bool value) { - require_syntax_identifier_ = value; - } - - // Call SetStopAfterSyntaxIdentifier(true) to tell the parser to stop - // parsing as soon as it has seen the syntax identifier, or lack thereof. - // This is useful for quickly identifying the syntax of the file without - // parsing the whole thing. If this is enabled, no error will be recorded - // if the syntax identifier is something other than "proto2" (since - // presumably the caller intends to deal with that), but other kinds of - // errors (e.g. parse errors) will still be reported. When this is enabled, - // you may pass a NULL FileDescriptorProto to Parse(). - void SetStopAfterSyntaxIdentifier(bool value) { - stop_after_syntax_identifier_ = value; - } - - private: - class LocationRecorder; - struct MapField; - - // ================================================================= - // Error recovery helpers - - // Consume the rest of the current statement. This consumes tokens - // until it sees one of: - // ';' Consumes the token and returns. - // '{' Consumes the brace then calls SkipRestOfBlock(). - // '}' Returns without consuming. - // EOF Returns (can't consume). - // The Parser often calls SkipStatement() after encountering a syntax - // error. This allows it to go on parsing the following lines, allowing - // it to report more than just one error in the file. - void SkipStatement(); - - // Consume the rest of the current block, including nested blocks, - // ending after the closing '}' is encountered and consumed, or at EOF. - void SkipRestOfBlock(); - - // ----------------------------------------------------------------- - // Single-token consuming helpers - // - // These make parsing code more readable. - - // True if the current token is TYPE_END. - inline bool AtEnd(); - - // True if the next token matches the given text. - inline bool LookingAt(const char* text); - // True if the next token is of the given type. - inline bool LookingAtType(io::Tokenizer::TokenType token_type); - - // If the next token exactly matches the text given, consume it and return - // true. Otherwise, return false without logging an error. - bool TryConsume(const char* text); - - // These attempt to read some kind of token from the input. If successful, - // they return true. Otherwise they return false and add the given error - // to the error list. - - // Consume a token with the exact text given. - bool Consume(const char* text, const char* error); - // Same as above, but automatically generates the error "Expected \"text\".", - // where "text" is the expected token text. - bool Consume(const char* text); - // Consume a token of type IDENTIFIER and store its text in "output". - bool ConsumeIdentifier(std::string* output, const char* error); - // Consume an integer and store its value in "output". - bool ConsumeInteger(int* output, const char* error); - // Consume a signed integer and store its value in "output". - bool ConsumeSignedInteger(int* output, const char* error); - // Consume a 64-bit integer and store its value in "output". If the value - // is greater than max_value, an error will be reported. - bool ConsumeInteger64(uint64_t max_value, uint64_t* output, - const char* error); - // Consume a number and store its value in "output". This will accept - // tokens of either INTEGER or FLOAT type. - bool ConsumeNumber(double* output, const char* error); - // Consume a string literal and store its (unescaped) value in "output". - bool ConsumeString(std::string* output, const char* error); - - // Consume a token representing the end of the statement. Comments between - // this token and the next will be harvested for documentation. The given - // LocationRecorder should refer to the declaration that was just parsed; - // it will be populated with these comments. - // - // TODO(kenton): The LocationRecorder is const because historically locations - // have been passed around by const reference, for no particularly good - // reason. We should probably go through and change them all to mutable - // pointer to make this more intuitive. - bool TryConsumeEndOfDeclaration(const char* text, - const LocationRecorder* location); - bool TryConsumeEndOfDeclarationFinishScope(const char* text, - const LocationRecorder* location); - - bool ConsumeEndOfDeclaration(const char* text, - const LocationRecorder* location); - - // ----------------------------------------------------------------- - // Error logging helpers - - // Invokes error_collector_->AddError(), if error_collector_ is not NULL. - void AddError(int line, int column, const std::string& error); - - // Invokes error_collector_->AddError() with the line and column number - // of the current token. - void AddError(const std::string& error); - - // Invokes error_collector_->AddWarning() with the line and column number - // of the current token. - void AddWarning(const std::string& warning); - - // Records a location in the SourceCodeInfo.location table (see - // descriptor.proto). We use RAII to ensure that the start and end locations - // are recorded -- the constructor records the start location and the - // destructor records the end location. Since the parser is - // recursive-descent, this works out beautifully. - class PROTOBUF_EXPORT LocationRecorder { - public: - // Construct the file's "root" location. - LocationRecorder(Parser* parser); - - // Construct a location that represents a declaration nested within the - // given parent. E.g. a field's location is nested within the location - // for a message type. The parent's path will be copied, so you should - // call AddPath() only to add the path components leading from the parent - // to the child (as opposed to leading from the root to the child). - LocationRecorder(const LocationRecorder& parent); - - // Convenience constructors that call AddPath() one or two times. - LocationRecorder(const LocationRecorder& parent, int path1); - LocationRecorder(const LocationRecorder& parent, int path1, int path2); - - // Creates a recorder that generates locations into given source code info. - LocationRecorder(const LocationRecorder& parent, int path1, - SourceCodeInfo* source_code_info); - - ~LocationRecorder(); - - // Add a path component. See SourceCodeInfo.Location.path in - // descriptor.proto. - void AddPath(int path_component); - - // By default the location is considered to start at the current token at - // the time the LocationRecorder is created. StartAt() sets the start - // location to the given token instead. - void StartAt(const io::Tokenizer::Token& token); - - // Start at the same location as some other LocationRecorder. - void StartAt(const LocationRecorder& other); - - // By default the location is considered to end at the previous token at - // the time the LocationRecorder is destroyed. EndAt() sets the end - // location to the given token instead. - void EndAt(const io::Tokenizer::Token& token); - - // Records the start point of this location to the SourceLocationTable that - // was passed to RecordSourceLocationsTo(), if any. SourceLocationTable - // is an older way of keeping track of source locations which is still - // used in some places. - void RecordLegacyLocation( - const Message* descriptor, - DescriptorPool::ErrorCollector::ErrorLocation location); - void RecordLegacyImportLocation(const Message* descriptor, - const std::string& name); - - // Returns the number of path components in the recorder's current location. - int CurrentPathSize() const; - - // Attaches leading and trailing comments to the location. The two strings - // will be swapped into place, so after this is called *leading and - // *trailing will be empty. - // - // TODO(kenton): See comment on TryConsumeEndOfDeclaration(), above, for - // why this is const. - void AttachComments(std::string* leading, std::string* trailing, - std::vector<std::string>* detached_comments) const; - - private: - Parser* parser_; - SourceCodeInfo* source_code_info_; - SourceCodeInfo::Location* location_; - - void Init(const LocationRecorder& parent, SourceCodeInfo* source_code_info); - }; - - // ================================================================= - // Parsers for various language constructs - - // Parses the "syntax = \"proto2\";" line at the top of the file. Returns - // false if it failed to parse or if the syntax identifier was not - // recognized. - bool ParseSyntaxIdentifier(const LocationRecorder& parent); - - // These methods parse various individual bits of code. They return - // false if they completely fail to parse the construct. In this case, - // it is probably necessary to skip the rest of the statement to recover. - // However, if these methods return true, it does NOT mean that there - // were no errors; only that there were no *syntax* errors. For instance, - // if a service method is defined using proper syntax but uses a primitive - // type as its input or output, ParseMethodField() still returns true - // and only reports the error by calling AddError(). In practice, this - // makes logic much simpler for the caller. - - // Parse a top-level message, enum, service, etc. - bool ParseTopLevelStatement(FileDescriptorProto* file, - const LocationRecorder& root_location); - - // Parse various language high-level language construrcts. - bool ParseMessageDefinition(DescriptorProto* message, - const LocationRecorder& message_location, - const FileDescriptorProto* containing_file); - bool ParseEnumDefinition(EnumDescriptorProto* enum_type, - const LocationRecorder& enum_location, - const FileDescriptorProto* containing_file); - bool ParseServiceDefinition(ServiceDescriptorProto* service, - const LocationRecorder& service_location, - const FileDescriptorProto* containing_file); - bool ParsePackage(FileDescriptorProto* file, - const LocationRecorder& root_location, - const FileDescriptorProto* containing_file); - bool ParseImport(RepeatedPtrField<std::string>* dependency, - RepeatedField<int32_t>* public_dependency, - RepeatedField<int32_t>* weak_dependency, - const LocationRecorder& root_location, - const FileDescriptorProto* containing_file); - - // These methods parse the contents of a message, enum, or service type and - // add them to the given object. They consume the entire block including - // the beginning and ending brace. - bool ParseMessageBlock(DescriptorProto* message, - const LocationRecorder& message_location, - const FileDescriptorProto* containing_file); - bool ParseEnumBlock(EnumDescriptorProto* enum_type, - const LocationRecorder& enum_location, - const FileDescriptorProto* containing_file); - bool ParseServiceBlock(ServiceDescriptorProto* service, - const LocationRecorder& service_location, - const FileDescriptorProto* containing_file); - - // Parse one statement within a message, enum, or service block, including - // final semicolon. - bool ParseMessageStatement(DescriptorProto* message, - const LocationRecorder& message_location, - const FileDescriptorProto* containing_file); - bool ParseEnumStatement(EnumDescriptorProto* message, - const LocationRecorder& enum_location, - const FileDescriptorProto* containing_file); - bool ParseServiceStatement(ServiceDescriptorProto* message, - const LocationRecorder& service_location, - const FileDescriptorProto* containing_file); - - // Parse a field of a message. If the field is a group, its type will be - // added to "messages". - // - // parent_location and location_field_number_for_nested_type are needed when - // parsing groups -- we need to generate a nested message type within the - // parent and record its location accordingly. Since the parent could be - // either a FileDescriptorProto or a DescriptorProto, we must pass in the - // correct field number to use. - bool ParseMessageField(FieldDescriptorProto* field, - RepeatedPtrField<DescriptorProto>* messages, - const LocationRecorder& parent_location, - int location_field_number_for_nested_type, - const LocationRecorder& field_location, - const FileDescriptorProto* containing_file); - - // Like ParseMessageField() but expects the label has already been filled in - // by the caller. - bool ParseMessageFieldNoLabel(FieldDescriptorProto* field, - RepeatedPtrField<DescriptorProto>* messages, - const LocationRecorder& parent_location, - int location_field_number_for_nested_type, - const LocationRecorder& field_location, - const FileDescriptorProto* containing_file); - - bool ParseMapType(MapField* map_field, FieldDescriptorProto* field, - LocationRecorder& type_name_location); - - // Parse an "extensions" declaration. - bool ParseExtensions(DescriptorProto* message, - const LocationRecorder& extensions_location, - const FileDescriptorProto* containing_file); - - // Parse a "reserved" declaration. - bool ParseReserved(DescriptorProto* message, - const LocationRecorder& message_location); - bool ParseReservedNames(DescriptorProto* message, - const LocationRecorder& parent_location); - bool ParseReservedNumbers(DescriptorProto* message, - const LocationRecorder& parent_location); - bool ParseReserved(EnumDescriptorProto* message, - const LocationRecorder& message_location); - bool ParseReservedNames(EnumDescriptorProto* message, - const LocationRecorder& parent_location); - bool ParseReservedNumbers(EnumDescriptorProto* message, - const LocationRecorder& parent_location); - - // Parse an "extend" declaration. (See also comments for - // ParseMessageField().) - bool ParseExtend(RepeatedPtrField<FieldDescriptorProto>* extensions, - RepeatedPtrField<DescriptorProto>* messages, - const LocationRecorder& parent_location, - int location_field_number_for_nested_type, - const LocationRecorder& extend_location, - const FileDescriptorProto* containing_file); - - // Parse a "oneof" declaration. The caller is responsible for setting - // oneof_decl->label() since it will have had to parse the label before it - // knew it was parsing a oneof. - bool ParseOneof(OneofDescriptorProto* oneof_decl, - DescriptorProto* containing_type, int oneof_index, - const LocationRecorder& oneof_location, - const LocationRecorder& containing_type_location, - const FileDescriptorProto* containing_file); - - // Parse a single enum value within an enum block. - bool ParseEnumConstant(EnumValueDescriptorProto* enum_value, - const LocationRecorder& enum_value_location, - const FileDescriptorProto* containing_file); - - // Parse enum constant options, i.e. the list in square brackets at the end - // of the enum constant value definition. - bool ParseEnumConstantOptions(EnumValueDescriptorProto* value, - const LocationRecorder& enum_value_location, - const FileDescriptorProto* containing_file); - - // Parse a single method within a service definition. - bool ParseServiceMethod(MethodDescriptorProto* method, - const LocationRecorder& method_location, - const FileDescriptorProto* containing_file); - - // Parse options of a single method or stream. - bool ParseMethodOptions(const LocationRecorder& parent_location, - const FileDescriptorProto* containing_file, - const int optionsFieldNumber, - Message* mutable_options); - - // Parse "required", "optional", or "repeated" and fill in "label" - // with the value. Returns true if such a label is consumed. - bool ParseLabel(FieldDescriptorProto::Label* label, - const LocationRecorder& field_location); - - // Parse a type name and fill in "type" (if it is a primitive) or - // "type_name" (if it is not) with the type parsed. - bool ParseType(FieldDescriptorProto::Type* type, std::string* type_name); - // Parse a user-defined type and fill in "type_name" with the name. - // If a primitive type is named, it is treated as an error. - bool ParseUserDefinedType(std::string* type_name); - - // Parses field options, i.e. the stuff in square brackets at the end - // of a field definition. Also parses default value. - bool ParseFieldOptions(FieldDescriptorProto* field, - const LocationRecorder& field_location, - const FileDescriptorProto* containing_file); - - // Parse the "default" option. This needs special handling because its - // type is the field's type. - bool ParseDefaultAssignment(FieldDescriptorProto* field, - const LocationRecorder& field_location, - const FileDescriptorProto* containing_file); - - bool ParseJsonName(FieldDescriptorProto* field, - const LocationRecorder& field_location, - const FileDescriptorProto* containing_file); - - enum OptionStyle { - OPTION_ASSIGNMENT, // just "name = value" - OPTION_STATEMENT // "option name = value;" - }; - - // Parse a single option name/value pair, e.g. "ctype = CORD". The name - // identifies a field of the given Message, and the value of that field - // is set to the parsed value. - bool ParseOption(Message* options, const LocationRecorder& options_location, - const FileDescriptorProto* containing_file, - OptionStyle style); - - // Parses a single part of a multipart option name. A multipart name consists - // of names separated by dots. Each name is either an identifier or a series - // of identifiers separated by dots and enclosed in parentheses. E.g., - // "foo.(bar.baz).moo". - bool ParseOptionNamePart(UninterpretedOption* uninterpreted_option, - const LocationRecorder& part_location, - const FileDescriptorProto* containing_file); - - // Parses a string surrounded by balanced braces. Strips off the outer - // braces and stores the enclosed string in *value. - // E.g., - // { foo } *value gets 'foo' - // { foo { bar: box } } *value gets 'foo { bar: box }' - // {} *value gets '' - // - // REQUIRES: LookingAt("{") - // When finished successfully, we are looking at the first token past - // the ending brace. - bool ParseUninterpretedBlock(std::string* value); - - struct MapField { - // Whether the field is a map field. - bool is_map_field; - // The types of the key and value if they are primitive types. - FieldDescriptorProto::Type key_type; - FieldDescriptorProto::Type value_type; - // Or the type names string if the types are customized types. - std::string key_type_name; - std::string value_type_name; - - MapField() : is_map_field(false) {} - }; - // Desugar the map syntax to generate a nested map entry message. - void GenerateMapEntry(const MapField& map_field, FieldDescriptorProto* field, - RepeatedPtrField<DescriptorProto>* messages); - - // Whether fields without label default to optional fields. - bool DefaultToOptionalFields() const { - return syntax_identifier_ == "proto3"; - } - - bool ValidateEnum(const EnumDescriptorProto* proto); - - // ================================================================= - - io::Tokenizer* input_; - io::ErrorCollector* error_collector_; - SourceCodeInfo* source_code_info_; - SourceLocationTable* source_location_table_; // legacy - bool had_errors_; - bool require_syntax_identifier_; - bool stop_after_syntax_identifier_; - std::string syntax_identifier_; - - // Leading doc comments for the next declaration. These are not complete - // yet; use ConsumeEndOfDeclaration() to get the complete comments. - std::string upcoming_doc_comments_; - - // Detached comments are not connected to any syntax entities. Elements in - // this vector are paragraphs of comments separated by empty lines. The - // detached comments will be put into the leading_detached_comments field for - // the next element (See SourceCodeInfo.Location in descriptor.proto), when - // ConsumeEndOfDeclaration() is called. - std::vector<std::string> upcoming_detached_comments_; - - GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(Parser); -}; - -// A table mapping (descriptor, ErrorLocation) pairs -- as reported by -// DescriptorPool when validating descriptors -- to line and column numbers -// within the original source code. -// -// This is semi-obsolete: FileDescriptorProto.source_code_info now contains -// far more complete information about source locations. However, as of this -// writing you still need to use SourceLocationTable when integrating with -// DescriptorPool. -class PROTOBUF_EXPORT SourceLocationTable { - public: - SourceLocationTable(); - ~SourceLocationTable(); - - // Finds the precise location of the given error and fills in *line and - // *column with the line and column numbers. If not found, sets *line to - // -1 and *column to 0 (since line = -1 is used to mean "error has no exact - // location" in the ErrorCollector interface). Returns true if found, false - // otherwise. - bool Find(const Message* descriptor, - DescriptorPool::ErrorCollector::ErrorLocation location, int* line, - int* column) const; - bool FindImport(const Message* descriptor, const std::string& name, int* line, - int* column) const; - - // Adds a location to the table. - void Add(const Message* descriptor, - DescriptorPool::ErrorCollector::ErrorLocation location, int line, - int column); - void AddImport(const Message* descriptor, const std::string& name, int line, - int column); - - // Clears the contents of the table. - void Clear(); - - private: - typedef std::map< - std::pair<const Message*, DescriptorPool::ErrorCollector::ErrorLocation>, - std::pair<int, int> > - LocationMap; - LocationMap location_map_; - std::map<std::pair<const Message*, std::string>, std::pair<int, int> > - import_location_map_; -}; - -} // namespace compiler -} // namespace protobuf -} // namespace google - -#include <google/protobuf/port_undef.inc> - -#endif // GOOGLE_PROTOBUF_COMPILER_PARSER_H__ diff --git a/include/google/protobuf/compiler/php/php_generator.h b/include/google/protobuf/compiler/php/php_generator.h deleted file mode 100644 index 17cb59c08b..0000000000 --- a/include/google/protobuf/compiler/php/php_generator.h +++ /dev/null @@ -1,92 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// 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 -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -#ifndef GOOGLE_PROTOBUF_COMPILER_PHP_GENERATOR_H__ -#define GOOGLE_PROTOBUF_COMPILER_PHP_GENERATOR_H__ - -#include <google/protobuf/compiler/code_generator.h> -#include <google/protobuf/descriptor.h> - -#include <string> - -#include <google/protobuf/port_def.inc> - -namespace google { -namespace protobuf { -namespace compiler { -namespace php { - -struct Options; - -class PROTOC_EXPORT Generator : public CodeGenerator { - public: - virtual bool Generate( - const FileDescriptor* file, - const std::string& parameter, - GeneratorContext* generator_context, - std::string* error) const override; - - bool GenerateAll(const std::vector<const FileDescriptor*>& files, - const std::string& parameter, - GeneratorContext* generator_context, - std::string* error) const override; - - uint64_t GetSupportedFeatures() const override { - return FEATURE_PROTO3_OPTIONAL; - } - - private: - bool Generate( - const FileDescriptor* file, - const Options& options, - GeneratorContext* generator_context, - std::string* error) const; -}; - -// To skip reserved keywords in php, some generated classname are prefixed. -// Other code generators may need following API to figure out the actual -// classname. -PROTOC_EXPORT std::string GeneratedClassName(const Descriptor* desc); -PROTOC_EXPORT std::string GeneratedClassName(const EnumDescriptor* desc); -PROTOC_EXPORT std::string GeneratedClassName(const ServiceDescriptor* desc); - -inline bool IsWrapperType(const FieldDescriptor* descriptor) { - return descriptor->cpp_type() == FieldDescriptor::CPPTYPE_MESSAGE && - descriptor->message_type()->file()->name() == "google/protobuf/wrappers.proto"; -} - -} // namespace php -} // namespace compiler -} // namespace protobuf -} // namespace google - -#include <google/protobuf/port_undef.inc> - -#endif // GOOGLE_PROTOBUF_COMPILER_PHP_GENERATOR_H__ diff --git a/include/google/protobuf/compiler/plugin.h b/include/google/protobuf/compiler/plugin.h deleted file mode 100644 index 611713e2c0..0000000000 --- a/include/google/protobuf/compiler/plugin.h +++ /dev/null @@ -1,96 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// 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 -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -// Author: kenton@google.com (Kenton Varda) -// -// Front-end for protoc code generator plugins written in C++. -// -// To implement a protoc plugin in C++, simply write an implementation of -// CodeGenerator, then create a main() function like: -// int main(int argc, char* argv[]) { -// MyCodeGenerator generator; -// return google::protobuf::compiler::PluginMain(argc, argv, &generator); -// } -// You must link your plugin against libprotobuf and libprotoc. -// -// The core part of PluginMain is to invoke the given CodeGenerator on a -// CodeGeneratorRequest to generate a CodeGeneratorResponse. This part is -// abstracted out and made into function GenerateCode so that it can be reused, -// for example, to implement a variant of PluginMain that does some -// preprocessing on the input CodeGeneratorRequest before feeding the request -// to the given code generator. -// -// To get protoc to use the plugin, do one of the following: -// * Place the plugin binary somewhere in the PATH and give it the name -// "protoc-gen-NAME" (replacing "NAME" with the name of your plugin). If you -// then invoke protoc with the parameter --NAME_out=OUT_DIR (again, replace -// "NAME" with your plugin's name), protoc will invoke your plugin to generate -// the output, which will be placed in OUT_DIR. -// * Place the plugin binary anywhere, with any name, and pass the --plugin -// parameter to protoc to direct it to your plugin like so: -// protoc --plugin=protoc-gen-NAME=path/to/mybinary --NAME_out=OUT_DIR -// On Windows, make sure to include the .exe suffix: -// protoc --plugin=protoc-gen-NAME=path/to/mybinary.exe --NAME_out=OUT_DIR - -#ifndef GOOGLE_PROTOBUF_COMPILER_PLUGIN_H__ -#define GOOGLE_PROTOBUF_COMPILER_PLUGIN_H__ - -#include <string> - -// Must be included last. -#include <google/protobuf/port_def.inc> - -namespace google { -namespace protobuf { -namespace compiler { - -class CodeGenerator; // code_generator.h -class CodeGeneratorRequest; -class CodeGeneratorResponse; - -// Implements main() for a protoc plugin exposing the given code generator. -PROTOC_EXPORT int PluginMain(int argc, char* argv[], - const CodeGenerator* generator); - - -// Generates code using the given code generator. Returns true if the code -// generation is successful. If the code generation fails, error_msg may be -// populated to describe the failure cause. -bool GenerateCode(const CodeGeneratorRequest& request, - const CodeGenerator& generator, - CodeGeneratorResponse* response, std::string* error_msg); - -} // namespace compiler -} // namespace protobuf -} // namespace google - -#include <google/protobuf/port_undef.inc> - -#endif // GOOGLE_PROTOBUF_COMPILER_PLUGIN_H__ diff --git a/include/google/protobuf/compiler/plugin.pb.h b/include/google/protobuf/compiler/plugin.pb.h deleted file mode 100644 index 40163f87dc..0000000000 --- a/include/google/protobuf/compiler/plugin.pb.h +++ /dev/null @@ -1,1901 +0,0 @@ -// Generated by the protocol buffer compiler. DO NOT EDIT! -// source: google/protobuf/compiler/plugin.proto - -#ifndef GOOGLE_PROTOBUF_INCLUDED_google_2fprotobuf_2fcompiler_2fplugin_2eproto -#define GOOGLE_PROTOBUF_INCLUDED_google_2fprotobuf_2fcompiler_2fplugin_2eproto - -#include <limits> -#include <string> - -#include <google/protobuf/port_def.inc> -#if PROTOBUF_VERSION < 3021000 -#error This file was generated by a newer version of protoc which is -#error incompatible with your Protocol Buffer headers. Please update -#error your headers. -#endif -#if 3021004 < PROTOBUF_MIN_PROTOC_VERSION -#error This file was generated by an older version of protoc which is -#error incompatible with your Protocol Buffer headers. Please -#error regenerate this file with a newer version of protoc. -#endif - -#include <google/protobuf/port_undef.inc> -#include <google/protobuf/io/coded_stream.h> -#include <google/protobuf/arena.h> -#include <google/protobuf/arenastring.h> -#include <google/protobuf/generated_message_util.h> -#include <google/protobuf/metadata_lite.h> -#include <google/protobuf/generated_message_reflection.h> -#include <google/protobuf/message.h> -#include <google/protobuf/repeated_field.h> // IWYU pragma: export -#include <google/protobuf/extension_set.h> // IWYU pragma: export -#include <google/protobuf/generated_enum_reflection.h> -#include <google/protobuf/unknown_field_set.h> -#include <google/protobuf/descriptor.pb.h> -// @@protoc_insertion_point(includes) -#include <google/protobuf/port_def.inc> -#define PROTOBUF_INTERNAL_EXPORT_google_2fprotobuf_2fcompiler_2fplugin_2eproto PROTOC_EXPORT -#ifdef major -#undef major -#endif -#ifdef minor -#undef minor -#endif -PROTOBUF_NAMESPACE_OPEN -namespace internal { -class AnyMetadata; -} // namespace internal -PROTOBUF_NAMESPACE_CLOSE - -// Internal implementation detail -- do not use these members. -struct PROTOC_EXPORT TableStruct_google_2fprotobuf_2fcompiler_2fplugin_2eproto { - static const uint32_t offsets[]; -}; -PROTOC_EXPORT extern const ::PROTOBUF_NAMESPACE_ID::internal::DescriptorTable descriptor_table_google_2fprotobuf_2fcompiler_2fplugin_2eproto; -PROTOBUF_NAMESPACE_OPEN -namespace compiler { -class CodeGeneratorRequest; -struct CodeGeneratorRequestDefaultTypeInternal; -PROTOC_EXPORT extern CodeGeneratorRequestDefaultTypeInternal _CodeGeneratorRequest_default_instance_; -class CodeGeneratorResponse; -struct CodeGeneratorResponseDefaultTypeInternal; -PROTOC_EXPORT extern CodeGeneratorResponseDefaultTypeInternal _CodeGeneratorResponse_default_instance_; -class CodeGeneratorResponse_File; -struct CodeGeneratorResponse_FileDefaultTypeInternal; -PROTOC_EXPORT extern CodeGeneratorResponse_FileDefaultTypeInternal _CodeGeneratorResponse_File_default_instance_; -class Version; -struct VersionDefaultTypeInternal; -PROTOC_EXPORT extern VersionDefaultTypeInternal _Version_default_instance_; -} // namespace compiler -PROTOBUF_NAMESPACE_CLOSE -PROTOBUF_NAMESPACE_OPEN -template<> PROTOC_EXPORT ::PROTOBUF_NAMESPACE_ID::compiler::CodeGeneratorRequest* Arena::CreateMaybeMessage<::PROTOBUF_NAMESPACE_ID::compiler::CodeGeneratorRequest>(Arena*); -template<> PROTOC_EXPORT ::PROTOBUF_NAMESPACE_ID::compiler::CodeGeneratorResponse* Arena::CreateMaybeMessage<::PROTOBUF_NAMESPACE_ID::compiler::CodeGeneratorResponse>(Arena*); -template<> PROTOC_EXPORT ::PROTOBUF_NAMESPACE_ID::compiler::CodeGeneratorResponse_File* Arena::CreateMaybeMessage<::PROTOBUF_NAMESPACE_ID::compiler::CodeGeneratorResponse_File>(Arena*); -template<> PROTOC_EXPORT ::PROTOBUF_NAMESPACE_ID::compiler::Version* Arena::CreateMaybeMessage<::PROTOBUF_NAMESPACE_ID::compiler::Version>(Arena*); -PROTOBUF_NAMESPACE_CLOSE -PROTOBUF_NAMESPACE_OPEN -namespace compiler { - -enum CodeGeneratorResponse_Feature : int { - CodeGeneratorResponse_Feature_FEATURE_NONE = 0, - CodeGeneratorResponse_Feature_FEATURE_PROTO3_OPTIONAL = 1 -}; -PROTOC_EXPORT bool CodeGeneratorResponse_Feature_IsValid(int value); -constexpr CodeGeneratorResponse_Feature CodeGeneratorResponse_Feature_Feature_MIN = CodeGeneratorResponse_Feature_FEATURE_NONE; -constexpr CodeGeneratorResponse_Feature CodeGeneratorResponse_Feature_Feature_MAX = CodeGeneratorResponse_Feature_FEATURE_PROTO3_OPTIONAL; -constexpr int CodeGeneratorResponse_Feature_Feature_ARRAYSIZE = CodeGeneratorResponse_Feature_Feature_MAX + 1; - -PROTOC_EXPORT const ::PROTOBUF_NAMESPACE_ID::EnumDescriptor* CodeGeneratorResponse_Feature_descriptor(); -template<typename T> -inline const std::string& CodeGeneratorResponse_Feature_Name(T enum_t_value) { - static_assert(::std::is_same<T, CodeGeneratorResponse_Feature>::value || - ::std::is_integral<T>::value, - "Incorrect type passed to function CodeGeneratorResponse_Feature_Name."); - return ::PROTOBUF_NAMESPACE_ID::internal::NameOfEnum( - CodeGeneratorResponse_Feature_descriptor(), enum_t_value); -} -inline bool CodeGeneratorResponse_Feature_Parse( - ::PROTOBUF_NAMESPACE_ID::ConstStringParam name, CodeGeneratorResponse_Feature* value) { - return ::PROTOBUF_NAMESPACE_ID::internal::ParseNamedEnum<CodeGeneratorResponse_Feature>( - CodeGeneratorResponse_Feature_descriptor(), name, value); -} -// =================================================================== - -class PROTOC_EXPORT Version final : - public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:google.protobuf.compiler.Version) */ { - public: - inline Version() : Version(nullptr) {} - ~Version() override; - explicit PROTOBUF_CONSTEXPR Version(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized); - - Version(const Version& from); - Version(Version&& from) noexcept - : Version() { - *this = ::std::move(from); - } - - inline Version& operator=(const Version& from) { - CopyFrom(from); - return *this; - } - inline Version& operator=(Version&& from) noexcept { - if (this == &from) return *this; - if (GetOwningArena() == from.GetOwningArena() - #ifdef PROTOBUF_FORCE_COPY_IN_MOVE - && GetOwningArena() != nullptr - #endif // !PROTOBUF_FORCE_COPY_IN_MOVE - ) { - InternalSwap(&from); - } else { - CopyFrom(from); - } - return *this; - } - - inline const ::PROTOBUF_NAMESPACE_ID::UnknownFieldSet& unknown_fields() const { - return _internal_metadata_.unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(::PROTOBUF_NAMESPACE_ID::UnknownFieldSet::default_instance); - } - inline ::PROTOBUF_NAMESPACE_ID::UnknownFieldSet* mutable_unknown_fields() { - return _internal_metadata_.mutable_unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(); - } - - static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() { - return GetDescriptor(); - } - static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() { - return default_instance().GetMetadata().descriptor; - } - static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() { - return default_instance().GetMetadata().reflection; - } - static const Version& default_instance() { - return *internal_default_instance(); - } - static inline const Version* internal_default_instance() { - return reinterpret_cast<const Version*>( - &_Version_default_instance_); - } - static constexpr int kIndexInFileMessages = - 0; - - friend void swap(Version& a, Version& b) { - a.Swap(&b); - } - inline void Swap(Version* other) { - if (other == this) return; - #ifdef PROTOBUF_FORCE_COPY_IN_SWAP - if (GetOwningArena() != nullptr && - GetOwningArena() == other->GetOwningArena()) { - #else // PROTOBUF_FORCE_COPY_IN_SWAP - if (GetOwningArena() == other->GetOwningArena()) { - #endif // !PROTOBUF_FORCE_COPY_IN_SWAP - InternalSwap(other); - } else { - ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other); - } - } - void UnsafeArenaSwap(Version* other) { - if (other == this) return; - GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena()); - InternalSwap(other); - } - - // implements Message ---------------------------------------------- - - Version* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final { - return CreateMaybeMessage<Version>(arena); - } - using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom; - void CopyFrom(const Version& from); - using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom; - void MergeFrom( const Version& from) { - Version::MergeImpl(*this, from); - } - private: - static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message& to_msg, const ::PROTOBUF_NAMESPACE_ID::Message& from_msg); - public: - PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final; - bool IsInitialized() const final; - - size_t ByteSizeLong() const final; - const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final; - uint8_t* _InternalSerialize( - uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final; - int GetCachedSize() const final { return _impl_._cached_size_.Get(); } - - private: - void SharedCtor(::PROTOBUF_NAMESPACE_ID::Arena* arena, bool is_message_owned); - void SharedDtor(); - void SetCachedSize(int size) const final; - void InternalSwap(Version* other); - - private: - friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata; - static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() { - return "google.protobuf.compiler.Version"; - } - protected: - explicit Version(::PROTOBUF_NAMESPACE_ID::Arena* arena, - bool is_message_owned = false); - public: - - static const ClassData _class_data_; - const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final; - - ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final; - - // nested types ---------------------------------------------------- - - // accessors ------------------------------------------------------- - - enum : int { - kSuffixFieldNumber = 4, - kMajorFieldNumber = 1, - kMinorFieldNumber = 2, - kPatchFieldNumber = 3, - }; - // optional string suffix = 4; - bool has_suffix() const; - private: - bool _internal_has_suffix() const; - public: - void clear_suffix(); - const std::string& suffix() const; - template <typename ArgT0 = const std::string&, typename... ArgT> - void set_suffix(ArgT0&& arg0, ArgT... args); - std::string* mutable_suffix(); - PROTOBUF_NODISCARD std::string* release_suffix(); - void set_allocated_suffix(std::string* suffix); - private: - const std::string& _internal_suffix() const; - inline PROTOBUF_ALWAYS_INLINE void _internal_set_suffix(const std::string& value); - std::string* _internal_mutable_suffix(); - public: - - // optional int32 major = 1; - bool has_major() const; - private: - bool _internal_has_major() const; - public: - void clear_major(); - int32_t major() const; - void set_major(int32_t value); - private: - int32_t _internal_major() const; - void _internal_set_major(int32_t value); - public: - - // optional int32 minor = 2; - bool has_minor() const; - private: - bool _internal_has_minor() const; - public: - void clear_minor(); - int32_t minor() const; - void set_minor(int32_t value); - private: - int32_t _internal_minor() const; - void _internal_set_minor(int32_t value); - public: - - // optional int32 patch = 3; - bool has_patch() const; - private: - bool _internal_has_patch() const; - public: - void clear_patch(); - int32_t patch() const; - void set_patch(int32_t value); - private: - int32_t _internal_patch() const; - void _internal_set_patch(int32_t value); - public: - - // @@protoc_insertion_point(class_scope:google.protobuf.compiler.Version) - private: - class _Internal; - - template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper; - typedef void InternalArenaConstructable_; - typedef void DestructorSkippable_; - struct Impl_ { - ::PROTOBUF_NAMESPACE_ID::internal::HasBits<1> _has_bits_; - mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_; - ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr suffix_; - int32_t major_; - int32_t minor_; - int32_t patch_; - }; - union { Impl_ _impl_; }; - friend struct ::TableStruct_google_2fprotobuf_2fcompiler_2fplugin_2eproto; -}; -// ------------------------------------------------------------------- - -class PROTOC_EXPORT CodeGeneratorRequest final : - public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:google.protobuf.compiler.CodeGeneratorRequest) */ { - public: - inline CodeGeneratorRequest() : CodeGeneratorRequest(nullptr) {} - ~CodeGeneratorRequest() override; - explicit PROTOBUF_CONSTEXPR CodeGeneratorRequest(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized); - - CodeGeneratorRequest(const CodeGeneratorRequest& from); - CodeGeneratorRequest(CodeGeneratorRequest&& from) noexcept - : CodeGeneratorRequest() { - *this = ::std::move(from); - } - - inline CodeGeneratorRequest& operator=(const CodeGeneratorRequest& from) { - CopyFrom(from); - return *this; - } - inline CodeGeneratorRequest& operator=(CodeGeneratorRequest&& from) noexcept { - if (this == &from) return *this; - if (GetOwningArena() == from.GetOwningArena() - #ifdef PROTOBUF_FORCE_COPY_IN_MOVE - && GetOwningArena() != nullptr - #endif // !PROTOBUF_FORCE_COPY_IN_MOVE - ) { - InternalSwap(&from); - } else { - CopyFrom(from); - } - return *this; - } - - inline const ::PROTOBUF_NAMESPACE_ID::UnknownFieldSet& unknown_fields() const { - return _internal_metadata_.unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(::PROTOBUF_NAMESPACE_ID::UnknownFieldSet::default_instance); - } - inline ::PROTOBUF_NAMESPACE_ID::UnknownFieldSet* mutable_unknown_fields() { - return _internal_metadata_.mutable_unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(); - } - - static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() { - return GetDescriptor(); - } - static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() { - return default_instance().GetMetadata().descriptor; - } - static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() { - return default_instance().GetMetadata().reflection; - } - static const CodeGeneratorRequest& default_instance() { - return *internal_default_instance(); - } - static inline const CodeGeneratorRequest* internal_default_instance() { - return reinterpret_cast<const CodeGeneratorRequest*>( - &_CodeGeneratorRequest_default_instance_); - } - static constexpr int kIndexInFileMessages = - 1; - - friend void swap(CodeGeneratorRequest& a, CodeGeneratorRequest& b) { - a.Swap(&b); - } - inline void Swap(CodeGeneratorRequest* other) { - if (other == this) return; - #ifdef PROTOBUF_FORCE_COPY_IN_SWAP - if (GetOwningArena() != nullptr && - GetOwningArena() == other->GetOwningArena()) { - #else // PROTOBUF_FORCE_COPY_IN_SWAP - if (GetOwningArena() == other->GetOwningArena()) { - #endif // !PROTOBUF_FORCE_COPY_IN_SWAP - InternalSwap(other); - } else { - ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other); - } - } - void UnsafeArenaSwap(CodeGeneratorRequest* other) { - if (other == this) return; - GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena()); - InternalSwap(other); - } - - // implements Message ---------------------------------------------- - - CodeGeneratorRequest* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final { - return CreateMaybeMessage<CodeGeneratorRequest>(arena); - } - using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom; - void CopyFrom(const CodeGeneratorRequest& from); - using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom; - void MergeFrom( const CodeGeneratorRequest& from) { - CodeGeneratorRequest::MergeImpl(*this, from); - } - private: - static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message& to_msg, const ::PROTOBUF_NAMESPACE_ID::Message& from_msg); - public: - PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final; - bool IsInitialized() const final; - - size_t ByteSizeLong() const final; - const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final; - uint8_t* _InternalSerialize( - uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final; - int GetCachedSize() const final { return _impl_._cached_size_.Get(); } - - private: - void SharedCtor(::PROTOBUF_NAMESPACE_ID::Arena* arena, bool is_message_owned); - void SharedDtor(); - void SetCachedSize(int size) const final; - void InternalSwap(CodeGeneratorRequest* other); - - private: - friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata; - static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() { - return "google.protobuf.compiler.CodeGeneratorRequest"; - } - protected: - explicit CodeGeneratorRequest(::PROTOBUF_NAMESPACE_ID::Arena* arena, - bool is_message_owned = false); - public: - - static const ClassData _class_data_; - const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final; - - ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final; - - // nested types ---------------------------------------------------- - - // accessors ------------------------------------------------------- - - enum : int { - kFileToGenerateFieldNumber = 1, - kProtoFileFieldNumber = 15, - kParameterFieldNumber = 2, - kCompilerVersionFieldNumber = 3, - }; - // repeated string file_to_generate = 1; - int file_to_generate_size() const; - private: - int _internal_file_to_generate_size() const; - public: - void clear_file_to_generate(); - const std::string& file_to_generate(int index) const; - std::string* mutable_file_to_generate(int index); - void set_file_to_generate(int index, const std::string& value); - void set_file_to_generate(int index, std::string&& value); - void set_file_to_generate(int index, const char* value); - void set_file_to_generate(int index, const char* value, size_t size); - std::string* add_file_to_generate(); - void add_file_to_generate(const std::string& value); - void add_file_to_generate(std::string&& value); - void add_file_to_generate(const char* value); - void add_file_to_generate(const char* value, size_t size); - const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField<std::string>& file_to_generate() const; - ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField<std::string>* mutable_file_to_generate(); - private: - const std::string& _internal_file_to_generate(int index) const; - std::string* _internal_add_file_to_generate(); - public: - - // repeated .google.protobuf.FileDescriptorProto proto_file = 15; - int proto_file_size() const; - private: - int _internal_proto_file_size() const; - public: - void clear_proto_file(); - ::PROTOBUF_NAMESPACE_ID::FileDescriptorProto* mutable_proto_file(int index); - ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::FileDescriptorProto >* - mutable_proto_file(); - private: - const ::PROTOBUF_NAMESPACE_ID::FileDescriptorProto& _internal_proto_file(int index) const; - ::PROTOBUF_NAMESPACE_ID::FileDescriptorProto* _internal_add_proto_file(); - public: - const ::PROTOBUF_NAMESPACE_ID::FileDescriptorProto& proto_file(int index) const; - ::PROTOBUF_NAMESPACE_ID::FileDescriptorProto* add_proto_file(); - const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::FileDescriptorProto >& - proto_file() const; - - // optional string parameter = 2; - bool has_parameter() const; - private: - bool _internal_has_parameter() const; - public: - void clear_parameter(); - const std::string& parameter() const; - template <typename ArgT0 = const std::string&, typename... ArgT> - void set_parameter(ArgT0&& arg0, ArgT... args); - std::string* mutable_parameter(); - PROTOBUF_NODISCARD std::string* release_parameter(); - void set_allocated_parameter(std::string* parameter); - private: - const std::string& _internal_parameter() const; - inline PROTOBUF_ALWAYS_INLINE void _internal_set_parameter(const std::string& value); - std::string* _internal_mutable_parameter(); - public: - - // optional .google.protobuf.compiler.Version compiler_version = 3; - bool has_compiler_version() const; - private: - bool _internal_has_compiler_version() const; - public: - void clear_compiler_version(); - const ::PROTOBUF_NAMESPACE_ID::compiler::Version& compiler_version() const; - PROTOBUF_NODISCARD ::PROTOBUF_NAMESPACE_ID::compiler::Version* release_compiler_version(); - ::PROTOBUF_NAMESPACE_ID::compiler::Version* mutable_compiler_version(); - void set_allocated_compiler_version(::PROTOBUF_NAMESPACE_ID::compiler::Version* compiler_version); - private: - const ::PROTOBUF_NAMESPACE_ID::compiler::Version& _internal_compiler_version() const; - ::PROTOBUF_NAMESPACE_ID::compiler::Version* _internal_mutable_compiler_version(); - public: - void unsafe_arena_set_allocated_compiler_version( - ::PROTOBUF_NAMESPACE_ID::compiler::Version* compiler_version); - ::PROTOBUF_NAMESPACE_ID::compiler::Version* unsafe_arena_release_compiler_version(); - - // @@protoc_insertion_point(class_scope:google.protobuf.compiler.CodeGeneratorRequest) - private: - class _Internal; - - template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper; - typedef void InternalArenaConstructable_; - typedef void DestructorSkippable_; - struct Impl_ { - ::PROTOBUF_NAMESPACE_ID::internal::HasBits<1> _has_bits_; - mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_; - ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField<std::string> file_to_generate_; - ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::FileDescriptorProto > proto_file_; - ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr parameter_; - ::PROTOBUF_NAMESPACE_ID::compiler::Version* compiler_version_; - }; - union { Impl_ _impl_; }; - friend struct ::TableStruct_google_2fprotobuf_2fcompiler_2fplugin_2eproto; -}; -// ------------------------------------------------------------------- - -class PROTOC_EXPORT CodeGeneratorResponse_File final : - public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:google.protobuf.compiler.CodeGeneratorResponse.File) */ { - public: - inline CodeGeneratorResponse_File() : CodeGeneratorResponse_File(nullptr) {} - ~CodeGeneratorResponse_File() override; - explicit PROTOBUF_CONSTEXPR CodeGeneratorResponse_File(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized); - - CodeGeneratorResponse_File(const CodeGeneratorResponse_File& from); - CodeGeneratorResponse_File(CodeGeneratorResponse_File&& from) noexcept - : CodeGeneratorResponse_File() { - *this = ::std::move(from); - } - - inline CodeGeneratorResponse_File& operator=(const CodeGeneratorResponse_File& from) { - CopyFrom(from); - return *this; - } - inline CodeGeneratorResponse_File& operator=(CodeGeneratorResponse_File&& from) noexcept { - if (this == &from) return *this; - if (GetOwningArena() == from.GetOwningArena() - #ifdef PROTOBUF_FORCE_COPY_IN_MOVE - && GetOwningArena() != nullptr - #endif // !PROTOBUF_FORCE_COPY_IN_MOVE - ) { - InternalSwap(&from); - } else { - CopyFrom(from); - } - return *this; - } - - inline const ::PROTOBUF_NAMESPACE_ID::UnknownFieldSet& unknown_fields() const { - return _internal_metadata_.unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(::PROTOBUF_NAMESPACE_ID::UnknownFieldSet::default_instance); - } - inline ::PROTOBUF_NAMESPACE_ID::UnknownFieldSet* mutable_unknown_fields() { - return _internal_metadata_.mutable_unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(); - } - - static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() { - return GetDescriptor(); - } - static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() { - return default_instance().GetMetadata().descriptor; - } - static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() { - return default_instance().GetMetadata().reflection; - } - static const CodeGeneratorResponse_File& default_instance() { - return *internal_default_instance(); - } - static inline const CodeGeneratorResponse_File* internal_default_instance() { - return reinterpret_cast<const CodeGeneratorResponse_File*>( - &_CodeGeneratorResponse_File_default_instance_); - } - static constexpr int kIndexInFileMessages = - 2; - - friend void swap(CodeGeneratorResponse_File& a, CodeGeneratorResponse_File& b) { - a.Swap(&b); - } - inline void Swap(CodeGeneratorResponse_File* other) { - if (other == this) return; - #ifdef PROTOBUF_FORCE_COPY_IN_SWAP - if (GetOwningArena() != nullptr && - GetOwningArena() == other->GetOwningArena()) { - #else // PROTOBUF_FORCE_COPY_IN_SWAP - if (GetOwningArena() == other->GetOwningArena()) { - #endif // !PROTOBUF_FORCE_COPY_IN_SWAP - InternalSwap(other); - } else { - ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other); - } - } - void UnsafeArenaSwap(CodeGeneratorResponse_File* other) { - if (other == this) return; - GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena()); - InternalSwap(other); - } - - // implements Message ---------------------------------------------- - - CodeGeneratorResponse_File* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final { - return CreateMaybeMessage<CodeGeneratorResponse_File>(arena); - } - using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom; - void CopyFrom(const CodeGeneratorResponse_File& from); - using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom; - void MergeFrom( const CodeGeneratorResponse_File& from) { - CodeGeneratorResponse_File::MergeImpl(*this, from); - } - private: - static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message& to_msg, const ::PROTOBUF_NAMESPACE_ID::Message& from_msg); - public: - PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final; - bool IsInitialized() const final; - - size_t ByteSizeLong() const final; - const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final; - uint8_t* _InternalSerialize( - uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final; - int GetCachedSize() const final { return _impl_._cached_size_.Get(); } - - private: - void SharedCtor(::PROTOBUF_NAMESPACE_ID::Arena* arena, bool is_message_owned); - void SharedDtor(); - void SetCachedSize(int size) const final; - void InternalSwap(CodeGeneratorResponse_File* other); - - private: - friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata; - static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() { - return "google.protobuf.compiler.CodeGeneratorResponse.File"; - } - protected: - explicit CodeGeneratorResponse_File(::PROTOBUF_NAMESPACE_ID::Arena* arena, - bool is_message_owned = false); - public: - - static const ClassData _class_data_; - const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final; - - ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final; - - // nested types ---------------------------------------------------- - - // accessors ------------------------------------------------------- - - enum : int { - kNameFieldNumber = 1, - kInsertionPointFieldNumber = 2, - kContentFieldNumber = 15, - kGeneratedCodeInfoFieldNumber = 16, - }; - // optional string name = 1; - bool has_name() const; - private: - bool _internal_has_name() const; - public: - void clear_name(); - const std::string& name() const; - template <typename ArgT0 = const std::string&, typename... ArgT> - void set_name(ArgT0&& arg0, ArgT... args); - std::string* mutable_name(); - PROTOBUF_NODISCARD std::string* release_name(); - void set_allocated_name(std::string* name); - private: - const std::string& _internal_name() const; - inline PROTOBUF_ALWAYS_INLINE void _internal_set_name(const std::string& value); - std::string* _internal_mutable_name(); - public: - - // optional string insertion_point = 2; - bool has_insertion_point() const; - private: - bool _internal_has_insertion_point() const; - public: - void clear_insertion_point(); - const std::string& insertion_point() const; - template <typename ArgT0 = const std::string&, typename... ArgT> - void set_insertion_point(ArgT0&& arg0, ArgT... args); - std::string* mutable_insertion_point(); - PROTOBUF_NODISCARD std::string* release_insertion_point(); - void set_allocated_insertion_point(std::string* insertion_point); - private: - const std::string& _internal_insertion_point() const; - inline PROTOBUF_ALWAYS_INLINE void _internal_set_insertion_point(const std::string& value); - std::string* _internal_mutable_insertion_point(); - public: - - // optional string content = 15; - bool has_content() const; - private: - bool _internal_has_content() const; - public: - void clear_content(); - const std::string& content() const; - template <typename ArgT0 = const std::string&, typename... ArgT> - void set_content(ArgT0&& arg0, ArgT... args); - std::string* mutable_content(); - PROTOBUF_NODISCARD std::string* release_content(); - void set_allocated_content(std::string* content); - private: - const std::string& _internal_content() const; - inline PROTOBUF_ALWAYS_INLINE void _internal_set_content(const std::string& value); - std::string* _internal_mutable_content(); - public: - - // optional .google.protobuf.GeneratedCodeInfo generated_code_info = 16; - bool has_generated_code_info() const; - private: - bool _internal_has_generated_code_info() const; - public: - void clear_generated_code_info(); - const ::PROTOBUF_NAMESPACE_ID::GeneratedCodeInfo& generated_code_info() const; - PROTOBUF_NODISCARD ::PROTOBUF_NAMESPACE_ID::GeneratedCodeInfo* release_generated_code_info(); - ::PROTOBUF_NAMESPACE_ID::GeneratedCodeInfo* mutable_generated_code_info(); - void set_allocated_generated_code_info(::PROTOBUF_NAMESPACE_ID::GeneratedCodeInfo* generated_code_info); - private: - const ::PROTOBUF_NAMESPACE_ID::GeneratedCodeInfo& _internal_generated_code_info() const; - ::PROTOBUF_NAMESPACE_ID::GeneratedCodeInfo* _internal_mutable_generated_code_info(); - public: - void unsafe_arena_set_allocated_generated_code_info( - ::PROTOBUF_NAMESPACE_ID::GeneratedCodeInfo* generated_code_info); - ::PROTOBUF_NAMESPACE_ID::GeneratedCodeInfo* unsafe_arena_release_generated_code_info(); - - // @@protoc_insertion_point(class_scope:google.protobuf.compiler.CodeGeneratorResponse.File) - private: - class _Internal; - - template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper; - typedef void InternalArenaConstructable_; - typedef void DestructorSkippable_; - struct Impl_ { - ::PROTOBUF_NAMESPACE_ID::internal::HasBits<1> _has_bits_; - mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_; - ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr name_; - ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr insertion_point_; - ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr content_; - ::PROTOBUF_NAMESPACE_ID::GeneratedCodeInfo* generated_code_info_; - }; - union { Impl_ _impl_; }; - friend struct ::TableStruct_google_2fprotobuf_2fcompiler_2fplugin_2eproto; -}; -// ------------------------------------------------------------------- - -class PROTOC_EXPORT CodeGeneratorResponse final : - public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:google.protobuf.compiler.CodeGeneratorResponse) */ { - public: - inline CodeGeneratorResponse() : CodeGeneratorResponse(nullptr) {} - ~CodeGeneratorResponse() override; - explicit PROTOBUF_CONSTEXPR CodeGeneratorResponse(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized); - - CodeGeneratorResponse(const CodeGeneratorResponse& from); - CodeGeneratorResponse(CodeGeneratorResponse&& from) noexcept - : CodeGeneratorResponse() { - *this = ::std::move(from); - } - - inline CodeGeneratorResponse& operator=(const CodeGeneratorResponse& from) { - CopyFrom(from); - return *this; - } - inline CodeGeneratorResponse& operator=(CodeGeneratorResponse&& from) noexcept { - if (this == &from) return *this; - if (GetOwningArena() == from.GetOwningArena() - #ifdef PROTOBUF_FORCE_COPY_IN_MOVE - && GetOwningArena() != nullptr - #endif // !PROTOBUF_FORCE_COPY_IN_MOVE - ) { - InternalSwap(&from); - } else { - CopyFrom(from); - } - return *this; - } - - inline const ::PROTOBUF_NAMESPACE_ID::UnknownFieldSet& unknown_fields() const { - return _internal_metadata_.unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(::PROTOBUF_NAMESPACE_ID::UnknownFieldSet::default_instance); - } - inline ::PROTOBUF_NAMESPACE_ID::UnknownFieldSet* mutable_unknown_fields() { - return _internal_metadata_.mutable_unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(); - } - - static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() { - return GetDescriptor(); - } - static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() { - return default_instance().GetMetadata().descriptor; - } - static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() { - return default_instance().GetMetadata().reflection; - } - static const CodeGeneratorResponse& default_instance() { - return *internal_default_instance(); - } - static inline const CodeGeneratorResponse* internal_default_instance() { - return reinterpret_cast<const CodeGeneratorResponse*>( - &_CodeGeneratorResponse_default_instance_); - } - static constexpr int kIndexInFileMessages = - 3; - - friend void swap(CodeGeneratorResponse& a, CodeGeneratorResponse& b) { - a.Swap(&b); - } - inline void Swap(CodeGeneratorResponse* other) { - if (other == this) return; - #ifdef PROTOBUF_FORCE_COPY_IN_SWAP - if (GetOwningArena() != nullptr && - GetOwningArena() == other->GetOwningArena()) { - #else // PROTOBUF_FORCE_COPY_IN_SWAP - if (GetOwningArena() == other->GetOwningArena()) { - #endif // !PROTOBUF_FORCE_COPY_IN_SWAP - InternalSwap(other); - } else { - ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other); - } - } - void UnsafeArenaSwap(CodeGeneratorResponse* other) { - if (other == this) return; - GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena()); - InternalSwap(other); - } - - // implements Message ---------------------------------------------- - - CodeGeneratorResponse* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final { - return CreateMaybeMessage<CodeGeneratorResponse>(arena); - } - using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom; - void CopyFrom(const CodeGeneratorResponse& from); - using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom; - void MergeFrom( const CodeGeneratorResponse& from) { - CodeGeneratorResponse::MergeImpl(*this, from); - } - private: - static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message& to_msg, const ::PROTOBUF_NAMESPACE_ID::Message& from_msg); - public: - PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final; - bool IsInitialized() const final; - - size_t ByteSizeLong() const final; - const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final; - uint8_t* _InternalSerialize( - uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final; - int GetCachedSize() const final { return _impl_._cached_size_.Get(); } - - private: - void SharedCtor(::PROTOBUF_NAMESPACE_ID::Arena* arena, bool is_message_owned); - void SharedDtor(); - void SetCachedSize(int size) const final; - void InternalSwap(CodeGeneratorResponse* other); - - private: - friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata; - static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() { - return "google.protobuf.compiler.CodeGeneratorResponse"; - } - protected: - explicit CodeGeneratorResponse(::PROTOBUF_NAMESPACE_ID::Arena* arena, - bool is_message_owned = false); - public: - - static const ClassData _class_data_; - const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final; - - ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final; - - // nested types ---------------------------------------------------- - - typedef CodeGeneratorResponse_File File; - - typedef CodeGeneratorResponse_Feature Feature; - static constexpr Feature FEATURE_NONE = - CodeGeneratorResponse_Feature_FEATURE_NONE; - static constexpr Feature FEATURE_PROTO3_OPTIONAL = - CodeGeneratorResponse_Feature_FEATURE_PROTO3_OPTIONAL; - static inline bool Feature_IsValid(int value) { - return CodeGeneratorResponse_Feature_IsValid(value); - } - static constexpr Feature Feature_MIN = - CodeGeneratorResponse_Feature_Feature_MIN; - static constexpr Feature Feature_MAX = - CodeGeneratorResponse_Feature_Feature_MAX; - static constexpr int Feature_ARRAYSIZE = - CodeGeneratorResponse_Feature_Feature_ARRAYSIZE; - static inline const ::PROTOBUF_NAMESPACE_ID::EnumDescriptor* - Feature_descriptor() { - return CodeGeneratorResponse_Feature_descriptor(); - } - template<typename T> - static inline const std::string& Feature_Name(T enum_t_value) { - static_assert(::std::is_same<T, Feature>::value || - ::std::is_integral<T>::value, - "Incorrect type passed to function Feature_Name."); - return CodeGeneratorResponse_Feature_Name(enum_t_value); - } - static inline bool Feature_Parse(::PROTOBUF_NAMESPACE_ID::ConstStringParam name, - Feature* value) { - return CodeGeneratorResponse_Feature_Parse(name, value); - } - - // accessors ------------------------------------------------------- - - enum : int { - kFileFieldNumber = 15, - kErrorFieldNumber = 1, - kSupportedFeaturesFieldNumber = 2, - }; - // repeated .google.protobuf.compiler.CodeGeneratorResponse.File file = 15; - int file_size() const; - private: - int _internal_file_size() const; - public: - void clear_file(); - ::PROTOBUF_NAMESPACE_ID::compiler::CodeGeneratorResponse_File* mutable_file(int index); - ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::compiler::CodeGeneratorResponse_File >* - mutable_file(); - private: - const ::PROTOBUF_NAMESPACE_ID::compiler::CodeGeneratorResponse_File& _internal_file(int index) const; - ::PROTOBUF_NAMESPACE_ID::compiler::CodeGeneratorResponse_File* _internal_add_file(); - public: - const ::PROTOBUF_NAMESPACE_ID::compiler::CodeGeneratorResponse_File& file(int index) const; - ::PROTOBUF_NAMESPACE_ID::compiler::CodeGeneratorResponse_File* add_file(); - const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::compiler::CodeGeneratorResponse_File >& - file() const; - - // optional string error = 1; - bool has_error() const; - private: - bool _internal_has_error() const; - public: - void clear_error(); - const std::string& error() const; - template <typename ArgT0 = const std::string&, typename... ArgT> - void set_error(ArgT0&& arg0, ArgT... args); - std::string* mutable_error(); - PROTOBUF_NODISCARD std::string* release_error(); - void set_allocated_error(std::string* error); - private: - const std::string& _internal_error() const; - inline PROTOBUF_ALWAYS_INLINE void _internal_set_error(const std::string& value); - std::string* _internal_mutable_error(); - public: - - // optional uint64 supported_features = 2; - bool has_supported_features() const; - private: - bool _internal_has_supported_features() const; - public: - void clear_supported_features(); - uint64_t supported_features() const; - void set_supported_features(uint64_t value); - private: - uint64_t _internal_supported_features() const; - void _internal_set_supported_features(uint64_t value); - public: - - // @@protoc_insertion_point(class_scope:google.protobuf.compiler.CodeGeneratorResponse) - private: - class _Internal; - - template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper; - typedef void InternalArenaConstructable_; - typedef void DestructorSkippable_; - struct Impl_ { - ::PROTOBUF_NAMESPACE_ID::internal::HasBits<1> _has_bits_; - mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_; - ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::compiler::CodeGeneratorResponse_File > file_; - ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr error_; - uint64_t supported_features_; - }; - union { Impl_ _impl_; }; - friend struct ::TableStruct_google_2fprotobuf_2fcompiler_2fplugin_2eproto; -}; -// =================================================================== - - -// =================================================================== - -#ifdef __GNUC__ - #pragma GCC diagnostic push - #pragma GCC diagnostic ignored "-Wstrict-aliasing" -#endif // __GNUC__ -// Version - -// optional int32 major = 1; -inline bool Version::_internal_has_major() const { - bool value = (_impl_._has_bits_[0] & 0x00000002u) != 0; - return value; -} -inline bool Version::has_major() const { - return _internal_has_major(); -} -inline void Version::clear_major() { - _impl_.major_ = 0; - _impl_._has_bits_[0] &= ~0x00000002u; -} -inline int32_t Version::_internal_major() const { - return _impl_.major_; -} -inline int32_t Version::major() const { - // @@protoc_insertion_point(field_get:google.protobuf.compiler.Version.major) - return _internal_major(); -} -inline void Version::_internal_set_major(int32_t value) { - _impl_._has_bits_[0] |= 0x00000002u; - _impl_.major_ = value; -} -inline void Version::set_major(int32_t value) { - _internal_set_major(value); - // @@protoc_insertion_point(field_set:google.protobuf.compiler.Version.major) -} - -// optional int32 minor = 2; -inline bool Version::_internal_has_minor() const { - bool value = (_impl_._has_bits_[0] & 0x00000004u) != 0; - return value; -} -inline bool Version::has_minor() const { - return _internal_has_minor(); -} -inline void Version::clear_minor() { - _impl_.minor_ = 0; - _impl_._has_bits_[0] &= ~0x00000004u; -} -inline int32_t Version::_internal_minor() const { - return _impl_.minor_; -} -inline int32_t Version::minor() const { - // @@protoc_insertion_point(field_get:google.protobuf.compiler.Version.minor) - return _internal_minor(); -} -inline void Version::_internal_set_minor(int32_t value) { - _impl_._has_bits_[0] |= 0x00000004u; - _impl_.minor_ = value; -} -inline void Version::set_minor(int32_t value) { - _internal_set_minor(value); - // @@protoc_insertion_point(field_set:google.protobuf.compiler.Version.minor) -} - -// optional int32 patch = 3; -inline bool Version::_internal_has_patch() const { - bool value = (_impl_._has_bits_[0] & 0x00000008u) != 0; - return value; -} -inline bool Version::has_patch() const { - return _internal_has_patch(); -} -inline void Version::clear_patch() { - _impl_.patch_ = 0; - _impl_._has_bits_[0] &= ~0x00000008u; -} -inline int32_t Version::_internal_patch() const { - return _impl_.patch_; -} -inline int32_t Version::patch() const { - // @@protoc_insertion_point(field_get:google.protobuf.compiler.Version.patch) - return _internal_patch(); -} -inline void Version::_internal_set_patch(int32_t value) { - _impl_._has_bits_[0] |= 0x00000008u; - _impl_.patch_ = value; -} -inline void Version::set_patch(int32_t value) { - _internal_set_patch(value); - // @@protoc_insertion_point(field_set:google.protobuf.compiler.Version.patch) -} - -// optional string suffix = 4; -inline bool Version::_internal_has_suffix() const { - bool value = (_impl_._has_bits_[0] & 0x00000001u) != 0; - return value; -} -inline bool Version::has_suffix() const { - return _internal_has_suffix(); -} -inline void Version::clear_suffix() { - _impl_.suffix_.ClearToEmpty(); - _impl_._has_bits_[0] &= ~0x00000001u; -} -inline const std::string& Version::suffix() const { - // @@protoc_insertion_point(field_get:google.protobuf.compiler.Version.suffix) - return _internal_suffix(); -} -template <typename ArgT0, typename... ArgT> -inline PROTOBUF_ALWAYS_INLINE -void Version::set_suffix(ArgT0&& arg0, ArgT... args) { - _impl_._has_bits_[0] |= 0x00000001u; - _impl_.suffix_.Set(static_cast<ArgT0 &&>(arg0), args..., GetArenaForAllocation()); - // @@protoc_insertion_point(field_set:google.protobuf.compiler.Version.suffix) -} -inline std::string* Version::mutable_suffix() { - std::string* _s = _internal_mutable_suffix(); - // @@protoc_insertion_point(field_mutable:google.protobuf.compiler.Version.suffix) - return _s; -} -inline const std::string& Version::_internal_suffix() const { - return _impl_.suffix_.Get(); -} -inline void Version::_internal_set_suffix(const std::string& value) { - _impl_._has_bits_[0] |= 0x00000001u; - _impl_.suffix_.Set(value, GetArenaForAllocation()); -} -inline std::string* Version::_internal_mutable_suffix() { - _impl_._has_bits_[0] |= 0x00000001u; - return _impl_.suffix_.Mutable(GetArenaForAllocation()); -} -inline std::string* Version::release_suffix() { - // @@protoc_insertion_point(field_release:google.protobuf.compiler.Version.suffix) - if (!_internal_has_suffix()) { - return nullptr; - } - _impl_._has_bits_[0] &= ~0x00000001u; - auto* p = _impl_.suffix_.Release(); -#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING - if (_impl_.suffix_.IsDefault()) { - _impl_.suffix_.Set("", GetArenaForAllocation()); - } -#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING - return p; -} -inline void Version::set_allocated_suffix(std::string* suffix) { - if (suffix != nullptr) { - _impl_._has_bits_[0] |= 0x00000001u; - } else { - _impl_._has_bits_[0] &= ~0x00000001u; - } - _impl_.suffix_.SetAllocated(suffix, GetArenaForAllocation()); -#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING - if (_impl_.suffix_.IsDefault()) { - _impl_.suffix_.Set("", GetArenaForAllocation()); - } -#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING - // @@protoc_insertion_point(field_set_allocated:google.protobuf.compiler.Version.suffix) -} - -// ------------------------------------------------------------------- - -// CodeGeneratorRequest - -// repeated string file_to_generate = 1; -inline int CodeGeneratorRequest::_internal_file_to_generate_size() const { - return _impl_.file_to_generate_.size(); -} -inline int CodeGeneratorRequest::file_to_generate_size() const { - return _internal_file_to_generate_size(); -} -inline void CodeGeneratorRequest::clear_file_to_generate() { - _impl_.file_to_generate_.Clear(); -} -inline std::string* CodeGeneratorRequest::add_file_to_generate() { - std::string* _s = _internal_add_file_to_generate(); - // @@protoc_insertion_point(field_add_mutable:google.protobuf.compiler.CodeGeneratorRequest.file_to_generate) - return _s; -} -inline const std::string& CodeGeneratorRequest::_internal_file_to_generate(int index) const { - return _impl_.file_to_generate_.Get(index); -} -inline const std::string& CodeGeneratorRequest::file_to_generate(int index) const { - // @@protoc_insertion_point(field_get:google.protobuf.compiler.CodeGeneratorRequest.file_to_generate) - return _internal_file_to_generate(index); -} -inline std::string* CodeGeneratorRequest::mutable_file_to_generate(int index) { - // @@protoc_insertion_point(field_mutable:google.protobuf.compiler.CodeGeneratorRequest.file_to_generate) - return _impl_.file_to_generate_.Mutable(index); -} -inline void CodeGeneratorRequest::set_file_to_generate(int index, const std::string& value) { - _impl_.file_to_generate_.Mutable(index)->assign(value); - // @@protoc_insertion_point(field_set:google.protobuf.compiler.CodeGeneratorRequest.file_to_generate) -} -inline void CodeGeneratorRequest::set_file_to_generate(int index, std::string&& value) { - _impl_.file_to_generate_.Mutable(index)->assign(std::move(value)); - // @@protoc_insertion_point(field_set:google.protobuf.compiler.CodeGeneratorRequest.file_to_generate) -} -inline void CodeGeneratorRequest::set_file_to_generate(int index, const char* value) { - GOOGLE_DCHECK(value != nullptr); - _impl_.file_to_generate_.Mutable(index)->assign(value); - // @@protoc_insertion_point(field_set_char:google.protobuf.compiler.CodeGeneratorRequest.file_to_generate) -} -inline void CodeGeneratorRequest::set_file_to_generate(int index, const char* value, size_t size) { - _impl_.file_to_generate_.Mutable(index)->assign( - reinterpret_cast<const char*>(value), size); - // @@protoc_insertion_point(field_set_pointer:google.protobuf.compiler.CodeGeneratorRequest.file_to_generate) -} -inline std::string* CodeGeneratorRequest::_internal_add_file_to_generate() { - return _impl_.file_to_generate_.Add(); -} -inline void CodeGeneratorRequest::add_file_to_generate(const std::string& value) { - _impl_.file_to_generate_.Add()->assign(value); - // @@protoc_insertion_point(field_add:google.protobuf.compiler.CodeGeneratorRequest.file_to_generate) -} -inline void CodeGeneratorRequest::add_file_to_generate(std::string&& value) { - _impl_.file_to_generate_.Add(std::move(value)); - // @@protoc_insertion_point(field_add:google.protobuf.compiler.CodeGeneratorRequest.file_to_generate) -} -inline void CodeGeneratorRequest::add_file_to_generate(const char* value) { - GOOGLE_DCHECK(value != nullptr); - _impl_.file_to_generate_.Add()->assign(value); - // @@protoc_insertion_point(field_add_char:google.protobuf.compiler.CodeGeneratorRequest.file_to_generate) -} -inline void CodeGeneratorRequest::add_file_to_generate(const char* value, size_t size) { - _impl_.file_to_generate_.Add()->assign(reinterpret_cast<const char*>(value), size); - // @@protoc_insertion_point(field_add_pointer:google.protobuf.compiler.CodeGeneratorRequest.file_to_generate) -} -inline const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField<std::string>& -CodeGeneratorRequest::file_to_generate() const { - // @@protoc_insertion_point(field_list:google.protobuf.compiler.CodeGeneratorRequest.file_to_generate) - return _impl_.file_to_generate_; -} -inline ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField<std::string>* -CodeGeneratorRequest::mutable_file_to_generate() { - // @@protoc_insertion_point(field_mutable_list:google.protobuf.compiler.CodeGeneratorRequest.file_to_generate) - return &_impl_.file_to_generate_; -} - -// optional string parameter = 2; -inline bool CodeGeneratorRequest::_internal_has_parameter() const { - bool value = (_impl_._has_bits_[0] & 0x00000001u) != 0; - return value; -} -inline bool CodeGeneratorRequest::has_parameter() const { - return _internal_has_parameter(); -} -inline void CodeGeneratorRequest::clear_parameter() { - _impl_.parameter_.ClearToEmpty(); - _impl_._has_bits_[0] &= ~0x00000001u; -} -inline const std::string& CodeGeneratorRequest::parameter() const { - // @@protoc_insertion_point(field_get:google.protobuf.compiler.CodeGeneratorRequest.parameter) - return _internal_parameter(); -} -template <typename ArgT0, typename... ArgT> -inline PROTOBUF_ALWAYS_INLINE -void CodeGeneratorRequest::set_parameter(ArgT0&& arg0, ArgT... args) { - _impl_._has_bits_[0] |= 0x00000001u; - _impl_.parameter_.Set(static_cast<ArgT0 &&>(arg0), args..., GetArenaForAllocation()); - // @@protoc_insertion_point(field_set:google.protobuf.compiler.CodeGeneratorRequest.parameter) -} -inline std::string* CodeGeneratorRequest::mutable_parameter() { - std::string* _s = _internal_mutable_parameter(); - // @@protoc_insertion_point(field_mutable:google.protobuf.compiler.CodeGeneratorRequest.parameter) - return _s; -} -inline const std::string& CodeGeneratorRequest::_internal_parameter() const { - return _impl_.parameter_.Get(); -} -inline void CodeGeneratorRequest::_internal_set_parameter(const std::string& value) { - _impl_._has_bits_[0] |= 0x00000001u; - _impl_.parameter_.Set(value, GetArenaForAllocation()); -} -inline std::string* CodeGeneratorRequest::_internal_mutable_parameter() { - _impl_._has_bits_[0] |= 0x00000001u; - return _impl_.parameter_.Mutable(GetArenaForAllocation()); -} -inline std::string* CodeGeneratorRequest::release_parameter() { - // @@protoc_insertion_point(field_release:google.protobuf.compiler.CodeGeneratorRequest.parameter) - if (!_internal_has_parameter()) { - return nullptr; - } - _impl_._has_bits_[0] &= ~0x00000001u; - auto* p = _impl_.parameter_.Release(); -#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING - if (_impl_.parameter_.IsDefault()) { - _impl_.parameter_.Set("", GetArenaForAllocation()); - } -#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING - return p; -} -inline void CodeGeneratorRequest::set_allocated_parameter(std::string* parameter) { - if (parameter != nullptr) { - _impl_._has_bits_[0] |= 0x00000001u; - } else { - _impl_._has_bits_[0] &= ~0x00000001u; - } - _impl_.parameter_.SetAllocated(parameter, GetArenaForAllocation()); -#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING - if (_impl_.parameter_.IsDefault()) { - _impl_.parameter_.Set("", GetArenaForAllocation()); - } -#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING - // @@protoc_insertion_point(field_set_allocated:google.protobuf.compiler.CodeGeneratorRequest.parameter) -} - -// repeated .google.protobuf.FileDescriptorProto proto_file = 15; -inline int CodeGeneratorRequest::_internal_proto_file_size() const { - return _impl_.proto_file_.size(); -} -inline int CodeGeneratorRequest::proto_file_size() const { - return _internal_proto_file_size(); -} -inline ::PROTOBUF_NAMESPACE_ID::FileDescriptorProto* CodeGeneratorRequest::mutable_proto_file(int index) { - // @@protoc_insertion_point(field_mutable:google.protobuf.compiler.CodeGeneratorRequest.proto_file) - return _impl_.proto_file_.Mutable(index); -} -inline ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::FileDescriptorProto >* -CodeGeneratorRequest::mutable_proto_file() { - // @@protoc_insertion_point(field_mutable_list:google.protobuf.compiler.CodeGeneratorRequest.proto_file) - return &_impl_.proto_file_; -} -inline const ::PROTOBUF_NAMESPACE_ID::FileDescriptorProto& CodeGeneratorRequest::_internal_proto_file(int index) const { - return _impl_.proto_file_.Get(index); -} -inline const ::PROTOBUF_NAMESPACE_ID::FileDescriptorProto& CodeGeneratorRequest::proto_file(int index) const { - // @@protoc_insertion_point(field_get:google.protobuf.compiler.CodeGeneratorRequest.proto_file) - return _internal_proto_file(index); -} -inline ::PROTOBUF_NAMESPACE_ID::FileDescriptorProto* CodeGeneratorRequest::_internal_add_proto_file() { - return _impl_.proto_file_.Add(); -} -inline ::PROTOBUF_NAMESPACE_ID::FileDescriptorProto* CodeGeneratorRequest::add_proto_file() { - ::PROTOBUF_NAMESPACE_ID::FileDescriptorProto* _add = _internal_add_proto_file(); - // @@protoc_insertion_point(field_add:google.protobuf.compiler.CodeGeneratorRequest.proto_file) - return _add; -} -inline const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::FileDescriptorProto >& -CodeGeneratorRequest::proto_file() const { - // @@protoc_insertion_point(field_list:google.protobuf.compiler.CodeGeneratorRequest.proto_file) - return _impl_.proto_file_; -} - -// optional .google.protobuf.compiler.Version compiler_version = 3; -inline bool CodeGeneratorRequest::_internal_has_compiler_version() const { - bool value = (_impl_._has_bits_[0] & 0x00000002u) != 0; - PROTOBUF_ASSUME(!value || _impl_.compiler_version_ != nullptr); - return value; -} -inline bool CodeGeneratorRequest::has_compiler_version() const { - return _internal_has_compiler_version(); -} -inline void CodeGeneratorRequest::clear_compiler_version() { - if (_impl_.compiler_version_ != nullptr) _impl_.compiler_version_->Clear(); - _impl_._has_bits_[0] &= ~0x00000002u; -} -inline const ::PROTOBUF_NAMESPACE_ID::compiler::Version& CodeGeneratorRequest::_internal_compiler_version() const { - const ::PROTOBUF_NAMESPACE_ID::compiler::Version* p = _impl_.compiler_version_; - return p != nullptr ? *p : reinterpret_cast<const ::PROTOBUF_NAMESPACE_ID::compiler::Version&>( - ::PROTOBUF_NAMESPACE_ID::compiler::_Version_default_instance_); -} -inline const ::PROTOBUF_NAMESPACE_ID::compiler::Version& CodeGeneratorRequest::compiler_version() const { - // @@protoc_insertion_point(field_get:google.protobuf.compiler.CodeGeneratorRequest.compiler_version) - return _internal_compiler_version(); -} -inline void CodeGeneratorRequest::unsafe_arena_set_allocated_compiler_version( - ::PROTOBUF_NAMESPACE_ID::compiler::Version* compiler_version) { - if (GetArenaForAllocation() == nullptr) { - delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(_impl_.compiler_version_); - } - _impl_.compiler_version_ = compiler_version; - if (compiler_version) { - _impl_._has_bits_[0] |= 0x00000002u; - } else { - _impl_._has_bits_[0] &= ~0x00000002u; - } - // @@protoc_insertion_point(field_unsafe_arena_set_allocated:google.protobuf.compiler.CodeGeneratorRequest.compiler_version) -} -inline ::PROTOBUF_NAMESPACE_ID::compiler::Version* CodeGeneratorRequest::release_compiler_version() { - _impl_._has_bits_[0] &= ~0x00000002u; - ::PROTOBUF_NAMESPACE_ID::compiler::Version* temp = _impl_.compiler_version_; - _impl_.compiler_version_ = nullptr; -#ifdef PROTOBUF_FORCE_COPY_IN_RELEASE - auto* old = reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(temp); - temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp); - if (GetArenaForAllocation() == nullptr) { delete old; } -#else // PROTOBUF_FORCE_COPY_IN_RELEASE - if (GetArenaForAllocation() != nullptr) { - temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp); - } -#endif // !PROTOBUF_FORCE_COPY_IN_RELEASE - return temp; -} -inline ::PROTOBUF_NAMESPACE_ID::compiler::Version* CodeGeneratorRequest::unsafe_arena_release_compiler_version() { - // @@protoc_insertion_point(field_release:google.protobuf.compiler.CodeGeneratorRequest.compiler_version) - _impl_._has_bits_[0] &= ~0x00000002u; - ::PROTOBUF_NAMESPACE_ID::compiler::Version* temp = _impl_.compiler_version_; - _impl_.compiler_version_ = nullptr; - return temp; -} -inline ::PROTOBUF_NAMESPACE_ID::compiler::Version* CodeGeneratorRequest::_internal_mutable_compiler_version() { - _impl_._has_bits_[0] |= 0x00000002u; - if (_impl_.compiler_version_ == nullptr) { - auto* p = CreateMaybeMessage<::PROTOBUF_NAMESPACE_ID::compiler::Version>(GetArenaForAllocation()); - _impl_.compiler_version_ = p; - } - return _impl_.compiler_version_; -} -inline ::PROTOBUF_NAMESPACE_ID::compiler::Version* CodeGeneratorRequest::mutable_compiler_version() { - ::PROTOBUF_NAMESPACE_ID::compiler::Version* _msg = _internal_mutable_compiler_version(); - // @@protoc_insertion_point(field_mutable:google.protobuf.compiler.CodeGeneratorRequest.compiler_version) - return _msg; -} -inline void CodeGeneratorRequest::set_allocated_compiler_version(::PROTOBUF_NAMESPACE_ID::compiler::Version* compiler_version) { - ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation(); - if (message_arena == nullptr) { - delete _impl_.compiler_version_; - } - if (compiler_version) { - ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena = - ::PROTOBUF_NAMESPACE_ID::Arena::InternalGetOwningArena(compiler_version); - if (message_arena != submessage_arena) { - compiler_version = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage( - message_arena, compiler_version, submessage_arena); - } - _impl_._has_bits_[0] |= 0x00000002u; - } else { - _impl_._has_bits_[0] &= ~0x00000002u; - } - _impl_.compiler_version_ = compiler_version; - // @@protoc_insertion_point(field_set_allocated:google.protobuf.compiler.CodeGeneratorRequest.compiler_version) -} - -// ------------------------------------------------------------------- - -// CodeGeneratorResponse_File - -// optional string name = 1; -inline bool CodeGeneratorResponse_File::_internal_has_name() const { - bool value = (_impl_._has_bits_[0] & 0x00000001u) != 0; - return value; -} -inline bool CodeGeneratorResponse_File::has_name() const { - return _internal_has_name(); -} -inline void CodeGeneratorResponse_File::clear_name() { - _impl_.name_.ClearToEmpty(); - _impl_._has_bits_[0] &= ~0x00000001u; -} -inline const std::string& CodeGeneratorResponse_File::name() const { - // @@protoc_insertion_point(field_get:google.protobuf.compiler.CodeGeneratorResponse.File.name) - return _internal_name(); -} -template <typename ArgT0, typename... ArgT> -inline PROTOBUF_ALWAYS_INLINE -void CodeGeneratorResponse_File::set_name(ArgT0&& arg0, ArgT... args) { - _impl_._has_bits_[0] |= 0x00000001u; - _impl_.name_.Set(static_cast<ArgT0 &&>(arg0), args..., GetArenaForAllocation()); - // @@protoc_insertion_point(field_set:google.protobuf.compiler.CodeGeneratorResponse.File.name) -} -inline std::string* CodeGeneratorResponse_File::mutable_name() { - std::string* _s = _internal_mutable_name(); - // @@protoc_insertion_point(field_mutable:google.protobuf.compiler.CodeGeneratorResponse.File.name) - return _s; -} -inline const std::string& CodeGeneratorResponse_File::_internal_name() const { - return _impl_.name_.Get(); -} -inline void CodeGeneratorResponse_File::_internal_set_name(const std::string& value) { - _impl_._has_bits_[0] |= 0x00000001u; - _impl_.name_.Set(value, GetArenaForAllocation()); -} -inline std::string* CodeGeneratorResponse_File::_internal_mutable_name() { - _impl_._has_bits_[0] |= 0x00000001u; - return _impl_.name_.Mutable(GetArenaForAllocation()); -} -inline std::string* CodeGeneratorResponse_File::release_name() { - // @@protoc_insertion_point(field_release:google.protobuf.compiler.CodeGeneratorResponse.File.name) - if (!_internal_has_name()) { - return nullptr; - } - _impl_._has_bits_[0] &= ~0x00000001u; - auto* p = _impl_.name_.Release(); -#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING - if (_impl_.name_.IsDefault()) { - _impl_.name_.Set("", GetArenaForAllocation()); - } -#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING - return p; -} -inline void CodeGeneratorResponse_File::set_allocated_name(std::string* name) { - if (name != nullptr) { - _impl_._has_bits_[0] |= 0x00000001u; - } else { - _impl_._has_bits_[0] &= ~0x00000001u; - } - _impl_.name_.SetAllocated(name, GetArenaForAllocation()); -#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING - if (_impl_.name_.IsDefault()) { - _impl_.name_.Set("", GetArenaForAllocation()); - } -#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING - // @@protoc_insertion_point(field_set_allocated:google.protobuf.compiler.CodeGeneratorResponse.File.name) -} - -// optional string insertion_point = 2; -inline bool CodeGeneratorResponse_File::_internal_has_insertion_point() const { - bool value = (_impl_._has_bits_[0] & 0x00000002u) != 0; - return value; -} -inline bool CodeGeneratorResponse_File::has_insertion_point() const { - return _internal_has_insertion_point(); -} -inline void CodeGeneratorResponse_File::clear_insertion_point() { - _impl_.insertion_point_.ClearToEmpty(); - _impl_._has_bits_[0] &= ~0x00000002u; -} -inline const std::string& CodeGeneratorResponse_File::insertion_point() const { - // @@protoc_insertion_point(field_get:google.protobuf.compiler.CodeGeneratorResponse.File.insertion_point) - return _internal_insertion_point(); -} -template <typename ArgT0, typename... ArgT> -inline PROTOBUF_ALWAYS_INLINE -void CodeGeneratorResponse_File::set_insertion_point(ArgT0&& arg0, ArgT... args) { - _impl_._has_bits_[0] |= 0x00000002u; - _impl_.insertion_point_.Set(static_cast<ArgT0 &&>(arg0), args..., GetArenaForAllocation()); - // @@protoc_insertion_point(field_set:google.protobuf.compiler.CodeGeneratorResponse.File.insertion_point) -} -inline std::string* CodeGeneratorResponse_File::mutable_insertion_point() { - std::string* _s = _internal_mutable_insertion_point(); - // @@protoc_insertion_point(field_mutable:google.protobuf.compiler.CodeGeneratorResponse.File.insertion_point) - return _s; -} -inline const std::string& CodeGeneratorResponse_File::_internal_insertion_point() const { - return _impl_.insertion_point_.Get(); -} -inline void CodeGeneratorResponse_File::_internal_set_insertion_point(const std::string& value) { - _impl_._has_bits_[0] |= 0x00000002u; - _impl_.insertion_point_.Set(value, GetArenaForAllocation()); -} -inline std::string* CodeGeneratorResponse_File::_internal_mutable_insertion_point() { - _impl_._has_bits_[0] |= 0x00000002u; - return _impl_.insertion_point_.Mutable(GetArenaForAllocation()); -} -inline std::string* CodeGeneratorResponse_File::release_insertion_point() { - // @@protoc_insertion_point(field_release:google.protobuf.compiler.CodeGeneratorResponse.File.insertion_point) - if (!_internal_has_insertion_point()) { - return nullptr; - } - _impl_._has_bits_[0] &= ~0x00000002u; - auto* p = _impl_.insertion_point_.Release(); -#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING - if (_impl_.insertion_point_.IsDefault()) { - _impl_.insertion_point_.Set("", GetArenaForAllocation()); - } -#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING - return p; -} -inline void CodeGeneratorResponse_File::set_allocated_insertion_point(std::string* insertion_point) { - if (insertion_point != nullptr) { - _impl_._has_bits_[0] |= 0x00000002u; - } else { - _impl_._has_bits_[0] &= ~0x00000002u; - } - _impl_.insertion_point_.SetAllocated(insertion_point, GetArenaForAllocation()); -#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING - if (_impl_.insertion_point_.IsDefault()) { - _impl_.insertion_point_.Set("", GetArenaForAllocation()); - } -#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING - // @@protoc_insertion_point(field_set_allocated:google.protobuf.compiler.CodeGeneratorResponse.File.insertion_point) -} - -// optional string content = 15; -inline bool CodeGeneratorResponse_File::_internal_has_content() const { - bool value = (_impl_._has_bits_[0] & 0x00000004u) != 0; - return value; -} -inline bool CodeGeneratorResponse_File::has_content() const { - return _internal_has_content(); -} -inline void CodeGeneratorResponse_File::clear_content() { - _impl_.content_.ClearToEmpty(); - _impl_._has_bits_[0] &= ~0x00000004u; -} -inline const std::string& CodeGeneratorResponse_File::content() const { - // @@protoc_insertion_point(field_get:google.protobuf.compiler.CodeGeneratorResponse.File.content) - return _internal_content(); -} -template <typename ArgT0, typename... ArgT> -inline PROTOBUF_ALWAYS_INLINE -void CodeGeneratorResponse_File::set_content(ArgT0&& arg0, ArgT... args) { - _impl_._has_bits_[0] |= 0x00000004u; - _impl_.content_.Set(static_cast<ArgT0 &&>(arg0), args..., GetArenaForAllocation()); - // @@protoc_insertion_point(field_set:google.protobuf.compiler.CodeGeneratorResponse.File.content) -} -inline std::string* CodeGeneratorResponse_File::mutable_content() { - std::string* _s = _internal_mutable_content(); - // @@protoc_insertion_point(field_mutable:google.protobuf.compiler.CodeGeneratorResponse.File.content) - return _s; -} -inline const std::string& CodeGeneratorResponse_File::_internal_content() const { - return _impl_.content_.Get(); -} -inline void CodeGeneratorResponse_File::_internal_set_content(const std::string& value) { - _impl_._has_bits_[0] |= 0x00000004u; - _impl_.content_.Set(value, GetArenaForAllocation()); -} -inline std::string* CodeGeneratorResponse_File::_internal_mutable_content() { - _impl_._has_bits_[0] |= 0x00000004u; - return _impl_.content_.Mutable(GetArenaForAllocation()); -} -inline std::string* CodeGeneratorResponse_File::release_content() { - // @@protoc_insertion_point(field_release:google.protobuf.compiler.CodeGeneratorResponse.File.content) - if (!_internal_has_content()) { - return nullptr; - } - _impl_._has_bits_[0] &= ~0x00000004u; - auto* p = _impl_.content_.Release(); -#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING - if (_impl_.content_.IsDefault()) { - _impl_.content_.Set("", GetArenaForAllocation()); - } -#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING - return p; -} -inline void CodeGeneratorResponse_File::set_allocated_content(std::string* content) { - if (content != nullptr) { - _impl_._has_bits_[0] |= 0x00000004u; - } else { - _impl_._has_bits_[0] &= ~0x00000004u; - } - _impl_.content_.SetAllocated(content, GetArenaForAllocation()); -#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING - if (_impl_.content_.IsDefault()) { - _impl_.content_.Set("", GetArenaForAllocation()); - } -#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING - // @@protoc_insertion_point(field_set_allocated:google.protobuf.compiler.CodeGeneratorResponse.File.content) -} - -// optional .google.protobuf.GeneratedCodeInfo generated_code_info = 16; -inline bool CodeGeneratorResponse_File::_internal_has_generated_code_info() const { - bool value = (_impl_._has_bits_[0] & 0x00000008u) != 0; - PROTOBUF_ASSUME(!value || _impl_.generated_code_info_ != nullptr); - return value; -} -inline bool CodeGeneratorResponse_File::has_generated_code_info() const { - return _internal_has_generated_code_info(); -} -inline const ::PROTOBUF_NAMESPACE_ID::GeneratedCodeInfo& CodeGeneratorResponse_File::_internal_generated_code_info() const { - const ::PROTOBUF_NAMESPACE_ID::GeneratedCodeInfo* p = _impl_.generated_code_info_; - return p != nullptr ? *p : reinterpret_cast<const ::PROTOBUF_NAMESPACE_ID::GeneratedCodeInfo&>( - ::PROTOBUF_NAMESPACE_ID::_GeneratedCodeInfo_default_instance_); -} -inline const ::PROTOBUF_NAMESPACE_ID::GeneratedCodeInfo& CodeGeneratorResponse_File::generated_code_info() const { - // @@protoc_insertion_point(field_get:google.protobuf.compiler.CodeGeneratorResponse.File.generated_code_info) - return _internal_generated_code_info(); -} -inline void CodeGeneratorResponse_File::unsafe_arena_set_allocated_generated_code_info( - ::PROTOBUF_NAMESPACE_ID::GeneratedCodeInfo* generated_code_info) { - if (GetArenaForAllocation() == nullptr) { - delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(_impl_.generated_code_info_); - } - _impl_.generated_code_info_ = generated_code_info; - if (generated_code_info) { - _impl_._has_bits_[0] |= 0x00000008u; - } else { - _impl_._has_bits_[0] &= ~0x00000008u; - } - // @@protoc_insertion_point(field_unsafe_arena_set_allocated:google.protobuf.compiler.CodeGeneratorResponse.File.generated_code_info) -} -inline ::PROTOBUF_NAMESPACE_ID::GeneratedCodeInfo* CodeGeneratorResponse_File::release_generated_code_info() { - _impl_._has_bits_[0] &= ~0x00000008u; - ::PROTOBUF_NAMESPACE_ID::GeneratedCodeInfo* temp = _impl_.generated_code_info_; - _impl_.generated_code_info_ = nullptr; -#ifdef PROTOBUF_FORCE_COPY_IN_RELEASE - auto* old = reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(temp); - temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp); - if (GetArenaForAllocation() == nullptr) { delete old; } -#else // PROTOBUF_FORCE_COPY_IN_RELEASE - if (GetArenaForAllocation() != nullptr) { - temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp); - } -#endif // !PROTOBUF_FORCE_COPY_IN_RELEASE - return temp; -} -inline ::PROTOBUF_NAMESPACE_ID::GeneratedCodeInfo* CodeGeneratorResponse_File::unsafe_arena_release_generated_code_info() { - // @@protoc_insertion_point(field_release:google.protobuf.compiler.CodeGeneratorResponse.File.generated_code_info) - _impl_._has_bits_[0] &= ~0x00000008u; - ::PROTOBUF_NAMESPACE_ID::GeneratedCodeInfo* temp = _impl_.generated_code_info_; - _impl_.generated_code_info_ = nullptr; - return temp; -} -inline ::PROTOBUF_NAMESPACE_ID::GeneratedCodeInfo* CodeGeneratorResponse_File::_internal_mutable_generated_code_info() { - _impl_._has_bits_[0] |= 0x00000008u; - if (_impl_.generated_code_info_ == nullptr) { - auto* p = CreateMaybeMessage<::PROTOBUF_NAMESPACE_ID::GeneratedCodeInfo>(GetArenaForAllocation()); - _impl_.generated_code_info_ = p; - } - return _impl_.generated_code_info_; -} -inline ::PROTOBUF_NAMESPACE_ID::GeneratedCodeInfo* CodeGeneratorResponse_File::mutable_generated_code_info() { - ::PROTOBUF_NAMESPACE_ID::GeneratedCodeInfo* _msg = _internal_mutable_generated_code_info(); - // @@protoc_insertion_point(field_mutable:google.protobuf.compiler.CodeGeneratorResponse.File.generated_code_info) - return _msg; -} -inline void CodeGeneratorResponse_File::set_allocated_generated_code_info(::PROTOBUF_NAMESPACE_ID::GeneratedCodeInfo* generated_code_info) { - ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation(); - if (message_arena == nullptr) { - delete reinterpret_cast< ::PROTOBUF_NAMESPACE_ID::MessageLite*>(_impl_.generated_code_info_); - } - if (generated_code_info) { - ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena = - ::PROTOBUF_NAMESPACE_ID::Arena::InternalGetOwningArena( - reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(generated_code_info)); - if (message_arena != submessage_arena) { - generated_code_info = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage( - message_arena, generated_code_info, submessage_arena); - } - _impl_._has_bits_[0] |= 0x00000008u; - } else { - _impl_._has_bits_[0] &= ~0x00000008u; - } - _impl_.generated_code_info_ = generated_code_info; - // @@protoc_insertion_point(field_set_allocated:google.protobuf.compiler.CodeGeneratorResponse.File.generated_code_info) -} - -// ------------------------------------------------------------------- - -// CodeGeneratorResponse - -// optional string error = 1; -inline bool CodeGeneratorResponse::_internal_has_error() const { - bool value = (_impl_._has_bits_[0] & 0x00000001u) != 0; - return value; -} -inline bool CodeGeneratorResponse::has_error() const { - return _internal_has_error(); -} -inline void CodeGeneratorResponse::clear_error() { - _impl_.error_.ClearToEmpty(); - _impl_._has_bits_[0] &= ~0x00000001u; -} -inline const std::string& CodeGeneratorResponse::error() const { - // @@protoc_insertion_point(field_get:google.protobuf.compiler.CodeGeneratorResponse.error) - return _internal_error(); -} -template <typename ArgT0, typename... ArgT> -inline PROTOBUF_ALWAYS_INLINE -void CodeGeneratorResponse::set_error(ArgT0&& arg0, ArgT... args) { - _impl_._has_bits_[0] |= 0x00000001u; - _impl_.error_.Set(static_cast<ArgT0 &&>(arg0), args..., GetArenaForAllocation()); - // @@protoc_insertion_point(field_set:google.protobuf.compiler.CodeGeneratorResponse.error) -} -inline std::string* CodeGeneratorResponse::mutable_error() { - std::string* _s = _internal_mutable_error(); - // @@protoc_insertion_point(field_mutable:google.protobuf.compiler.CodeGeneratorResponse.error) - return _s; -} -inline const std::string& CodeGeneratorResponse::_internal_error() const { - return _impl_.error_.Get(); -} -inline void CodeGeneratorResponse::_internal_set_error(const std::string& value) { - _impl_._has_bits_[0] |= 0x00000001u; - _impl_.error_.Set(value, GetArenaForAllocation()); -} -inline std::string* CodeGeneratorResponse::_internal_mutable_error() { - _impl_._has_bits_[0] |= 0x00000001u; - return _impl_.error_.Mutable(GetArenaForAllocation()); -} -inline std::string* CodeGeneratorResponse::release_error() { - // @@protoc_insertion_point(field_release:google.protobuf.compiler.CodeGeneratorResponse.error) - if (!_internal_has_error()) { - return nullptr; - } - _impl_._has_bits_[0] &= ~0x00000001u; - auto* p = _impl_.error_.Release(); -#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING - if (_impl_.error_.IsDefault()) { - _impl_.error_.Set("", GetArenaForAllocation()); - } -#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING - return p; -} -inline void CodeGeneratorResponse::set_allocated_error(std::string* error) { - if (error != nullptr) { - _impl_._has_bits_[0] |= 0x00000001u; - } else { - _impl_._has_bits_[0] &= ~0x00000001u; - } - _impl_.error_.SetAllocated(error, GetArenaForAllocation()); -#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING - if (_impl_.error_.IsDefault()) { - _impl_.error_.Set("", GetArenaForAllocation()); - } -#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING - // @@protoc_insertion_point(field_set_allocated:google.protobuf.compiler.CodeGeneratorResponse.error) -} - -// optional uint64 supported_features = 2; -inline bool CodeGeneratorResponse::_internal_has_supported_features() const { - bool value = (_impl_._has_bits_[0] & 0x00000002u) != 0; - return value; -} -inline bool CodeGeneratorResponse::has_supported_features() const { - return _internal_has_supported_features(); -} -inline void CodeGeneratorResponse::clear_supported_features() { - _impl_.supported_features_ = uint64_t{0u}; - _impl_._has_bits_[0] &= ~0x00000002u; -} -inline uint64_t CodeGeneratorResponse::_internal_supported_features() const { - return _impl_.supported_features_; -} -inline uint64_t CodeGeneratorResponse::supported_features() const { - // @@protoc_insertion_point(field_get:google.protobuf.compiler.CodeGeneratorResponse.supported_features) - return _internal_supported_features(); -} -inline void CodeGeneratorResponse::_internal_set_supported_features(uint64_t value) { - _impl_._has_bits_[0] |= 0x00000002u; - _impl_.supported_features_ = value; -} -inline void CodeGeneratorResponse::set_supported_features(uint64_t value) { - _internal_set_supported_features(value); - // @@protoc_insertion_point(field_set:google.protobuf.compiler.CodeGeneratorResponse.supported_features) -} - -// repeated .google.protobuf.compiler.CodeGeneratorResponse.File file = 15; -inline int CodeGeneratorResponse::_internal_file_size() const { - return _impl_.file_.size(); -} -inline int CodeGeneratorResponse::file_size() const { - return _internal_file_size(); -} -inline void CodeGeneratorResponse::clear_file() { - _impl_.file_.Clear(); -} -inline ::PROTOBUF_NAMESPACE_ID::compiler::CodeGeneratorResponse_File* CodeGeneratorResponse::mutable_file(int index) { - // @@protoc_insertion_point(field_mutable:google.protobuf.compiler.CodeGeneratorResponse.file) - return _impl_.file_.Mutable(index); -} -inline ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::compiler::CodeGeneratorResponse_File >* -CodeGeneratorResponse::mutable_file() { - // @@protoc_insertion_point(field_mutable_list:google.protobuf.compiler.CodeGeneratorResponse.file) - return &_impl_.file_; -} -inline const ::PROTOBUF_NAMESPACE_ID::compiler::CodeGeneratorResponse_File& CodeGeneratorResponse::_internal_file(int index) const { - return _impl_.file_.Get(index); -} -inline const ::PROTOBUF_NAMESPACE_ID::compiler::CodeGeneratorResponse_File& CodeGeneratorResponse::file(int index) const { - // @@protoc_insertion_point(field_get:google.protobuf.compiler.CodeGeneratorResponse.file) - return _internal_file(index); -} -inline ::PROTOBUF_NAMESPACE_ID::compiler::CodeGeneratorResponse_File* CodeGeneratorResponse::_internal_add_file() { - return _impl_.file_.Add(); -} -inline ::PROTOBUF_NAMESPACE_ID::compiler::CodeGeneratorResponse_File* CodeGeneratorResponse::add_file() { - ::PROTOBUF_NAMESPACE_ID::compiler::CodeGeneratorResponse_File* _add = _internal_add_file(); - // @@protoc_insertion_point(field_add:google.protobuf.compiler.CodeGeneratorResponse.file) - return _add; -} -inline const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::compiler::CodeGeneratorResponse_File >& -CodeGeneratorResponse::file() const { - // @@protoc_insertion_point(field_list:google.protobuf.compiler.CodeGeneratorResponse.file) - return _impl_.file_; -} - -#ifdef __GNUC__ - #pragma GCC diagnostic pop -#endif // __GNUC__ -// ------------------------------------------------------------------- - -// ------------------------------------------------------------------- - -// ------------------------------------------------------------------- - - -// @@protoc_insertion_point(namespace_scope) - -} // namespace compiler -PROTOBUF_NAMESPACE_CLOSE - -PROTOBUF_NAMESPACE_OPEN - -template <> struct is_proto_enum< ::PROTOBUF_NAMESPACE_ID::compiler::CodeGeneratorResponse_Feature> : ::std::true_type {}; -template <> -inline const EnumDescriptor* GetEnumDescriptor< ::PROTOBUF_NAMESPACE_ID::compiler::CodeGeneratorResponse_Feature>() { - return ::PROTOBUF_NAMESPACE_ID::compiler::CodeGeneratorResponse_Feature_descriptor(); -} - -PROTOBUF_NAMESPACE_CLOSE - -// @@protoc_insertion_point(global_scope) - -#include <google/protobuf/port_undef.inc> -#endif // GOOGLE_PROTOBUF_INCLUDED_GOOGLE_PROTOBUF_INCLUDED_google_2fprotobuf_2fcompiler_2fplugin_2eproto diff --git a/include/google/protobuf/compiler/plugin.proto b/include/google/protobuf/compiler/plugin.proto deleted file mode 100644 index 9242aacc5b..0000000000 --- a/include/google/protobuf/compiler/plugin.proto +++ /dev/null @@ -1,183 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// 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 -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -// Author: kenton@google.com (Kenton Varda) -// -// WARNING: The plugin interface is currently EXPERIMENTAL and is subject to -// change. -// -// protoc (aka the Protocol Compiler) can be extended via plugins. A plugin is -// just a program that reads a CodeGeneratorRequest from stdin and writes a -// CodeGeneratorResponse to stdout. -// -// Plugins written using C++ can use google/protobuf/compiler/plugin.h instead -// of dealing with the raw protocol defined here. -// -// A plugin executable needs only to be placed somewhere in the path. The -// plugin should be named "protoc-gen-$NAME", and will then be used when the -// flag "--${NAME}_out" is passed to protoc. - -syntax = "proto2"; - -package google.protobuf.compiler; -option java_package = "com.google.protobuf.compiler"; -option java_outer_classname = "PluginProtos"; - -option go_package = "google.golang.org/protobuf/types/pluginpb"; - -import "google/protobuf/descriptor.proto"; - -// The version number of protocol compiler. -message Version { - optional int32 major = 1; - optional int32 minor = 2; - optional int32 patch = 3; - // A suffix for alpha, beta or rc release, e.g., "alpha-1", "rc2". It should - // be empty for mainline stable releases. - optional string suffix = 4; -} - -// An encoded CodeGeneratorRequest is written to the plugin's stdin. -message CodeGeneratorRequest { - // The .proto files that were explicitly listed on the command-line. The - // code generator should generate code only for these files. Each file's - // descriptor will be included in proto_file, below. - repeated string file_to_generate = 1; - - // The generator parameter passed on the command-line. - optional string parameter = 2; - - // FileDescriptorProtos for all files in files_to_generate and everything - // they import. The files will appear in topological order, so each file - // appears before any file that imports it. - // - // protoc guarantees that all proto_files will be written after - // the fields above, even though this is not technically guaranteed by the - // protobuf wire format. This theoretically could allow a plugin to stream - // in the FileDescriptorProtos and handle them one by one rather than read - // the entire set into memory at once. However, as of this writing, this - // is not similarly optimized on protoc's end -- it will store all fields in - // memory at once before sending them to the plugin. - // - // Type names of fields and extensions in the FileDescriptorProto are always - // fully qualified. - repeated FileDescriptorProto proto_file = 15; - - // The version number of protocol compiler. - optional Version compiler_version = 3; - -} - -// The plugin writes an encoded CodeGeneratorResponse to stdout. -message CodeGeneratorResponse { - // Error message. If non-empty, code generation failed. The plugin process - // should exit with status code zero even if it reports an error in this way. - // - // This should be used to indicate errors in .proto files which prevent the - // code generator from generating correct code. Errors which indicate a - // problem in protoc itself -- such as the input CodeGeneratorRequest being - // unparseable -- should be reported by writing a message to stderr and - // exiting with a non-zero status code. - optional string error = 1; - - // A bitmask of supported features that the code generator supports. - // This is a bitwise "or" of values from the Feature enum. - optional uint64 supported_features = 2; - - // Sync with code_generator.h. - enum Feature { - FEATURE_NONE = 0; - FEATURE_PROTO3_OPTIONAL = 1; - } - - // Represents a single generated file. - message File { - // The file name, relative to the output directory. The name must not - // contain "." or ".." components and must be relative, not be absolute (so, - // the file cannot lie outside the output directory). "/" must be used as - // the path separator, not "\". - // - // If the name is omitted, the content will be appended to the previous - // file. This allows the generator to break large files into small chunks, - // and allows the generated text to be streamed back to protoc so that large - // files need not reside completely in memory at one time. Note that as of - // this writing protoc does not optimize for this -- it will read the entire - // CodeGeneratorResponse before writing files to disk. - optional string name = 1; - - // If non-empty, indicates that the named file should already exist, and the - // content here is to be inserted into that file at a defined insertion - // point. This feature allows a code generator to extend the output - // produced by another code generator. The original generator may provide - // insertion points by placing special annotations in the file that look - // like: - // @@protoc_insertion_point(NAME) - // The annotation can have arbitrary text before and after it on the line, - // which allows it to be placed in a comment. NAME should be replaced with - // an identifier naming the point -- this is what other generators will use - // as the insertion_point. Code inserted at this point will be placed - // immediately above the line containing the insertion point (thus multiple - // insertions to the same point will come out in the order they were added). - // The double-@ is intended to make it unlikely that the generated code - // could contain things that look like insertion points by accident. - // - // For example, the C++ code generator places the following line in the - // .pb.h files that it generates: - // // @@protoc_insertion_point(namespace_scope) - // This line appears within the scope of the file's package namespace, but - // outside of any particular class. Another plugin can then specify the - // insertion_point "namespace_scope" to generate additional classes or - // other declarations that should be placed in this scope. - // - // Note that if the line containing the insertion point begins with - // whitespace, the same whitespace will be added to every line of the - // inserted text. This is useful for languages like Python, where - // indentation matters. In these languages, the insertion point comment - // should be indented the same amount as any inserted code will need to be - // in order to work correctly in that context. - // - // The code generator that generates the initial file and the one which - // inserts into it must both run as part of a single invocation of protoc. - // Code generators are executed in the order in which they appear on the - // command line. - // - // If |insertion_point| is present, |name| must also be present. - optional string insertion_point = 2; - - // The file contents. - optional string content = 15; - - // Information describing the file content being inserted. If an insertion - // point is used, this information will be appropriately offset and inserted - // into the code generation metadata for the generated files. - optional GeneratedCodeInfo generated_code_info = 16; - } - repeated File file = 15; -} diff --git a/include/google/protobuf/compiler/python/generator.h b/include/google/protobuf/compiler/python/generator.h deleted file mode 100644 index f1fecbc735..0000000000 --- a/include/google/protobuf/compiler/python/generator.h +++ /dev/null @@ -1,185 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// 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 -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -// Author: robinson@google.com (Will Robinson) -// -// Generates Python code for a given .proto file. - -#ifndef GOOGLE_PROTOBUF_COMPILER_PYTHON_GENERATOR_H__ -#define GOOGLE_PROTOBUF_COMPILER_PYTHON_GENERATOR_H__ - -#include <string> - -#include <google/protobuf/stubs/mutex.h> -#include <google/protobuf/compiler/code_generator.h> - -// Must be included last. -#include <google/protobuf/port_def.inc> - -namespace google { -namespace protobuf { - -class Descriptor; -class EnumDescriptor; -class EnumValueDescriptor; -class FieldDescriptor; -class OneofDescriptor; -class ServiceDescriptor; - -namespace io { -class Printer; -} - -namespace compiler { -namespace python { - -// CodeGenerator implementation for generated Python protocol buffer classes. -// If you create your own protocol compiler binary and you want it to support -// Python output, you can do so by registering an instance of this -// CodeGenerator with the CommandLineInterface in your main() function. -class PROTOC_EXPORT Generator : public CodeGenerator { - public: - Generator(); - ~Generator() override; - - // CodeGenerator methods. - bool Generate(const FileDescriptor* file, const std::string& parameter, - GeneratorContext* generator_context, - std::string* error) const override; - - uint64_t GetSupportedFeatures() const override; - - private: - void PrintImports() const; - void PrintFileDescriptor() const; - void PrintAllNestedEnumsInFile() const; - void PrintNestedEnums(const Descriptor& descriptor) const; - void PrintEnum(const EnumDescriptor& enum_descriptor) const; - - void PrintFieldDescriptor(const FieldDescriptor& field, - bool is_extension) const; - void PrintFieldDescriptorsInDescriptor( - const Descriptor& message_descriptor, bool is_extension, - const std::string& list_variable_name, int (Descriptor::*CountFn)() const, - const FieldDescriptor* (Descriptor::*GetterFn)(int)const) const; - void PrintFieldsInDescriptor(const Descriptor& message_descriptor) const; - void PrintExtensionsInDescriptor(const Descriptor& message_descriptor) const; - void PrintMessageDescriptors() const; - void PrintDescriptor(const Descriptor& message_descriptor) const; - void PrintNestedDescriptors(const Descriptor& containing_descriptor) const; - - void PrintMessages() const; - void PrintMessage(const Descriptor& message_descriptor, - const std::string& prefix, - std::vector<std::string>* to_register, - bool is_nested) const; - void PrintNestedMessages(const Descriptor& containing_descriptor, - const std::string& prefix, - std::vector<std::string>* to_register) const; - - void FixForeignFieldsInDescriptors() const; - void FixForeignFieldsInDescriptor( - const Descriptor& descriptor, - const Descriptor* containing_descriptor) const; - void FixForeignFieldsInField(const Descriptor* containing_type, - const FieldDescriptor& field, - const std::string& python_dict_name) const; - void AddMessageToFileDescriptor(const Descriptor& descriptor) const; - void AddEnumToFileDescriptor(const EnumDescriptor& descriptor) const; - void AddExtensionToFileDescriptor(const FieldDescriptor& descriptor) const; - void AddServiceToFileDescriptor(const ServiceDescriptor& descriptor) const; - std::string FieldReferencingExpression( - const Descriptor* containing_type, const FieldDescriptor& field, - const std::string& python_dict_name) const; - template <typename DescriptorT> - void FixContainingTypeInDescriptor( - const DescriptorT& descriptor, - const Descriptor* containing_descriptor) const; - - void FixForeignFieldsInExtensions() const; - void FixForeignFieldsInExtension( - const FieldDescriptor& extension_field) const; - void FixForeignFieldsInNestedExtensions(const Descriptor& descriptor) const; - - void PrintServices() const; - void PrintServiceDescriptors() const; - void PrintServiceDescriptor(const ServiceDescriptor& descriptor) const; - void PrintServiceClass(const ServiceDescriptor& descriptor) const; - void PrintServiceStub(const ServiceDescriptor& descriptor) const; - void PrintDescriptorKeyAndModuleName( - const ServiceDescriptor& descriptor) const; - - void PrintEnumValueDescriptor(const EnumValueDescriptor& descriptor) const; - std::string OptionsValue(const std::string& serialized_options) const; - bool GeneratingDescriptorProto() const; - - template <typename DescriptorT> - std::string ModuleLevelDescriptorName(const DescriptorT& descriptor) const; - std::string ModuleLevelMessageName(const Descriptor& descriptor) const; - std::string ModuleLevelServiceDescriptorName( - const ServiceDescriptor& descriptor) const; - - template <typename DescriptorT, typename DescriptorProtoT> - void PrintSerializedPbInterval(const DescriptorT& descriptor, - DescriptorProtoT& proto, - const std::string& name) const; - - void FixAllDescriptorOptions() const; - void FixOptionsForField(const FieldDescriptor& field) const; - void FixOptionsForOneof(const OneofDescriptor& oneof) const; - void FixOptionsForEnum(const EnumDescriptor& descriptor) const; - void FixOptionsForService(const ServiceDescriptor& descriptor) const; - void FixOptionsForMessage(const Descriptor& descriptor) const; - - void SetSerializedPbInterval() const; - void SetMessagePbInterval(const Descriptor& descriptor) const; - - void CopyPublicDependenciesAliases(const std::string& copy_from, - const FileDescriptor* file) const; - - // Very coarse-grained lock to ensure that Generate() is reentrant. - // Guards file_, printer_ and file_descriptor_serialized_. - mutable Mutex mutex_; - mutable const FileDescriptor* file_; // Set in Generate(). Under mutex_. - mutable std::string file_descriptor_serialized_; - mutable io::Printer* printer_; // Set in Generate(). Under mutex_. - mutable bool pure_python_workable_; - - GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(Generator); -}; - -} // namespace python -} // namespace compiler -} // namespace protobuf -} // namespace google - -#include <google/protobuf/port_undef.inc> - -#endif // GOOGLE_PROTOBUF_COMPILER_PYTHON_GENERATOR_H__ diff --git a/include/google/protobuf/compiler/python/pyi_generator.h b/include/google/protobuf/compiler/python/pyi_generator.h deleted file mode 100644 index 9611ed43d1..0000000000 --- a/include/google/protobuf/compiler/python/pyi_generator.h +++ /dev/null @@ -1,120 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// 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 -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -// Author: jieluo@google.com (Jie Luo) -// -// Generates Python stub (.pyi) for a given .proto file. - -#ifndef GOOGLE_PROTOBUF_COMPILER_PYTHON_PYI_GENERATOR_H__ -#define GOOGLE_PROTOBUF_COMPILER_PYTHON_PYI_GENERATOR_H__ - -#include <map> -#include <set> -#include <string> - -#include <google/protobuf/stubs/mutex.h> -#include <google/protobuf/compiler/code_generator.h> - -// Must be included last. -#include <google/protobuf/port_def.inc> - -namespace google { -namespace protobuf { -class Descriptor; -class EnumDescriptor; -class FieldDescriptor; -class MethodDescriptor; -class ServiceDescriptor; - -namespace io { -class Printer; -} - -namespace compiler { -namespace python { - -class PROTOC_EXPORT PyiGenerator : public google::protobuf::compiler::CodeGenerator { - public: - PyiGenerator(); - ~PyiGenerator() override; - - // CodeGenerator methods. - uint64_t GetSupportedFeatures() const override { - // Code generators must explicitly support proto3 optional. - return CodeGenerator::FEATURE_PROTO3_OPTIONAL; - } - bool Generate(const FileDescriptor* file, const std::string& parameter, - GeneratorContext* generator_context, - std::string* error) const override; - - private: - void PrintImportForDescriptor(const FileDescriptor& desc, - std::map<std::string, std::string>* import_map, - std::set<std::string>* seen_aliases) const; - void PrintImports(std::map<std::string, std::string>* item_map, - std::map<std::string, std::string>* import_map) const; - void PrintEnum(const EnumDescriptor& enum_descriptor) const; - void AddEnumValue(const EnumDescriptor& enum_descriptor, - std::map<std::string, std::string>* item_map, - const std::map<std::string, std::string>& import_map) const; - void PrintTopLevelEnums() const; - template <typename DescriptorT> - void AddExtensions(const DescriptorT& descriptor, - std::map<std::string, std::string>* item_map) const; - void PrintMessages( - const std::map<std::string, std::string>& import_map) const; - void PrintMessage(const Descriptor& message_descriptor, bool is_nested, - const std::map<std::string, std::string>& import_map) const; - void PrintServices() const; - void PrintItemMap(const std::map<std::string, std::string>& item_map) const; - std::string GetFieldType( - const FieldDescriptor& field_des, const Descriptor& containing_des, - const std::map<std::string, std::string>& import_map) const; - template <typename DescriptorT> - std::string ModuleLevelName( - const DescriptorT& descriptor, - const std::map<std::string, std::string>& import_map) const; - - // Very coarse-grained lock to ensure that Generate() is reentrant. - // Guards file_ and printer_. - mutable Mutex mutex_; - mutable const FileDescriptor* file_; // Set in Generate(). Under mutex_. - mutable io::Printer* printer_; // Set in Generate(). Under mutex_. - GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(PyiGenerator); -}; - -} // namespace python -} // namespace compiler -} // namespace protobuf -} // namespace google - -#include <google/protobuf/port_undef.inc> - -#endif // GOOGLE_PROTOBUF_COMPILER_PYTHON_PYI_GENERATOR_H__ diff --git a/include/google/protobuf/compiler/python/python_generator.h b/include/google/protobuf/compiler/python/python_generator.h deleted file mode 100644 index 21d48cd9a0..0000000000 --- a/include/google/protobuf/compiler/python/python_generator.h +++ /dev/null @@ -1,6 +0,0 @@ -#ifndef GOOGLE_PROTOBUF_COMPILER_PYTHON_PYTHON_GENERATOR_H_ -#define GOOGLE_PROTOBUF_COMPILER_PYTHON_PYTHON_GENERATOR_H_ - -#include <google/protobuf/compiler/python/generator.h> - -#endif // GOOGLE_PROTOBUF_COMPILER_PYTHON_PYTHON_GENERATOR_H_ diff --git a/include/google/protobuf/compiler/ruby/ruby_generator.h b/include/google/protobuf/compiler/ruby/ruby_generator.h deleted file mode 100644 index 647bb83606..0000000000 --- a/include/google/protobuf/compiler/ruby/ruby_generator.h +++ /dev/null @@ -1,67 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// 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 -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -// Generates Ruby code for a given .proto file. - -#ifndef GOOGLE_PROTOBUF_COMPILER_RUBY_GENERATOR_H__ -#define GOOGLE_PROTOBUF_COMPILER_RUBY_GENERATOR_H__ - -#include <string> - -#include <google/protobuf/compiler/code_generator.h> - -#include <google/protobuf/port_def.inc> - -namespace google { -namespace protobuf { -namespace compiler { -namespace ruby { - -// CodeGenerator implementation for generated Ruby protocol buffer classes. -// If you create your own protocol compiler binary and you want it to support -// Ruby output, you can do so by registering an instance of this -// CodeGenerator with the CommandLineInterface in your main() function. -class PROTOC_EXPORT Generator : public CodeGenerator { - bool Generate(const FileDescriptor* file, const std::string& parameter, - GeneratorContext* generator_context, - std::string* error) const override; - uint64_t GetSupportedFeatures() const override { - return FEATURE_PROTO3_OPTIONAL; - } -}; - -} // namespace ruby -} // namespace compiler -} // namespace protobuf -} // namespace google - -#include <google/protobuf/port_undef.inc> - -#endif // GOOGLE_PROTOBUF_COMPILER_RUBY_GENERATOR_H__ diff --git a/include/google/protobuf/descriptor.h b/include/google/protobuf/descriptor.h deleted file mode 100644 index 1b8728ec63..0000000000 --- a/include/google/protobuf/descriptor.h +++ /dev/null @@ -1,2440 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// 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 -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -// Author: kenton@google.com (Kenton Varda) -// Based on original Protocol Buffers design by -// Sanjay Ghemawat, Jeff Dean, and others. -// -// This file contains classes which describe a type of protocol message. -// You can use a message's descriptor to learn at runtime what fields -// it contains and what the types of those fields are. The Message -// interface also allows you to dynamically access and modify individual -// fields by passing the FieldDescriptor of the field you are interested -// in. -// -// Most users will not care about descriptors, because they will write -// code specific to certain protocol types and will simply use the classes -// generated by the protocol compiler directly. Advanced users who want -// to operate on arbitrary types (not known at compile time) may want to -// read descriptors in order to learn about the contents of a message. -// A very small number of users will want to construct their own -// Descriptors, either because they are implementing Message manually or -// because they are writing something like the protocol compiler. -// -// For an example of how you might use descriptors, see the code example -// at the top of message.h. - -#ifndef GOOGLE_PROTOBUF_DESCRIPTOR_H__ -#define GOOGLE_PROTOBUF_DESCRIPTOR_H__ - - -#include <atomic> -#include <map> -#include <memory> -#include <set> -#include <string> -#include <vector> - -#include <google/protobuf/stubs/common.h> -#include <google/protobuf/stubs/logging.h> -#include <google/protobuf/stubs/mutex.h> -#include <google/protobuf/stubs/once.h> -#include <google/protobuf/port.h> - -// Must be included last. -#include <google/protobuf/port_def.inc> - -// TYPE_BOOL is defined in the MacOS's ConditionalMacros.h. -#ifdef TYPE_BOOL -#undef TYPE_BOOL -#endif // TYPE_BOOL - -#ifdef SWIG -#define PROTOBUF_EXPORT -#endif - - -namespace google { -namespace protobuf { - -// Defined in this file. -class Descriptor; -class FieldDescriptor; -class OneofDescriptor; -class EnumDescriptor; -class EnumValueDescriptor; -class ServiceDescriptor; -class MethodDescriptor; -class FileDescriptor; -class DescriptorDatabase; -class DescriptorPool; - -// Defined in descriptor.proto -class DescriptorProto; -class DescriptorProto_ExtensionRange; -class FieldDescriptorProto; -class OneofDescriptorProto; -class EnumDescriptorProto; -class EnumValueDescriptorProto; -class ServiceDescriptorProto; -class MethodDescriptorProto; -class FileDescriptorProto; -class MessageOptions; -class FieldOptions; -class OneofOptions; -class EnumOptions; -class EnumValueOptions; -class ExtensionRangeOptions; -class ServiceOptions; -class MethodOptions; -class FileOptions; -class UninterpretedOption; -class SourceCodeInfo; - -// Defined in message.h -class Message; -class Reflection; - -// Defined in descriptor.cc -class DescriptorBuilder; -class FileDescriptorTables; -class Symbol; - -// Defined in unknown_field_set.h. -class UnknownField; - -// Defined in command_line_interface.cc -namespace compiler { -class CommandLineInterface; -namespace cpp { -// Defined in helpers.h -class Formatter; -} // namespace cpp -} // namespace compiler - -namespace descriptor_unittest { -class DescriptorTest; -} // namespace descriptor_unittest - -// Defined in printer.h -namespace io { -class Printer; -} // namespace io - -// NB, all indices are zero-based. -struct SourceLocation { - int start_line; - int end_line; - int start_column; - int end_column; - - // Doc comments found at the source location. - // See the comments in SourceCodeInfo.Location (descriptor.proto) for details. - std::string leading_comments; - std::string trailing_comments; - std::vector<std::string> leading_detached_comments; -}; - -// Options when generating machine-parsable output from a descriptor with -// DebugString(). -struct DebugStringOptions { - // include original user comments as recorded in SourceLocation entries. N.B. - // that this must be |false| by default: several other pieces of code (for - // example, the C++ code generation for fields in the proto compiler) rely on - // DebugString() output being unobstructed by user comments. - bool include_comments; - // If true, elide the braced body in the debug string. - bool elide_group_body; - bool elide_oneof_body; - - DebugStringOptions() - : include_comments(false), - elide_group_body(false), - elide_oneof_body(false) { - } -}; - -// A class to handle the simplest cases of a lazily linked descriptor -// for a message type that isn't built at the time of cross linking, -// which is needed when a pool has lazily_build_dependencies_ set. -// Must be instantiated as mutable in a descriptor. -namespace internal { - -// The classes in this file represent a significant memory footprint for the -// library. We make sure we are not accidentally making them larger by -// hardcoding the struct size for a specific platform. Use as: -// -// PROTOBUF_INTERNAL_CHECK_CLASS_SIZE(type, expected_size_in_x84-64); -// - -#if !defined(PROTOBUF_INTERNAL_CHECK_CLASS_SIZE) -#define PROTOBUF_INTERNAL_CHECK_CLASS_SIZE(t, expected) -#endif - -class FlatAllocator; - -class PROTOBUF_EXPORT LazyDescriptor { - public: - // Init function to be called at init time of a descriptor containing - // a LazyDescriptor. - void Init() { - descriptor_ = nullptr; - once_ = nullptr; - } - - // Sets the value of the descriptor if it is known during the descriptor - // building process. Not thread safe, should only be called during the - // descriptor build process. Should not be called after SetLazy has been - // called. - void Set(const Descriptor* descriptor); - - // Sets the information needed to lazily cross link the descriptor at a later - // time, SetLazy is not thread safe, should be called only once at descriptor - // build time if the symbol wasn't found and building of the file containing - // that type is delayed because lazily_build_dependencies_ is set on the pool. - // Should not be called after Set() has been called. - void SetLazy(StringPiece name, const FileDescriptor* file); - - // Returns the current value of the descriptor, thread-safe. If SetLazy(...) - // has been called, will do a one-time cross link of the type specified, - // building the descriptor file that contains the type if necessary. - inline const Descriptor* Get(const ServiceDescriptor* service) { - Once(service); - return descriptor_; - } - - private: - void Once(const ServiceDescriptor* service); - - const Descriptor* descriptor_; - // The once_ flag is followed by a NUL terminated string for the type name. - internal::once_flag* once_; -}; - -class PROTOBUF_EXPORT SymbolBase { - private: - friend class google::protobuf::Symbol; - uint8_t symbol_type_; -}; - -// Some types have more than one SymbolBase because they have multiple -// identities in the table. We can't have duplicate direct bases, so we use this -// intermediate base to do so. -// See BuildEnumValue for details. -template <int N> -class PROTOBUF_EXPORT SymbolBaseN : public SymbolBase {}; - -} // namespace internal - -// Describes a type of protocol message, or a particular group within a -// message. To obtain the Descriptor for a given message object, call -// Message::GetDescriptor(). Generated message classes also have a -// static method called descriptor() which returns the type's descriptor. -// Use DescriptorPool to construct your own descriptors. -class PROTOBUF_EXPORT Descriptor : private internal::SymbolBase { - public: - typedef DescriptorProto Proto; - - // The name of the message type, not including its scope. - const std::string& name() const; - - // The fully-qualified name of the message type, scope delimited by - // periods. For example, message type "Foo" which is declared in package - // "bar" has full name "bar.Foo". If a type "Baz" is nested within - // Foo, Baz's full_name is "bar.Foo.Baz". To get only the part that - // comes after the last '.', use name(). - const std::string& full_name() const; - - // Index of this descriptor within the file or containing type's message - // type array. - int index() const; - - // The .proto file in which this message type was defined. Never nullptr. - const FileDescriptor* file() const; - - // If this Descriptor describes a nested type, this returns the type - // in which it is nested. Otherwise, returns nullptr. - const Descriptor* containing_type() const; - - // Get options for this message type. These are specified in the .proto file - // by placing lines like "option foo = 1234;" in the message definition. - // Allowed options are defined by MessageOptions in descriptor.proto, and any - // available extensions of that message. - const MessageOptions& options() const; - - // Write the contents of this Descriptor into the given DescriptorProto. - // The target DescriptorProto must be clear before calling this; if it - // isn't, the result may be garbage. - void CopyTo(DescriptorProto* proto) const; - - // Write the contents of this descriptor in a human-readable form. Output - // will be suitable for re-parsing. - std::string DebugString() const; - - // Similar to DebugString(), but additionally takes options (e.g., - // include original user comments in output). - std::string DebugStringWithOptions(const DebugStringOptions& options) const; - - // Returns true if this is a placeholder for an unknown type. This will - // only be the case if this descriptor comes from a DescriptorPool - // with AllowUnknownDependencies() set. - bool is_placeholder() const; - - enum WellKnownType { - WELLKNOWNTYPE_UNSPECIFIED, // Not a well-known type. - - // Wrapper types. - WELLKNOWNTYPE_DOUBLEVALUE, // google.protobuf.DoubleValue - WELLKNOWNTYPE_FLOATVALUE, // google.protobuf.FloatValue - WELLKNOWNTYPE_INT64VALUE, // google.protobuf.Int64Value - WELLKNOWNTYPE_UINT64VALUE, // google.protobuf.UInt64Value - WELLKNOWNTYPE_INT32VALUE, // google.protobuf.Int32Value - WELLKNOWNTYPE_UINT32VALUE, // google.protobuf.UInt32Value - WELLKNOWNTYPE_STRINGVALUE, // google.protobuf.StringValue - WELLKNOWNTYPE_BYTESVALUE, // google.protobuf.BytesValue - WELLKNOWNTYPE_BOOLVALUE, // google.protobuf.BoolValue - - // Other well known types. - WELLKNOWNTYPE_ANY, // google.protobuf.Any - WELLKNOWNTYPE_FIELDMASK, // google.protobuf.FieldMask - WELLKNOWNTYPE_DURATION, // google.protobuf.Duration - WELLKNOWNTYPE_TIMESTAMP, // google.protobuf.Timestamp - WELLKNOWNTYPE_VALUE, // google.protobuf.Value - WELLKNOWNTYPE_LISTVALUE, // google.protobuf.ListValue - WELLKNOWNTYPE_STRUCT, // google.protobuf.Struct - - // New well-known types may be added in the future. - // Please make sure any switch() statements have a 'default' case. - __WELLKNOWNTYPE__DO_NOT_USE__ADD_DEFAULT_INSTEAD__, - }; - - WellKnownType well_known_type() const; - - // Field stuff ----------------------------------------------------- - - // The number of fields in this message type. - int field_count() const; - // Gets a field by index, where 0 <= index < field_count(). - // These are returned in the order they were defined in the .proto file. - const FieldDescriptor* field(int index) const; - - // Looks up a field by declared tag number. Returns nullptr if no such field - // exists. - const FieldDescriptor* FindFieldByNumber(int number) const; - // Looks up a field by name. Returns nullptr if no such field exists. - const FieldDescriptor* FindFieldByName(ConstStringParam name) const; - - // Looks up a field by lowercased name (as returned by lowercase_name()). - // This lookup may be ambiguous if multiple field names differ only by case, - // in which case the field returned is chosen arbitrarily from the matches. - const FieldDescriptor* FindFieldByLowercaseName( - ConstStringParam lowercase_name) const; - - // Looks up a field by camel-case name (as returned by camelcase_name()). - // This lookup may be ambiguous if multiple field names differ in a way that - // leads them to have identical camel-case names, in which case the field - // returned is chosen arbitrarily from the matches. - const FieldDescriptor* FindFieldByCamelcaseName( - ConstStringParam camelcase_name) const; - - // The number of oneofs in this message type. - int oneof_decl_count() const; - // The number of oneofs in this message type, excluding synthetic oneofs. - // Real oneofs always come first, so iterating up to real_oneof_decl_cout() - // will yield all real oneofs. - int real_oneof_decl_count() const; - // Get a oneof by index, where 0 <= index < oneof_decl_count(). - // These are returned in the order they were defined in the .proto file. - const OneofDescriptor* oneof_decl(int index) const; - - // Looks up a oneof by name. Returns nullptr if no such oneof exists. - const OneofDescriptor* FindOneofByName(ConstStringParam name) const; - - // Nested type stuff ----------------------------------------------- - - // The number of nested types in this message type. - int nested_type_count() const; - // Gets a nested type by index, where 0 <= index < nested_type_count(). - // These are returned in the order they were defined in the .proto file. - const Descriptor* nested_type(int index) const; - - // Looks up a nested type by name. Returns nullptr if no such nested type - // exists. - const Descriptor* FindNestedTypeByName(ConstStringParam name) const; - - // Enum stuff ------------------------------------------------------ - - // The number of enum types in this message type. - int enum_type_count() const; - // Gets an enum type by index, where 0 <= index < enum_type_count(). - // These are returned in the order they were defined in the .proto file. - const EnumDescriptor* enum_type(int index) const; - - // Looks up an enum type by name. Returns nullptr if no such enum type - // exists. - const EnumDescriptor* FindEnumTypeByName(ConstStringParam name) const; - - // Looks up an enum value by name, among all enum types in this message. - // Returns nullptr if no such value exists. - const EnumValueDescriptor* FindEnumValueByName(ConstStringParam name) const; - - // Extensions ------------------------------------------------------ - - // A range of field numbers which are designated for third-party - // extensions. - struct ExtensionRange { - typedef DescriptorProto_ExtensionRange Proto; - - typedef ExtensionRangeOptions OptionsType; - - // See Descriptor::CopyTo(). - void CopyTo(DescriptorProto_ExtensionRange* proto) const; - - int start; // inclusive - int end; // exclusive - - const ExtensionRangeOptions* options_; - }; - - // The number of extension ranges in this message type. - int extension_range_count() const; - // Gets an extension range by index, where 0 <= index < - // extension_range_count(). These are returned in the order they were defined - // in the .proto file. - const ExtensionRange* extension_range(int index) const; - - // Returns true if the number is in one of the extension ranges. - bool IsExtensionNumber(int number) const; - - // Returns nullptr if no extension range contains the given number. - const ExtensionRange* FindExtensionRangeContainingNumber(int number) const; - - // The number of extensions defined nested within this message type's scope. - // See doc: - // https://developers.google.com/protocol-buffers/docs/proto#nested-extensions - // - // Note that the extensions may be extending *other* messages. - // - // For example: - // message M1 { - // extensions 1 to max; - // } - // - // message M2 { - // extend M1 { - // optional int32 foo = 1; - // } - // } - // - // In this case, - // DescriptorPool::generated_pool() - // ->FindMessageTypeByName("M2") - // ->extension(0) - // will return "foo", even though "foo" is an extension of M1. - // To find all known extensions of a given message, instead use - // DescriptorPool::FindAllExtensions. - int extension_count() const; - // Get an extension by index, where 0 <= index < extension_count(). - // These are returned in the order they were defined in the .proto file. - const FieldDescriptor* extension(int index) const; - - // Looks up a named extension (which extends some *other* message type) - // defined within this message type's scope. - const FieldDescriptor* FindExtensionByName(ConstStringParam name) const; - - // Similar to FindFieldByLowercaseName(), but finds extensions defined within - // this message type's scope. - const FieldDescriptor* FindExtensionByLowercaseName( - ConstStringParam name) const; - - // Similar to FindFieldByCamelcaseName(), but finds extensions defined within - // this message type's scope. - const FieldDescriptor* FindExtensionByCamelcaseName( - ConstStringParam name) const; - - // Reserved fields ------------------------------------------------- - - // A range of reserved field numbers. - struct ReservedRange { - int start; // inclusive - int end; // exclusive - }; - - // The number of reserved ranges in this message type. - int reserved_range_count() const; - // Gets an reserved range by index, where 0 <= index < - // reserved_range_count(). These are returned in the order they were defined - // in the .proto file. - const ReservedRange* reserved_range(int index) const; - - // Returns true if the number is in one of the reserved ranges. - bool IsReservedNumber(int number) const; - - // Returns nullptr if no reserved range contains the given number. - const ReservedRange* FindReservedRangeContainingNumber(int number) const; - - // The number of reserved field names in this message type. - int reserved_name_count() const; - - // Gets a reserved name by index, where 0 <= index < reserved_name_count(). - const std::string& reserved_name(int index) const; - - // Returns true if the field name is reserved. - bool IsReservedName(ConstStringParam name) const; - - // Source Location --------------------------------------------------- - - // Updates |*out_location| to the source location of the complete - // extent of this message declaration. Returns false and leaves - // |*out_location| unchanged iff location information was not available. - bool GetSourceLocation(SourceLocation* out_location) const; - - // Maps -------------------------------------------------------------- - - // Returns the FieldDescriptor for the "key" field. If this isn't a map entry - // field, returns nullptr. - const FieldDescriptor* map_key() const; - - // Returns the FieldDescriptor for the "value" field. If this isn't a map - // entry field, returns nullptr. - const FieldDescriptor* map_value() const; - - private: - friend class Symbol; - typedef MessageOptions OptionsType; - - // Allows tests to test CopyTo(proto, true). - friend class descriptor_unittest::DescriptorTest; - - // Allows access to GetLocationPath for annotations. - friend class io::Printer; - friend class compiler::cpp::Formatter; - - // Fill the json_name field of FieldDescriptorProto. - void CopyJsonNameTo(DescriptorProto* proto) const; - - // Internal version of DebugString; controls the level of indenting for - // correct depth. Takes |options| to control debug-string options, and - // |include_opening_clause| to indicate whether the "message ... " part of the - // clause has already been generated (this varies depending on context). - void DebugString(int depth, std::string* contents, - const DebugStringOptions& options, - bool include_opening_clause) const; - - // Walks up the descriptor tree to generate the source location path - // to this descriptor from the file root. - void GetLocationPath(std::vector<int>* output) const; - - // True if this is a placeholder for an unknown type. - bool is_placeholder_ : 1; - // True if this is a placeholder and the type name wasn't fully-qualified. - bool is_unqualified_placeholder_ : 1; - // Well known type. Stored like this to conserve space. - uint8_t well_known_type_ : 5; - - // This points to the last field _number_ that is part of the sequence - // starting at 1, where - // `desc->field(i)->number() == i + 1` - // A value of `0` means no field matches. That is, there are no fields or the - // first field is not field `1`. - // Uses 16-bit to avoid extra padding. Unlikely to have more than 2^16 - // sequentially numbered fields in a message. - uint16_t sequential_field_limit_; - - int field_count_; - - // all_names_ = [name, full_name] - const std::string* all_names_; - const FileDescriptor* file_; - const Descriptor* containing_type_; - const MessageOptions* options_; - - // These arrays are separated from their sizes to minimize padding on 64-bit. - FieldDescriptor* fields_; - OneofDescriptor* oneof_decls_; - Descriptor* nested_types_; - EnumDescriptor* enum_types_; - ExtensionRange* extension_ranges_; - FieldDescriptor* extensions_; - ReservedRange* reserved_ranges_; - const std::string** reserved_names_; - - int oneof_decl_count_; - int real_oneof_decl_count_; - int nested_type_count_; - int enum_type_count_; - int extension_range_count_; - int extension_count_; - int reserved_range_count_; - int reserved_name_count_; - - // IMPORTANT: If you add a new field, make sure to search for all instances - // of Allocate<Descriptor>() and AllocateArray<Descriptor>() in descriptor.cc - // and update them to initialize the field. - - // Must be constructed using DescriptorPool. - Descriptor() {} - friend class DescriptorBuilder; - friend class DescriptorPool; - friend class EnumDescriptor; - friend class FieldDescriptor; - friend class FileDescriptorTables; - friend class OneofDescriptor; - friend class MethodDescriptor; - friend class FileDescriptor; - GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(Descriptor); -}; - -PROTOBUF_INTERNAL_CHECK_CLASS_SIZE(Descriptor, 136); - -// Describes a single field of a message. To get the descriptor for a given -// field, first get the Descriptor for the message in which it is defined, -// then call Descriptor::FindFieldByName(). To get a FieldDescriptor for -// an extension, do one of the following: -// - Get the Descriptor or FileDescriptor for its containing scope, then -// call Descriptor::FindExtensionByName() or -// FileDescriptor::FindExtensionByName(). -// - Given a DescriptorPool, call DescriptorPool::FindExtensionByNumber() or -// DescriptorPool::FindExtensionByPrintableName(). -// Use DescriptorPool to construct your own descriptors. -class PROTOBUF_EXPORT FieldDescriptor : private internal::SymbolBase { - public: - typedef FieldDescriptorProto Proto; - - // Identifies a field type. 0 is reserved for errors. The order is weird - // for historical reasons. Types 12 and up are new in proto2. - enum Type { - TYPE_DOUBLE = 1, // double, exactly eight bytes on the wire. - TYPE_FLOAT = 2, // float, exactly four bytes on the wire. - TYPE_INT64 = 3, // int64, varint on the wire. Negative numbers - // take 10 bytes. Use TYPE_SINT64 if negative - // values are likely. - TYPE_UINT64 = 4, // uint64, varint on the wire. - TYPE_INT32 = 5, // int32, varint on the wire. Negative numbers - // take 10 bytes. Use TYPE_SINT32 if negative - // values are likely. - TYPE_FIXED64 = 6, // uint64, exactly eight bytes on the wire. - TYPE_FIXED32 = 7, // uint32, exactly four bytes on the wire. - TYPE_BOOL = 8, // bool, varint on the wire. - TYPE_STRING = 9, // UTF-8 text. - TYPE_GROUP = 10, // Tag-delimited message. Deprecated. - TYPE_MESSAGE = 11, // Length-delimited message. - - TYPE_BYTES = 12, // Arbitrary byte array. - TYPE_UINT32 = 13, // uint32, varint on the wire - TYPE_ENUM = 14, // Enum, varint on the wire - TYPE_SFIXED32 = 15, // int32, exactly four bytes on the wire - TYPE_SFIXED64 = 16, // int64, exactly eight bytes on the wire - TYPE_SINT32 = 17, // int32, ZigZag-encoded varint on the wire - TYPE_SINT64 = 18, // int64, ZigZag-encoded varint on the wire - - MAX_TYPE = 18, // Constant useful for defining lookup tables - // indexed by Type. - }; - - // Specifies the C++ data type used to represent the field. There is a - // fixed mapping from Type to CppType where each Type maps to exactly one - // CppType. 0 is reserved for errors. - enum CppType { - CPPTYPE_INT32 = 1, // TYPE_INT32, TYPE_SINT32, TYPE_SFIXED32 - CPPTYPE_INT64 = 2, // TYPE_INT64, TYPE_SINT64, TYPE_SFIXED64 - CPPTYPE_UINT32 = 3, // TYPE_UINT32, TYPE_FIXED32 - CPPTYPE_UINT64 = 4, // TYPE_UINT64, TYPE_FIXED64 - CPPTYPE_DOUBLE = 5, // TYPE_DOUBLE - CPPTYPE_FLOAT = 6, // TYPE_FLOAT - CPPTYPE_BOOL = 7, // TYPE_BOOL - CPPTYPE_ENUM = 8, // TYPE_ENUM - CPPTYPE_STRING = 9, // TYPE_STRING, TYPE_BYTES - CPPTYPE_MESSAGE = 10, // TYPE_MESSAGE, TYPE_GROUP - - MAX_CPPTYPE = 10, // Constant useful for defining lookup tables - // indexed by CppType. - }; - - // Identifies whether the field is optional, required, or repeated. 0 is - // reserved for errors. - enum Label { - LABEL_OPTIONAL = 1, // optional - LABEL_REQUIRED = 2, // required - LABEL_REPEATED = 3, // repeated - - MAX_LABEL = 3, // Constant useful for defining lookup tables - // indexed by Label. - }; - - // Valid field numbers are positive integers up to kMaxNumber. - static const int kMaxNumber = (1 << 29) - 1; - - // First field number reserved for the protocol buffer library implementation. - // Users may not declare fields that use reserved numbers. - static const int kFirstReservedNumber = 19000; - // Last field number reserved for the protocol buffer library implementation. - // Users may not declare fields that use reserved numbers. - static const int kLastReservedNumber = 19999; - - const std::string& name() const; // Name of this field within the message. - const std::string& full_name() const; // Fully-qualified name of the field. - const std::string& json_name() const; // JSON name of this field. - const FileDescriptor* file() const; // File in which this field was defined. - bool is_extension() const; // Is this an extension field? - int number() const; // Declared tag number. - - // Same as name() except converted to lower-case. This (and especially the - // FindFieldByLowercaseName() method) can be useful when parsing formats - // which prefer to use lowercase naming style. (Although, technically - // field names should be lowercased anyway according to the protobuf style - // guide, so this only makes a difference when dealing with old .proto files - // which do not follow the guide.) - const std::string& lowercase_name() const; - - // Same as name() except converted to camel-case. In this conversion, any - // time an underscore appears in the name, it is removed and the next - // letter is capitalized. Furthermore, the first letter of the name is - // lower-cased. Examples: - // FooBar -> fooBar - // foo_bar -> fooBar - // fooBar -> fooBar - // This (and especially the FindFieldByCamelcaseName() method) can be useful - // when parsing formats which prefer to use camel-case naming style. - const std::string& camelcase_name() const; - - Type type() const; // Declared type of this field. - const char* type_name() const; // Name of the declared type. - CppType cpp_type() const; // C++ type of this field. - const char* cpp_type_name() const; // Name of the C++ type. - Label label() const; // optional/required/repeated - - bool is_required() const; // shorthand for label() == LABEL_REQUIRED - bool is_optional() const; // shorthand for label() == LABEL_OPTIONAL - bool is_repeated() const; // shorthand for label() == LABEL_REPEATED - bool is_packable() const; // shorthand for is_repeated() && - // IsTypePackable(type()) - bool is_packed() const; // shorthand for is_packable() && - // options().packed() - bool is_map() const; // shorthand for type() == TYPE_MESSAGE && - // message_type()->options().map_entry() - - // Returns true if this field was syntactically written with "optional" in the - // .proto file. Excludes singular proto3 fields that do not have a label. - bool has_optional_keyword() const; - - // Returns true if this field tracks presence, ie. does the field - // distinguish between "unset" and "present with default value." - // This includes required, optional, and oneof fields. It excludes maps, - // repeated fields, and singular proto3 fields without "optional". - // - // For fields where has_presence() == true, the return value of - // Reflection::HasField() is semantically meaningful. - bool has_presence() const; - - // Index of this field within the message's field array, or the file or - // extension scope's extensions array. - int index() const; - - // Does this field have an explicitly-declared default value? - bool has_default_value() const; - - // Whether the user has specified the json_name field option in the .proto - // file. - bool has_json_name() const; - - // Get the field default value if cpp_type() == CPPTYPE_INT32. If no - // explicit default was defined, the default is 0. - int32_t default_value_int32_t() const; - int32_t default_value_int32() const { return default_value_int32_t(); } - // Get the field default value if cpp_type() == CPPTYPE_INT64. If no - // explicit default was defined, the default is 0. - int64_t default_value_int64_t() const; - int64_t default_value_int64() const { return default_value_int64_t(); } - // Get the field default value if cpp_type() == CPPTYPE_UINT32. If no - // explicit default was defined, the default is 0. - uint32_t default_value_uint32_t() const; - uint32_t default_value_uint32() const { return default_value_uint32_t(); } - // Get the field default value if cpp_type() == CPPTYPE_UINT64. If no - // explicit default was defined, the default is 0. - uint64_t default_value_uint64_t() const; - uint64_t default_value_uint64() const { return default_value_uint64_t(); } - // Get the field default value if cpp_type() == CPPTYPE_FLOAT. If no - // explicit default was defined, the default is 0.0. - float default_value_float() const; - // Get the field default value if cpp_type() == CPPTYPE_DOUBLE. If no - // explicit default was defined, the default is 0.0. - double default_value_double() const; - // Get the field default value if cpp_type() == CPPTYPE_BOOL. If no - // explicit default was defined, the default is false. - bool default_value_bool() const; - // Get the field default value if cpp_type() == CPPTYPE_ENUM. If no - // explicit default was defined, the default is the first value defined - // in the enum type (all enum types are required to have at least one value). - // This never returns nullptr. - const EnumValueDescriptor* default_value_enum() const; - // Get the field default value if cpp_type() == CPPTYPE_STRING. If no - // explicit default was defined, the default is the empty string. - const std::string& default_value_string() const; - - // The Descriptor for the message of which this is a field. For extensions, - // this is the extended type. Never nullptr. - const Descriptor* containing_type() const; - - // If the field is a member of a oneof, this is the one, otherwise this is - // nullptr. - const OneofDescriptor* containing_oneof() const; - - // If the field is a member of a non-synthetic oneof, returns the descriptor - // for the oneof, otherwise returns nullptr. - const OneofDescriptor* real_containing_oneof() const; - - // If the field is a member of a oneof, returns the index in that oneof. - int index_in_oneof() const; - - // An extension may be declared within the scope of another message. If this - // field is an extension (is_extension() is true), then extension_scope() - // returns that message, or nullptr if the extension was declared at global - // scope. If this is not an extension, extension_scope() is undefined (may - // assert-fail). - const Descriptor* extension_scope() const; - - // If type is TYPE_MESSAGE or TYPE_GROUP, returns a descriptor for the - // message or the group type. Otherwise, returns null. - const Descriptor* message_type() const; - // If type is TYPE_ENUM, returns a descriptor for the enum. Otherwise, - // returns null. - const EnumDescriptor* enum_type() const; - - // Get the FieldOptions for this field. This includes things listed in - // square brackets after the field definition. E.g., the field: - // optional string text = 1 [ctype=CORD]; - // has the "ctype" option set. Allowed options are defined by FieldOptions in - // descriptor.proto, and any available extensions of that message. - const FieldOptions& options() const; - - // See Descriptor::CopyTo(). - void CopyTo(FieldDescriptorProto* proto) const; - - // See Descriptor::DebugString(). - std::string DebugString() const; - - // See Descriptor::DebugStringWithOptions(). - std::string DebugStringWithOptions(const DebugStringOptions& options) const; - - // Helper method to get the CppType for a particular Type. - static CppType TypeToCppType(Type type); - - // Helper method to get the name of a Type. - static const char* TypeName(Type type); - - // Helper method to get the name of a CppType. - static const char* CppTypeName(CppType cpp_type); - - // Return true iff [packed = true] is valid for fields of this type. - static inline bool IsTypePackable(Type field_type); - - // Returns full_name() except if the field is a MessageSet extension, - // in which case it returns the full_name() of the containing message type - // for backwards compatibility with proto1. - // - // A MessageSet extension is defined as an optional message extension - // whose containing type has the message_set_wire_format option set. - // This should be true of extensions of google.protobuf.bridge.MessageSet; - // by convention, such extensions are named "message_set_extension". - // - // The opposite operation (looking up an extension's FieldDescriptor given - // its printable name) can be accomplished with - // message->file()->pool()->FindExtensionByPrintableName(message, name) - // where the extension extends "message". - const std::string& PrintableNameForExtension() const; - - // Source Location --------------------------------------------------- - - // Updates |*out_location| to the source location of the complete - // extent of this field declaration. Returns false and leaves - // |*out_location| unchanged iff location information was not available. - bool GetSourceLocation(SourceLocation* out_location) const; - - private: - friend class Symbol; - typedef FieldOptions OptionsType; - - // Allows access to GetLocationPath for annotations. - friend class io::Printer; - friend class compiler::cpp::Formatter; - friend class Reflection; - - // Fill the json_name field of FieldDescriptorProto. - void CopyJsonNameTo(FieldDescriptorProto* proto) const; - - // See Descriptor::DebugString(). - void DebugString(int depth, std::string* contents, - const DebugStringOptions& options) const; - - // formats the default value appropriately and returns it as a string. - // Must have a default value to call this. If quote_string_type is true, then - // types of CPPTYPE_STRING whill be surrounded by quotes and CEscaped. - std::string DefaultValueAsString(bool quote_string_type) const; - - // Helper function that returns the field type name for DebugString. - std::string FieldTypeNameDebugString() const; - - // Walks up the descriptor tree to generate the source location path - // to this descriptor from the file root. - void GetLocationPath(std::vector<int>* output) const; - - // Returns true if this is a map message type. - bool is_map_message_type() const; - - bool has_default_value_ : 1; - bool proto3_optional_ : 1; - // Whether the user has specified the json_name field option in the .proto - // file. - bool has_json_name_ : 1; - bool is_extension_ : 1; - bool is_oneof_ : 1; - - // Actually a `Label` but stored as uint8_t to save space. - uint8_t label_ : 2; - - // Actually a `Type`, but stored as uint8_t to save space. - mutable uint8_t type_; - - // Logically: - // all_names_ = [name, full_name, lower, camel, json] - // However: - // duplicates will be omitted, so lower/camel/json might be in the same - // position. - // We store the true offset for each name here, and the bit width must be - // large enough to account for the worst case where all names are present. - uint8_t lowercase_name_index_ : 2; - uint8_t camelcase_name_index_ : 2; - uint8_t json_name_index_ : 3; - // Sadly, `number_` located here to reduce padding. Unrelated to all_names_ - // and its indices above. - int number_; - const std::string* all_names_; - const FileDescriptor* file_; - - // The once_flag is followed by a NUL terminated string for the type name and - // enum default value (or empty string if no default enum). - internal::once_flag* type_once_; - static void TypeOnceInit(const FieldDescriptor* to_init); - void InternalTypeOnceInit() const; - const Descriptor* containing_type_; - union { - const OneofDescriptor* containing_oneof; - const Descriptor* extension_scope; - } scope_; - union { - mutable const Descriptor* message_type; - mutable const EnumDescriptor* enum_type; - } type_descriptor_; - const FieldOptions* options_; - // IMPORTANT: If you add a new field, make sure to search for all instances - // of Allocate<FieldDescriptor>() and AllocateArray<FieldDescriptor>() in - // descriptor.cc and update them to initialize the field. - - union { - int32_t default_value_int32_t_; - int64_t default_value_int64_t_; - uint32_t default_value_uint32_t_; - uint64_t default_value_uint64_t_; - float default_value_float_; - double default_value_double_; - bool default_value_bool_; - - mutable const EnumValueDescriptor* default_value_enum_; - const std::string* default_value_string_; - mutable std::atomic<const Message*> default_generated_instance_; - }; - - static const CppType kTypeToCppTypeMap[MAX_TYPE + 1]; - - static const char* const kTypeToName[MAX_TYPE + 1]; - - static const char* const kCppTypeToName[MAX_CPPTYPE + 1]; - - static const char* const kLabelToName[MAX_LABEL + 1]; - - // Must be constructed using DescriptorPool. - FieldDescriptor() {} - friend class DescriptorBuilder; - friend class FileDescriptor; - friend class Descriptor; - friend class OneofDescriptor; - GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(FieldDescriptor); -}; - -PROTOBUF_INTERNAL_CHECK_CLASS_SIZE(FieldDescriptor, 72); - -// Describes a oneof defined in a message type. -class PROTOBUF_EXPORT OneofDescriptor : private internal::SymbolBase { - public: - typedef OneofDescriptorProto Proto; - - const std::string& name() const; // Name of this oneof. - const std::string& full_name() const; // Fully-qualified name of the oneof. - - // Index of this oneof within the message's oneof array. - int index() const; - - // Returns whether this oneof was inserted by the compiler to wrap a proto3 - // optional field. If this returns true, code generators should *not* emit it. - bool is_synthetic() const; - - // The .proto file in which this oneof was defined. Never nullptr. - const FileDescriptor* file() const; - // The Descriptor for the message containing this oneof. - const Descriptor* containing_type() const; - - // The number of (non-extension) fields which are members of this oneof. - int field_count() const; - // Get a member of this oneof, in the order in which they were declared in the - // .proto file. Does not include extensions. - const FieldDescriptor* field(int index) const; - - const OneofOptions& options() const; - - // See Descriptor::CopyTo(). - void CopyTo(OneofDescriptorProto* proto) const; - - // See Descriptor::DebugString(). - std::string DebugString() const; - - // See Descriptor::DebugStringWithOptions(). - std::string DebugStringWithOptions(const DebugStringOptions& options) const; - - // Source Location --------------------------------------------------- - - // Updates |*out_location| to the source location of the complete - // extent of this oneof declaration. Returns false and leaves - // |*out_location| unchanged iff location information was not available. - bool GetSourceLocation(SourceLocation* out_location) const; - - private: - friend class Symbol; - typedef OneofOptions OptionsType; - - // Allows access to GetLocationPath for annotations. - friend class io::Printer; - friend class compiler::cpp::Formatter; - - // See Descriptor::DebugString(). - void DebugString(int depth, std::string* contents, - const DebugStringOptions& options) const; - - // Walks up the descriptor tree to generate the source location path - // to this descriptor from the file root. - void GetLocationPath(std::vector<int>* output) const; - - int field_count_; - - // all_names_ = [name, full_name] - const std::string* all_names_; - const Descriptor* containing_type_; - const OneofOptions* options_; - const FieldDescriptor* fields_; - - // IMPORTANT: If you add a new field, make sure to search for all instances - // of Allocate<OneofDescriptor>() and AllocateArray<OneofDescriptor>() - // in descriptor.cc and update them to initialize the field. - - // Must be constructed using DescriptorPool. - OneofDescriptor() {} - friend class DescriptorBuilder; - friend class Descriptor; - GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(OneofDescriptor); -}; - -PROTOBUF_INTERNAL_CHECK_CLASS_SIZE(OneofDescriptor, 40); - -// Describes an enum type defined in a .proto file. To get the EnumDescriptor -// for a generated enum type, call TypeName_descriptor(). Use DescriptorPool -// to construct your own descriptors. -class PROTOBUF_EXPORT EnumDescriptor : private internal::SymbolBase { - public: - typedef EnumDescriptorProto Proto; - - // The name of this enum type in the containing scope. - const std::string& name() const; - - // The fully-qualified name of the enum type, scope delimited by periods. - const std::string& full_name() const; - - // Index of this enum within the file or containing message's enum array. - int index() const; - - // The .proto file in which this enum type was defined. Never nullptr. - const FileDescriptor* file() const; - - // The number of values for this EnumDescriptor. Guaranteed to be greater - // than zero. - int value_count() const; - // Gets a value by index, where 0 <= index < value_count(). - // These are returned in the order they were defined in the .proto file. - const EnumValueDescriptor* value(int index) const; - - // Looks up a value by name. Returns nullptr if no such value exists. - const EnumValueDescriptor* FindValueByName(ConstStringParam name) const; - // Looks up a value by number. Returns nullptr if no such value exists. If - // multiple values have this number, the first one defined is returned. - const EnumValueDescriptor* FindValueByNumber(int number) const; - - // If this enum type is nested in a message type, this is that message type. - // Otherwise, nullptr. - const Descriptor* containing_type() const; - - // Get options for this enum type. These are specified in the .proto file by - // placing lines like "option foo = 1234;" in the enum definition. Allowed - // options are defined by EnumOptions in descriptor.proto, and any available - // extensions of that message. - const EnumOptions& options() const; - - // See Descriptor::CopyTo(). - void CopyTo(EnumDescriptorProto* proto) const; - - // See Descriptor::DebugString(). - std::string DebugString() const; - - // See Descriptor::DebugStringWithOptions(). - std::string DebugStringWithOptions(const DebugStringOptions& options) const; - - // Returns true if this is a placeholder for an unknown enum. This will - // only be the case if this descriptor comes from a DescriptorPool - // with AllowUnknownDependencies() set. - bool is_placeholder() const; - - // Reserved fields ------------------------------------------------- - - // A range of reserved field numbers. - struct ReservedRange { - int start; // inclusive - int end; // inclusive - }; - - // The number of reserved ranges in this message type. - int reserved_range_count() const; - // Gets an reserved range by index, where 0 <= index < - // reserved_range_count(). These are returned in the order they were defined - // in the .proto file. - const EnumDescriptor::ReservedRange* reserved_range(int index) const; - - // Returns true if the number is in one of the reserved ranges. - bool IsReservedNumber(int number) const; - - // Returns nullptr if no reserved range contains the given number. - const EnumDescriptor::ReservedRange* FindReservedRangeContainingNumber( - int number) const; - - // The number of reserved field names in this message type. - int reserved_name_count() const; - - // Gets a reserved name by index, where 0 <= index < reserved_name_count(). - const std::string& reserved_name(int index) const; - - // Returns true if the field name is reserved. - bool IsReservedName(ConstStringParam name) const; - - // Source Location --------------------------------------------------- - - // Updates |*out_location| to the source location of the complete - // extent of this enum declaration. Returns false and leaves - // |*out_location| unchanged iff location information was not available. - bool GetSourceLocation(SourceLocation* out_location) const; - - private: - friend class Symbol; - typedef EnumOptions OptionsType; - - // Allows access to GetLocationPath for annotations. - friend class io::Printer; - friend class compiler::cpp::Formatter; - - // Allow access to FindValueByNumberCreatingIfUnknown. - friend class descriptor_unittest::DescriptorTest; - - // Looks up a value by number. If the value does not exist, dynamically - // creates a new EnumValueDescriptor for that value, assuming that it was - // unknown. If a new descriptor is created, this is done in a thread-safe way, - // and future calls will return the same value descriptor pointer. - // - // This is private but is used by Reflection (which is friended below) to - // return a valid EnumValueDescriptor from GetEnum() when this feature is - // enabled. - const EnumValueDescriptor* FindValueByNumberCreatingIfUnknown( - int number) const; - - // See Descriptor::DebugString(). - void DebugString(int depth, std::string* contents, - const DebugStringOptions& options) const; - - // Walks up the descriptor tree to generate the source location path - // to this descriptor from the file root. - void GetLocationPath(std::vector<int>* output) const; - - // True if this is a placeholder for an unknown type. - bool is_placeholder_ : 1; - // True if this is a placeholder and the type name wasn't fully-qualified. - bool is_unqualified_placeholder_ : 1; - - // This points to the last value _index_ that is part of the sequence starting - // with the first label, where - // `enum->value(i)->number() == enum->value(0)->number() + i` - // We measure relative to the first label to adapt to enum labels starting at - // 0 or 1. - // Uses 16-bit to avoid extra padding. Unlikely to have more than 2^15 - // sequentially numbered labels in an enum. - int16_t sequential_value_limit_; - - int value_count_; - - // all_names_ = [name, full_name] - const std::string* all_names_; - const FileDescriptor* file_; - const Descriptor* containing_type_; - const EnumOptions* options_; - EnumValueDescriptor* values_; - - int reserved_range_count_; - int reserved_name_count_; - EnumDescriptor::ReservedRange* reserved_ranges_; - const std::string** reserved_names_; - - // IMPORTANT: If you add a new field, make sure to search for all instances - // of Allocate<EnumDescriptor>() and AllocateArray<EnumDescriptor>() in - // descriptor.cc and update them to initialize the field. - - // Must be constructed using DescriptorPool. - EnumDescriptor() {} - friend class DescriptorBuilder; - friend class Descriptor; - friend class FieldDescriptor; - friend class FileDescriptorTables; - friend class EnumValueDescriptor; - friend class FileDescriptor; - friend class DescriptorPool; - friend class Reflection; - GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(EnumDescriptor); -}; - -PROTOBUF_INTERNAL_CHECK_CLASS_SIZE(EnumDescriptor, 72); - -// Describes an individual enum constant of a particular type. To get the -// EnumValueDescriptor for a given enum value, first get the EnumDescriptor -// for its type, then use EnumDescriptor::FindValueByName() or -// EnumDescriptor::FindValueByNumber(). Use DescriptorPool to construct -// your own descriptors. -class PROTOBUF_EXPORT EnumValueDescriptor : private internal::SymbolBaseN<0>, - private internal::SymbolBaseN<1> { - public: - typedef EnumValueDescriptorProto Proto; - - const std::string& name() const; // Name of this enum constant. - int index() const; // Index within the enums's Descriptor. - int number() const; // Numeric value of this enum constant. - - // The full_name of an enum value is a sibling symbol of the enum type. - // e.g. the full name of FieldDescriptorProto::TYPE_INT32 is actually - // "google.protobuf.FieldDescriptorProto.TYPE_INT32", NOT - // "google.protobuf.FieldDescriptorProto.Type.TYPE_INT32". This is to conform - // with C++ scoping rules for enums. - const std::string& full_name() const; - - // The .proto file in which this value was defined. Never nullptr. - const FileDescriptor* file() const; - // The type of this value. Never nullptr. - const EnumDescriptor* type() const; - - // Get options for this enum value. These are specified in the .proto file by - // adding text like "[foo = 1234]" after an enum value definition. Allowed - // options are defined by EnumValueOptions in descriptor.proto, and any - // available extensions of that message. - const EnumValueOptions& options() const; - - // See Descriptor::CopyTo(). - void CopyTo(EnumValueDescriptorProto* proto) const; - - // See Descriptor::DebugString(). - std::string DebugString() const; - - // See Descriptor::DebugStringWithOptions(). - std::string DebugStringWithOptions(const DebugStringOptions& options) const; - - // Source Location --------------------------------------------------- - - // Updates |*out_location| to the source location of the complete - // extent of this enum value declaration. Returns false and leaves - // |*out_location| unchanged iff location information was not available. - bool GetSourceLocation(SourceLocation* out_location) const; - - private: - friend class Symbol; - typedef EnumValueOptions OptionsType; - - // Allows access to GetLocationPath for annotations. - friend class io::Printer; - friend class compiler::cpp::Formatter; - - // See Descriptor::DebugString(). - void DebugString(int depth, std::string* contents, - const DebugStringOptions& options) const; - - // Walks up the descriptor tree to generate the source location path - // to this descriptor from the file root. - void GetLocationPath(std::vector<int>* output) const; - - int number_; - // all_names_ = [name, full_name] - const std::string* all_names_; - const EnumDescriptor* type_; - const EnumValueOptions* options_; - // IMPORTANT: If you add a new field, make sure to search for all instances - // of Allocate<EnumValueDescriptor>() and AllocateArray<EnumValueDescriptor>() - // in descriptor.cc and update them to initialize the field. - - // Must be constructed using DescriptorPool. - EnumValueDescriptor() {} - friend class DescriptorBuilder; - friend class EnumDescriptor; - friend class DescriptorPool; - friend class FileDescriptorTables; - friend class Reflection; - GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(EnumValueDescriptor); -}; - -PROTOBUF_INTERNAL_CHECK_CLASS_SIZE(EnumValueDescriptor, 32); - -// Describes an RPC service. Use DescriptorPool to construct your own -// descriptors. -class PROTOBUF_EXPORT ServiceDescriptor : private internal::SymbolBase { - public: - typedef ServiceDescriptorProto Proto; - - // The name of the service, not including its containing scope. - const std::string& name() const; - // The fully-qualified name of the service, scope delimited by periods. - const std::string& full_name() const; - // Index of this service within the file's services array. - int index() const; - - // The .proto file in which this service was defined. Never nullptr. - const FileDescriptor* file() const; - - // Get options for this service type. These are specified in the .proto file - // by placing lines like "option foo = 1234;" in the service definition. - // Allowed options are defined by ServiceOptions in descriptor.proto, and any - // available extensions of that message. - const ServiceOptions& options() const; - - // The number of methods this service defines. - int method_count() const; - // Gets a MethodDescriptor by index, where 0 <= index < method_count(). - // These are returned in the order they were defined in the .proto file. - const MethodDescriptor* method(int index) const; - - // Look up a MethodDescriptor by name. - const MethodDescriptor* FindMethodByName(ConstStringParam name) const; - - // See Descriptor::CopyTo(). - void CopyTo(ServiceDescriptorProto* proto) const; - - // See Descriptor::DebugString(). - std::string DebugString() const; - - // See Descriptor::DebugStringWithOptions(). - std::string DebugStringWithOptions(const DebugStringOptions& options) const; - - // Source Location --------------------------------------------------- - - // Updates |*out_location| to the source location of the complete - // extent of this service declaration. Returns false and leaves - // |*out_location| unchanged iff location information was not available. - bool GetSourceLocation(SourceLocation* out_location) const; - - private: - friend class Symbol; - typedef ServiceOptions OptionsType; - - // Allows access to GetLocationPath for annotations. - friend class io::Printer; - friend class compiler::cpp::Formatter; - - // See Descriptor::DebugString(). - void DebugString(std::string* contents, - const DebugStringOptions& options) const; - - // Walks up the descriptor tree to generate the source location path - // to this descriptor from the file root. - void GetLocationPath(std::vector<int>* output) const; - - // all_names_ = [name, full_name] - const std::string* all_names_; - const FileDescriptor* file_; - const ServiceOptions* options_; - MethodDescriptor* methods_; - int method_count_; - // IMPORTANT: If you add a new field, make sure to search for all instances - // of Allocate<ServiceDescriptor>() and AllocateArray<ServiceDescriptor>() in - // descriptor.cc and update them to initialize the field. - - // Must be constructed using DescriptorPool. - ServiceDescriptor() {} - friend class DescriptorBuilder; - friend class FileDescriptor; - friend class MethodDescriptor; - GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(ServiceDescriptor); -}; - -PROTOBUF_INTERNAL_CHECK_CLASS_SIZE(ServiceDescriptor, 48); - -// Describes an individual service method. To obtain a MethodDescriptor given -// a service, first get its ServiceDescriptor, then call -// ServiceDescriptor::FindMethodByName(). Use DescriptorPool to construct your -// own descriptors. -class PROTOBUF_EXPORT MethodDescriptor : private internal::SymbolBase { - public: - typedef MethodDescriptorProto Proto; - - // Name of this method, not including containing scope. - const std::string& name() const; - // The fully-qualified name of the method, scope delimited by periods. - const std::string& full_name() const; - // Index within the service's Descriptor. - int index() const; - - // The .proto file in which this method was defined. Never nullptr. - const FileDescriptor* file() const; - // Gets the service to which this method belongs. Never nullptr. - const ServiceDescriptor* service() const; - - // Gets the type of protocol message which this method accepts as input. - const Descriptor* input_type() const; - // Gets the type of protocol message which this message produces as output. - const Descriptor* output_type() const; - - // Gets whether the client streams multiple requests. - bool client_streaming() const; - // Gets whether the server streams multiple responses. - bool server_streaming() const; - - // Get options for this method. These are specified in the .proto file by - // placing lines like "option foo = 1234;" in curly-braces after a method - // declaration. Allowed options are defined by MethodOptions in - // descriptor.proto, and any available extensions of that message. - const MethodOptions& options() const; - - // See Descriptor::CopyTo(). - void CopyTo(MethodDescriptorProto* proto) const; - - // See Descriptor::DebugString(). - std::string DebugString() const; - - // See Descriptor::DebugStringWithOptions(). - std::string DebugStringWithOptions(const DebugStringOptions& options) const; - - // Source Location --------------------------------------------------- - - // Updates |*out_location| to the source location of the complete - // extent of this method declaration. Returns false and leaves - // |*out_location| unchanged iff location information was not available. - bool GetSourceLocation(SourceLocation* out_location) const; - - private: - friend class Symbol; - typedef MethodOptions OptionsType; - - // Allows access to GetLocationPath for annotations. - friend class io::Printer; - friend class compiler::cpp::Formatter; - - // See Descriptor::DebugString(). - void DebugString(int depth, std::string* contents, - const DebugStringOptions& options) const; - - // Walks up the descriptor tree to generate the source location path - // to this descriptor from the file root. - void GetLocationPath(std::vector<int>* output) const; - - bool client_streaming_; - bool server_streaming_; - // all_names_ = [name, full_name] - const std::string* all_names_; - const ServiceDescriptor* service_; - mutable internal::LazyDescriptor input_type_; - mutable internal::LazyDescriptor output_type_; - const MethodOptions* options_; - // IMPORTANT: If you add a new field, make sure to search for all instances - // of Allocate<MethodDescriptor>() and AllocateArray<MethodDescriptor>() in - // descriptor.cc and update them to initialize the field. - - // Must be constructed using DescriptorPool. - MethodDescriptor() {} - friend class DescriptorBuilder; - friend class ServiceDescriptor; - GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(MethodDescriptor); -}; - -PROTOBUF_INTERNAL_CHECK_CLASS_SIZE(MethodDescriptor, 64); - -// Describes a whole .proto file. To get the FileDescriptor for a compiled-in -// file, get the descriptor for something defined in that file and call -// descriptor->file(). Use DescriptorPool to construct your own descriptors. -class PROTOBUF_EXPORT FileDescriptor : private internal::SymbolBase { - public: - typedef FileDescriptorProto Proto; - - // The filename, relative to the source tree. - // e.g. "foo/bar/baz.proto" - const std::string& name() const; - - // The package, e.g. "google.protobuf.compiler". - const std::string& package() const; - - // The DescriptorPool in which this FileDescriptor and all its contents were - // allocated. Never nullptr. - const DescriptorPool* pool() const; - - // The number of files imported by this one. - int dependency_count() const; - // Gets an imported file by index, where 0 <= index < dependency_count(). - // These are returned in the order they were defined in the .proto file. - const FileDescriptor* dependency(int index) const; - - // The number of files public imported by this one. - // The public dependency list is a subset of the dependency list. - int public_dependency_count() const; - // Gets a public imported file by index, where 0 <= index < - // public_dependency_count(). - // These are returned in the order they were defined in the .proto file. - const FileDescriptor* public_dependency(int index) const; - - // The number of files that are imported for weak fields. - // The weak dependency list is a subset of the dependency list. - int weak_dependency_count() const; - // Gets a weak imported file by index, where 0 <= index < - // weak_dependency_count(). - // These are returned in the order they were defined in the .proto file. - const FileDescriptor* weak_dependency(int index) const; - - // Number of top-level message types defined in this file. (This does not - // include nested types.) - int message_type_count() const; - // Gets a top-level message type, where 0 <= index < message_type_count(). - // These are returned in the order they were defined in the .proto file. - const Descriptor* message_type(int index) const; - - // Number of top-level enum types defined in this file. (This does not - // include nested types.) - int enum_type_count() const; - // Gets a top-level enum type, where 0 <= index < enum_type_count(). - // These are returned in the order they were defined in the .proto file. - const EnumDescriptor* enum_type(int index) const; - - // Number of services defined in this file. - int service_count() const; - // Gets a service, where 0 <= index < service_count(). - // These are returned in the order they were defined in the .proto file. - const ServiceDescriptor* service(int index) const; - - // Number of extensions defined at file scope. (This does not include - // extensions nested within message types.) - int extension_count() const; - // Gets an extension's descriptor, where 0 <= index < extension_count(). - // These are returned in the order they were defined in the .proto file. - const FieldDescriptor* extension(int index) const; - - // Get options for this file. These are specified in the .proto file by - // placing lines like "option foo = 1234;" at the top level, outside of any - // other definitions. Allowed options are defined by FileOptions in - // descriptor.proto, and any available extensions of that message. - const FileOptions& options() const; - - // Syntax of this file. - enum Syntax { - SYNTAX_UNKNOWN = 0, - SYNTAX_PROTO2 = 2, - SYNTAX_PROTO3 = 3, - }; - Syntax syntax() const; - static const char* SyntaxName(Syntax syntax); - - // Find a top-level message type by name (not full_name). Returns nullptr if - // not found. - const Descriptor* FindMessageTypeByName(ConstStringParam name) const; - // Find a top-level enum type by name. Returns nullptr if not found. - const EnumDescriptor* FindEnumTypeByName(ConstStringParam name) const; - // Find an enum value defined in any top-level enum by name. Returns nullptr - // if not found. - const EnumValueDescriptor* FindEnumValueByName(ConstStringParam name) const; - // Find a service definition by name. Returns nullptr if not found. - const ServiceDescriptor* FindServiceByName(ConstStringParam name) const; - // Find a top-level extension definition by name. Returns nullptr if not - // found. - const FieldDescriptor* FindExtensionByName(ConstStringParam name) const; - // Similar to FindExtensionByName(), but searches by lowercased-name. See - // Descriptor::FindFieldByLowercaseName(). - const FieldDescriptor* FindExtensionByLowercaseName( - ConstStringParam name) const; - // Similar to FindExtensionByName(), but searches by camelcased-name. See - // Descriptor::FindFieldByCamelcaseName(). - const FieldDescriptor* FindExtensionByCamelcaseName( - ConstStringParam name) const; - - // See Descriptor::CopyTo(). - // Notes: - // - This method does NOT copy source code information since it is relatively - // large and rarely needed. See CopySourceCodeInfoTo() below. - void CopyTo(FileDescriptorProto* proto) const; - // Write the source code information of this FileDescriptor into the given - // FileDescriptorProto. See CopyTo() above. - void CopySourceCodeInfoTo(FileDescriptorProto* proto) const; - // Fill the json_name field of FieldDescriptorProto for all fields. Can only - // be called after CopyTo(). - void CopyJsonNameTo(FileDescriptorProto* proto) const; - - // See Descriptor::DebugString(). - std::string DebugString() const; - - // See Descriptor::DebugStringWithOptions(). - std::string DebugStringWithOptions(const DebugStringOptions& options) const; - - // Returns true if this is a placeholder for an unknown file. This will - // only be the case if this descriptor comes from a DescriptorPool - // with AllowUnknownDependencies() set. - bool is_placeholder() const; - - // Updates |*out_location| to the source location of the complete extent of - // this file declaration (namely, the empty path). - bool GetSourceLocation(SourceLocation* out_location) const; - - // Updates |*out_location| to the source location of the complete - // extent of the declaration or declaration-part denoted by |path|. - // Returns false and leaves |*out_location| unchanged iff location - // information was not available. (See SourceCodeInfo for - // description of path encoding.) - bool GetSourceLocation(const std::vector<int>& path, - SourceLocation* out_location) const; - - private: - friend class Symbol; - typedef FileOptions OptionsType; - - bool is_placeholder_; - // Indicates the FileDescriptor is completed building. Used to verify - // that type accessor functions that can possibly build a dependent file - // aren't called during the process of building the file. - bool finished_building_; - // Actually a `Syntax` but stored as uint8_t to save space. - uint8_t syntax_; - // This one is here to fill the padding. - int extension_count_; - - const std::string* name_; - const std::string* package_; - const DescriptorPool* pool_; - - // dependencies_once_ contain a once_flag followed by N NUL terminated - // strings. Dependencies that do not need to be loaded will be empty. ie just - // {'\0'} - internal::once_flag* dependencies_once_; - static void DependenciesOnceInit(const FileDescriptor* to_init); - void InternalDependenciesOnceInit() const; - - // These are arranged to minimize padding on 64-bit. - int dependency_count_; - int public_dependency_count_; - int weak_dependency_count_; - int message_type_count_; - int enum_type_count_; - int service_count_; - - mutable const FileDescriptor** dependencies_; - int* public_dependencies_; - int* weak_dependencies_; - Descriptor* message_types_; - EnumDescriptor* enum_types_; - ServiceDescriptor* services_; - FieldDescriptor* extensions_; - const FileOptions* options_; - - const FileDescriptorTables* tables_; - const SourceCodeInfo* source_code_info_; - - // IMPORTANT: If you add a new field, make sure to search for all instances - // of Allocate<FileDescriptor>() and AllocateArray<FileDescriptor>() in - // descriptor.cc and update them to initialize the field. - - FileDescriptor() {} - friend class DescriptorBuilder; - friend class DescriptorPool; - friend class Descriptor; - friend class FieldDescriptor; - friend class internal::LazyDescriptor; - friend class OneofDescriptor; - friend class EnumDescriptor; - friend class EnumValueDescriptor; - friend class MethodDescriptor; - friend class ServiceDescriptor; - GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(FileDescriptor); -}; - -PROTOBUF_INTERNAL_CHECK_CLASS_SIZE(FileDescriptor, 144); - -// =================================================================== - -// Used to construct descriptors. -// -// Normally you won't want to build your own descriptors. Message classes -// constructed by the protocol compiler will provide them for you. However, -// if you are implementing Message on your own, or if you are writing a -// program which can operate on totally arbitrary types and needs to load -// them from some sort of database, you might need to. -// -// Since Descriptors are composed of a whole lot of cross-linked bits of -// data that would be a pain to put together manually, the -// DescriptorPool class is provided to make the process easier. It can -// take a FileDescriptorProto (defined in descriptor.proto), validate it, -// and convert it to a set of nicely cross-linked Descriptors. -// -// DescriptorPool also helps with memory management. Descriptors are -// composed of many objects containing static data and pointers to each -// other. In all likelihood, when it comes time to delete this data, -// you'll want to delete it all at once. In fact, it is not uncommon to -// have a whole pool of descriptors all cross-linked with each other which -// you wish to delete all at once. This class represents such a pool, and -// handles the memory management for you. -// -// You can also search for descriptors within a DescriptorPool by name, and -// extensions by number. -class PROTOBUF_EXPORT DescriptorPool { - public: - // Create a normal, empty DescriptorPool. - DescriptorPool(); - - // Constructs a DescriptorPool that, when it can't find something among the - // descriptors already in the pool, looks for it in the given - // DescriptorDatabase. - // Notes: - // - If a DescriptorPool is constructed this way, its BuildFile*() methods - // must not be called (they will assert-fail). The only way to populate - // the pool with descriptors is to call the Find*By*() methods. - // - The Find*By*() methods may block the calling thread if the - // DescriptorDatabase blocks. This in turn means that parsing messages - // may block if they need to look up extensions. - // - The Find*By*() methods will use mutexes for thread-safety, thus making - // them slower even when they don't have to fall back to the database. - // In fact, even the Find*By*() methods of descriptor objects owned by - // this pool will be slower, since they will have to obtain locks too. - // - An ErrorCollector may optionally be given to collect validation errors - // in files loaded from the database. If not given, errors will be printed - // to GOOGLE_LOG(ERROR). Remember that files are built on-demand, so this - // ErrorCollector may be called from any thread that calls one of the - // Find*By*() methods. - // - The DescriptorDatabase must not be mutated during the lifetime of - // the DescriptorPool. Even if the client takes care to avoid data races, - // changes to the content of the DescriptorDatabase may not be reflected - // in subsequent lookups in the DescriptorPool. - class ErrorCollector; - explicit DescriptorPool(DescriptorDatabase* fallback_database, - ErrorCollector* error_collector = nullptr); - - ~DescriptorPool(); - - // Get a pointer to the generated pool. Generated protocol message classes - // which are compiled into the binary will allocate their descriptors in - // this pool. Do not add your own descriptors to this pool. - static const DescriptorPool* generated_pool(); - - - // Find a FileDescriptor in the pool by file name. Returns nullptr if not - // found. - const FileDescriptor* FindFileByName(ConstStringParam name) const; - - // Find the FileDescriptor in the pool which defines the given symbol. - // If any of the Find*ByName() methods below would succeed, then this is - // equivalent to calling that method and calling the result's file() method. - // Otherwise this returns nullptr. - const FileDescriptor* FindFileContainingSymbol( - ConstStringParam symbol_name) const; - - // Looking up descriptors ------------------------------------------ - // These find descriptors by fully-qualified name. These will find both - // top-level descriptors and nested descriptors. They return nullptr if not - // found. - - const Descriptor* FindMessageTypeByName(ConstStringParam name) const; - const FieldDescriptor* FindFieldByName(ConstStringParam name) const; - const FieldDescriptor* FindExtensionByName(ConstStringParam name) const; - const OneofDescriptor* FindOneofByName(ConstStringParam name) const; - const EnumDescriptor* FindEnumTypeByName(ConstStringParam name) const; - const EnumValueDescriptor* FindEnumValueByName(ConstStringParam name) const; - const ServiceDescriptor* FindServiceByName(ConstStringParam name) const; - const MethodDescriptor* FindMethodByName(ConstStringParam name) const; - - // Finds an extension of the given type by number. The extendee must be - // a member of this DescriptorPool or one of its underlays. - const FieldDescriptor* FindExtensionByNumber(const Descriptor* extendee, - int number) const; - - // Finds an extension of the given type by its printable name. - // See comments above PrintableNameForExtension() for the definition of - // "printable name". The extendee must be a member of this DescriptorPool - // or one of its underlays. Returns nullptr if there is no known message - // extension with the given printable name. - const FieldDescriptor* FindExtensionByPrintableName( - const Descriptor* extendee, ConstStringParam printable_name) const; - - // Finds extensions of extendee. The extensions will be appended to - // out in an undefined order. Only extensions defined directly in - // this DescriptorPool or one of its underlays are guaranteed to be - // found: extensions defined in the fallback database might not be found - // depending on the database implementation. - void FindAllExtensions(const Descriptor* extendee, - std::vector<const FieldDescriptor*>* out) const; - - // Building descriptors -------------------------------------------- - - // When converting a FileDescriptorProto to a FileDescriptor, various - // errors might be detected in the input. The caller may handle these - // programmatically by implementing an ErrorCollector. - class PROTOBUF_EXPORT ErrorCollector { - public: - inline ErrorCollector() {} - virtual ~ErrorCollector(); - - // These constants specify what exact part of the construct is broken. - // This is useful e.g. for mapping the error back to an exact location - // in a .proto file. - enum ErrorLocation { - NAME, // the symbol name, or the package name for files - NUMBER, // field or extension range number - TYPE, // field type - EXTENDEE, // field extendee - DEFAULT_VALUE, // field default value - INPUT_TYPE, // method input type - OUTPUT_TYPE, // method output type - OPTION_NAME, // name in assignment - OPTION_VALUE, // value in option assignment - IMPORT, // import error - OTHER // some other problem - }; - - // Reports an error in the FileDescriptorProto. Use this function if the - // problem occurred should interrupt building the FileDescriptorProto. - virtual void AddError( - const std::string& filename, // File name in which the error occurred. - const std::string& element_name, // Full name of the erroneous element. - const Message* descriptor, // Descriptor of the erroneous element. - ErrorLocation location, // One of the location constants, above. - const std::string& message // Human-readable error message. - ) = 0; - - // Reports a warning in the FileDescriptorProto. Use this function if the - // problem occurred should NOT interrupt building the FileDescriptorProto. - virtual void AddWarning( - const std::string& /*filename*/, // File name in which the error - // occurred. - const std::string& /*element_name*/, // Full name of the erroneous - // element. - const Message* /*descriptor*/, // Descriptor of the erroneous element. - ErrorLocation /*location*/, // One of the location constants, above. - const std::string& /*message*/ // Human-readable error message. - ) {} - - private: - GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(ErrorCollector); - }; - - // Convert the FileDescriptorProto to real descriptors and place them in - // this DescriptorPool. All dependencies of the file must already be in - // the pool. Returns the resulting FileDescriptor, or nullptr if there were - // problems with the input (e.g. the message was invalid, or dependencies - // were missing). Details about the errors are written to GOOGLE_LOG(ERROR). - const FileDescriptor* BuildFile(const FileDescriptorProto& proto); - - // Same as BuildFile() except errors are sent to the given ErrorCollector. - const FileDescriptor* BuildFileCollectingErrors( - const FileDescriptorProto& proto, ErrorCollector* error_collector); - - // By default, it is an error if a FileDescriptorProto contains references - // to types or other files that are not found in the DescriptorPool (or its - // backing DescriptorDatabase, if any). If you call - // AllowUnknownDependencies(), however, then unknown types and files - // will be replaced by placeholder descriptors (which can be identified by - // the is_placeholder() method). This can allow you to - // perform some useful operations with a .proto file even if you do not - // have access to other .proto files on which it depends. However, some - // heuristics must be used to fill in the gaps in information, and these - // can lead to descriptors which are inaccurate. For example, the - // DescriptorPool may be forced to guess whether an unknown type is a message - // or an enum, as well as what package it resides in. Furthermore, - // placeholder types will not be discoverable via FindMessageTypeByName() - // and similar methods, which could confuse some descriptor-based algorithms. - // Generally, the results of this option should be handled with extreme care. - void AllowUnknownDependencies() { allow_unknown_ = true; } - - // By default, weak imports are allowed to be missing, in which case we will - // use a placeholder for the dependency and convert the field to be an Empty - // message field. If you call EnforceWeakDependencies(true), however, the - // DescriptorPool will report a import not found error. - void EnforceWeakDependencies(bool enforce) { enforce_weak_ = enforce; } - - // Internal stuff -------------------------------------------------- - // These methods MUST NOT be called from outside the proto2 library. - // These methods may contain hidden pitfalls and may be removed in a - // future library version. - - // Create a DescriptorPool which is overlaid on top of some other pool. - // If you search for a descriptor in the overlay and it is not found, the - // underlay will be searched as a backup. If the underlay has its own - // underlay, that will be searched next, and so on. This also means that - // files built in the overlay will be cross-linked with the underlay's - // descriptors if necessary. The underlay remains property of the caller; - // it must remain valid for the lifetime of the newly-constructed pool. - // - // Example: Say you want to parse a .proto file at runtime in order to use - // its type with a DynamicMessage. Say this .proto file has dependencies, - // but you know that all the dependencies will be things that are already - // compiled into the binary. For ease of use, you'd like to load the types - // right out of generated_pool() rather than have to parse redundant copies - // of all these .protos and runtime. But, you don't want to add the parsed - // types directly into generated_pool(): this is not allowed, and would be - // bad design anyway. So, instead, you could use generated_pool() as an - // underlay for a new DescriptorPool in which you add only the new file. - // - // WARNING: Use of underlays can lead to many subtle gotchas. Instead, - // try to formulate what you want to do in terms of DescriptorDatabases. - explicit DescriptorPool(const DescriptorPool* underlay); - - // Called by generated classes at init time to add their descriptors to - // generated_pool. Do NOT call this in your own code! filename must be a - // permanent string (e.g. a string literal). - static void InternalAddGeneratedFile(const void* encoded_file_descriptor, - int size); - - // Disallow [enforce_utf8 = false] in .proto files. - void DisallowEnforceUtf8() { disallow_enforce_utf8_ = true; } - - - // For internal use only: Gets a non-const pointer to the generated pool. - // This is called at static-initialization time only, so thread-safety is - // not a concern. If both an underlay and a fallback database are present, - // the underlay takes precedence. - static DescriptorPool* internal_generated_pool(); - - // For internal use only: Gets a non-const pointer to the generated - // descriptor database. - // Only used for testing. - static DescriptorDatabase* internal_generated_database(); - - // For internal use only: Changes the behavior of BuildFile() such that it - // allows the file to make reference to message types declared in other files - // which it did not officially declare as dependencies. - void InternalDontEnforceDependencies(); - - // For internal use only: Enables lazy building of dependencies of a file. - // Delay the building of dependencies of a file descriptor until absolutely - // necessary, like when message_type() is called on a field that is defined - // in that dependency's file. This will cause functional issues if a proto - // or one of its dependencies has errors. Should only be enabled for the - // generated_pool_ (because no descriptor build errors are guaranteed by - // the compilation generation process), testing, or if a lack of descriptor - // build errors can be guaranteed for a pool. - void InternalSetLazilyBuildDependencies() { - lazily_build_dependencies_ = true; - // This needs to be set when lazily building dependencies, as it breaks - // dependency checking. - InternalDontEnforceDependencies(); - } - - // For internal use only. - void internal_set_underlay(const DescriptorPool* underlay) { - underlay_ = underlay; - } - - // For internal (unit test) use only: Returns true if a FileDescriptor has - // been constructed for the given file, false otherwise. Useful for testing - // lazy descriptor initialization behavior. - bool InternalIsFileLoaded(ConstStringParam filename) const; - - // Add a file to unused_import_track_files_. DescriptorBuilder will log - // warnings or errors for those files if there is any unused import. - void AddUnusedImportTrackFile(ConstStringParam file_name, - bool is_error = false); - void ClearUnusedImportTrackFiles(); - - private: - friend class Descriptor; - friend class internal::LazyDescriptor; - friend class FieldDescriptor; - friend class EnumDescriptor; - friend class ServiceDescriptor; - friend class MethodDescriptor; - friend class FileDescriptor; - friend class DescriptorBuilder; - friend class FileDescriptorTables; - - // Return true if the given name is a sub-symbol of any non-package - // descriptor that already exists in the descriptor pool. (The full - // definition of such types is already known.) - bool IsSubSymbolOfBuiltType(StringPiece name) const; - - // Tries to find something in the fallback database and link in the - // corresponding proto file. Returns true if successful, in which case - // the caller should search for the thing again. These are declared - // const because they are called by (semantically) const methods. - bool TryFindFileInFallbackDatabase(StringPiece name) const; - bool TryFindSymbolInFallbackDatabase(StringPiece name) const; - bool TryFindExtensionInFallbackDatabase(const Descriptor* containing_type, - int field_number) const; - - // This internal find extension method only check with its table and underlay - // descriptor_pool's table. It does not check with fallback DB and no - // additional proto file will be build in this method. - const FieldDescriptor* InternalFindExtensionByNumberNoLock( - const Descriptor* extendee, int number) const; - - // Like BuildFile() but called internally when the file has been loaded from - // fallback_database_. Declared const because it is called by (semantically) - // const methods. - const FileDescriptor* BuildFileFromDatabase( - const FileDescriptorProto& proto) const; - - // Helper for when lazily_build_dependencies_ is set, can look up a symbol - // after the file's descriptor is built, and can build the file where that - // symbol is defined if necessary. Will create a placeholder if the type - // doesn't exist in the fallback database, or the file doesn't build - // successfully. - Symbol CrossLinkOnDemandHelper(StringPiece name, - bool expecting_enum) const; - - // Create a placeholder FileDescriptor of the specified name - FileDescriptor* NewPlaceholderFile(StringPiece name) const; - FileDescriptor* NewPlaceholderFileWithMutexHeld( - StringPiece name, internal::FlatAllocator& alloc) const; - - enum PlaceholderType { - PLACEHOLDER_MESSAGE, - PLACEHOLDER_ENUM, - PLACEHOLDER_EXTENDABLE_MESSAGE - }; - // Create a placeholder Descriptor of the specified name - Symbol NewPlaceholder(StringPiece name, - PlaceholderType placeholder_type) const; - Symbol NewPlaceholderWithMutexHeld(StringPiece name, - PlaceholderType placeholder_type) const; - - // If fallback_database_ is nullptr, this is nullptr. Otherwise, this is a - // mutex which must be locked while accessing tables_. - internal::WrappedMutex* mutex_; - - // See constructor. - DescriptorDatabase* fallback_database_; - ErrorCollector* default_error_collector_; - const DescriptorPool* underlay_; - - // This class contains a lot of hash maps with complicated types that - // we'd like to keep out of the header. - class Tables; - std::unique_ptr<Tables> tables_; - - bool enforce_dependencies_; - bool lazily_build_dependencies_; - bool allow_unknown_; - bool enforce_weak_; - bool disallow_enforce_utf8_; - - // Set of files to track for unused imports. The bool value when true means - // unused imports are treated as errors (and as warnings when false). - std::map<std::string, bool> unused_import_track_files_; - - GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(DescriptorPool); -}; - - -// inline methods ==================================================== - -// These macros makes this repetitive code more readable. -#define PROTOBUF_DEFINE_ACCESSOR(CLASS, FIELD, TYPE) \ - inline TYPE CLASS::FIELD() const { return FIELD##_; } - -// Strings fields are stored as pointers but returned as const references. -#define PROTOBUF_DEFINE_STRING_ACCESSOR(CLASS, FIELD) \ - inline const std::string& CLASS::FIELD() const { return *FIELD##_; } - -// Name and full name are stored in a single array to save space. -#define PROTOBUF_DEFINE_NAME_ACCESSOR(CLASS) \ - inline const std::string& CLASS::name() const { return all_names_[0]; } \ - inline const std::string& CLASS::full_name() const { return all_names_[1]; } - -// Arrays take an index parameter, obviously. -#define PROTOBUF_DEFINE_ARRAY_ACCESSOR(CLASS, FIELD, TYPE) \ - inline TYPE CLASS::FIELD(int index) const { return FIELD##s_ + index; } - -#define PROTOBUF_DEFINE_OPTIONS_ACCESSOR(CLASS, TYPE) \ - inline const TYPE& CLASS::options() const { return *options_; } - -PROTOBUF_DEFINE_NAME_ACCESSOR(Descriptor) -PROTOBUF_DEFINE_ACCESSOR(Descriptor, file, const FileDescriptor*) -PROTOBUF_DEFINE_ACCESSOR(Descriptor, containing_type, const Descriptor*) - -PROTOBUF_DEFINE_ACCESSOR(Descriptor, field_count, int) -PROTOBUF_DEFINE_ACCESSOR(Descriptor, oneof_decl_count, int) -PROTOBUF_DEFINE_ACCESSOR(Descriptor, real_oneof_decl_count, int) -PROTOBUF_DEFINE_ACCESSOR(Descriptor, nested_type_count, int) -PROTOBUF_DEFINE_ACCESSOR(Descriptor, enum_type_count, int) - -PROTOBUF_DEFINE_ARRAY_ACCESSOR(Descriptor, field, const FieldDescriptor*) -PROTOBUF_DEFINE_ARRAY_ACCESSOR(Descriptor, oneof_decl, const OneofDescriptor*) -PROTOBUF_DEFINE_ARRAY_ACCESSOR(Descriptor, nested_type, const Descriptor*) -PROTOBUF_DEFINE_ARRAY_ACCESSOR(Descriptor, enum_type, const EnumDescriptor*) - -PROTOBUF_DEFINE_ACCESSOR(Descriptor, extension_range_count, int) -PROTOBUF_DEFINE_ACCESSOR(Descriptor, extension_count, int) -PROTOBUF_DEFINE_ARRAY_ACCESSOR(Descriptor, extension_range, - const Descriptor::ExtensionRange*) -PROTOBUF_DEFINE_ARRAY_ACCESSOR(Descriptor, extension, const FieldDescriptor*) - -PROTOBUF_DEFINE_ACCESSOR(Descriptor, reserved_range_count, int) -PROTOBUF_DEFINE_ARRAY_ACCESSOR(Descriptor, reserved_range, - const Descriptor::ReservedRange*) -PROTOBUF_DEFINE_ACCESSOR(Descriptor, reserved_name_count, int) - -PROTOBUF_DEFINE_OPTIONS_ACCESSOR(Descriptor, MessageOptions) -PROTOBUF_DEFINE_ACCESSOR(Descriptor, is_placeholder, bool) - -PROTOBUF_DEFINE_NAME_ACCESSOR(FieldDescriptor) -PROTOBUF_DEFINE_ACCESSOR(FieldDescriptor, file, const FileDescriptor*) -PROTOBUF_DEFINE_ACCESSOR(FieldDescriptor, number, int) -PROTOBUF_DEFINE_ACCESSOR(FieldDescriptor, is_extension, bool) -PROTOBUF_DEFINE_ACCESSOR(FieldDescriptor, containing_type, const Descriptor*) -PROTOBUF_DEFINE_OPTIONS_ACCESSOR(FieldDescriptor, FieldOptions) -PROTOBUF_DEFINE_ACCESSOR(FieldDescriptor, has_default_value, bool) -PROTOBUF_DEFINE_ACCESSOR(FieldDescriptor, has_json_name, bool) -PROTOBUF_DEFINE_ACCESSOR(FieldDescriptor, default_value_int32_t, int32_t) -PROTOBUF_DEFINE_ACCESSOR(FieldDescriptor, default_value_int64_t, int64_t) -PROTOBUF_DEFINE_ACCESSOR(FieldDescriptor, default_value_uint32_t, uint32_t) -PROTOBUF_DEFINE_ACCESSOR(FieldDescriptor, default_value_uint64_t, uint64_t) -PROTOBUF_DEFINE_ACCESSOR(FieldDescriptor, default_value_float, float) -PROTOBUF_DEFINE_ACCESSOR(FieldDescriptor, default_value_double, double) -PROTOBUF_DEFINE_ACCESSOR(FieldDescriptor, default_value_bool, bool) -PROTOBUF_DEFINE_STRING_ACCESSOR(FieldDescriptor, default_value_string) - -PROTOBUF_DEFINE_NAME_ACCESSOR(OneofDescriptor) -PROTOBUF_DEFINE_ACCESSOR(OneofDescriptor, containing_type, const Descriptor*) -PROTOBUF_DEFINE_ACCESSOR(OneofDescriptor, field_count, int) -PROTOBUF_DEFINE_ARRAY_ACCESSOR(OneofDescriptor, field, const FieldDescriptor*) -PROTOBUF_DEFINE_OPTIONS_ACCESSOR(OneofDescriptor, OneofOptions) - -PROTOBUF_DEFINE_NAME_ACCESSOR(EnumDescriptor) -PROTOBUF_DEFINE_ACCESSOR(EnumDescriptor, file, const FileDescriptor*) -PROTOBUF_DEFINE_ACCESSOR(EnumDescriptor, containing_type, const Descriptor*) -PROTOBUF_DEFINE_ACCESSOR(EnumDescriptor, value_count, int) -PROTOBUF_DEFINE_ARRAY_ACCESSOR(EnumDescriptor, value, - const EnumValueDescriptor*) -PROTOBUF_DEFINE_OPTIONS_ACCESSOR(EnumDescriptor, EnumOptions) -PROTOBUF_DEFINE_ACCESSOR(EnumDescriptor, is_placeholder, bool) -PROTOBUF_DEFINE_ACCESSOR(EnumDescriptor, reserved_range_count, int) -PROTOBUF_DEFINE_ARRAY_ACCESSOR(EnumDescriptor, reserved_range, - const EnumDescriptor::ReservedRange*) -PROTOBUF_DEFINE_ACCESSOR(EnumDescriptor, reserved_name_count, int) - -PROTOBUF_DEFINE_NAME_ACCESSOR(EnumValueDescriptor) -PROTOBUF_DEFINE_ACCESSOR(EnumValueDescriptor, number, int) -PROTOBUF_DEFINE_ACCESSOR(EnumValueDescriptor, type, const EnumDescriptor*) -PROTOBUF_DEFINE_OPTIONS_ACCESSOR(EnumValueDescriptor, EnumValueOptions) - -PROTOBUF_DEFINE_NAME_ACCESSOR(ServiceDescriptor) -PROTOBUF_DEFINE_ACCESSOR(ServiceDescriptor, file, const FileDescriptor*) -PROTOBUF_DEFINE_ACCESSOR(ServiceDescriptor, method_count, int) -PROTOBUF_DEFINE_ARRAY_ACCESSOR(ServiceDescriptor, method, - const MethodDescriptor*) -PROTOBUF_DEFINE_OPTIONS_ACCESSOR(ServiceDescriptor, ServiceOptions) - -PROTOBUF_DEFINE_NAME_ACCESSOR(MethodDescriptor) -PROTOBUF_DEFINE_ACCESSOR(MethodDescriptor, service, const ServiceDescriptor*) -PROTOBUF_DEFINE_OPTIONS_ACCESSOR(MethodDescriptor, MethodOptions) -PROTOBUF_DEFINE_ACCESSOR(MethodDescriptor, client_streaming, bool) -PROTOBUF_DEFINE_ACCESSOR(MethodDescriptor, server_streaming, bool) - -PROTOBUF_DEFINE_STRING_ACCESSOR(FileDescriptor, name) -PROTOBUF_DEFINE_STRING_ACCESSOR(FileDescriptor, package) -PROTOBUF_DEFINE_ACCESSOR(FileDescriptor, pool, const DescriptorPool*) -PROTOBUF_DEFINE_ACCESSOR(FileDescriptor, dependency_count, int) -PROTOBUF_DEFINE_ACCESSOR(FileDescriptor, public_dependency_count, int) -PROTOBUF_DEFINE_ACCESSOR(FileDescriptor, weak_dependency_count, int) -PROTOBUF_DEFINE_ACCESSOR(FileDescriptor, message_type_count, int) -PROTOBUF_DEFINE_ACCESSOR(FileDescriptor, enum_type_count, int) -PROTOBUF_DEFINE_ACCESSOR(FileDescriptor, service_count, int) -PROTOBUF_DEFINE_ACCESSOR(FileDescriptor, extension_count, int) -PROTOBUF_DEFINE_OPTIONS_ACCESSOR(FileDescriptor, FileOptions) -PROTOBUF_DEFINE_ACCESSOR(FileDescriptor, is_placeholder, bool) - -PROTOBUF_DEFINE_ARRAY_ACCESSOR(FileDescriptor, message_type, const Descriptor*) -PROTOBUF_DEFINE_ARRAY_ACCESSOR(FileDescriptor, enum_type, const EnumDescriptor*) -PROTOBUF_DEFINE_ARRAY_ACCESSOR(FileDescriptor, service, - const ServiceDescriptor*) -PROTOBUF_DEFINE_ARRAY_ACCESSOR(FileDescriptor, extension, - const FieldDescriptor*) - -#undef PROTOBUF_DEFINE_ACCESSOR -#undef PROTOBUF_DEFINE_STRING_ACCESSOR -#undef PROTOBUF_DEFINE_ARRAY_ACCESSOR - -// A few accessors differ from the macros... - -inline Descriptor::WellKnownType Descriptor::well_known_type() const { - return static_cast<Descriptor::WellKnownType>(well_known_type_); -} - -inline bool Descriptor::IsExtensionNumber(int number) const { - return FindExtensionRangeContainingNumber(number) != nullptr; -} - -inline bool Descriptor::IsReservedNumber(int number) const { - return FindReservedRangeContainingNumber(number) != nullptr; -} - -inline bool Descriptor::IsReservedName(ConstStringParam name) const { - for (int i = 0; i < reserved_name_count(); i++) { - if (name == static_cast<ConstStringParam>(reserved_name(i))) { - return true; - } - } - return false; -} - -// Can't use PROTOBUF_DEFINE_ARRAY_ACCESSOR because reserved_names_ is actually -// an array of pointers rather than the usual array of objects. -inline const std::string& Descriptor::reserved_name(int index) const { - return *reserved_names_[index]; -} - -inline bool EnumDescriptor::IsReservedNumber(int number) const { - return FindReservedRangeContainingNumber(number) != nullptr; -} - -inline bool EnumDescriptor::IsReservedName(ConstStringParam name) const { - for (int i = 0; i < reserved_name_count(); i++) { - if (name == static_cast<ConstStringParam>(reserved_name(i))) { - return true; - } - } - return false; -} - -// Can't use PROTOBUF_DEFINE_ARRAY_ACCESSOR because reserved_names_ is actually -// an array of pointers rather than the usual array of objects. -inline const std::string& EnumDescriptor::reserved_name(int index) const { - return *reserved_names_[index]; -} - -inline const std::string& FieldDescriptor::lowercase_name() const { - return all_names_[lowercase_name_index_]; -} - -inline const std::string& FieldDescriptor::camelcase_name() const { - return all_names_[camelcase_name_index_]; -} - -inline const std::string& FieldDescriptor::json_name() const { - return all_names_[json_name_index_]; -} - -inline const OneofDescriptor* FieldDescriptor::containing_oneof() const { - return is_oneof_ ? scope_.containing_oneof : nullptr; -} - -inline int FieldDescriptor::index_in_oneof() const { - GOOGLE_DCHECK(is_oneof_); - return static_cast<int>(this - scope_.containing_oneof->field(0)); -} - -inline const Descriptor* FieldDescriptor::extension_scope() const { - GOOGLE_CHECK(is_extension_); - return scope_.extension_scope; -} - -inline FieldDescriptor::Label FieldDescriptor::label() const { - return static_cast<Label>(label_); -} - -inline FieldDescriptor::Type FieldDescriptor::type() const { - if (type_once_) { - internal::call_once(*type_once_, &FieldDescriptor::TypeOnceInit, this); - } - return static_cast<Type>(type_); -} - -inline bool FieldDescriptor::is_required() const { - return label() == LABEL_REQUIRED; -} - -inline bool FieldDescriptor::is_optional() const { - return label() == LABEL_OPTIONAL; -} - -inline bool FieldDescriptor::is_repeated() const { - return label() == LABEL_REPEATED; -} - -inline bool FieldDescriptor::is_packable() const { - return is_repeated() && IsTypePackable(type()); -} - -inline bool FieldDescriptor::is_map() const { - return type() == TYPE_MESSAGE && is_map_message_type(); -} - -inline bool FieldDescriptor::has_optional_keyword() const { - return proto3_optional_ || - (file()->syntax() == FileDescriptor::SYNTAX_PROTO2 && is_optional() && - !containing_oneof()); -} - -inline const OneofDescriptor* FieldDescriptor::real_containing_oneof() const { - auto* oneof = containing_oneof(); - return oneof && !oneof->is_synthetic() ? oneof : nullptr; -} - -inline bool FieldDescriptor::has_presence() const { - if (is_repeated()) return false; - return cpp_type() == CPPTYPE_MESSAGE || containing_oneof() || - file()->syntax() == FileDescriptor::SYNTAX_PROTO2; -} - -// To save space, index() is computed by looking at the descriptor's position -// in the parent's array of children. -inline int FieldDescriptor::index() const { - if (!is_extension_) { - return static_cast<int>(this - containing_type()->fields_); - } else if (extension_scope() != nullptr) { - return static_cast<int>(this - extension_scope()->extensions_); - } else { - return static_cast<int>(this - file_->extensions_); - } -} - -inline int Descriptor::index() const { - if (containing_type_ == nullptr) { - return static_cast<int>(this - file_->message_types_); - } else { - return static_cast<int>(this - containing_type_->nested_types_); - } -} - -inline const FileDescriptor* OneofDescriptor::file() const { - return containing_type()->file(); -} - -inline int OneofDescriptor::index() const { - return static_cast<int>(this - containing_type_->oneof_decls_); -} - -inline bool OneofDescriptor::is_synthetic() const { - return field_count() == 1 && field(0)->proto3_optional_; -} - -inline int EnumDescriptor::index() const { - if (containing_type_ == nullptr) { - return static_cast<int>(this - file_->enum_types_); - } else { - return static_cast<int>(this - containing_type_->enum_types_); - } -} - -inline const FileDescriptor* EnumValueDescriptor::file() const { - return type()->file(); -} - -inline int EnumValueDescriptor::index() const { - return static_cast<int>(this - type_->values_); -} - -inline int ServiceDescriptor::index() const { - return static_cast<int>(this - file_->services_); -} - -inline const FileDescriptor* MethodDescriptor::file() const { - return service()->file(); -} - -inline int MethodDescriptor::index() const { - return static_cast<int>(this - service_->methods_); -} - -inline const char* FieldDescriptor::type_name() const { - return kTypeToName[type()]; -} - -inline FieldDescriptor::CppType FieldDescriptor::cpp_type() const { - return kTypeToCppTypeMap[type()]; -} - -inline const char* FieldDescriptor::cpp_type_name() const { - return kCppTypeToName[kTypeToCppTypeMap[type()]]; -} - -inline FieldDescriptor::CppType FieldDescriptor::TypeToCppType(Type type) { - return kTypeToCppTypeMap[type]; -} - -inline const char* FieldDescriptor::TypeName(Type type) { - return kTypeToName[type]; -} - -inline const char* FieldDescriptor::CppTypeName(CppType cpp_type) { - return kCppTypeToName[cpp_type]; -} - -inline bool FieldDescriptor::IsTypePackable(Type field_type) { - return (field_type != FieldDescriptor::TYPE_STRING && - field_type != FieldDescriptor::TYPE_GROUP && - field_type != FieldDescriptor::TYPE_MESSAGE && - field_type != FieldDescriptor::TYPE_BYTES); -} - -inline const FileDescriptor* FileDescriptor::public_dependency( - int index) const { - return dependency(public_dependencies_[index]); -} - -inline const FileDescriptor* FileDescriptor::weak_dependency(int index) const { - return dependency(weak_dependencies_[index]); -} - -inline FileDescriptor::Syntax FileDescriptor::syntax() const { - return static_cast<Syntax>(syntax_); -} - -} // namespace protobuf -} // namespace google - -#undef PROTOBUF_INTERNAL_CHECK_CLASS_SIZE -#include <google/protobuf/port_undef.inc> - -#endif // GOOGLE_PROTOBUF_DESCRIPTOR_H__ diff --git a/include/google/protobuf/descriptor.pb.h b/include/google/protobuf/descriptor.pb.h deleted file mode 100644 index 27c3ce49e6..0000000000 --- a/include/google/protobuf/descriptor.pb.h +++ /dev/null @@ -1,14821 +0,0 @@ -// Generated by the protocol buffer compiler. DO NOT EDIT! -// source: google/protobuf/descriptor.proto - -#ifndef GOOGLE_PROTOBUF_INCLUDED_google_2fprotobuf_2fdescriptor_2eproto -#define GOOGLE_PROTOBUF_INCLUDED_google_2fprotobuf_2fdescriptor_2eproto - -#include <limits> -#include <string> - -#include <google/protobuf/port_def.inc> -#if PROTOBUF_VERSION < 3021000 -#error This file was generated by a newer version of protoc which is -#error incompatible with your Protocol Buffer headers. Please update -#error your headers. -#endif -#if 3021004 < PROTOBUF_MIN_PROTOC_VERSION -#error This file was generated by an older version of protoc which is -#error incompatible with your Protocol Buffer headers. Please -#error regenerate this file with a newer version of protoc. -#endif - -#include <google/protobuf/port_undef.inc> -#include <google/protobuf/io/coded_stream.h> -#include <google/protobuf/arena.h> -#include <google/protobuf/arenastring.h> -#include <google/protobuf/generated_message_util.h> -#include <google/protobuf/metadata_lite.h> -#include <google/protobuf/generated_message_reflection.h> -#include <google/protobuf/message.h> -#include <google/protobuf/repeated_field.h> // IWYU pragma: export -#include <google/protobuf/extension_set.h> // IWYU pragma: export -#include <google/protobuf/generated_enum_reflection.h> -#include <google/protobuf/unknown_field_set.h> -// @@protoc_insertion_point(includes) -#include <google/protobuf/port_def.inc> -#define PROTOBUF_INTERNAL_EXPORT_google_2fprotobuf_2fdescriptor_2eproto PROTOBUF_EXPORT -PROTOBUF_NAMESPACE_OPEN -namespace internal { -class AnyMetadata; -} // namespace internal -PROTOBUF_NAMESPACE_CLOSE - -// Internal implementation detail -- do not use these members. -struct PROTOBUF_EXPORT TableStruct_google_2fprotobuf_2fdescriptor_2eproto { - static const uint32_t offsets[]; -}; -PROTOBUF_EXPORT extern const ::PROTOBUF_NAMESPACE_ID::internal::DescriptorTable descriptor_table_google_2fprotobuf_2fdescriptor_2eproto; -PROTOBUF_NAMESPACE_OPEN -class DescriptorProto; -struct DescriptorProtoDefaultTypeInternal; -PROTOBUF_EXPORT extern DescriptorProtoDefaultTypeInternal _DescriptorProto_default_instance_; -class DescriptorProto_ExtensionRange; -struct DescriptorProto_ExtensionRangeDefaultTypeInternal; -PROTOBUF_EXPORT extern DescriptorProto_ExtensionRangeDefaultTypeInternal _DescriptorProto_ExtensionRange_default_instance_; -class DescriptorProto_ReservedRange; -struct DescriptorProto_ReservedRangeDefaultTypeInternal; -PROTOBUF_EXPORT extern DescriptorProto_ReservedRangeDefaultTypeInternal _DescriptorProto_ReservedRange_default_instance_; -class EnumDescriptorProto; -struct EnumDescriptorProtoDefaultTypeInternal; -PROTOBUF_EXPORT extern EnumDescriptorProtoDefaultTypeInternal _EnumDescriptorProto_default_instance_; -class EnumDescriptorProto_EnumReservedRange; -struct EnumDescriptorProto_EnumReservedRangeDefaultTypeInternal; -PROTOBUF_EXPORT extern EnumDescriptorProto_EnumReservedRangeDefaultTypeInternal _EnumDescriptorProto_EnumReservedRange_default_instance_; -class EnumOptions; -struct EnumOptionsDefaultTypeInternal; -PROTOBUF_EXPORT extern EnumOptionsDefaultTypeInternal _EnumOptions_default_instance_; -class EnumValueDescriptorProto; -struct EnumValueDescriptorProtoDefaultTypeInternal; -PROTOBUF_EXPORT extern EnumValueDescriptorProtoDefaultTypeInternal _EnumValueDescriptorProto_default_instance_; -class EnumValueOptions; -struct EnumValueOptionsDefaultTypeInternal; -PROTOBUF_EXPORT extern EnumValueOptionsDefaultTypeInternal _EnumValueOptions_default_instance_; -class ExtensionRangeOptions; -struct ExtensionRangeOptionsDefaultTypeInternal; -PROTOBUF_EXPORT extern ExtensionRangeOptionsDefaultTypeInternal _ExtensionRangeOptions_default_instance_; -class FieldDescriptorProto; -struct FieldDescriptorProtoDefaultTypeInternal; -PROTOBUF_EXPORT extern FieldDescriptorProtoDefaultTypeInternal _FieldDescriptorProto_default_instance_; -class FieldOptions; -struct FieldOptionsDefaultTypeInternal; -PROTOBUF_EXPORT extern FieldOptionsDefaultTypeInternal _FieldOptions_default_instance_; -class FileDescriptorProto; -struct FileDescriptorProtoDefaultTypeInternal; -PROTOBUF_EXPORT extern FileDescriptorProtoDefaultTypeInternal _FileDescriptorProto_default_instance_; -class FileDescriptorSet; -struct FileDescriptorSetDefaultTypeInternal; -PROTOBUF_EXPORT extern FileDescriptorSetDefaultTypeInternal _FileDescriptorSet_default_instance_; -class FileOptions; -struct FileOptionsDefaultTypeInternal; -PROTOBUF_EXPORT extern FileOptionsDefaultTypeInternal _FileOptions_default_instance_; -class GeneratedCodeInfo; -struct GeneratedCodeInfoDefaultTypeInternal; -PROTOBUF_EXPORT extern GeneratedCodeInfoDefaultTypeInternal _GeneratedCodeInfo_default_instance_; -class GeneratedCodeInfo_Annotation; -struct GeneratedCodeInfo_AnnotationDefaultTypeInternal; -PROTOBUF_EXPORT extern GeneratedCodeInfo_AnnotationDefaultTypeInternal _GeneratedCodeInfo_Annotation_default_instance_; -class MessageOptions; -struct MessageOptionsDefaultTypeInternal; -PROTOBUF_EXPORT extern MessageOptionsDefaultTypeInternal _MessageOptions_default_instance_; -class MethodDescriptorProto; -struct MethodDescriptorProtoDefaultTypeInternal; -PROTOBUF_EXPORT extern MethodDescriptorProtoDefaultTypeInternal _MethodDescriptorProto_default_instance_; -class MethodOptions; -struct MethodOptionsDefaultTypeInternal; -PROTOBUF_EXPORT extern MethodOptionsDefaultTypeInternal _MethodOptions_default_instance_; -class OneofDescriptorProto; -struct OneofDescriptorProtoDefaultTypeInternal; -PROTOBUF_EXPORT extern OneofDescriptorProtoDefaultTypeInternal _OneofDescriptorProto_default_instance_; -class OneofOptions; -struct OneofOptionsDefaultTypeInternal; -PROTOBUF_EXPORT extern OneofOptionsDefaultTypeInternal _OneofOptions_default_instance_; -class ServiceDescriptorProto; -struct ServiceDescriptorProtoDefaultTypeInternal; -PROTOBUF_EXPORT extern ServiceDescriptorProtoDefaultTypeInternal _ServiceDescriptorProto_default_instance_; -class ServiceOptions; -struct ServiceOptionsDefaultTypeInternal; -PROTOBUF_EXPORT extern ServiceOptionsDefaultTypeInternal _ServiceOptions_default_instance_; -class SourceCodeInfo; -struct SourceCodeInfoDefaultTypeInternal; -PROTOBUF_EXPORT extern SourceCodeInfoDefaultTypeInternal _SourceCodeInfo_default_instance_; -class SourceCodeInfo_Location; -struct SourceCodeInfo_LocationDefaultTypeInternal; -PROTOBUF_EXPORT extern SourceCodeInfo_LocationDefaultTypeInternal _SourceCodeInfo_Location_default_instance_; -class UninterpretedOption; -struct UninterpretedOptionDefaultTypeInternal; -PROTOBUF_EXPORT extern UninterpretedOptionDefaultTypeInternal _UninterpretedOption_default_instance_; -class UninterpretedOption_NamePart; -struct UninterpretedOption_NamePartDefaultTypeInternal; -PROTOBUF_EXPORT extern UninterpretedOption_NamePartDefaultTypeInternal _UninterpretedOption_NamePart_default_instance_; -PROTOBUF_NAMESPACE_CLOSE -PROTOBUF_NAMESPACE_OPEN -template<> PROTOBUF_EXPORT ::PROTOBUF_NAMESPACE_ID::DescriptorProto* Arena::CreateMaybeMessage<::PROTOBUF_NAMESPACE_ID::DescriptorProto>(Arena*); -template<> PROTOBUF_EXPORT ::PROTOBUF_NAMESPACE_ID::DescriptorProto_ExtensionRange* Arena::CreateMaybeMessage<::PROTOBUF_NAMESPACE_ID::DescriptorProto_ExtensionRange>(Arena*); -template<> PROTOBUF_EXPORT ::PROTOBUF_NAMESPACE_ID::DescriptorProto_ReservedRange* Arena::CreateMaybeMessage<::PROTOBUF_NAMESPACE_ID::DescriptorProto_ReservedRange>(Arena*); -template<> PROTOBUF_EXPORT ::PROTOBUF_NAMESPACE_ID::EnumDescriptorProto* Arena::CreateMaybeMessage<::PROTOBUF_NAMESPACE_ID::EnumDescriptorProto>(Arena*); -template<> PROTOBUF_EXPORT ::PROTOBUF_NAMESPACE_ID::EnumDescriptorProto_EnumReservedRange* Arena::CreateMaybeMessage<::PROTOBUF_NAMESPACE_ID::EnumDescriptorProto_EnumReservedRange>(Arena*); -template<> PROTOBUF_EXPORT ::PROTOBUF_NAMESPACE_ID::EnumOptions* Arena::CreateMaybeMessage<::PROTOBUF_NAMESPACE_ID::EnumOptions>(Arena*); -template<> PROTOBUF_EXPORT ::PROTOBUF_NAMESPACE_ID::EnumValueDescriptorProto* Arena::CreateMaybeMessage<::PROTOBUF_NAMESPACE_ID::EnumValueDescriptorProto>(Arena*); -template<> PROTOBUF_EXPORT ::PROTOBUF_NAMESPACE_ID::EnumValueOptions* Arena::CreateMaybeMessage<::PROTOBUF_NAMESPACE_ID::EnumValueOptions>(Arena*); -template<> PROTOBUF_EXPORT ::PROTOBUF_NAMESPACE_ID::ExtensionRangeOptions* Arena::CreateMaybeMessage<::PROTOBUF_NAMESPACE_ID::ExtensionRangeOptions>(Arena*); -template<> PROTOBUF_EXPORT ::PROTOBUF_NAMESPACE_ID::FieldDescriptorProto* Arena::CreateMaybeMessage<::PROTOBUF_NAMESPACE_ID::FieldDescriptorProto>(Arena*); -template<> PROTOBUF_EXPORT ::PROTOBUF_NAMESPACE_ID::FieldOptions* Arena::CreateMaybeMessage<::PROTOBUF_NAMESPACE_ID::FieldOptions>(Arena*); -template<> PROTOBUF_EXPORT ::PROTOBUF_NAMESPACE_ID::FileDescriptorProto* Arena::CreateMaybeMessage<::PROTOBUF_NAMESPACE_ID::FileDescriptorProto>(Arena*); -template<> PROTOBUF_EXPORT ::PROTOBUF_NAMESPACE_ID::FileDescriptorSet* Arena::CreateMaybeMessage<::PROTOBUF_NAMESPACE_ID::FileDescriptorSet>(Arena*); -template<> PROTOBUF_EXPORT ::PROTOBUF_NAMESPACE_ID::FileOptions* Arena::CreateMaybeMessage<::PROTOBUF_NAMESPACE_ID::FileOptions>(Arena*); -template<> PROTOBUF_EXPORT ::PROTOBUF_NAMESPACE_ID::GeneratedCodeInfo* Arena::CreateMaybeMessage<::PROTOBUF_NAMESPACE_ID::GeneratedCodeInfo>(Arena*); -template<> PROTOBUF_EXPORT ::PROTOBUF_NAMESPACE_ID::GeneratedCodeInfo_Annotation* Arena::CreateMaybeMessage<::PROTOBUF_NAMESPACE_ID::GeneratedCodeInfo_Annotation>(Arena*); -template<> PROTOBUF_EXPORT ::PROTOBUF_NAMESPACE_ID::MessageOptions* Arena::CreateMaybeMessage<::PROTOBUF_NAMESPACE_ID::MessageOptions>(Arena*); -template<> PROTOBUF_EXPORT ::PROTOBUF_NAMESPACE_ID::MethodDescriptorProto* Arena::CreateMaybeMessage<::PROTOBUF_NAMESPACE_ID::MethodDescriptorProto>(Arena*); -template<> PROTOBUF_EXPORT ::PROTOBUF_NAMESPACE_ID::MethodOptions* Arena::CreateMaybeMessage<::PROTOBUF_NAMESPACE_ID::MethodOptions>(Arena*); -template<> PROTOBUF_EXPORT ::PROTOBUF_NAMESPACE_ID::OneofDescriptorProto* Arena::CreateMaybeMessage<::PROTOBUF_NAMESPACE_ID::OneofDescriptorProto>(Arena*); -template<> PROTOBUF_EXPORT ::PROTOBUF_NAMESPACE_ID::OneofOptions* Arena::CreateMaybeMessage<::PROTOBUF_NAMESPACE_ID::OneofOptions>(Arena*); -template<> PROTOBUF_EXPORT ::PROTOBUF_NAMESPACE_ID::ServiceDescriptorProto* Arena::CreateMaybeMessage<::PROTOBUF_NAMESPACE_ID::ServiceDescriptorProto>(Arena*); -template<> PROTOBUF_EXPORT ::PROTOBUF_NAMESPACE_ID::ServiceOptions* Arena::CreateMaybeMessage<::PROTOBUF_NAMESPACE_ID::ServiceOptions>(Arena*); -template<> PROTOBUF_EXPORT ::PROTOBUF_NAMESPACE_ID::SourceCodeInfo* Arena::CreateMaybeMessage<::PROTOBUF_NAMESPACE_ID::SourceCodeInfo>(Arena*); -template<> PROTOBUF_EXPORT ::PROTOBUF_NAMESPACE_ID::SourceCodeInfo_Location* Arena::CreateMaybeMessage<::PROTOBUF_NAMESPACE_ID::SourceCodeInfo_Location>(Arena*); -template<> PROTOBUF_EXPORT ::PROTOBUF_NAMESPACE_ID::UninterpretedOption* Arena::CreateMaybeMessage<::PROTOBUF_NAMESPACE_ID::UninterpretedOption>(Arena*); -template<> PROTOBUF_EXPORT ::PROTOBUF_NAMESPACE_ID::UninterpretedOption_NamePart* Arena::CreateMaybeMessage<::PROTOBUF_NAMESPACE_ID::UninterpretedOption_NamePart>(Arena*); -PROTOBUF_NAMESPACE_CLOSE -PROTOBUF_NAMESPACE_OPEN - -enum FieldDescriptorProto_Type : int { - FieldDescriptorProto_Type_TYPE_DOUBLE = 1, - FieldDescriptorProto_Type_TYPE_FLOAT = 2, - FieldDescriptorProto_Type_TYPE_INT64 = 3, - FieldDescriptorProto_Type_TYPE_UINT64 = 4, - FieldDescriptorProto_Type_TYPE_INT32 = 5, - FieldDescriptorProto_Type_TYPE_FIXED64 = 6, - FieldDescriptorProto_Type_TYPE_FIXED32 = 7, - FieldDescriptorProto_Type_TYPE_BOOL = 8, - FieldDescriptorProto_Type_TYPE_STRING = 9, - FieldDescriptorProto_Type_TYPE_GROUP = 10, - FieldDescriptorProto_Type_TYPE_MESSAGE = 11, - FieldDescriptorProto_Type_TYPE_BYTES = 12, - FieldDescriptorProto_Type_TYPE_UINT32 = 13, - FieldDescriptorProto_Type_TYPE_ENUM = 14, - FieldDescriptorProto_Type_TYPE_SFIXED32 = 15, - FieldDescriptorProto_Type_TYPE_SFIXED64 = 16, - FieldDescriptorProto_Type_TYPE_SINT32 = 17, - FieldDescriptorProto_Type_TYPE_SINT64 = 18 -}; -PROTOBUF_EXPORT bool FieldDescriptorProto_Type_IsValid(int value); -constexpr FieldDescriptorProto_Type FieldDescriptorProto_Type_Type_MIN = FieldDescriptorProto_Type_TYPE_DOUBLE; -constexpr FieldDescriptorProto_Type FieldDescriptorProto_Type_Type_MAX = FieldDescriptorProto_Type_TYPE_SINT64; -constexpr int FieldDescriptorProto_Type_Type_ARRAYSIZE = FieldDescriptorProto_Type_Type_MAX + 1; - -PROTOBUF_EXPORT const ::PROTOBUF_NAMESPACE_ID::EnumDescriptor* FieldDescriptorProto_Type_descriptor(); -template<typename T> -inline const std::string& FieldDescriptorProto_Type_Name(T enum_t_value) { - static_assert(::std::is_same<T, FieldDescriptorProto_Type>::value || - ::std::is_integral<T>::value, - "Incorrect type passed to function FieldDescriptorProto_Type_Name."); - return ::PROTOBUF_NAMESPACE_ID::internal::NameOfEnum( - FieldDescriptorProto_Type_descriptor(), enum_t_value); -} -inline bool FieldDescriptorProto_Type_Parse( - ::PROTOBUF_NAMESPACE_ID::ConstStringParam name, FieldDescriptorProto_Type* value) { - return ::PROTOBUF_NAMESPACE_ID::internal::ParseNamedEnum<FieldDescriptorProto_Type>( - FieldDescriptorProto_Type_descriptor(), name, value); -} -enum FieldDescriptorProto_Label : int { - FieldDescriptorProto_Label_LABEL_OPTIONAL = 1, - FieldDescriptorProto_Label_LABEL_REQUIRED = 2, - FieldDescriptorProto_Label_LABEL_REPEATED = 3 -}; -PROTOBUF_EXPORT bool FieldDescriptorProto_Label_IsValid(int value); -constexpr FieldDescriptorProto_Label FieldDescriptorProto_Label_Label_MIN = FieldDescriptorProto_Label_LABEL_OPTIONAL; -constexpr FieldDescriptorProto_Label FieldDescriptorProto_Label_Label_MAX = FieldDescriptorProto_Label_LABEL_REPEATED; -constexpr int FieldDescriptorProto_Label_Label_ARRAYSIZE = FieldDescriptorProto_Label_Label_MAX + 1; - -PROTOBUF_EXPORT const ::PROTOBUF_NAMESPACE_ID::EnumDescriptor* FieldDescriptorProto_Label_descriptor(); -template<typename T> -inline const std::string& FieldDescriptorProto_Label_Name(T enum_t_value) { - static_assert(::std::is_same<T, FieldDescriptorProto_Label>::value || - ::std::is_integral<T>::value, - "Incorrect type passed to function FieldDescriptorProto_Label_Name."); - return ::PROTOBUF_NAMESPACE_ID::internal::NameOfEnum( - FieldDescriptorProto_Label_descriptor(), enum_t_value); -} -inline bool FieldDescriptorProto_Label_Parse( - ::PROTOBUF_NAMESPACE_ID::ConstStringParam name, FieldDescriptorProto_Label* value) { - return ::PROTOBUF_NAMESPACE_ID::internal::ParseNamedEnum<FieldDescriptorProto_Label>( - FieldDescriptorProto_Label_descriptor(), name, value); -} -enum FileOptions_OptimizeMode : int { - FileOptions_OptimizeMode_SPEED = 1, - FileOptions_OptimizeMode_CODE_SIZE = 2, - FileOptions_OptimizeMode_LITE_RUNTIME = 3 -}; -PROTOBUF_EXPORT bool FileOptions_OptimizeMode_IsValid(int value); -constexpr FileOptions_OptimizeMode FileOptions_OptimizeMode_OptimizeMode_MIN = FileOptions_OptimizeMode_SPEED; -constexpr FileOptions_OptimizeMode FileOptions_OptimizeMode_OptimizeMode_MAX = FileOptions_OptimizeMode_LITE_RUNTIME; -constexpr int FileOptions_OptimizeMode_OptimizeMode_ARRAYSIZE = FileOptions_OptimizeMode_OptimizeMode_MAX + 1; - -PROTOBUF_EXPORT const ::PROTOBUF_NAMESPACE_ID::EnumDescriptor* FileOptions_OptimizeMode_descriptor(); -template<typename T> -inline const std::string& FileOptions_OptimizeMode_Name(T enum_t_value) { - static_assert(::std::is_same<T, FileOptions_OptimizeMode>::value || - ::std::is_integral<T>::value, - "Incorrect type passed to function FileOptions_OptimizeMode_Name."); - return ::PROTOBUF_NAMESPACE_ID::internal::NameOfEnum( - FileOptions_OptimizeMode_descriptor(), enum_t_value); -} -inline bool FileOptions_OptimizeMode_Parse( - ::PROTOBUF_NAMESPACE_ID::ConstStringParam name, FileOptions_OptimizeMode* value) { - return ::PROTOBUF_NAMESPACE_ID::internal::ParseNamedEnum<FileOptions_OptimizeMode>( - FileOptions_OptimizeMode_descriptor(), name, value); -} -enum FieldOptions_CType : int { - FieldOptions_CType_STRING = 0, - FieldOptions_CType_CORD = 1, - FieldOptions_CType_STRING_PIECE = 2 -}; -PROTOBUF_EXPORT bool FieldOptions_CType_IsValid(int value); -constexpr FieldOptions_CType FieldOptions_CType_CType_MIN = FieldOptions_CType_STRING; -constexpr FieldOptions_CType FieldOptions_CType_CType_MAX = FieldOptions_CType_STRING_PIECE; -constexpr int FieldOptions_CType_CType_ARRAYSIZE = FieldOptions_CType_CType_MAX + 1; - -PROTOBUF_EXPORT const ::PROTOBUF_NAMESPACE_ID::EnumDescriptor* FieldOptions_CType_descriptor(); -template<typename T> -inline const std::string& FieldOptions_CType_Name(T enum_t_value) { - static_assert(::std::is_same<T, FieldOptions_CType>::value || - ::std::is_integral<T>::value, - "Incorrect type passed to function FieldOptions_CType_Name."); - return ::PROTOBUF_NAMESPACE_ID::internal::NameOfEnum( - FieldOptions_CType_descriptor(), enum_t_value); -} -inline bool FieldOptions_CType_Parse( - ::PROTOBUF_NAMESPACE_ID::ConstStringParam name, FieldOptions_CType* value) { - return ::PROTOBUF_NAMESPACE_ID::internal::ParseNamedEnum<FieldOptions_CType>( - FieldOptions_CType_descriptor(), name, value); -} -enum FieldOptions_JSType : int { - FieldOptions_JSType_JS_NORMAL = 0, - FieldOptions_JSType_JS_STRING = 1, - FieldOptions_JSType_JS_NUMBER = 2 -}; -PROTOBUF_EXPORT bool FieldOptions_JSType_IsValid(int value); -constexpr FieldOptions_JSType FieldOptions_JSType_JSType_MIN = FieldOptions_JSType_JS_NORMAL; -constexpr FieldOptions_JSType FieldOptions_JSType_JSType_MAX = FieldOptions_JSType_JS_NUMBER; -constexpr int FieldOptions_JSType_JSType_ARRAYSIZE = FieldOptions_JSType_JSType_MAX + 1; - -PROTOBUF_EXPORT const ::PROTOBUF_NAMESPACE_ID::EnumDescriptor* FieldOptions_JSType_descriptor(); -template<typename T> -inline const std::string& FieldOptions_JSType_Name(T enum_t_value) { - static_assert(::std::is_same<T, FieldOptions_JSType>::value || - ::std::is_integral<T>::value, - "Incorrect type passed to function FieldOptions_JSType_Name."); - return ::PROTOBUF_NAMESPACE_ID::internal::NameOfEnum( - FieldOptions_JSType_descriptor(), enum_t_value); -} -inline bool FieldOptions_JSType_Parse( - ::PROTOBUF_NAMESPACE_ID::ConstStringParam name, FieldOptions_JSType* value) { - return ::PROTOBUF_NAMESPACE_ID::internal::ParseNamedEnum<FieldOptions_JSType>( - FieldOptions_JSType_descriptor(), name, value); -} -enum MethodOptions_IdempotencyLevel : int { - MethodOptions_IdempotencyLevel_IDEMPOTENCY_UNKNOWN = 0, - MethodOptions_IdempotencyLevel_NO_SIDE_EFFECTS = 1, - MethodOptions_IdempotencyLevel_IDEMPOTENT = 2 -}; -PROTOBUF_EXPORT bool MethodOptions_IdempotencyLevel_IsValid(int value); -constexpr MethodOptions_IdempotencyLevel MethodOptions_IdempotencyLevel_IdempotencyLevel_MIN = MethodOptions_IdempotencyLevel_IDEMPOTENCY_UNKNOWN; -constexpr MethodOptions_IdempotencyLevel MethodOptions_IdempotencyLevel_IdempotencyLevel_MAX = MethodOptions_IdempotencyLevel_IDEMPOTENT; -constexpr int MethodOptions_IdempotencyLevel_IdempotencyLevel_ARRAYSIZE = MethodOptions_IdempotencyLevel_IdempotencyLevel_MAX + 1; - -PROTOBUF_EXPORT const ::PROTOBUF_NAMESPACE_ID::EnumDescriptor* MethodOptions_IdempotencyLevel_descriptor(); -template<typename T> -inline const std::string& MethodOptions_IdempotencyLevel_Name(T enum_t_value) { - static_assert(::std::is_same<T, MethodOptions_IdempotencyLevel>::value || - ::std::is_integral<T>::value, - "Incorrect type passed to function MethodOptions_IdempotencyLevel_Name."); - return ::PROTOBUF_NAMESPACE_ID::internal::NameOfEnum( - MethodOptions_IdempotencyLevel_descriptor(), enum_t_value); -} -inline bool MethodOptions_IdempotencyLevel_Parse( - ::PROTOBUF_NAMESPACE_ID::ConstStringParam name, MethodOptions_IdempotencyLevel* value) { - return ::PROTOBUF_NAMESPACE_ID::internal::ParseNamedEnum<MethodOptions_IdempotencyLevel>( - MethodOptions_IdempotencyLevel_descriptor(), name, value); -} -// =================================================================== - -class PROTOBUF_EXPORT FileDescriptorSet final : - public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:google.protobuf.FileDescriptorSet) */ { - public: - inline FileDescriptorSet() : FileDescriptorSet(nullptr) {} - ~FileDescriptorSet() override; - explicit PROTOBUF_CONSTEXPR FileDescriptorSet(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized); - - FileDescriptorSet(const FileDescriptorSet& from); - FileDescriptorSet(FileDescriptorSet&& from) noexcept - : FileDescriptorSet() { - *this = ::std::move(from); - } - - inline FileDescriptorSet& operator=(const FileDescriptorSet& from) { - CopyFrom(from); - return *this; - } - inline FileDescriptorSet& operator=(FileDescriptorSet&& from) noexcept { - if (this == &from) return *this; - if (GetOwningArena() == from.GetOwningArena() - #ifdef PROTOBUF_FORCE_COPY_IN_MOVE - && GetOwningArena() != nullptr - #endif // !PROTOBUF_FORCE_COPY_IN_MOVE - ) { - InternalSwap(&from); - } else { - CopyFrom(from); - } - return *this; - } - - inline const ::PROTOBUF_NAMESPACE_ID::UnknownFieldSet& unknown_fields() const { - return _internal_metadata_.unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(::PROTOBUF_NAMESPACE_ID::UnknownFieldSet::default_instance); - } - inline ::PROTOBUF_NAMESPACE_ID::UnknownFieldSet* mutable_unknown_fields() { - return _internal_metadata_.mutable_unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(); - } - - static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() { - return GetDescriptor(); - } - static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() { - return default_instance().GetMetadata().descriptor; - } - static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() { - return default_instance().GetMetadata().reflection; - } - static const FileDescriptorSet& default_instance() { - return *internal_default_instance(); - } - static inline const FileDescriptorSet* internal_default_instance() { - return reinterpret_cast<const FileDescriptorSet*>( - &_FileDescriptorSet_default_instance_); - } - static constexpr int kIndexInFileMessages = - 0; - - friend void swap(FileDescriptorSet& a, FileDescriptorSet& b) { - a.Swap(&b); - } - inline void Swap(FileDescriptorSet* other) { - if (other == this) return; - #ifdef PROTOBUF_FORCE_COPY_IN_SWAP - if (GetOwningArena() != nullptr && - GetOwningArena() == other->GetOwningArena()) { - #else // PROTOBUF_FORCE_COPY_IN_SWAP - if (GetOwningArena() == other->GetOwningArena()) { - #endif // !PROTOBUF_FORCE_COPY_IN_SWAP - InternalSwap(other); - } else { - ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other); - } - } - void UnsafeArenaSwap(FileDescriptorSet* other) { - if (other == this) return; - GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena()); - InternalSwap(other); - } - - // implements Message ---------------------------------------------- - - FileDescriptorSet* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final { - return CreateMaybeMessage<FileDescriptorSet>(arena); - } - using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom; - void CopyFrom(const FileDescriptorSet& from); - using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom; - void MergeFrom( const FileDescriptorSet& from) { - FileDescriptorSet::MergeImpl(*this, from); - } - private: - static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message& to_msg, const ::PROTOBUF_NAMESPACE_ID::Message& from_msg); - public: - PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final; - bool IsInitialized() const final; - - size_t ByteSizeLong() const final; - const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final; - uint8_t* _InternalSerialize( - uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final; - int GetCachedSize() const final { return _impl_._cached_size_.Get(); } - - private: - void SharedCtor(::PROTOBUF_NAMESPACE_ID::Arena* arena, bool is_message_owned); - void SharedDtor(); - void SetCachedSize(int size) const final; - void InternalSwap(FileDescriptorSet* other); - - private: - friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata; - static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() { - return "google.protobuf.FileDescriptorSet"; - } - protected: - explicit FileDescriptorSet(::PROTOBUF_NAMESPACE_ID::Arena* arena, - bool is_message_owned = false); - public: - - static const ClassData _class_data_; - const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final; - - ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final; - - // nested types ---------------------------------------------------- - - // accessors ------------------------------------------------------- - - enum : int { - kFileFieldNumber = 1, - }; - // repeated .google.protobuf.FileDescriptorProto file = 1; - int file_size() const; - private: - int _internal_file_size() const; - public: - void clear_file(); - ::PROTOBUF_NAMESPACE_ID::FileDescriptorProto* mutable_file(int index); - ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::FileDescriptorProto >* - mutable_file(); - private: - const ::PROTOBUF_NAMESPACE_ID::FileDescriptorProto& _internal_file(int index) const; - ::PROTOBUF_NAMESPACE_ID::FileDescriptorProto* _internal_add_file(); - public: - const ::PROTOBUF_NAMESPACE_ID::FileDescriptorProto& file(int index) const; - ::PROTOBUF_NAMESPACE_ID::FileDescriptorProto* add_file(); - const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::FileDescriptorProto >& - file() const; - - // @@protoc_insertion_point(class_scope:google.protobuf.FileDescriptorSet) - private: - class _Internal; - - template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper; - typedef void InternalArenaConstructable_; - typedef void DestructorSkippable_; - struct Impl_ { - ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::FileDescriptorProto > file_; - mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_; - }; - union { Impl_ _impl_; }; - friend struct ::TableStruct_google_2fprotobuf_2fdescriptor_2eproto; -}; -// ------------------------------------------------------------------- - -class PROTOBUF_EXPORT FileDescriptorProto final : - public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:google.protobuf.FileDescriptorProto) */ { - public: - inline FileDescriptorProto() : FileDescriptorProto(nullptr) {} - ~FileDescriptorProto() override; - explicit PROTOBUF_CONSTEXPR FileDescriptorProto(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized); - - FileDescriptorProto(const FileDescriptorProto& from); - FileDescriptorProto(FileDescriptorProto&& from) noexcept - : FileDescriptorProto() { - *this = ::std::move(from); - } - - inline FileDescriptorProto& operator=(const FileDescriptorProto& from) { - CopyFrom(from); - return *this; - } - inline FileDescriptorProto& operator=(FileDescriptorProto&& from) noexcept { - if (this == &from) return *this; - if (GetOwningArena() == from.GetOwningArena() - #ifdef PROTOBUF_FORCE_COPY_IN_MOVE - && GetOwningArena() != nullptr - #endif // !PROTOBUF_FORCE_COPY_IN_MOVE - ) { - InternalSwap(&from); - } else { - CopyFrom(from); - } - return *this; - } - - inline const ::PROTOBUF_NAMESPACE_ID::UnknownFieldSet& unknown_fields() const { - return _internal_metadata_.unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(::PROTOBUF_NAMESPACE_ID::UnknownFieldSet::default_instance); - } - inline ::PROTOBUF_NAMESPACE_ID::UnknownFieldSet* mutable_unknown_fields() { - return _internal_metadata_.mutable_unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(); - } - - static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() { - return GetDescriptor(); - } - static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() { - return default_instance().GetMetadata().descriptor; - } - static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() { - return default_instance().GetMetadata().reflection; - } - static const FileDescriptorProto& default_instance() { - return *internal_default_instance(); - } - static inline const FileDescriptorProto* internal_default_instance() { - return reinterpret_cast<const FileDescriptorProto*>( - &_FileDescriptorProto_default_instance_); - } - static constexpr int kIndexInFileMessages = - 1; - - friend void swap(FileDescriptorProto& a, FileDescriptorProto& b) { - a.Swap(&b); - } - inline void Swap(FileDescriptorProto* other) { - if (other == this) return; - #ifdef PROTOBUF_FORCE_COPY_IN_SWAP - if (GetOwningArena() != nullptr && - GetOwningArena() == other->GetOwningArena()) { - #else // PROTOBUF_FORCE_COPY_IN_SWAP - if (GetOwningArena() == other->GetOwningArena()) { - #endif // !PROTOBUF_FORCE_COPY_IN_SWAP - InternalSwap(other); - } else { - ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other); - } - } - void UnsafeArenaSwap(FileDescriptorProto* other) { - if (other == this) return; - GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena()); - InternalSwap(other); - } - - // implements Message ---------------------------------------------- - - FileDescriptorProto* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final { - return CreateMaybeMessage<FileDescriptorProto>(arena); - } - using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom; - void CopyFrom(const FileDescriptorProto& from); - using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom; - void MergeFrom( const FileDescriptorProto& from) { - FileDescriptorProto::MergeImpl(*this, from); - } - private: - static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message& to_msg, const ::PROTOBUF_NAMESPACE_ID::Message& from_msg); - public: - PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final; - bool IsInitialized() const final; - - size_t ByteSizeLong() const final; - const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final; - uint8_t* _InternalSerialize( - uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final; - int GetCachedSize() const final { return _impl_._cached_size_.Get(); } - - private: - void SharedCtor(::PROTOBUF_NAMESPACE_ID::Arena* arena, bool is_message_owned); - void SharedDtor(); - void SetCachedSize(int size) const final; - void InternalSwap(FileDescriptorProto* other); - - private: - friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata; - static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() { - return "google.protobuf.FileDescriptorProto"; - } - protected: - explicit FileDescriptorProto(::PROTOBUF_NAMESPACE_ID::Arena* arena, - bool is_message_owned = false); - public: - - static const ClassData _class_data_; - const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final; - - ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final; - - // nested types ---------------------------------------------------- - - // accessors ------------------------------------------------------- - - enum : int { - kDependencyFieldNumber = 3, - kMessageTypeFieldNumber = 4, - kEnumTypeFieldNumber = 5, - kServiceFieldNumber = 6, - kExtensionFieldNumber = 7, - kPublicDependencyFieldNumber = 10, - kWeakDependencyFieldNumber = 11, - kNameFieldNumber = 1, - kPackageFieldNumber = 2, - kSyntaxFieldNumber = 12, - kOptionsFieldNumber = 8, - kSourceCodeInfoFieldNumber = 9, - }; - // repeated string dependency = 3; - int dependency_size() const; - private: - int _internal_dependency_size() const; - public: - void clear_dependency(); - const std::string& dependency(int index) const; - std::string* mutable_dependency(int index); - void set_dependency(int index, const std::string& value); - void set_dependency(int index, std::string&& value); - void set_dependency(int index, const char* value); - void set_dependency(int index, const char* value, size_t size); - std::string* add_dependency(); - void add_dependency(const std::string& value); - void add_dependency(std::string&& value); - void add_dependency(const char* value); - void add_dependency(const char* value, size_t size); - const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField<std::string>& dependency() const; - ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField<std::string>* mutable_dependency(); - private: - const std::string& _internal_dependency(int index) const; - std::string* _internal_add_dependency(); - public: - - // repeated .google.protobuf.DescriptorProto message_type = 4; - int message_type_size() const; - private: - int _internal_message_type_size() const; - public: - void clear_message_type(); - ::PROTOBUF_NAMESPACE_ID::DescriptorProto* mutable_message_type(int index); - ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::DescriptorProto >* - mutable_message_type(); - private: - const ::PROTOBUF_NAMESPACE_ID::DescriptorProto& _internal_message_type(int index) const; - ::PROTOBUF_NAMESPACE_ID::DescriptorProto* _internal_add_message_type(); - public: - const ::PROTOBUF_NAMESPACE_ID::DescriptorProto& message_type(int index) const; - ::PROTOBUF_NAMESPACE_ID::DescriptorProto* add_message_type(); - const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::DescriptorProto >& - message_type() const; - - // repeated .google.protobuf.EnumDescriptorProto enum_type = 5; - int enum_type_size() const; - private: - int _internal_enum_type_size() const; - public: - void clear_enum_type(); - ::PROTOBUF_NAMESPACE_ID::EnumDescriptorProto* mutable_enum_type(int index); - ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::EnumDescriptorProto >* - mutable_enum_type(); - private: - const ::PROTOBUF_NAMESPACE_ID::EnumDescriptorProto& _internal_enum_type(int index) const; - ::PROTOBUF_NAMESPACE_ID::EnumDescriptorProto* _internal_add_enum_type(); - public: - const ::PROTOBUF_NAMESPACE_ID::EnumDescriptorProto& enum_type(int index) const; - ::PROTOBUF_NAMESPACE_ID::EnumDescriptorProto* add_enum_type(); - const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::EnumDescriptorProto >& - enum_type() const; - - // repeated .google.protobuf.ServiceDescriptorProto service = 6; - int service_size() const; - private: - int _internal_service_size() const; - public: - void clear_service(); - ::PROTOBUF_NAMESPACE_ID::ServiceDescriptorProto* mutable_service(int index); - ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::ServiceDescriptorProto >* - mutable_service(); - private: - const ::PROTOBUF_NAMESPACE_ID::ServiceDescriptorProto& _internal_service(int index) const; - ::PROTOBUF_NAMESPACE_ID::ServiceDescriptorProto* _internal_add_service(); - public: - const ::PROTOBUF_NAMESPACE_ID::ServiceDescriptorProto& service(int index) const; - ::PROTOBUF_NAMESPACE_ID::ServiceDescriptorProto* add_service(); - const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::ServiceDescriptorProto >& - service() const; - - // repeated .google.protobuf.FieldDescriptorProto extension = 7; - int extension_size() const; - private: - int _internal_extension_size() const; - public: - void clear_extension(); - ::PROTOBUF_NAMESPACE_ID::FieldDescriptorProto* mutable_extension(int index); - ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::FieldDescriptorProto >* - mutable_extension(); - private: - const ::PROTOBUF_NAMESPACE_ID::FieldDescriptorProto& _internal_extension(int index) const; - ::PROTOBUF_NAMESPACE_ID::FieldDescriptorProto* _internal_add_extension(); - public: - const ::PROTOBUF_NAMESPACE_ID::FieldDescriptorProto& extension(int index) const; - ::PROTOBUF_NAMESPACE_ID::FieldDescriptorProto* add_extension(); - const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::FieldDescriptorProto >& - extension() const; - - // repeated int32 public_dependency = 10; - int public_dependency_size() const; - private: - int _internal_public_dependency_size() const; - public: - void clear_public_dependency(); - private: - int32_t _internal_public_dependency(int index) const; - const ::PROTOBUF_NAMESPACE_ID::RepeatedField< int32_t >& - _internal_public_dependency() const; - void _internal_add_public_dependency(int32_t value); - ::PROTOBUF_NAMESPACE_ID::RepeatedField< int32_t >* - _internal_mutable_public_dependency(); - public: - int32_t public_dependency(int index) const; - void set_public_dependency(int index, int32_t value); - void add_public_dependency(int32_t value); - const ::PROTOBUF_NAMESPACE_ID::RepeatedField< int32_t >& - public_dependency() const; - ::PROTOBUF_NAMESPACE_ID::RepeatedField< int32_t >* - mutable_public_dependency(); - - // repeated int32 weak_dependency = 11; - int weak_dependency_size() const; - private: - int _internal_weak_dependency_size() const; - public: - void clear_weak_dependency(); - private: - int32_t _internal_weak_dependency(int index) const; - const ::PROTOBUF_NAMESPACE_ID::RepeatedField< int32_t >& - _internal_weak_dependency() const; - void _internal_add_weak_dependency(int32_t value); - ::PROTOBUF_NAMESPACE_ID::RepeatedField< int32_t >* - _internal_mutable_weak_dependency(); - public: - int32_t weak_dependency(int index) const; - void set_weak_dependency(int index, int32_t value); - void add_weak_dependency(int32_t value); - const ::PROTOBUF_NAMESPACE_ID::RepeatedField< int32_t >& - weak_dependency() const; - ::PROTOBUF_NAMESPACE_ID::RepeatedField< int32_t >* - mutable_weak_dependency(); - - // optional string name = 1; - bool has_name() const; - private: - bool _internal_has_name() const; - public: - void clear_name(); - const std::string& name() const; - template <typename ArgT0 = const std::string&, typename... ArgT> - void set_name(ArgT0&& arg0, ArgT... args); - std::string* mutable_name(); - PROTOBUF_NODISCARD std::string* release_name(); - void set_allocated_name(std::string* name); - private: - const std::string& _internal_name() const; - inline PROTOBUF_ALWAYS_INLINE void _internal_set_name(const std::string& value); - std::string* _internal_mutable_name(); - public: - - // optional string package = 2; - bool has_package() const; - private: - bool _internal_has_package() const; - public: - void clear_package(); - const std::string& package() const; - template <typename ArgT0 = const std::string&, typename... ArgT> - void set_package(ArgT0&& arg0, ArgT... args); - std::string* mutable_package(); - PROTOBUF_NODISCARD std::string* release_package(); - void set_allocated_package(std::string* package); - private: - const std::string& _internal_package() const; - inline PROTOBUF_ALWAYS_INLINE void _internal_set_package(const std::string& value); - std::string* _internal_mutable_package(); - public: - - // optional string syntax = 12; - bool has_syntax() const; - private: - bool _internal_has_syntax() const; - public: - void clear_syntax(); - const std::string& syntax() const; - template <typename ArgT0 = const std::string&, typename... ArgT> - void set_syntax(ArgT0&& arg0, ArgT... args); - std::string* mutable_syntax(); - PROTOBUF_NODISCARD std::string* release_syntax(); - void set_allocated_syntax(std::string* syntax); - private: - const std::string& _internal_syntax() const; - inline PROTOBUF_ALWAYS_INLINE void _internal_set_syntax(const std::string& value); - std::string* _internal_mutable_syntax(); - public: - - // optional .google.protobuf.FileOptions options = 8; - bool has_options() const; - private: - bool _internal_has_options() const; - public: - void clear_options(); - const ::PROTOBUF_NAMESPACE_ID::FileOptions& options() const; - PROTOBUF_NODISCARD ::PROTOBUF_NAMESPACE_ID::FileOptions* release_options(); - ::PROTOBUF_NAMESPACE_ID::FileOptions* mutable_options(); - void set_allocated_options(::PROTOBUF_NAMESPACE_ID::FileOptions* options); - private: - const ::PROTOBUF_NAMESPACE_ID::FileOptions& _internal_options() const; - ::PROTOBUF_NAMESPACE_ID::FileOptions* _internal_mutable_options(); - public: - void unsafe_arena_set_allocated_options( - ::PROTOBUF_NAMESPACE_ID::FileOptions* options); - ::PROTOBUF_NAMESPACE_ID::FileOptions* unsafe_arena_release_options(); - - // optional .google.protobuf.SourceCodeInfo source_code_info = 9; - bool has_source_code_info() const; - private: - bool _internal_has_source_code_info() const; - public: - void clear_source_code_info(); - const ::PROTOBUF_NAMESPACE_ID::SourceCodeInfo& source_code_info() const; - PROTOBUF_NODISCARD ::PROTOBUF_NAMESPACE_ID::SourceCodeInfo* release_source_code_info(); - ::PROTOBUF_NAMESPACE_ID::SourceCodeInfo* mutable_source_code_info(); - void set_allocated_source_code_info(::PROTOBUF_NAMESPACE_ID::SourceCodeInfo* source_code_info); - private: - const ::PROTOBUF_NAMESPACE_ID::SourceCodeInfo& _internal_source_code_info() const; - ::PROTOBUF_NAMESPACE_ID::SourceCodeInfo* _internal_mutable_source_code_info(); - public: - void unsafe_arena_set_allocated_source_code_info( - ::PROTOBUF_NAMESPACE_ID::SourceCodeInfo* source_code_info); - ::PROTOBUF_NAMESPACE_ID::SourceCodeInfo* unsafe_arena_release_source_code_info(); - - // @@protoc_insertion_point(class_scope:google.protobuf.FileDescriptorProto) - private: - class _Internal; - - template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper; - typedef void InternalArenaConstructable_; - typedef void DestructorSkippable_; - struct Impl_ { - ::PROTOBUF_NAMESPACE_ID::internal::HasBits<1> _has_bits_; - mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_; - ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField<std::string> dependency_; - ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::DescriptorProto > message_type_; - ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::EnumDescriptorProto > enum_type_; - ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::ServiceDescriptorProto > service_; - ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::FieldDescriptorProto > extension_; - ::PROTOBUF_NAMESPACE_ID::RepeatedField< int32_t > public_dependency_; - ::PROTOBUF_NAMESPACE_ID::RepeatedField< int32_t > weak_dependency_; - ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr name_; - ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr package_; - ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr syntax_; - ::PROTOBUF_NAMESPACE_ID::FileOptions* options_; - ::PROTOBUF_NAMESPACE_ID::SourceCodeInfo* source_code_info_; - }; - union { Impl_ _impl_; }; - friend struct ::TableStruct_google_2fprotobuf_2fdescriptor_2eproto; -}; -// ------------------------------------------------------------------- - -class PROTOBUF_EXPORT DescriptorProto_ExtensionRange final : - public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:google.protobuf.DescriptorProto.ExtensionRange) */ { - public: - inline DescriptorProto_ExtensionRange() : DescriptorProto_ExtensionRange(nullptr) {} - ~DescriptorProto_ExtensionRange() override; - explicit PROTOBUF_CONSTEXPR DescriptorProto_ExtensionRange(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized); - - DescriptorProto_ExtensionRange(const DescriptorProto_ExtensionRange& from); - DescriptorProto_ExtensionRange(DescriptorProto_ExtensionRange&& from) noexcept - : DescriptorProto_ExtensionRange() { - *this = ::std::move(from); - } - - inline DescriptorProto_ExtensionRange& operator=(const DescriptorProto_ExtensionRange& from) { - CopyFrom(from); - return *this; - } - inline DescriptorProto_ExtensionRange& operator=(DescriptorProto_ExtensionRange&& from) noexcept { - if (this == &from) return *this; - if (GetOwningArena() == from.GetOwningArena() - #ifdef PROTOBUF_FORCE_COPY_IN_MOVE - && GetOwningArena() != nullptr - #endif // !PROTOBUF_FORCE_COPY_IN_MOVE - ) { - InternalSwap(&from); - } else { - CopyFrom(from); - } - return *this; - } - - inline const ::PROTOBUF_NAMESPACE_ID::UnknownFieldSet& unknown_fields() const { - return _internal_metadata_.unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(::PROTOBUF_NAMESPACE_ID::UnknownFieldSet::default_instance); - } - inline ::PROTOBUF_NAMESPACE_ID::UnknownFieldSet* mutable_unknown_fields() { - return _internal_metadata_.mutable_unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(); - } - - static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() { - return GetDescriptor(); - } - static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() { - return default_instance().GetMetadata().descriptor; - } - static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() { - return default_instance().GetMetadata().reflection; - } - static const DescriptorProto_ExtensionRange& default_instance() { - return *internal_default_instance(); - } - static inline const DescriptorProto_ExtensionRange* internal_default_instance() { - return reinterpret_cast<const DescriptorProto_ExtensionRange*>( - &_DescriptorProto_ExtensionRange_default_instance_); - } - static constexpr int kIndexInFileMessages = - 2; - - friend void swap(DescriptorProto_ExtensionRange& a, DescriptorProto_ExtensionRange& b) { - a.Swap(&b); - } - inline void Swap(DescriptorProto_ExtensionRange* other) { - if (other == this) return; - #ifdef PROTOBUF_FORCE_COPY_IN_SWAP - if (GetOwningArena() != nullptr && - GetOwningArena() == other->GetOwningArena()) { - #else // PROTOBUF_FORCE_COPY_IN_SWAP - if (GetOwningArena() == other->GetOwningArena()) { - #endif // !PROTOBUF_FORCE_COPY_IN_SWAP - InternalSwap(other); - } else { - ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other); - } - } - void UnsafeArenaSwap(DescriptorProto_ExtensionRange* other) { - if (other == this) return; - GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena()); - InternalSwap(other); - } - - // implements Message ---------------------------------------------- - - DescriptorProto_ExtensionRange* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final { - return CreateMaybeMessage<DescriptorProto_ExtensionRange>(arena); - } - using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom; - void CopyFrom(const DescriptorProto_ExtensionRange& from); - using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom; - void MergeFrom( const DescriptorProto_ExtensionRange& from) { - DescriptorProto_ExtensionRange::MergeImpl(*this, from); - } - private: - static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message& to_msg, const ::PROTOBUF_NAMESPACE_ID::Message& from_msg); - public: - PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final; - bool IsInitialized() const final; - - size_t ByteSizeLong() const final; - const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final; - uint8_t* _InternalSerialize( - uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final; - int GetCachedSize() const final { return _impl_._cached_size_.Get(); } - - private: - void SharedCtor(::PROTOBUF_NAMESPACE_ID::Arena* arena, bool is_message_owned); - void SharedDtor(); - void SetCachedSize(int size) const final; - void InternalSwap(DescriptorProto_ExtensionRange* other); - - private: - friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata; - static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() { - return "google.protobuf.DescriptorProto.ExtensionRange"; - } - protected: - explicit DescriptorProto_ExtensionRange(::PROTOBUF_NAMESPACE_ID::Arena* arena, - bool is_message_owned = false); - public: - - static const ClassData _class_data_; - const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final; - - ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final; - - // nested types ---------------------------------------------------- - - // accessors ------------------------------------------------------- - - enum : int { - kOptionsFieldNumber = 3, - kStartFieldNumber = 1, - kEndFieldNumber = 2, - }; - // optional .google.protobuf.ExtensionRangeOptions options = 3; - bool has_options() const; - private: - bool _internal_has_options() const; - public: - void clear_options(); - const ::PROTOBUF_NAMESPACE_ID::ExtensionRangeOptions& options() const; - PROTOBUF_NODISCARD ::PROTOBUF_NAMESPACE_ID::ExtensionRangeOptions* release_options(); - ::PROTOBUF_NAMESPACE_ID::ExtensionRangeOptions* mutable_options(); - void set_allocated_options(::PROTOBUF_NAMESPACE_ID::ExtensionRangeOptions* options); - private: - const ::PROTOBUF_NAMESPACE_ID::ExtensionRangeOptions& _internal_options() const; - ::PROTOBUF_NAMESPACE_ID::ExtensionRangeOptions* _internal_mutable_options(); - public: - void unsafe_arena_set_allocated_options( - ::PROTOBUF_NAMESPACE_ID::ExtensionRangeOptions* options); - ::PROTOBUF_NAMESPACE_ID::ExtensionRangeOptions* unsafe_arena_release_options(); - - // optional int32 start = 1; - bool has_start() const; - private: - bool _internal_has_start() const; - public: - void clear_start(); - int32_t start() const; - void set_start(int32_t value); - private: - int32_t _internal_start() const; - void _internal_set_start(int32_t value); - public: - - // optional int32 end = 2; - bool has_end() const; - private: - bool _internal_has_end() const; - public: - void clear_end(); - int32_t end() const; - void set_end(int32_t value); - private: - int32_t _internal_end() const; - void _internal_set_end(int32_t value); - public: - - // @@protoc_insertion_point(class_scope:google.protobuf.DescriptorProto.ExtensionRange) - private: - class _Internal; - - template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper; - typedef void InternalArenaConstructable_; - typedef void DestructorSkippable_; - struct Impl_ { - ::PROTOBUF_NAMESPACE_ID::internal::HasBits<1> _has_bits_; - mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_; - ::PROTOBUF_NAMESPACE_ID::ExtensionRangeOptions* options_; - int32_t start_; - int32_t end_; - }; - union { Impl_ _impl_; }; - friend struct ::TableStruct_google_2fprotobuf_2fdescriptor_2eproto; -}; -// ------------------------------------------------------------------- - -class PROTOBUF_EXPORT DescriptorProto_ReservedRange final : - public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:google.protobuf.DescriptorProto.ReservedRange) */ { - public: - inline DescriptorProto_ReservedRange() : DescriptorProto_ReservedRange(nullptr) {} - ~DescriptorProto_ReservedRange() override; - explicit PROTOBUF_CONSTEXPR DescriptorProto_ReservedRange(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized); - - DescriptorProto_ReservedRange(const DescriptorProto_ReservedRange& from); - DescriptorProto_ReservedRange(DescriptorProto_ReservedRange&& from) noexcept - : DescriptorProto_ReservedRange() { - *this = ::std::move(from); - } - - inline DescriptorProto_ReservedRange& operator=(const DescriptorProto_ReservedRange& from) { - CopyFrom(from); - return *this; - } - inline DescriptorProto_ReservedRange& operator=(DescriptorProto_ReservedRange&& from) noexcept { - if (this == &from) return *this; - if (GetOwningArena() == from.GetOwningArena() - #ifdef PROTOBUF_FORCE_COPY_IN_MOVE - && GetOwningArena() != nullptr - #endif // !PROTOBUF_FORCE_COPY_IN_MOVE - ) { - InternalSwap(&from); - } else { - CopyFrom(from); - } - return *this; - } - - inline const ::PROTOBUF_NAMESPACE_ID::UnknownFieldSet& unknown_fields() const { - return _internal_metadata_.unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(::PROTOBUF_NAMESPACE_ID::UnknownFieldSet::default_instance); - } - inline ::PROTOBUF_NAMESPACE_ID::UnknownFieldSet* mutable_unknown_fields() { - return _internal_metadata_.mutable_unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(); - } - - static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() { - return GetDescriptor(); - } - static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() { - return default_instance().GetMetadata().descriptor; - } - static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() { - return default_instance().GetMetadata().reflection; - } - static const DescriptorProto_ReservedRange& default_instance() { - return *internal_default_instance(); - } - static inline const DescriptorProto_ReservedRange* internal_default_instance() { - return reinterpret_cast<const DescriptorProto_ReservedRange*>( - &_DescriptorProto_ReservedRange_default_instance_); - } - static constexpr int kIndexInFileMessages = - 3; - - friend void swap(DescriptorProto_ReservedRange& a, DescriptorProto_ReservedRange& b) { - a.Swap(&b); - } - inline void Swap(DescriptorProto_ReservedRange* other) { - if (other == this) return; - #ifdef PROTOBUF_FORCE_COPY_IN_SWAP - if (GetOwningArena() != nullptr && - GetOwningArena() == other->GetOwningArena()) { - #else // PROTOBUF_FORCE_COPY_IN_SWAP - if (GetOwningArena() == other->GetOwningArena()) { - #endif // !PROTOBUF_FORCE_COPY_IN_SWAP - InternalSwap(other); - } else { - ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other); - } - } - void UnsafeArenaSwap(DescriptorProto_ReservedRange* other) { - if (other == this) return; - GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena()); - InternalSwap(other); - } - - // implements Message ---------------------------------------------- - - DescriptorProto_ReservedRange* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final { - return CreateMaybeMessage<DescriptorProto_ReservedRange>(arena); - } - using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom; - void CopyFrom(const DescriptorProto_ReservedRange& from); - using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom; - void MergeFrom( const DescriptorProto_ReservedRange& from) { - DescriptorProto_ReservedRange::MergeImpl(*this, from); - } - private: - static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message& to_msg, const ::PROTOBUF_NAMESPACE_ID::Message& from_msg); - public: - PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final; - bool IsInitialized() const final; - - size_t ByteSizeLong() const final; - const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final; - uint8_t* _InternalSerialize( - uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final; - int GetCachedSize() const final { return _impl_._cached_size_.Get(); } - - private: - void SharedCtor(::PROTOBUF_NAMESPACE_ID::Arena* arena, bool is_message_owned); - void SharedDtor(); - void SetCachedSize(int size) const final; - void InternalSwap(DescriptorProto_ReservedRange* other); - - private: - friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata; - static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() { - return "google.protobuf.DescriptorProto.ReservedRange"; - } - protected: - explicit DescriptorProto_ReservedRange(::PROTOBUF_NAMESPACE_ID::Arena* arena, - bool is_message_owned = false); - public: - - static const ClassData _class_data_; - const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final; - - ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final; - - // nested types ---------------------------------------------------- - - // accessors ------------------------------------------------------- - - enum : int { - kStartFieldNumber = 1, - kEndFieldNumber = 2, - }; - // optional int32 start = 1; - bool has_start() const; - private: - bool _internal_has_start() const; - public: - void clear_start(); - int32_t start() const; - void set_start(int32_t value); - private: - int32_t _internal_start() const; - void _internal_set_start(int32_t value); - public: - - // optional int32 end = 2; - bool has_end() const; - private: - bool _internal_has_end() const; - public: - void clear_end(); - int32_t end() const; - void set_end(int32_t value); - private: - int32_t _internal_end() const; - void _internal_set_end(int32_t value); - public: - - // @@protoc_insertion_point(class_scope:google.protobuf.DescriptorProto.ReservedRange) - private: - class _Internal; - - template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper; - typedef void InternalArenaConstructable_; - typedef void DestructorSkippable_; - struct Impl_ { - ::PROTOBUF_NAMESPACE_ID::internal::HasBits<1> _has_bits_; - mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_; - int32_t start_; - int32_t end_; - }; - union { Impl_ _impl_; }; - friend struct ::TableStruct_google_2fprotobuf_2fdescriptor_2eproto; -}; -// ------------------------------------------------------------------- - -class PROTOBUF_EXPORT DescriptorProto final : - public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:google.protobuf.DescriptorProto) */ { - public: - inline DescriptorProto() : DescriptorProto(nullptr) {} - ~DescriptorProto() override; - explicit PROTOBUF_CONSTEXPR DescriptorProto(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized); - - DescriptorProto(const DescriptorProto& from); - DescriptorProto(DescriptorProto&& from) noexcept - : DescriptorProto() { - *this = ::std::move(from); - } - - inline DescriptorProto& operator=(const DescriptorProto& from) { - CopyFrom(from); - return *this; - } - inline DescriptorProto& operator=(DescriptorProto&& from) noexcept { - if (this == &from) return *this; - if (GetOwningArena() == from.GetOwningArena() - #ifdef PROTOBUF_FORCE_COPY_IN_MOVE - && GetOwningArena() != nullptr - #endif // !PROTOBUF_FORCE_COPY_IN_MOVE - ) { - InternalSwap(&from); - } else { - CopyFrom(from); - } - return *this; - } - - inline const ::PROTOBUF_NAMESPACE_ID::UnknownFieldSet& unknown_fields() const { - return _internal_metadata_.unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(::PROTOBUF_NAMESPACE_ID::UnknownFieldSet::default_instance); - } - inline ::PROTOBUF_NAMESPACE_ID::UnknownFieldSet* mutable_unknown_fields() { - return _internal_metadata_.mutable_unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(); - } - - static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() { - return GetDescriptor(); - } - static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() { - return default_instance().GetMetadata().descriptor; - } - static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() { - return default_instance().GetMetadata().reflection; - } - static const DescriptorProto& default_instance() { - return *internal_default_instance(); - } - static inline const DescriptorProto* internal_default_instance() { - return reinterpret_cast<const DescriptorProto*>( - &_DescriptorProto_default_instance_); - } - static constexpr int kIndexInFileMessages = - 4; - - friend void swap(DescriptorProto& a, DescriptorProto& b) { - a.Swap(&b); - } - inline void Swap(DescriptorProto* other) { - if (other == this) return; - #ifdef PROTOBUF_FORCE_COPY_IN_SWAP - if (GetOwningArena() != nullptr && - GetOwningArena() == other->GetOwningArena()) { - #else // PROTOBUF_FORCE_COPY_IN_SWAP - if (GetOwningArena() == other->GetOwningArena()) { - #endif // !PROTOBUF_FORCE_COPY_IN_SWAP - InternalSwap(other); - } else { - ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other); - } - } - void UnsafeArenaSwap(DescriptorProto* other) { - if (other == this) return; - GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena()); - InternalSwap(other); - } - - // implements Message ---------------------------------------------- - - DescriptorProto* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final { - return CreateMaybeMessage<DescriptorProto>(arena); - } - using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom; - void CopyFrom(const DescriptorProto& from); - using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom; - void MergeFrom( const DescriptorProto& from) { - DescriptorProto::MergeImpl(*this, from); - } - private: - static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message& to_msg, const ::PROTOBUF_NAMESPACE_ID::Message& from_msg); - public: - PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final; - bool IsInitialized() const final; - - size_t ByteSizeLong() const final; - const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final; - uint8_t* _InternalSerialize( - uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final; - int GetCachedSize() const final { return _impl_._cached_size_.Get(); } - - private: - void SharedCtor(::PROTOBUF_NAMESPACE_ID::Arena* arena, bool is_message_owned); - void SharedDtor(); - void SetCachedSize(int size) const final; - void InternalSwap(DescriptorProto* other); - - private: - friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata; - static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() { - return "google.protobuf.DescriptorProto"; - } - protected: - explicit DescriptorProto(::PROTOBUF_NAMESPACE_ID::Arena* arena, - bool is_message_owned = false); - public: - - static const ClassData _class_data_; - const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final; - - ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final; - - // nested types ---------------------------------------------------- - - typedef DescriptorProto_ExtensionRange ExtensionRange; - typedef DescriptorProto_ReservedRange ReservedRange; - - // accessors ------------------------------------------------------- - - enum : int { - kFieldFieldNumber = 2, - kNestedTypeFieldNumber = 3, - kEnumTypeFieldNumber = 4, - kExtensionRangeFieldNumber = 5, - kExtensionFieldNumber = 6, - kOneofDeclFieldNumber = 8, - kReservedRangeFieldNumber = 9, - kReservedNameFieldNumber = 10, - kNameFieldNumber = 1, - kOptionsFieldNumber = 7, - }; - // repeated .google.protobuf.FieldDescriptorProto field = 2; - int field_size() const; - private: - int _internal_field_size() const; - public: - void clear_field(); - ::PROTOBUF_NAMESPACE_ID::FieldDescriptorProto* mutable_field(int index); - ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::FieldDescriptorProto >* - mutable_field(); - private: - const ::PROTOBUF_NAMESPACE_ID::FieldDescriptorProto& _internal_field(int index) const; - ::PROTOBUF_NAMESPACE_ID::FieldDescriptorProto* _internal_add_field(); - public: - const ::PROTOBUF_NAMESPACE_ID::FieldDescriptorProto& field(int index) const; - ::PROTOBUF_NAMESPACE_ID::FieldDescriptorProto* add_field(); - const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::FieldDescriptorProto >& - field() const; - - // repeated .google.protobuf.DescriptorProto nested_type = 3; - int nested_type_size() const; - private: - int _internal_nested_type_size() const; - public: - void clear_nested_type(); - ::PROTOBUF_NAMESPACE_ID::DescriptorProto* mutable_nested_type(int index); - ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::DescriptorProto >* - mutable_nested_type(); - private: - const ::PROTOBUF_NAMESPACE_ID::DescriptorProto& _internal_nested_type(int index) const; - ::PROTOBUF_NAMESPACE_ID::DescriptorProto* _internal_add_nested_type(); - public: - const ::PROTOBUF_NAMESPACE_ID::DescriptorProto& nested_type(int index) const; - ::PROTOBUF_NAMESPACE_ID::DescriptorProto* add_nested_type(); - const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::DescriptorProto >& - nested_type() const; - - // repeated .google.protobuf.EnumDescriptorProto enum_type = 4; - int enum_type_size() const; - private: - int _internal_enum_type_size() const; - public: - void clear_enum_type(); - ::PROTOBUF_NAMESPACE_ID::EnumDescriptorProto* mutable_enum_type(int index); - ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::EnumDescriptorProto >* - mutable_enum_type(); - private: - const ::PROTOBUF_NAMESPACE_ID::EnumDescriptorProto& _internal_enum_type(int index) const; - ::PROTOBUF_NAMESPACE_ID::EnumDescriptorProto* _internal_add_enum_type(); - public: - const ::PROTOBUF_NAMESPACE_ID::EnumDescriptorProto& enum_type(int index) const; - ::PROTOBUF_NAMESPACE_ID::EnumDescriptorProto* add_enum_type(); - const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::EnumDescriptorProto >& - enum_type() const; - - // repeated .google.protobuf.DescriptorProto.ExtensionRange extension_range = 5; - int extension_range_size() const; - private: - int _internal_extension_range_size() const; - public: - void clear_extension_range(); - ::PROTOBUF_NAMESPACE_ID::DescriptorProto_ExtensionRange* mutable_extension_range(int index); - ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::DescriptorProto_ExtensionRange >* - mutable_extension_range(); - private: - const ::PROTOBUF_NAMESPACE_ID::DescriptorProto_ExtensionRange& _internal_extension_range(int index) const; - ::PROTOBUF_NAMESPACE_ID::DescriptorProto_ExtensionRange* _internal_add_extension_range(); - public: - const ::PROTOBUF_NAMESPACE_ID::DescriptorProto_ExtensionRange& extension_range(int index) const; - ::PROTOBUF_NAMESPACE_ID::DescriptorProto_ExtensionRange* add_extension_range(); - const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::DescriptorProto_ExtensionRange >& - extension_range() const; - - // repeated .google.protobuf.FieldDescriptorProto extension = 6; - int extension_size() const; - private: - int _internal_extension_size() const; - public: - void clear_extension(); - ::PROTOBUF_NAMESPACE_ID::FieldDescriptorProto* mutable_extension(int index); - ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::FieldDescriptorProto >* - mutable_extension(); - private: - const ::PROTOBUF_NAMESPACE_ID::FieldDescriptorProto& _internal_extension(int index) const; - ::PROTOBUF_NAMESPACE_ID::FieldDescriptorProto* _internal_add_extension(); - public: - const ::PROTOBUF_NAMESPACE_ID::FieldDescriptorProto& extension(int index) const; - ::PROTOBUF_NAMESPACE_ID::FieldDescriptorProto* add_extension(); - const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::FieldDescriptorProto >& - extension() const; - - // repeated .google.protobuf.OneofDescriptorProto oneof_decl = 8; - int oneof_decl_size() const; - private: - int _internal_oneof_decl_size() const; - public: - void clear_oneof_decl(); - ::PROTOBUF_NAMESPACE_ID::OneofDescriptorProto* mutable_oneof_decl(int index); - ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::OneofDescriptorProto >* - mutable_oneof_decl(); - private: - const ::PROTOBUF_NAMESPACE_ID::OneofDescriptorProto& _internal_oneof_decl(int index) const; - ::PROTOBUF_NAMESPACE_ID::OneofDescriptorProto* _internal_add_oneof_decl(); - public: - const ::PROTOBUF_NAMESPACE_ID::OneofDescriptorProto& oneof_decl(int index) const; - ::PROTOBUF_NAMESPACE_ID::OneofDescriptorProto* add_oneof_decl(); - const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::OneofDescriptorProto >& - oneof_decl() const; - - // repeated .google.protobuf.DescriptorProto.ReservedRange reserved_range = 9; - int reserved_range_size() const; - private: - int _internal_reserved_range_size() const; - public: - void clear_reserved_range(); - ::PROTOBUF_NAMESPACE_ID::DescriptorProto_ReservedRange* mutable_reserved_range(int index); - ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::DescriptorProto_ReservedRange >* - mutable_reserved_range(); - private: - const ::PROTOBUF_NAMESPACE_ID::DescriptorProto_ReservedRange& _internal_reserved_range(int index) const; - ::PROTOBUF_NAMESPACE_ID::DescriptorProto_ReservedRange* _internal_add_reserved_range(); - public: - const ::PROTOBUF_NAMESPACE_ID::DescriptorProto_ReservedRange& reserved_range(int index) const; - ::PROTOBUF_NAMESPACE_ID::DescriptorProto_ReservedRange* add_reserved_range(); - const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::DescriptorProto_ReservedRange >& - reserved_range() const; - - // repeated string reserved_name = 10; - int reserved_name_size() const; - private: - int _internal_reserved_name_size() const; - public: - void clear_reserved_name(); - const std::string& reserved_name(int index) const; - std::string* mutable_reserved_name(int index); - void set_reserved_name(int index, const std::string& value); - void set_reserved_name(int index, std::string&& value); - void set_reserved_name(int index, const char* value); - void set_reserved_name(int index, const char* value, size_t size); - std::string* add_reserved_name(); - void add_reserved_name(const std::string& value); - void add_reserved_name(std::string&& value); - void add_reserved_name(const char* value); - void add_reserved_name(const char* value, size_t size); - const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField<std::string>& reserved_name() const; - ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField<std::string>* mutable_reserved_name(); - private: - const std::string& _internal_reserved_name(int index) const; - std::string* _internal_add_reserved_name(); - public: - - // optional string name = 1; - bool has_name() const; - private: - bool _internal_has_name() const; - public: - void clear_name(); - const std::string& name() const; - template <typename ArgT0 = const std::string&, typename... ArgT> - void set_name(ArgT0&& arg0, ArgT... args); - std::string* mutable_name(); - PROTOBUF_NODISCARD std::string* release_name(); - void set_allocated_name(std::string* name); - private: - const std::string& _internal_name() const; - inline PROTOBUF_ALWAYS_INLINE void _internal_set_name(const std::string& value); - std::string* _internal_mutable_name(); - public: - - // optional .google.protobuf.MessageOptions options = 7; - bool has_options() const; - private: - bool _internal_has_options() const; - public: - void clear_options(); - const ::PROTOBUF_NAMESPACE_ID::MessageOptions& options() const; - PROTOBUF_NODISCARD ::PROTOBUF_NAMESPACE_ID::MessageOptions* release_options(); - ::PROTOBUF_NAMESPACE_ID::MessageOptions* mutable_options(); - void set_allocated_options(::PROTOBUF_NAMESPACE_ID::MessageOptions* options); - private: - const ::PROTOBUF_NAMESPACE_ID::MessageOptions& _internal_options() const; - ::PROTOBUF_NAMESPACE_ID::MessageOptions* _internal_mutable_options(); - public: - void unsafe_arena_set_allocated_options( - ::PROTOBUF_NAMESPACE_ID::MessageOptions* options); - ::PROTOBUF_NAMESPACE_ID::MessageOptions* unsafe_arena_release_options(); - - // @@protoc_insertion_point(class_scope:google.protobuf.DescriptorProto) - private: - class _Internal; - - template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper; - typedef void InternalArenaConstructable_; - typedef void DestructorSkippable_; - struct Impl_ { - ::PROTOBUF_NAMESPACE_ID::internal::HasBits<1> _has_bits_; - mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_; - ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::FieldDescriptorProto > field_; - ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::DescriptorProto > nested_type_; - ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::EnumDescriptorProto > enum_type_; - ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::DescriptorProto_ExtensionRange > extension_range_; - ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::FieldDescriptorProto > extension_; - ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::OneofDescriptorProto > oneof_decl_; - ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::DescriptorProto_ReservedRange > reserved_range_; - ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField<std::string> reserved_name_; - ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr name_; - ::PROTOBUF_NAMESPACE_ID::MessageOptions* options_; - }; - union { Impl_ _impl_; }; - friend struct ::TableStruct_google_2fprotobuf_2fdescriptor_2eproto; -}; -// ------------------------------------------------------------------- - -class PROTOBUF_EXPORT ExtensionRangeOptions final : - public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:google.protobuf.ExtensionRangeOptions) */ { - public: - inline ExtensionRangeOptions() : ExtensionRangeOptions(nullptr) {} - ~ExtensionRangeOptions() override; - explicit PROTOBUF_CONSTEXPR ExtensionRangeOptions(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized); - - ExtensionRangeOptions(const ExtensionRangeOptions& from); - ExtensionRangeOptions(ExtensionRangeOptions&& from) noexcept - : ExtensionRangeOptions() { - *this = ::std::move(from); - } - - inline ExtensionRangeOptions& operator=(const ExtensionRangeOptions& from) { - CopyFrom(from); - return *this; - } - inline ExtensionRangeOptions& operator=(ExtensionRangeOptions&& from) noexcept { - if (this == &from) return *this; - if (GetOwningArena() == from.GetOwningArena() - #ifdef PROTOBUF_FORCE_COPY_IN_MOVE - && GetOwningArena() != nullptr - #endif // !PROTOBUF_FORCE_COPY_IN_MOVE - ) { - InternalSwap(&from); - } else { - CopyFrom(from); - } - return *this; - } - - inline const ::PROTOBUF_NAMESPACE_ID::UnknownFieldSet& unknown_fields() const { - return _internal_metadata_.unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(::PROTOBUF_NAMESPACE_ID::UnknownFieldSet::default_instance); - } - inline ::PROTOBUF_NAMESPACE_ID::UnknownFieldSet* mutable_unknown_fields() { - return _internal_metadata_.mutable_unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(); - } - - static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() { - return GetDescriptor(); - } - static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() { - return default_instance().GetMetadata().descriptor; - } - static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() { - return default_instance().GetMetadata().reflection; - } - static const ExtensionRangeOptions& default_instance() { - return *internal_default_instance(); - } - static inline const ExtensionRangeOptions* internal_default_instance() { - return reinterpret_cast<const ExtensionRangeOptions*>( - &_ExtensionRangeOptions_default_instance_); - } - static constexpr int kIndexInFileMessages = - 5; - - friend void swap(ExtensionRangeOptions& a, ExtensionRangeOptions& b) { - a.Swap(&b); - } - inline void Swap(ExtensionRangeOptions* other) { - if (other == this) return; - #ifdef PROTOBUF_FORCE_COPY_IN_SWAP - if (GetOwningArena() != nullptr && - GetOwningArena() == other->GetOwningArena()) { - #else // PROTOBUF_FORCE_COPY_IN_SWAP - if (GetOwningArena() == other->GetOwningArena()) { - #endif // !PROTOBUF_FORCE_COPY_IN_SWAP - InternalSwap(other); - } else { - ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other); - } - } - void UnsafeArenaSwap(ExtensionRangeOptions* other) { - if (other == this) return; - GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena()); - InternalSwap(other); - } - - // implements Message ---------------------------------------------- - - ExtensionRangeOptions* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final { - return CreateMaybeMessage<ExtensionRangeOptions>(arena); - } - using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom; - void CopyFrom(const ExtensionRangeOptions& from); - using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom; - void MergeFrom( const ExtensionRangeOptions& from) { - ExtensionRangeOptions::MergeImpl(*this, from); - } - private: - static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message& to_msg, const ::PROTOBUF_NAMESPACE_ID::Message& from_msg); - public: - PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final; - bool IsInitialized() const final; - - size_t ByteSizeLong() const final; - const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final; - uint8_t* _InternalSerialize( - uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final; - int GetCachedSize() const final { return _impl_._cached_size_.Get(); } - - private: - void SharedCtor(::PROTOBUF_NAMESPACE_ID::Arena* arena, bool is_message_owned); - void SharedDtor(); - void SetCachedSize(int size) const final; - void InternalSwap(ExtensionRangeOptions* other); - - private: - friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata; - static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() { - return "google.protobuf.ExtensionRangeOptions"; - } - protected: - explicit ExtensionRangeOptions(::PROTOBUF_NAMESPACE_ID::Arena* arena, - bool is_message_owned = false); - public: - - static const ClassData _class_data_; - const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final; - - ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final; - - // nested types ---------------------------------------------------- - - // accessors ------------------------------------------------------- - - enum : int { - kUninterpretedOptionFieldNumber = 999, - }; - // repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999; - int uninterpreted_option_size() const; - private: - int _internal_uninterpreted_option_size() const; - public: - void clear_uninterpreted_option(); - ::PROTOBUF_NAMESPACE_ID::UninterpretedOption* mutable_uninterpreted_option(int index); - ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::UninterpretedOption >* - mutable_uninterpreted_option(); - private: - const ::PROTOBUF_NAMESPACE_ID::UninterpretedOption& _internal_uninterpreted_option(int index) const; - ::PROTOBUF_NAMESPACE_ID::UninterpretedOption* _internal_add_uninterpreted_option(); - public: - const ::PROTOBUF_NAMESPACE_ID::UninterpretedOption& uninterpreted_option(int index) const; - ::PROTOBUF_NAMESPACE_ID::UninterpretedOption* add_uninterpreted_option(); - const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::UninterpretedOption >& - uninterpreted_option() const; - - - template <typename _proto_TypeTraits, - ::PROTOBUF_NAMESPACE_ID::internal::FieldType _field_type, - bool _is_packed> - inline bool HasExtension( - const ::PROTOBUF_NAMESPACE_ID::internal::ExtensionIdentifier< - ExtensionRangeOptions, _proto_TypeTraits, _field_type, _is_packed>& id) const { - - return _impl_._extensions_.Has(id.number()); - } - - template <typename _proto_TypeTraits, - ::PROTOBUF_NAMESPACE_ID::internal::FieldType _field_type, - bool _is_packed> - inline void ClearExtension( - const ::PROTOBUF_NAMESPACE_ID::internal::ExtensionIdentifier< - ExtensionRangeOptions, _proto_TypeTraits, _field_type, _is_packed>& id) { - _impl_._extensions_.ClearExtension(id.number()); - - } - - template <typename _proto_TypeTraits, - ::PROTOBUF_NAMESPACE_ID::internal::FieldType _field_type, - bool _is_packed> - inline int ExtensionSize( - const ::PROTOBUF_NAMESPACE_ID::internal::ExtensionIdentifier< - ExtensionRangeOptions, _proto_TypeTraits, _field_type, _is_packed>& id) const { - - return _impl_._extensions_.ExtensionSize(id.number()); - } - - template <typename _proto_TypeTraits, - ::PROTOBUF_NAMESPACE_ID::internal::FieldType _field_type, - bool _is_packed> - inline typename _proto_TypeTraits::Singular::ConstType GetExtension( - const ::PROTOBUF_NAMESPACE_ID::internal::ExtensionIdentifier< - ExtensionRangeOptions, _proto_TypeTraits, _field_type, _is_packed>& id) const { - - return _proto_TypeTraits::Get(id.number(), _impl_._extensions_, - id.default_value()); - } - - template <typename _proto_TypeTraits, - ::PROTOBUF_NAMESPACE_ID::internal::FieldType _field_type, - bool _is_packed> - inline typename _proto_TypeTraits::Singular::MutableType MutableExtension( - const ::PROTOBUF_NAMESPACE_ID::internal::ExtensionIdentifier< - ExtensionRangeOptions, _proto_TypeTraits, _field_type, _is_packed>& id) { - - return _proto_TypeTraits::Mutable(id.number(), _field_type, - &_impl_._extensions_); - } - - template <typename _proto_TypeTraits, - ::PROTOBUF_NAMESPACE_ID::internal::FieldType _field_type, - bool _is_packed> - inline void SetExtension( - const ::PROTOBUF_NAMESPACE_ID::internal::ExtensionIdentifier< - ExtensionRangeOptions, _proto_TypeTraits, _field_type, _is_packed>& id, - typename _proto_TypeTraits::Singular::ConstType value) { - _proto_TypeTraits::Set(id.number(), _field_type, value, &_impl_._extensions_); - - } - - template <typename _proto_TypeTraits, - ::PROTOBUF_NAMESPACE_ID::internal::FieldType _field_type, - bool _is_packed> - inline void SetAllocatedExtension( - const ::PROTOBUF_NAMESPACE_ID::internal::ExtensionIdentifier< - ExtensionRangeOptions, _proto_TypeTraits, _field_type, _is_packed>& id, - typename _proto_TypeTraits::Singular::MutableType value) { - _proto_TypeTraits::SetAllocated(id.number(), _field_type, value, - &_impl_._extensions_); - - } - template <typename _proto_TypeTraits, - ::PROTOBUF_NAMESPACE_ID::internal::FieldType _field_type, - bool _is_packed> - inline void UnsafeArenaSetAllocatedExtension( - const ::PROTOBUF_NAMESPACE_ID::internal::ExtensionIdentifier< - ExtensionRangeOptions, _proto_TypeTraits, _field_type, _is_packed>& id, - typename _proto_TypeTraits::Singular::MutableType value) { - _proto_TypeTraits::UnsafeArenaSetAllocated(id.number(), _field_type, - value, &_impl_._extensions_); - - } - template <typename _proto_TypeTraits, - ::PROTOBUF_NAMESPACE_ID::internal::FieldType _field_type, - bool _is_packed> - PROTOBUF_NODISCARD inline - typename _proto_TypeTraits::Singular::MutableType - ReleaseExtension( - const ::PROTOBUF_NAMESPACE_ID::internal::ExtensionIdentifier< - ExtensionRangeOptions, _proto_TypeTraits, _field_type, _is_packed>& id) { - - return _proto_TypeTraits::Release(id.number(), _field_type, - &_impl_._extensions_); - } - template <typename _proto_TypeTraits, - ::PROTOBUF_NAMESPACE_ID::internal::FieldType _field_type, - bool _is_packed> - inline typename _proto_TypeTraits::Singular::MutableType - UnsafeArenaReleaseExtension( - const ::PROTOBUF_NAMESPACE_ID::internal::ExtensionIdentifier< - ExtensionRangeOptions, _proto_TypeTraits, _field_type, _is_packed>& id) { - - return _proto_TypeTraits::UnsafeArenaRelease(id.number(), _field_type, - &_impl_._extensions_); - } - - template <typename _proto_TypeTraits, - ::PROTOBUF_NAMESPACE_ID::internal::FieldType _field_type, - bool _is_packed> - inline typename _proto_TypeTraits::Repeated::ConstType GetExtension( - const ::PROTOBUF_NAMESPACE_ID::internal::ExtensionIdentifier< - ExtensionRangeOptions, _proto_TypeTraits, _field_type, _is_packed>& id, - int index) const { - - return _proto_TypeTraits::Get(id.number(), _impl_._extensions_, index); - } - - template <typename _proto_TypeTraits, - ::PROTOBUF_NAMESPACE_ID::internal::FieldType _field_type, - bool _is_packed> - inline typename _proto_TypeTraits::Repeated::MutableType MutableExtension( - const ::PROTOBUF_NAMESPACE_ID::internal::ExtensionIdentifier< - ExtensionRangeOptions, _proto_TypeTraits, _field_type, _is_packed>& id, - int index) { - - return _proto_TypeTraits::Mutable(id.number(), index, &_impl_._extensions_); - } - - template <typename _proto_TypeTraits, - ::PROTOBUF_NAMESPACE_ID::internal::FieldType _field_type, - bool _is_packed> - inline void SetExtension( - const ::PROTOBUF_NAMESPACE_ID::internal::ExtensionIdentifier< - ExtensionRangeOptions, _proto_TypeTraits, _field_type, _is_packed>& id, - int index, typename _proto_TypeTraits::Repeated::ConstType value) { - _proto_TypeTraits::Set(id.number(), index, value, &_impl_._extensions_); - - } - - template <typename _proto_TypeTraits, - ::PROTOBUF_NAMESPACE_ID::internal::FieldType _field_type, - bool _is_packed> - inline typename _proto_TypeTraits::Repeated::MutableType AddExtension( - const ::PROTOBUF_NAMESPACE_ID::internal::ExtensionIdentifier< - ExtensionRangeOptions, _proto_TypeTraits, _field_type, _is_packed>& id) { - typename _proto_TypeTraits::Repeated::MutableType to_add = - _proto_TypeTraits::Add(id.number(), _field_type, &_impl_._extensions_); - - return to_add; - } - - template <typename _proto_TypeTraits, - ::PROTOBUF_NAMESPACE_ID::internal::FieldType _field_type, - bool _is_packed> - inline void AddExtension( - const ::PROTOBUF_NAMESPACE_ID::internal::ExtensionIdentifier< - ExtensionRangeOptions, _proto_TypeTraits, _field_type, _is_packed>& id, - typename _proto_TypeTraits::Repeated::ConstType value) { - _proto_TypeTraits::Add(id.number(), _field_type, _is_packed, value, - &_impl_._extensions_); - - } - - template <typename _proto_TypeTraits, - ::PROTOBUF_NAMESPACE_ID::internal::FieldType _field_type, - bool _is_packed> - inline const typename _proto_TypeTraits::Repeated::RepeatedFieldType& - GetRepeatedExtension( - const ::PROTOBUF_NAMESPACE_ID::internal::ExtensionIdentifier< - ExtensionRangeOptions, _proto_TypeTraits, _field_type, _is_packed>& id) const { - - return _proto_TypeTraits::GetRepeated(id.number(), _impl_._extensions_); - } - - template <typename _proto_TypeTraits, - ::PROTOBUF_NAMESPACE_ID::internal::FieldType _field_type, - bool _is_packed> - inline typename _proto_TypeTraits::Repeated::RepeatedFieldType* - MutableRepeatedExtension( - const ::PROTOBUF_NAMESPACE_ID::internal::ExtensionIdentifier< - ExtensionRangeOptions, _proto_TypeTraits, _field_type, _is_packed>& id) { - - return _proto_TypeTraits::MutableRepeated(id.number(), _field_type, - _is_packed, &_impl_._extensions_); - } - - // @@protoc_insertion_point(class_scope:google.protobuf.ExtensionRangeOptions) - private: - class _Internal; - - template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper; - typedef void InternalArenaConstructable_; - typedef void DestructorSkippable_; - struct Impl_ { - ::PROTOBUF_NAMESPACE_ID::internal::ExtensionSet _extensions_; - - ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::UninterpretedOption > uninterpreted_option_; - mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_; - }; - union { Impl_ _impl_; }; - friend struct ::TableStruct_google_2fprotobuf_2fdescriptor_2eproto; -}; -// ------------------------------------------------------------------- - -class PROTOBUF_EXPORT FieldDescriptorProto final : - public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:google.protobuf.FieldDescriptorProto) */ { - public: - inline FieldDescriptorProto() : FieldDescriptorProto(nullptr) {} - ~FieldDescriptorProto() override; - explicit PROTOBUF_CONSTEXPR FieldDescriptorProto(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized); - - FieldDescriptorProto(const FieldDescriptorProto& from); - FieldDescriptorProto(FieldDescriptorProto&& from) noexcept - : FieldDescriptorProto() { - *this = ::std::move(from); - } - - inline FieldDescriptorProto& operator=(const FieldDescriptorProto& from) { - CopyFrom(from); - return *this; - } - inline FieldDescriptorProto& operator=(FieldDescriptorProto&& from) noexcept { - if (this == &from) return *this; - if (GetOwningArena() == from.GetOwningArena() - #ifdef PROTOBUF_FORCE_COPY_IN_MOVE - && GetOwningArena() != nullptr - #endif // !PROTOBUF_FORCE_COPY_IN_MOVE - ) { - InternalSwap(&from); - } else { - CopyFrom(from); - } - return *this; - } - - inline const ::PROTOBUF_NAMESPACE_ID::UnknownFieldSet& unknown_fields() const { - return _internal_metadata_.unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(::PROTOBUF_NAMESPACE_ID::UnknownFieldSet::default_instance); - } - inline ::PROTOBUF_NAMESPACE_ID::UnknownFieldSet* mutable_unknown_fields() { - return _internal_metadata_.mutable_unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(); - } - - static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() { - return GetDescriptor(); - } - static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() { - return default_instance().GetMetadata().descriptor; - } - static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() { - return default_instance().GetMetadata().reflection; - } - static const FieldDescriptorProto& default_instance() { - return *internal_default_instance(); - } - static inline const FieldDescriptorProto* internal_default_instance() { - return reinterpret_cast<const FieldDescriptorProto*>( - &_FieldDescriptorProto_default_instance_); - } - static constexpr int kIndexInFileMessages = - 6; - - friend void swap(FieldDescriptorProto& a, FieldDescriptorProto& b) { - a.Swap(&b); - } - inline void Swap(FieldDescriptorProto* other) { - if (other == this) return; - #ifdef PROTOBUF_FORCE_COPY_IN_SWAP - if (GetOwningArena() != nullptr && - GetOwningArena() == other->GetOwningArena()) { - #else // PROTOBUF_FORCE_COPY_IN_SWAP - if (GetOwningArena() == other->GetOwningArena()) { - #endif // !PROTOBUF_FORCE_COPY_IN_SWAP - InternalSwap(other); - } else { - ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other); - } - } - void UnsafeArenaSwap(FieldDescriptorProto* other) { - if (other == this) return; - GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena()); - InternalSwap(other); - } - - // implements Message ---------------------------------------------- - - FieldDescriptorProto* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final { - return CreateMaybeMessage<FieldDescriptorProto>(arena); - } - using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom; - void CopyFrom(const FieldDescriptorProto& from); - using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom; - void MergeFrom( const FieldDescriptorProto& from) { - FieldDescriptorProto::MergeImpl(*this, from); - } - private: - static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message& to_msg, const ::PROTOBUF_NAMESPACE_ID::Message& from_msg); - public: - PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final; - bool IsInitialized() const final; - - size_t ByteSizeLong() const final; - const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final; - uint8_t* _InternalSerialize( - uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final; - int GetCachedSize() const final { return _impl_._cached_size_.Get(); } - - private: - void SharedCtor(::PROTOBUF_NAMESPACE_ID::Arena* arena, bool is_message_owned); - void SharedDtor(); - void SetCachedSize(int size) const final; - void InternalSwap(FieldDescriptorProto* other); - - private: - friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata; - static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() { - return "google.protobuf.FieldDescriptorProto"; - } - protected: - explicit FieldDescriptorProto(::PROTOBUF_NAMESPACE_ID::Arena* arena, - bool is_message_owned = false); - public: - - static const ClassData _class_data_; - const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final; - - ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final; - - // nested types ---------------------------------------------------- - - typedef FieldDescriptorProto_Type Type; - static constexpr Type TYPE_DOUBLE = - FieldDescriptorProto_Type_TYPE_DOUBLE; - static constexpr Type TYPE_FLOAT = - FieldDescriptorProto_Type_TYPE_FLOAT; - static constexpr Type TYPE_INT64 = - FieldDescriptorProto_Type_TYPE_INT64; - static constexpr Type TYPE_UINT64 = - FieldDescriptorProto_Type_TYPE_UINT64; - static constexpr Type TYPE_INT32 = - FieldDescriptorProto_Type_TYPE_INT32; - static constexpr Type TYPE_FIXED64 = - FieldDescriptorProto_Type_TYPE_FIXED64; - static constexpr Type TYPE_FIXED32 = - FieldDescriptorProto_Type_TYPE_FIXED32; - static constexpr Type TYPE_BOOL = - FieldDescriptorProto_Type_TYPE_BOOL; - static constexpr Type TYPE_STRING = - FieldDescriptorProto_Type_TYPE_STRING; - static constexpr Type TYPE_GROUP = - FieldDescriptorProto_Type_TYPE_GROUP; - static constexpr Type TYPE_MESSAGE = - FieldDescriptorProto_Type_TYPE_MESSAGE; - static constexpr Type TYPE_BYTES = - FieldDescriptorProto_Type_TYPE_BYTES; - static constexpr Type TYPE_UINT32 = - FieldDescriptorProto_Type_TYPE_UINT32; - static constexpr Type TYPE_ENUM = - FieldDescriptorProto_Type_TYPE_ENUM; - static constexpr Type TYPE_SFIXED32 = - FieldDescriptorProto_Type_TYPE_SFIXED32; - static constexpr Type TYPE_SFIXED64 = - FieldDescriptorProto_Type_TYPE_SFIXED64; - static constexpr Type TYPE_SINT32 = - FieldDescriptorProto_Type_TYPE_SINT32; - static constexpr Type TYPE_SINT64 = - FieldDescriptorProto_Type_TYPE_SINT64; - static inline bool Type_IsValid(int value) { - return FieldDescriptorProto_Type_IsValid(value); - } - static constexpr Type Type_MIN = - FieldDescriptorProto_Type_Type_MIN; - static constexpr Type Type_MAX = - FieldDescriptorProto_Type_Type_MAX; - static constexpr int Type_ARRAYSIZE = - FieldDescriptorProto_Type_Type_ARRAYSIZE; - static inline const ::PROTOBUF_NAMESPACE_ID::EnumDescriptor* - Type_descriptor() { - return FieldDescriptorProto_Type_descriptor(); - } - template<typename T> - static inline const std::string& Type_Name(T enum_t_value) { - static_assert(::std::is_same<T, Type>::value || - ::std::is_integral<T>::value, - "Incorrect type passed to function Type_Name."); - return FieldDescriptorProto_Type_Name(enum_t_value); - } - static inline bool Type_Parse(::PROTOBUF_NAMESPACE_ID::ConstStringParam name, - Type* value) { - return FieldDescriptorProto_Type_Parse(name, value); - } - - typedef FieldDescriptorProto_Label Label; - static constexpr Label LABEL_OPTIONAL = - FieldDescriptorProto_Label_LABEL_OPTIONAL; - static constexpr Label LABEL_REQUIRED = - FieldDescriptorProto_Label_LABEL_REQUIRED; - static constexpr Label LABEL_REPEATED = - FieldDescriptorProto_Label_LABEL_REPEATED; - static inline bool Label_IsValid(int value) { - return FieldDescriptorProto_Label_IsValid(value); - } - static constexpr Label Label_MIN = - FieldDescriptorProto_Label_Label_MIN; - static constexpr Label Label_MAX = - FieldDescriptorProto_Label_Label_MAX; - static constexpr int Label_ARRAYSIZE = - FieldDescriptorProto_Label_Label_ARRAYSIZE; - static inline const ::PROTOBUF_NAMESPACE_ID::EnumDescriptor* - Label_descriptor() { - return FieldDescriptorProto_Label_descriptor(); - } - template<typename T> - static inline const std::string& Label_Name(T enum_t_value) { - static_assert(::std::is_same<T, Label>::value || - ::std::is_integral<T>::value, - "Incorrect type passed to function Label_Name."); - return FieldDescriptorProto_Label_Name(enum_t_value); - } - static inline bool Label_Parse(::PROTOBUF_NAMESPACE_ID::ConstStringParam name, - Label* value) { - return FieldDescriptorProto_Label_Parse(name, value); - } - - // accessors ------------------------------------------------------- - - enum : int { - kNameFieldNumber = 1, - kExtendeeFieldNumber = 2, - kTypeNameFieldNumber = 6, - kDefaultValueFieldNumber = 7, - kJsonNameFieldNumber = 10, - kOptionsFieldNumber = 8, - kNumberFieldNumber = 3, - kOneofIndexFieldNumber = 9, - kProto3OptionalFieldNumber = 17, - kLabelFieldNumber = 4, - kTypeFieldNumber = 5, - }; - // optional string name = 1; - bool has_name() const; - private: - bool _internal_has_name() const; - public: - void clear_name(); - const std::string& name() const; - template <typename ArgT0 = const std::string&, typename... ArgT> - void set_name(ArgT0&& arg0, ArgT... args); - std::string* mutable_name(); - PROTOBUF_NODISCARD std::string* release_name(); - void set_allocated_name(std::string* name); - private: - const std::string& _internal_name() const; - inline PROTOBUF_ALWAYS_INLINE void _internal_set_name(const std::string& value); - std::string* _internal_mutable_name(); - public: - - // optional string extendee = 2; - bool has_extendee() const; - private: - bool _internal_has_extendee() const; - public: - void clear_extendee(); - const std::string& extendee() const; - template <typename ArgT0 = const std::string&, typename... ArgT> - void set_extendee(ArgT0&& arg0, ArgT... args); - std::string* mutable_extendee(); - PROTOBUF_NODISCARD std::string* release_extendee(); - void set_allocated_extendee(std::string* extendee); - private: - const std::string& _internal_extendee() const; - inline PROTOBUF_ALWAYS_INLINE void _internal_set_extendee(const std::string& value); - std::string* _internal_mutable_extendee(); - public: - - // optional string type_name = 6; - bool has_type_name() const; - private: - bool _internal_has_type_name() const; - public: - void clear_type_name(); - const std::string& type_name() const; - template <typename ArgT0 = const std::string&, typename... ArgT> - void set_type_name(ArgT0&& arg0, ArgT... args); - std::string* mutable_type_name(); - PROTOBUF_NODISCARD std::string* release_type_name(); - void set_allocated_type_name(std::string* type_name); - private: - const std::string& _internal_type_name() const; - inline PROTOBUF_ALWAYS_INLINE void _internal_set_type_name(const std::string& value); - std::string* _internal_mutable_type_name(); - public: - - // optional string default_value = 7; - bool has_default_value() const; - private: - bool _internal_has_default_value() const; - public: - void clear_default_value(); - const std::string& default_value() const; - template <typename ArgT0 = const std::string&, typename... ArgT> - void set_default_value(ArgT0&& arg0, ArgT... args); - std::string* mutable_default_value(); - PROTOBUF_NODISCARD std::string* release_default_value(); - void set_allocated_default_value(std::string* default_value); - private: - const std::string& _internal_default_value() const; - inline PROTOBUF_ALWAYS_INLINE void _internal_set_default_value(const std::string& value); - std::string* _internal_mutable_default_value(); - public: - - // optional string json_name = 10; - bool has_json_name() const; - private: - bool _internal_has_json_name() const; - public: - void clear_json_name(); - const std::string& json_name() const; - template <typename ArgT0 = const std::string&, typename... ArgT> - void set_json_name(ArgT0&& arg0, ArgT... args); - std::string* mutable_json_name(); - PROTOBUF_NODISCARD std::string* release_json_name(); - void set_allocated_json_name(std::string* json_name); - private: - const std::string& _internal_json_name() const; - inline PROTOBUF_ALWAYS_INLINE void _internal_set_json_name(const std::string& value); - std::string* _internal_mutable_json_name(); - public: - - // optional .google.protobuf.FieldOptions options = 8; - bool has_options() const; - private: - bool _internal_has_options() const; - public: - void clear_options(); - const ::PROTOBUF_NAMESPACE_ID::FieldOptions& options() const; - PROTOBUF_NODISCARD ::PROTOBUF_NAMESPACE_ID::FieldOptions* release_options(); - ::PROTOBUF_NAMESPACE_ID::FieldOptions* mutable_options(); - void set_allocated_options(::PROTOBUF_NAMESPACE_ID::FieldOptions* options); - private: - const ::PROTOBUF_NAMESPACE_ID::FieldOptions& _internal_options() const; - ::PROTOBUF_NAMESPACE_ID::FieldOptions* _internal_mutable_options(); - public: - void unsafe_arena_set_allocated_options( - ::PROTOBUF_NAMESPACE_ID::FieldOptions* options); - ::PROTOBUF_NAMESPACE_ID::FieldOptions* unsafe_arena_release_options(); - - // optional int32 number = 3; - bool has_number() const; - private: - bool _internal_has_number() const; - public: - void clear_number(); - int32_t number() const; - void set_number(int32_t value); - private: - int32_t _internal_number() const; - void _internal_set_number(int32_t value); - public: - - // optional int32 oneof_index = 9; - bool has_oneof_index() const; - private: - bool _internal_has_oneof_index() const; - public: - void clear_oneof_index(); - int32_t oneof_index() const; - void set_oneof_index(int32_t value); - private: - int32_t _internal_oneof_index() const; - void _internal_set_oneof_index(int32_t value); - public: - - // optional bool proto3_optional = 17; - bool has_proto3_optional() const; - private: - bool _internal_has_proto3_optional() const; - public: - void clear_proto3_optional(); - bool proto3_optional() const; - void set_proto3_optional(bool value); - private: - bool _internal_proto3_optional() const; - void _internal_set_proto3_optional(bool value); - public: - - // optional .google.protobuf.FieldDescriptorProto.Label label = 4; - bool has_label() const; - private: - bool _internal_has_label() const; - public: - void clear_label(); - ::PROTOBUF_NAMESPACE_ID::FieldDescriptorProto_Label label() const; - void set_label(::PROTOBUF_NAMESPACE_ID::FieldDescriptorProto_Label value); - private: - ::PROTOBUF_NAMESPACE_ID::FieldDescriptorProto_Label _internal_label() const; - void _internal_set_label(::PROTOBUF_NAMESPACE_ID::FieldDescriptorProto_Label value); - public: - - // optional .google.protobuf.FieldDescriptorProto.Type type = 5; - bool has_type() const; - private: - bool _internal_has_type() const; - public: - void clear_type(); - ::PROTOBUF_NAMESPACE_ID::FieldDescriptorProto_Type type() const; - void set_type(::PROTOBUF_NAMESPACE_ID::FieldDescriptorProto_Type value); - private: - ::PROTOBUF_NAMESPACE_ID::FieldDescriptorProto_Type _internal_type() const; - void _internal_set_type(::PROTOBUF_NAMESPACE_ID::FieldDescriptorProto_Type value); - public: - - // @@protoc_insertion_point(class_scope:google.protobuf.FieldDescriptorProto) - private: - class _Internal; - - template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper; - typedef void InternalArenaConstructable_; - typedef void DestructorSkippable_; - struct Impl_ { - ::PROTOBUF_NAMESPACE_ID::internal::HasBits<1> _has_bits_; - mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_; - ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr name_; - ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr extendee_; - ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr type_name_; - ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr default_value_; - ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr json_name_; - ::PROTOBUF_NAMESPACE_ID::FieldOptions* options_; - int32_t number_; - int32_t oneof_index_; - bool proto3_optional_; - int label_; - int type_; - }; - union { Impl_ _impl_; }; - friend struct ::TableStruct_google_2fprotobuf_2fdescriptor_2eproto; -}; -// ------------------------------------------------------------------- - -class PROTOBUF_EXPORT OneofDescriptorProto final : - public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:google.protobuf.OneofDescriptorProto) */ { - public: - inline OneofDescriptorProto() : OneofDescriptorProto(nullptr) {} - ~OneofDescriptorProto() override; - explicit PROTOBUF_CONSTEXPR OneofDescriptorProto(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized); - - OneofDescriptorProto(const OneofDescriptorProto& from); - OneofDescriptorProto(OneofDescriptorProto&& from) noexcept - : OneofDescriptorProto() { - *this = ::std::move(from); - } - - inline OneofDescriptorProto& operator=(const OneofDescriptorProto& from) { - CopyFrom(from); - return *this; - } - inline OneofDescriptorProto& operator=(OneofDescriptorProto&& from) noexcept { - if (this == &from) return *this; - if (GetOwningArena() == from.GetOwningArena() - #ifdef PROTOBUF_FORCE_COPY_IN_MOVE - && GetOwningArena() != nullptr - #endif // !PROTOBUF_FORCE_COPY_IN_MOVE - ) { - InternalSwap(&from); - } else { - CopyFrom(from); - } - return *this; - } - - inline const ::PROTOBUF_NAMESPACE_ID::UnknownFieldSet& unknown_fields() const { - return _internal_metadata_.unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(::PROTOBUF_NAMESPACE_ID::UnknownFieldSet::default_instance); - } - inline ::PROTOBUF_NAMESPACE_ID::UnknownFieldSet* mutable_unknown_fields() { - return _internal_metadata_.mutable_unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(); - } - - static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() { - return GetDescriptor(); - } - static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() { - return default_instance().GetMetadata().descriptor; - } - static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() { - return default_instance().GetMetadata().reflection; - } - static const OneofDescriptorProto& default_instance() { - return *internal_default_instance(); - } - static inline const OneofDescriptorProto* internal_default_instance() { - return reinterpret_cast<const OneofDescriptorProto*>( - &_OneofDescriptorProto_default_instance_); - } - static constexpr int kIndexInFileMessages = - 7; - - friend void swap(OneofDescriptorProto& a, OneofDescriptorProto& b) { - a.Swap(&b); - } - inline void Swap(OneofDescriptorProto* other) { - if (other == this) return; - #ifdef PROTOBUF_FORCE_COPY_IN_SWAP - if (GetOwningArena() != nullptr && - GetOwningArena() == other->GetOwningArena()) { - #else // PROTOBUF_FORCE_COPY_IN_SWAP - if (GetOwningArena() == other->GetOwningArena()) { - #endif // !PROTOBUF_FORCE_COPY_IN_SWAP - InternalSwap(other); - } else { - ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other); - } - } - void UnsafeArenaSwap(OneofDescriptorProto* other) { - if (other == this) return; - GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena()); - InternalSwap(other); - } - - // implements Message ---------------------------------------------- - - OneofDescriptorProto* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final { - return CreateMaybeMessage<OneofDescriptorProto>(arena); - } - using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom; - void CopyFrom(const OneofDescriptorProto& from); - using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom; - void MergeFrom( const OneofDescriptorProto& from) { - OneofDescriptorProto::MergeImpl(*this, from); - } - private: - static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message& to_msg, const ::PROTOBUF_NAMESPACE_ID::Message& from_msg); - public: - PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final; - bool IsInitialized() const final; - - size_t ByteSizeLong() const final; - const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final; - uint8_t* _InternalSerialize( - uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final; - int GetCachedSize() const final { return _impl_._cached_size_.Get(); } - - private: - void SharedCtor(::PROTOBUF_NAMESPACE_ID::Arena* arena, bool is_message_owned); - void SharedDtor(); - void SetCachedSize(int size) const final; - void InternalSwap(OneofDescriptorProto* other); - - private: - friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata; - static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() { - return "google.protobuf.OneofDescriptorProto"; - } - protected: - explicit OneofDescriptorProto(::PROTOBUF_NAMESPACE_ID::Arena* arena, - bool is_message_owned = false); - public: - - static const ClassData _class_data_; - const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final; - - ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final; - - // nested types ---------------------------------------------------- - - // accessors ------------------------------------------------------- - - enum : int { - kNameFieldNumber = 1, - kOptionsFieldNumber = 2, - }; - // optional string name = 1; - bool has_name() const; - private: - bool _internal_has_name() const; - public: - void clear_name(); - const std::string& name() const; - template <typename ArgT0 = const std::string&, typename... ArgT> - void set_name(ArgT0&& arg0, ArgT... args); - std::string* mutable_name(); - PROTOBUF_NODISCARD std::string* release_name(); - void set_allocated_name(std::string* name); - private: - const std::string& _internal_name() const; - inline PROTOBUF_ALWAYS_INLINE void _internal_set_name(const std::string& value); - std::string* _internal_mutable_name(); - public: - - // optional .google.protobuf.OneofOptions options = 2; - bool has_options() const; - private: - bool _internal_has_options() const; - public: - void clear_options(); - const ::PROTOBUF_NAMESPACE_ID::OneofOptions& options() const; - PROTOBUF_NODISCARD ::PROTOBUF_NAMESPACE_ID::OneofOptions* release_options(); - ::PROTOBUF_NAMESPACE_ID::OneofOptions* mutable_options(); - void set_allocated_options(::PROTOBUF_NAMESPACE_ID::OneofOptions* options); - private: - const ::PROTOBUF_NAMESPACE_ID::OneofOptions& _internal_options() const; - ::PROTOBUF_NAMESPACE_ID::OneofOptions* _internal_mutable_options(); - public: - void unsafe_arena_set_allocated_options( - ::PROTOBUF_NAMESPACE_ID::OneofOptions* options); - ::PROTOBUF_NAMESPACE_ID::OneofOptions* unsafe_arena_release_options(); - - // @@protoc_insertion_point(class_scope:google.protobuf.OneofDescriptorProto) - private: - class _Internal; - - template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper; - typedef void InternalArenaConstructable_; - typedef void DestructorSkippable_; - struct Impl_ { - ::PROTOBUF_NAMESPACE_ID::internal::HasBits<1> _has_bits_; - mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_; - ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr name_; - ::PROTOBUF_NAMESPACE_ID::OneofOptions* options_; - }; - union { Impl_ _impl_; }; - friend struct ::TableStruct_google_2fprotobuf_2fdescriptor_2eproto; -}; -// ------------------------------------------------------------------- - -class PROTOBUF_EXPORT EnumDescriptorProto_EnumReservedRange final : - public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:google.protobuf.EnumDescriptorProto.EnumReservedRange) */ { - public: - inline EnumDescriptorProto_EnumReservedRange() : EnumDescriptorProto_EnumReservedRange(nullptr) {} - ~EnumDescriptorProto_EnumReservedRange() override; - explicit PROTOBUF_CONSTEXPR EnumDescriptorProto_EnumReservedRange(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized); - - EnumDescriptorProto_EnumReservedRange(const EnumDescriptorProto_EnumReservedRange& from); - EnumDescriptorProto_EnumReservedRange(EnumDescriptorProto_EnumReservedRange&& from) noexcept - : EnumDescriptorProto_EnumReservedRange() { - *this = ::std::move(from); - } - - inline EnumDescriptorProto_EnumReservedRange& operator=(const EnumDescriptorProto_EnumReservedRange& from) { - CopyFrom(from); - return *this; - } - inline EnumDescriptorProto_EnumReservedRange& operator=(EnumDescriptorProto_EnumReservedRange&& from) noexcept { - if (this == &from) return *this; - if (GetOwningArena() == from.GetOwningArena() - #ifdef PROTOBUF_FORCE_COPY_IN_MOVE - && GetOwningArena() != nullptr - #endif // !PROTOBUF_FORCE_COPY_IN_MOVE - ) { - InternalSwap(&from); - } else { - CopyFrom(from); - } - return *this; - } - - inline const ::PROTOBUF_NAMESPACE_ID::UnknownFieldSet& unknown_fields() const { - return _internal_metadata_.unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(::PROTOBUF_NAMESPACE_ID::UnknownFieldSet::default_instance); - } - inline ::PROTOBUF_NAMESPACE_ID::UnknownFieldSet* mutable_unknown_fields() { - return _internal_metadata_.mutable_unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(); - } - - static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() { - return GetDescriptor(); - } - static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() { - return default_instance().GetMetadata().descriptor; - } - static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() { - return default_instance().GetMetadata().reflection; - } - static const EnumDescriptorProto_EnumReservedRange& default_instance() { - return *internal_default_instance(); - } - static inline const EnumDescriptorProto_EnumReservedRange* internal_default_instance() { - return reinterpret_cast<const EnumDescriptorProto_EnumReservedRange*>( - &_EnumDescriptorProto_EnumReservedRange_default_instance_); - } - static constexpr int kIndexInFileMessages = - 8; - - friend void swap(EnumDescriptorProto_EnumReservedRange& a, EnumDescriptorProto_EnumReservedRange& b) { - a.Swap(&b); - } - inline void Swap(EnumDescriptorProto_EnumReservedRange* other) { - if (other == this) return; - #ifdef PROTOBUF_FORCE_COPY_IN_SWAP - if (GetOwningArena() != nullptr && - GetOwningArena() == other->GetOwningArena()) { - #else // PROTOBUF_FORCE_COPY_IN_SWAP - if (GetOwningArena() == other->GetOwningArena()) { - #endif // !PROTOBUF_FORCE_COPY_IN_SWAP - InternalSwap(other); - } else { - ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other); - } - } - void UnsafeArenaSwap(EnumDescriptorProto_EnumReservedRange* other) { - if (other == this) return; - GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena()); - InternalSwap(other); - } - - // implements Message ---------------------------------------------- - - EnumDescriptorProto_EnumReservedRange* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final { - return CreateMaybeMessage<EnumDescriptorProto_EnumReservedRange>(arena); - } - using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom; - void CopyFrom(const EnumDescriptorProto_EnumReservedRange& from); - using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom; - void MergeFrom( const EnumDescriptorProto_EnumReservedRange& from) { - EnumDescriptorProto_EnumReservedRange::MergeImpl(*this, from); - } - private: - static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message& to_msg, const ::PROTOBUF_NAMESPACE_ID::Message& from_msg); - public: - PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final; - bool IsInitialized() const final; - - size_t ByteSizeLong() const final; - const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final; - uint8_t* _InternalSerialize( - uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final; - int GetCachedSize() const final { return _impl_._cached_size_.Get(); } - - private: - void SharedCtor(::PROTOBUF_NAMESPACE_ID::Arena* arena, bool is_message_owned); - void SharedDtor(); - void SetCachedSize(int size) const final; - void InternalSwap(EnumDescriptorProto_EnumReservedRange* other); - - private: - friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata; - static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() { - return "google.protobuf.EnumDescriptorProto.EnumReservedRange"; - } - protected: - explicit EnumDescriptorProto_EnumReservedRange(::PROTOBUF_NAMESPACE_ID::Arena* arena, - bool is_message_owned = false); - public: - - static const ClassData _class_data_; - const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final; - - ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final; - - // nested types ---------------------------------------------------- - - // accessors ------------------------------------------------------- - - enum : int { - kStartFieldNumber = 1, - kEndFieldNumber = 2, - }; - // optional int32 start = 1; - bool has_start() const; - private: - bool _internal_has_start() const; - public: - void clear_start(); - int32_t start() const; - void set_start(int32_t value); - private: - int32_t _internal_start() const; - void _internal_set_start(int32_t value); - public: - - // optional int32 end = 2; - bool has_end() const; - private: - bool _internal_has_end() const; - public: - void clear_end(); - int32_t end() const; - void set_end(int32_t value); - private: - int32_t _internal_end() const; - void _internal_set_end(int32_t value); - public: - - // @@protoc_insertion_point(class_scope:google.protobuf.EnumDescriptorProto.EnumReservedRange) - private: - class _Internal; - - template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper; - typedef void InternalArenaConstructable_; - typedef void DestructorSkippable_; - struct Impl_ { - ::PROTOBUF_NAMESPACE_ID::internal::HasBits<1> _has_bits_; - mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_; - int32_t start_; - int32_t end_; - }; - union { Impl_ _impl_; }; - friend struct ::TableStruct_google_2fprotobuf_2fdescriptor_2eproto; -}; -// ------------------------------------------------------------------- - -class PROTOBUF_EXPORT EnumDescriptorProto final : - public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:google.protobuf.EnumDescriptorProto) */ { - public: - inline EnumDescriptorProto() : EnumDescriptorProto(nullptr) {} - ~EnumDescriptorProto() override; - explicit PROTOBUF_CONSTEXPR EnumDescriptorProto(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized); - - EnumDescriptorProto(const EnumDescriptorProto& from); - EnumDescriptorProto(EnumDescriptorProto&& from) noexcept - : EnumDescriptorProto() { - *this = ::std::move(from); - } - - inline EnumDescriptorProto& operator=(const EnumDescriptorProto& from) { - CopyFrom(from); - return *this; - } - inline EnumDescriptorProto& operator=(EnumDescriptorProto&& from) noexcept { - if (this == &from) return *this; - if (GetOwningArena() == from.GetOwningArena() - #ifdef PROTOBUF_FORCE_COPY_IN_MOVE - && GetOwningArena() != nullptr - #endif // !PROTOBUF_FORCE_COPY_IN_MOVE - ) { - InternalSwap(&from); - } else { - CopyFrom(from); - } - return *this; - } - - inline const ::PROTOBUF_NAMESPACE_ID::UnknownFieldSet& unknown_fields() const { - return _internal_metadata_.unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(::PROTOBUF_NAMESPACE_ID::UnknownFieldSet::default_instance); - } - inline ::PROTOBUF_NAMESPACE_ID::UnknownFieldSet* mutable_unknown_fields() { - return _internal_metadata_.mutable_unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(); - } - - static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() { - return GetDescriptor(); - } - static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() { - return default_instance().GetMetadata().descriptor; - } - static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() { - return default_instance().GetMetadata().reflection; - } - static const EnumDescriptorProto& default_instance() { - return *internal_default_instance(); - } - static inline const EnumDescriptorProto* internal_default_instance() { - return reinterpret_cast<const EnumDescriptorProto*>( - &_EnumDescriptorProto_default_instance_); - } - static constexpr int kIndexInFileMessages = - 9; - - friend void swap(EnumDescriptorProto& a, EnumDescriptorProto& b) { - a.Swap(&b); - } - inline void Swap(EnumDescriptorProto* other) { - if (other == this) return; - #ifdef PROTOBUF_FORCE_COPY_IN_SWAP - if (GetOwningArena() != nullptr && - GetOwningArena() == other->GetOwningArena()) { - #else // PROTOBUF_FORCE_COPY_IN_SWAP - if (GetOwningArena() == other->GetOwningArena()) { - #endif // !PROTOBUF_FORCE_COPY_IN_SWAP - InternalSwap(other); - } else { - ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other); - } - } - void UnsafeArenaSwap(EnumDescriptorProto* other) { - if (other == this) return; - GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena()); - InternalSwap(other); - } - - // implements Message ---------------------------------------------- - - EnumDescriptorProto* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final { - return CreateMaybeMessage<EnumDescriptorProto>(arena); - } - using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom; - void CopyFrom(const EnumDescriptorProto& from); - using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom; - void MergeFrom( const EnumDescriptorProto& from) { - EnumDescriptorProto::MergeImpl(*this, from); - } - private: - static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message& to_msg, const ::PROTOBUF_NAMESPACE_ID::Message& from_msg); - public: - PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final; - bool IsInitialized() const final; - - size_t ByteSizeLong() const final; - const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final; - uint8_t* _InternalSerialize( - uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final; - int GetCachedSize() const final { return _impl_._cached_size_.Get(); } - - private: - void SharedCtor(::PROTOBUF_NAMESPACE_ID::Arena* arena, bool is_message_owned); - void SharedDtor(); - void SetCachedSize(int size) const final; - void InternalSwap(EnumDescriptorProto* other); - - private: - friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata; - static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() { - return "google.protobuf.EnumDescriptorProto"; - } - protected: - explicit EnumDescriptorProto(::PROTOBUF_NAMESPACE_ID::Arena* arena, - bool is_message_owned = false); - public: - - static const ClassData _class_data_; - const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final; - - ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final; - - // nested types ---------------------------------------------------- - - typedef EnumDescriptorProto_EnumReservedRange EnumReservedRange; - - // accessors ------------------------------------------------------- - - enum : int { - kValueFieldNumber = 2, - kReservedRangeFieldNumber = 4, - kReservedNameFieldNumber = 5, - kNameFieldNumber = 1, - kOptionsFieldNumber = 3, - }; - // repeated .google.protobuf.EnumValueDescriptorProto value = 2; - int value_size() const; - private: - int _internal_value_size() const; - public: - void clear_value(); - ::PROTOBUF_NAMESPACE_ID::EnumValueDescriptorProto* mutable_value(int index); - ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::EnumValueDescriptorProto >* - mutable_value(); - private: - const ::PROTOBUF_NAMESPACE_ID::EnumValueDescriptorProto& _internal_value(int index) const; - ::PROTOBUF_NAMESPACE_ID::EnumValueDescriptorProto* _internal_add_value(); - public: - const ::PROTOBUF_NAMESPACE_ID::EnumValueDescriptorProto& value(int index) const; - ::PROTOBUF_NAMESPACE_ID::EnumValueDescriptorProto* add_value(); - const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::EnumValueDescriptorProto >& - value() const; - - // repeated .google.protobuf.EnumDescriptorProto.EnumReservedRange reserved_range = 4; - int reserved_range_size() const; - private: - int _internal_reserved_range_size() const; - public: - void clear_reserved_range(); - ::PROTOBUF_NAMESPACE_ID::EnumDescriptorProto_EnumReservedRange* mutable_reserved_range(int index); - ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::EnumDescriptorProto_EnumReservedRange >* - mutable_reserved_range(); - private: - const ::PROTOBUF_NAMESPACE_ID::EnumDescriptorProto_EnumReservedRange& _internal_reserved_range(int index) const; - ::PROTOBUF_NAMESPACE_ID::EnumDescriptorProto_EnumReservedRange* _internal_add_reserved_range(); - public: - const ::PROTOBUF_NAMESPACE_ID::EnumDescriptorProto_EnumReservedRange& reserved_range(int index) const; - ::PROTOBUF_NAMESPACE_ID::EnumDescriptorProto_EnumReservedRange* add_reserved_range(); - const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::EnumDescriptorProto_EnumReservedRange >& - reserved_range() const; - - // repeated string reserved_name = 5; - int reserved_name_size() const; - private: - int _internal_reserved_name_size() const; - public: - void clear_reserved_name(); - const std::string& reserved_name(int index) const; - std::string* mutable_reserved_name(int index); - void set_reserved_name(int index, const std::string& value); - void set_reserved_name(int index, std::string&& value); - void set_reserved_name(int index, const char* value); - void set_reserved_name(int index, const char* value, size_t size); - std::string* add_reserved_name(); - void add_reserved_name(const std::string& value); - void add_reserved_name(std::string&& value); - void add_reserved_name(const char* value); - void add_reserved_name(const char* value, size_t size); - const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField<std::string>& reserved_name() const; - ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField<std::string>* mutable_reserved_name(); - private: - const std::string& _internal_reserved_name(int index) const; - std::string* _internal_add_reserved_name(); - public: - - // optional string name = 1; - bool has_name() const; - private: - bool _internal_has_name() const; - public: - void clear_name(); - const std::string& name() const; - template <typename ArgT0 = const std::string&, typename... ArgT> - void set_name(ArgT0&& arg0, ArgT... args); - std::string* mutable_name(); - PROTOBUF_NODISCARD std::string* release_name(); - void set_allocated_name(std::string* name); - private: - const std::string& _internal_name() const; - inline PROTOBUF_ALWAYS_INLINE void _internal_set_name(const std::string& value); - std::string* _internal_mutable_name(); - public: - - // optional .google.protobuf.EnumOptions options = 3; - bool has_options() const; - private: - bool _internal_has_options() const; - public: - void clear_options(); - const ::PROTOBUF_NAMESPACE_ID::EnumOptions& options() const; - PROTOBUF_NODISCARD ::PROTOBUF_NAMESPACE_ID::EnumOptions* release_options(); - ::PROTOBUF_NAMESPACE_ID::EnumOptions* mutable_options(); - void set_allocated_options(::PROTOBUF_NAMESPACE_ID::EnumOptions* options); - private: - const ::PROTOBUF_NAMESPACE_ID::EnumOptions& _internal_options() const; - ::PROTOBUF_NAMESPACE_ID::EnumOptions* _internal_mutable_options(); - public: - void unsafe_arena_set_allocated_options( - ::PROTOBUF_NAMESPACE_ID::EnumOptions* options); - ::PROTOBUF_NAMESPACE_ID::EnumOptions* unsafe_arena_release_options(); - - // @@protoc_insertion_point(class_scope:google.protobuf.EnumDescriptorProto) - private: - class _Internal; - - template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper; - typedef void InternalArenaConstructable_; - typedef void DestructorSkippable_; - struct Impl_ { - ::PROTOBUF_NAMESPACE_ID::internal::HasBits<1> _has_bits_; - mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_; - ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::EnumValueDescriptorProto > value_; - ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::EnumDescriptorProto_EnumReservedRange > reserved_range_; - ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField<std::string> reserved_name_; - ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr name_; - ::PROTOBUF_NAMESPACE_ID::EnumOptions* options_; - }; - union { Impl_ _impl_; }; - friend struct ::TableStruct_google_2fprotobuf_2fdescriptor_2eproto; -}; -// ------------------------------------------------------------------- - -class PROTOBUF_EXPORT EnumValueDescriptorProto final : - public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:google.protobuf.EnumValueDescriptorProto) */ { - public: - inline EnumValueDescriptorProto() : EnumValueDescriptorProto(nullptr) {} - ~EnumValueDescriptorProto() override; - explicit PROTOBUF_CONSTEXPR EnumValueDescriptorProto(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized); - - EnumValueDescriptorProto(const EnumValueDescriptorProto& from); - EnumValueDescriptorProto(EnumValueDescriptorProto&& from) noexcept - : EnumValueDescriptorProto() { - *this = ::std::move(from); - } - - inline EnumValueDescriptorProto& operator=(const EnumValueDescriptorProto& from) { - CopyFrom(from); - return *this; - } - inline EnumValueDescriptorProto& operator=(EnumValueDescriptorProto&& from) noexcept { - if (this == &from) return *this; - if (GetOwningArena() == from.GetOwningArena() - #ifdef PROTOBUF_FORCE_COPY_IN_MOVE - && GetOwningArena() != nullptr - #endif // !PROTOBUF_FORCE_COPY_IN_MOVE - ) { - InternalSwap(&from); - } else { - CopyFrom(from); - } - return *this; - } - - inline const ::PROTOBUF_NAMESPACE_ID::UnknownFieldSet& unknown_fields() const { - return _internal_metadata_.unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(::PROTOBUF_NAMESPACE_ID::UnknownFieldSet::default_instance); - } - inline ::PROTOBUF_NAMESPACE_ID::UnknownFieldSet* mutable_unknown_fields() { - return _internal_metadata_.mutable_unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(); - } - - static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() { - return GetDescriptor(); - } - static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() { - return default_instance().GetMetadata().descriptor; - } - static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() { - return default_instance().GetMetadata().reflection; - } - static const EnumValueDescriptorProto& default_instance() { - return *internal_default_instance(); - } - static inline const EnumValueDescriptorProto* internal_default_instance() { - return reinterpret_cast<const EnumValueDescriptorProto*>( - &_EnumValueDescriptorProto_default_instance_); - } - static constexpr int kIndexInFileMessages = - 10; - - friend void swap(EnumValueDescriptorProto& a, EnumValueDescriptorProto& b) { - a.Swap(&b); - } - inline void Swap(EnumValueDescriptorProto* other) { - if (other == this) return; - #ifdef PROTOBUF_FORCE_COPY_IN_SWAP - if (GetOwningArena() != nullptr && - GetOwningArena() == other->GetOwningArena()) { - #else // PROTOBUF_FORCE_COPY_IN_SWAP - if (GetOwningArena() == other->GetOwningArena()) { - #endif // !PROTOBUF_FORCE_COPY_IN_SWAP - InternalSwap(other); - } else { - ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other); - } - } - void UnsafeArenaSwap(EnumValueDescriptorProto* other) { - if (other == this) return; - GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena()); - InternalSwap(other); - } - - // implements Message ---------------------------------------------- - - EnumValueDescriptorProto* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final { - return CreateMaybeMessage<EnumValueDescriptorProto>(arena); - } - using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom; - void CopyFrom(const EnumValueDescriptorProto& from); - using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom; - void MergeFrom( const EnumValueDescriptorProto& from) { - EnumValueDescriptorProto::MergeImpl(*this, from); - } - private: - static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message& to_msg, const ::PROTOBUF_NAMESPACE_ID::Message& from_msg); - public: - PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final; - bool IsInitialized() const final; - - size_t ByteSizeLong() const final; - const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final; - uint8_t* _InternalSerialize( - uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final; - int GetCachedSize() const final { return _impl_._cached_size_.Get(); } - - private: - void SharedCtor(::PROTOBUF_NAMESPACE_ID::Arena* arena, bool is_message_owned); - void SharedDtor(); - void SetCachedSize(int size) const final; - void InternalSwap(EnumValueDescriptorProto* other); - - private: - friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata; - static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() { - return "google.protobuf.EnumValueDescriptorProto"; - } - protected: - explicit EnumValueDescriptorProto(::PROTOBUF_NAMESPACE_ID::Arena* arena, - bool is_message_owned = false); - public: - - static const ClassData _class_data_; - const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final; - - ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final; - - // nested types ---------------------------------------------------- - - // accessors ------------------------------------------------------- - - enum : int { - kNameFieldNumber = 1, - kOptionsFieldNumber = 3, - kNumberFieldNumber = 2, - }; - // optional string name = 1; - bool has_name() const; - private: - bool _internal_has_name() const; - public: - void clear_name(); - const std::string& name() const; - template <typename ArgT0 = const std::string&, typename... ArgT> - void set_name(ArgT0&& arg0, ArgT... args); - std::string* mutable_name(); - PROTOBUF_NODISCARD std::string* release_name(); - void set_allocated_name(std::string* name); - private: - const std::string& _internal_name() const; - inline PROTOBUF_ALWAYS_INLINE void _internal_set_name(const std::string& value); - std::string* _internal_mutable_name(); - public: - - // optional .google.protobuf.EnumValueOptions options = 3; - bool has_options() const; - private: - bool _internal_has_options() const; - public: - void clear_options(); - const ::PROTOBUF_NAMESPACE_ID::EnumValueOptions& options() const; - PROTOBUF_NODISCARD ::PROTOBUF_NAMESPACE_ID::EnumValueOptions* release_options(); - ::PROTOBUF_NAMESPACE_ID::EnumValueOptions* mutable_options(); - void set_allocated_options(::PROTOBUF_NAMESPACE_ID::EnumValueOptions* options); - private: - const ::PROTOBUF_NAMESPACE_ID::EnumValueOptions& _internal_options() const; - ::PROTOBUF_NAMESPACE_ID::EnumValueOptions* _internal_mutable_options(); - public: - void unsafe_arena_set_allocated_options( - ::PROTOBUF_NAMESPACE_ID::EnumValueOptions* options); - ::PROTOBUF_NAMESPACE_ID::EnumValueOptions* unsafe_arena_release_options(); - - // optional int32 number = 2; - bool has_number() const; - private: - bool _internal_has_number() const; - public: - void clear_number(); - int32_t number() const; - void set_number(int32_t value); - private: - int32_t _internal_number() const; - void _internal_set_number(int32_t value); - public: - - // @@protoc_insertion_point(class_scope:google.protobuf.EnumValueDescriptorProto) - private: - class _Internal; - - template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper; - typedef void InternalArenaConstructable_; - typedef void DestructorSkippable_; - struct Impl_ { - ::PROTOBUF_NAMESPACE_ID::internal::HasBits<1> _has_bits_; - mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_; - ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr name_; - ::PROTOBUF_NAMESPACE_ID::EnumValueOptions* options_; - int32_t number_; - }; - union { Impl_ _impl_; }; - friend struct ::TableStruct_google_2fprotobuf_2fdescriptor_2eproto; -}; -// ------------------------------------------------------------------- - -class PROTOBUF_EXPORT ServiceDescriptorProto final : - public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:google.protobuf.ServiceDescriptorProto) */ { - public: - inline ServiceDescriptorProto() : ServiceDescriptorProto(nullptr) {} - ~ServiceDescriptorProto() override; - explicit PROTOBUF_CONSTEXPR ServiceDescriptorProto(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized); - - ServiceDescriptorProto(const ServiceDescriptorProto& from); - ServiceDescriptorProto(ServiceDescriptorProto&& from) noexcept - : ServiceDescriptorProto() { - *this = ::std::move(from); - } - - inline ServiceDescriptorProto& operator=(const ServiceDescriptorProto& from) { - CopyFrom(from); - return *this; - } - inline ServiceDescriptorProto& operator=(ServiceDescriptorProto&& from) noexcept { - if (this == &from) return *this; - if (GetOwningArena() == from.GetOwningArena() - #ifdef PROTOBUF_FORCE_COPY_IN_MOVE - && GetOwningArena() != nullptr - #endif // !PROTOBUF_FORCE_COPY_IN_MOVE - ) { - InternalSwap(&from); - } else { - CopyFrom(from); - } - return *this; - } - - inline const ::PROTOBUF_NAMESPACE_ID::UnknownFieldSet& unknown_fields() const { - return _internal_metadata_.unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(::PROTOBUF_NAMESPACE_ID::UnknownFieldSet::default_instance); - } - inline ::PROTOBUF_NAMESPACE_ID::UnknownFieldSet* mutable_unknown_fields() { - return _internal_metadata_.mutable_unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(); - } - - static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() { - return GetDescriptor(); - } - static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() { - return default_instance().GetMetadata().descriptor; - } - static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() { - return default_instance().GetMetadata().reflection; - } - static const ServiceDescriptorProto& default_instance() { - return *internal_default_instance(); - } - static inline const ServiceDescriptorProto* internal_default_instance() { - return reinterpret_cast<const ServiceDescriptorProto*>( - &_ServiceDescriptorProto_default_instance_); - } - static constexpr int kIndexInFileMessages = - 11; - - friend void swap(ServiceDescriptorProto& a, ServiceDescriptorProto& b) { - a.Swap(&b); - } - inline void Swap(ServiceDescriptorProto* other) { - if (other == this) return; - #ifdef PROTOBUF_FORCE_COPY_IN_SWAP - if (GetOwningArena() != nullptr && - GetOwningArena() == other->GetOwningArena()) { - #else // PROTOBUF_FORCE_COPY_IN_SWAP - if (GetOwningArena() == other->GetOwningArena()) { - #endif // !PROTOBUF_FORCE_COPY_IN_SWAP - InternalSwap(other); - } else { - ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other); - } - } - void UnsafeArenaSwap(ServiceDescriptorProto* other) { - if (other == this) return; - GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena()); - InternalSwap(other); - } - - // implements Message ---------------------------------------------- - - ServiceDescriptorProto* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final { - return CreateMaybeMessage<ServiceDescriptorProto>(arena); - } - using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom; - void CopyFrom(const ServiceDescriptorProto& from); - using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom; - void MergeFrom( const ServiceDescriptorProto& from) { - ServiceDescriptorProto::MergeImpl(*this, from); - } - private: - static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message& to_msg, const ::PROTOBUF_NAMESPACE_ID::Message& from_msg); - public: - PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final; - bool IsInitialized() const final; - - size_t ByteSizeLong() const final; - const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final; - uint8_t* _InternalSerialize( - uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final; - int GetCachedSize() const final { return _impl_._cached_size_.Get(); } - - private: - void SharedCtor(::PROTOBUF_NAMESPACE_ID::Arena* arena, bool is_message_owned); - void SharedDtor(); - void SetCachedSize(int size) const final; - void InternalSwap(ServiceDescriptorProto* other); - - private: - friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata; - static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() { - return "google.protobuf.ServiceDescriptorProto"; - } - protected: - explicit ServiceDescriptorProto(::PROTOBUF_NAMESPACE_ID::Arena* arena, - bool is_message_owned = false); - public: - - static const ClassData _class_data_; - const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final; - - ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final; - - // nested types ---------------------------------------------------- - - // accessors ------------------------------------------------------- - - enum : int { - kMethodFieldNumber = 2, - kNameFieldNumber = 1, - kOptionsFieldNumber = 3, - }; - // repeated .google.protobuf.MethodDescriptorProto method = 2; - int method_size() const; - private: - int _internal_method_size() const; - public: - void clear_method(); - ::PROTOBUF_NAMESPACE_ID::MethodDescriptorProto* mutable_method(int index); - ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::MethodDescriptorProto >* - mutable_method(); - private: - const ::PROTOBUF_NAMESPACE_ID::MethodDescriptorProto& _internal_method(int index) const; - ::PROTOBUF_NAMESPACE_ID::MethodDescriptorProto* _internal_add_method(); - public: - const ::PROTOBUF_NAMESPACE_ID::MethodDescriptorProto& method(int index) const; - ::PROTOBUF_NAMESPACE_ID::MethodDescriptorProto* add_method(); - const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::MethodDescriptorProto >& - method() const; - - // optional string name = 1; - bool has_name() const; - private: - bool _internal_has_name() const; - public: - void clear_name(); - const std::string& name() const; - template <typename ArgT0 = const std::string&, typename... ArgT> - void set_name(ArgT0&& arg0, ArgT... args); - std::string* mutable_name(); - PROTOBUF_NODISCARD std::string* release_name(); - void set_allocated_name(std::string* name); - private: - const std::string& _internal_name() const; - inline PROTOBUF_ALWAYS_INLINE void _internal_set_name(const std::string& value); - std::string* _internal_mutable_name(); - public: - - // optional .google.protobuf.ServiceOptions options = 3; - bool has_options() const; - private: - bool _internal_has_options() const; - public: - void clear_options(); - const ::PROTOBUF_NAMESPACE_ID::ServiceOptions& options() const; - PROTOBUF_NODISCARD ::PROTOBUF_NAMESPACE_ID::ServiceOptions* release_options(); - ::PROTOBUF_NAMESPACE_ID::ServiceOptions* mutable_options(); - void set_allocated_options(::PROTOBUF_NAMESPACE_ID::ServiceOptions* options); - private: - const ::PROTOBUF_NAMESPACE_ID::ServiceOptions& _internal_options() const; - ::PROTOBUF_NAMESPACE_ID::ServiceOptions* _internal_mutable_options(); - public: - void unsafe_arena_set_allocated_options( - ::PROTOBUF_NAMESPACE_ID::ServiceOptions* options); - ::PROTOBUF_NAMESPACE_ID::ServiceOptions* unsafe_arena_release_options(); - - // @@protoc_insertion_point(class_scope:google.protobuf.ServiceDescriptorProto) - private: - class _Internal; - - template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper; - typedef void InternalArenaConstructable_; - typedef void DestructorSkippable_; - struct Impl_ { - ::PROTOBUF_NAMESPACE_ID::internal::HasBits<1> _has_bits_; - mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_; - ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::MethodDescriptorProto > method_; - ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr name_; - ::PROTOBUF_NAMESPACE_ID::ServiceOptions* options_; - }; - union { Impl_ _impl_; }; - friend struct ::TableStruct_google_2fprotobuf_2fdescriptor_2eproto; -}; -// ------------------------------------------------------------------- - -class PROTOBUF_EXPORT MethodDescriptorProto final : - public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:google.protobuf.MethodDescriptorProto) */ { - public: - inline MethodDescriptorProto() : MethodDescriptorProto(nullptr) {} - ~MethodDescriptorProto() override; - explicit PROTOBUF_CONSTEXPR MethodDescriptorProto(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized); - - MethodDescriptorProto(const MethodDescriptorProto& from); - MethodDescriptorProto(MethodDescriptorProto&& from) noexcept - : MethodDescriptorProto() { - *this = ::std::move(from); - } - - inline MethodDescriptorProto& operator=(const MethodDescriptorProto& from) { - CopyFrom(from); - return *this; - } - inline MethodDescriptorProto& operator=(MethodDescriptorProto&& from) noexcept { - if (this == &from) return *this; - if (GetOwningArena() == from.GetOwningArena() - #ifdef PROTOBUF_FORCE_COPY_IN_MOVE - && GetOwningArena() != nullptr - #endif // !PROTOBUF_FORCE_COPY_IN_MOVE - ) { - InternalSwap(&from); - } else { - CopyFrom(from); - } - return *this; - } - - inline const ::PROTOBUF_NAMESPACE_ID::UnknownFieldSet& unknown_fields() const { - return _internal_metadata_.unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(::PROTOBUF_NAMESPACE_ID::UnknownFieldSet::default_instance); - } - inline ::PROTOBUF_NAMESPACE_ID::UnknownFieldSet* mutable_unknown_fields() { - return _internal_metadata_.mutable_unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(); - } - - static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() { - return GetDescriptor(); - } - static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() { - return default_instance().GetMetadata().descriptor; - } - static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() { - return default_instance().GetMetadata().reflection; - } - static const MethodDescriptorProto& default_instance() { - return *internal_default_instance(); - } - static inline const MethodDescriptorProto* internal_default_instance() { - return reinterpret_cast<const MethodDescriptorProto*>( - &_MethodDescriptorProto_default_instance_); - } - static constexpr int kIndexInFileMessages = - 12; - - friend void swap(MethodDescriptorProto& a, MethodDescriptorProto& b) { - a.Swap(&b); - } - inline void Swap(MethodDescriptorProto* other) { - if (other == this) return; - #ifdef PROTOBUF_FORCE_COPY_IN_SWAP - if (GetOwningArena() != nullptr && - GetOwningArena() == other->GetOwningArena()) { - #else // PROTOBUF_FORCE_COPY_IN_SWAP - if (GetOwningArena() == other->GetOwningArena()) { - #endif // !PROTOBUF_FORCE_COPY_IN_SWAP - InternalSwap(other); - } else { - ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other); - } - } - void UnsafeArenaSwap(MethodDescriptorProto* other) { - if (other == this) return; - GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena()); - InternalSwap(other); - } - - // implements Message ---------------------------------------------- - - MethodDescriptorProto* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final { - return CreateMaybeMessage<MethodDescriptorProto>(arena); - } - using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom; - void CopyFrom(const MethodDescriptorProto& from); - using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom; - void MergeFrom( const MethodDescriptorProto& from) { - MethodDescriptorProto::MergeImpl(*this, from); - } - private: - static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message& to_msg, const ::PROTOBUF_NAMESPACE_ID::Message& from_msg); - public: - PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final; - bool IsInitialized() const final; - - size_t ByteSizeLong() const final; - const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final; - uint8_t* _InternalSerialize( - uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final; - int GetCachedSize() const final { return _impl_._cached_size_.Get(); } - - private: - void SharedCtor(::PROTOBUF_NAMESPACE_ID::Arena* arena, bool is_message_owned); - void SharedDtor(); - void SetCachedSize(int size) const final; - void InternalSwap(MethodDescriptorProto* other); - - private: - friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata; - static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() { - return "google.protobuf.MethodDescriptorProto"; - } - protected: - explicit MethodDescriptorProto(::PROTOBUF_NAMESPACE_ID::Arena* arena, - bool is_message_owned = false); - public: - - static const ClassData _class_data_; - const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final; - - ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final; - - // nested types ---------------------------------------------------- - - // accessors ------------------------------------------------------- - - enum : int { - kNameFieldNumber = 1, - kInputTypeFieldNumber = 2, - kOutputTypeFieldNumber = 3, - kOptionsFieldNumber = 4, - kClientStreamingFieldNumber = 5, - kServerStreamingFieldNumber = 6, - }; - // optional string name = 1; - bool has_name() const; - private: - bool _internal_has_name() const; - public: - void clear_name(); - const std::string& name() const; - template <typename ArgT0 = const std::string&, typename... ArgT> - void set_name(ArgT0&& arg0, ArgT... args); - std::string* mutable_name(); - PROTOBUF_NODISCARD std::string* release_name(); - void set_allocated_name(std::string* name); - private: - const std::string& _internal_name() const; - inline PROTOBUF_ALWAYS_INLINE void _internal_set_name(const std::string& value); - std::string* _internal_mutable_name(); - public: - - // optional string input_type = 2; - bool has_input_type() const; - private: - bool _internal_has_input_type() const; - public: - void clear_input_type(); - const std::string& input_type() const; - template <typename ArgT0 = const std::string&, typename... ArgT> - void set_input_type(ArgT0&& arg0, ArgT... args); - std::string* mutable_input_type(); - PROTOBUF_NODISCARD std::string* release_input_type(); - void set_allocated_input_type(std::string* input_type); - private: - const std::string& _internal_input_type() const; - inline PROTOBUF_ALWAYS_INLINE void _internal_set_input_type(const std::string& value); - std::string* _internal_mutable_input_type(); - public: - - // optional string output_type = 3; - bool has_output_type() const; - private: - bool _internal_has_output_type() const; - public: - void clear_output_type(); - const std::string& output_type() const; - template <typename ArgT0 = const std::string&, typename... ArgT> - void set_output_type(ArgT0&& arg0, ArgT... args); - std::string* mutable_output_type(); - PROTOBUF_NODISCARD std::string* release_output_type(); - void set_allocated_output_type(std::string* output_type); - private: - const std::string& _internal_output_type() const; - inline PROTOBUF_ALWAYS_INLINE void _internal_set_output_type(const std::string& value); - std::string* _internal_mutable_output_type(); - public: - - // optional .google.protobuf.MethodOptions options = 4; - bool has_options() const; - private: - bool _internal_has_options() const; - public: - void clear_options(); - const ::PROTOBUF_NAMESPACE_ID::MethodOptions& options() const; - PROTOBUF_NODISCARD ::PROTOBUF_NAMESPACE_ID::MethodOptions* release_options(); - ::PROTOBUF_NAMESPACE_ID::MethodOptions* mutable_options(); - void set_allocated_options(::PROTOBUF_NAMESPACE_ID::MethodOptions* options); - private: - const ::PROTOBUF_NAMESPACE_ID::MethodOptions& _internal_options() const; - ::PROTOBUF_NAMESPACE_ID::MethodOptions* _internal_mutable_options(); - public: - void unsafe_arena_set_allocated_options( - ::PROTOBUF_NAMESPACE_ID::MethodOptions* options); - ::PROTOBUF_NAMESPACE_ID::MethodOptions* unsafe_arena_release_options(); - - // optional bool client_streaming = 5 [default = false]; - bool has_client_streaming() const; - private: - bool _internal_has_client_streaming() const; - public: - void clear_client_streaming(); - bool client_streaming() const; - void set_client_streaming(bool value); - private: - bool _internal_client_streaming() const; - void _internal_set_client_streaming(bool value); - public: - - // optional bool server_streaming = 6 [default = false]; - bool has_server_streaming() const; - private: - bool _internal_has_server_streaming() const; - public: - void clear_server_streaming(); - bool server_streaming() const; - void set_server_streaming(bool value); - private: - bool _internal_server_streaming() const; - void _internal_set_server_streaming(bool value); - public: - - // @@protoc_insertion_point(class_scope:google.protobuf.MethodDescriptorProto) - private: - class _Internal; - - template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper; - typedef void InternalArenaConstructable_; - typedef void DestructorSkippable_; - struct Impl_ { - ::PROTOBUF_NAMESPACE_ID::internal::HasBits<1> _has_bits_; - mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_; - ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr name_; - ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr input_type_; - ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr output_type_; - ::PROTOBUF_NAMESPACE_ID::MethodOptions* options_; - bool client_streaming_; - bool server_streaming_; - }; - union { Impl_ _impl_; }; - friend struct ::TableStruct_google_2fprotobuf_2fdescriptor_2eproto; -}; -// ------------------------------------------------------------------- - -class PROTOBUF_EXPORT FileOptions final : - public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:google.protobuf.FileOptions) */ { - public: - inline FileOptions() : FileOptions(nullptr) {} - ~FileOptions() override; - explicit PROTOBUF_CONSTEXPR FileOptions(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized); - - FileOptions(const FileOptions& from); - FileOptions(FileOptions&& from) noexcept - : FileOptions() { - *this = ::std::move(from); - } - - inline FileOptions& operator=(const FileOptions& from) { - CopyFrom(from); - return *this; - } - inline FileOptions& operator=(FileOptions&& from) noexcept { - if (this == &from) return *this; - if (GetOwningArena() == from.GetOwningArena() - #ifdef PROTOBUF_FORCE_COPY_IN_MOVE - && GetOwningArena() != nullptr - #endif // !PROTOBUF_FORCE_COPY_IN_MOVE - ) { - InternalSwap(&from); - } else { - CopyFrom(from); - } - return *this; - } - - inline const ::PROTOBUF_NAMESPACE_ID::UnknownFieldSet& unknown_fields() const { - return _internal_metadata_.unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(::PROTOBUF_NAMESPACE_ID::UnknownFieldSet::default_instance); - } - inline ::PROTOBUF_NAMESPACE_ID::UnknownFieldSet* mutable_unknown_fields() { - return _internal_metadata_.mutable_unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(); - } - - static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() { - return GetDescriptor(); - } - static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() { - return default_instance().GetMetadata().descriptor; - } - static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() { - return default_instance().GetMetadata().reflection; - } - static const FileOptions& default_instance() { - return *internal_default_instance(); - } - static inline const FileOptions* internal_default_instance() { - return reinterpret_cast<const FileOptions*>( - &_FileOptions_default_instance_); - } - static constexpr int kIndexInFileMessages = - 13; - - friend void swap(FileOptions& a, FileOptions& b) { - a.Swap(&b); - } - inline void Swap(FileOptions* other) { - if (other == this) return; - #ifdef PROTOBUF_FORCE_COPY_IN_SWAP - if (GetOwningArena() != nullptr && - GetOwningArena() == other->GetOwningArena()) { - #else // PROTOBUF_FORCE_COPY_IN_SWAP - if (GetOwningArena() == other->GetOwningArena()) { - #endif // !PROTOBUF_FORCE_COPY_IN_SWAP - InternalSwap(other); - } else { - ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other); - } - } - void UnsafeArenaSwap(FileOptions* other) { - if (other == this) return; - GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena()); - InternalSwap(other); - } - - // implements Message ---------------------------------------------- - - FileOptions* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final { - return CreateMaybeMessage<FileOptions>(arena); - } - using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom; - void CopyFrom(const FileOptions& from); - using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom; - void MergeFrom( const FileOptions& from) { - FileOptions::MergeImpl(*this, from); - } - private: - static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message& to_msg, const ::PROTOBUF_NAMESPACE_ID::Message& from_msg); - public: - PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final; - bool IsInitialized() const final; - - size_t ByteSizeLong() const final; - const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final; - uint8_t* _InternalSerialize( - uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final; - int GetCachedSize() const final { return _impl_._cached_size_.Get(); } - - private: - void SharedCtor(::PROTOBUF_NAMESPACE_ID::Arena* arena, bool is_message_owned); - void SharedDtor(); - void SetCachedSize(int size) const final; - void InternalSwap(FileOptions* other); - - private: - friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata; - static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() { - return "google.protobuf.FileOptions"; - } - protected: - explicit FileOptions(::PROTOBUF_NAMESPACE_ID::Arena* arena, - bool is_message_owned = false); - public: - - static const ClassData _class_data_; - const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final; - - ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final; - - // nested types ---------------------------------------------------- - - typedef FileOptions_OptimizeMode OptimizeMode; - static constexpr OptimizeMode SPEED = - FileOptions_OptimizeMode_SPEED; - static constexpr OptimizeMode CODE_SIZE = - FileOptions_OptimizeMode_CODE_SIZE; - static constexpr OptimizeMode LITE_RUNTIME = - FileOptions_OptimizeMode_LITE_RUNTIME; - static inline bool OptimizeMode_IsValid(int value) { - return FileOptions_OptimizeMode_IsValid(value); - } - static constexpr OptimizeMode OptimizeMode_MIN = - FileOptions_OptimizeMode_OptimizeMode_MIN; - static constexpr OptimizeMode OptimizeMode_MAX = - FileOptions_OptimizeMode_OptimizeMode_MAX; - static constexpr int OptimizeMode_ARRAYSIZE = - FileOptions_OptimizeMode_OptimizeMode_ARRAYSIZE; - static inline const ::PROTOBUF_NAMESPACE_ID::EnumDescriptor* - OptimizeMode_descriptor() { - return FileOptions_OptimizeMode_descriptor(); - } - template<typename T> - static inline const std::string& OptimizeMode_Name(T enum_t_value) { - static_assert(::std::is_same<T, OptimizeMode>::value || - ::std::is_integral<T>::value, - "Incorrect type passed to function OptimizeMode_Name."); - return FileOptions_OptimizeMode_Name(enum_t_value); - } - static inline bool OptimizeMode_Parse(::PROTOBUF_NAMESPACE_ID::ConstStringParam name, - OptimizeMode* value) { - return FileOptions_OptimizeMode_Parse(name, value); - } - - // accessors ------------------------------------------------------- - - enum : int { - kUninterpretedOptionFieldNumber = 999, - kJavaPackageFieldNumber = 1, - kJavaOuterClassnameFieldNumber = 8, - kGoPackageFieldNumber = 11, - kObjcClassPrefixFieldNumber = 36, - kCsharpNamespaceFieldNumber = 37, - kSwiftPrefixFieldNumber = 39, - kPhpClassPrefixFieldNumber = 40, - kPhpNamespaceFieldNumber = 41, - kPhpMetadataNamespaceFieldNumber = 44, - kRubyPackageFieldNumber = 45, - kJavaMultipleFilesFieldNumber = 10, - kJavaGenerateEqualsAndHashFieldNumber = 20, - kJavaStringCheckUtf8FieldNumber = 27, - kCcGenericServicesFieldNumber = 16, - kJavaGenericServicesFieldNumber = 17, - kPyGenericServicesFieldNumber = 18, - kPhpGenericServicesFieldNumber = 42, - kDeprecatedFieldNumber = 23, - kOptimizeForFieldNumber = 9, - kCcEnableArenasFieldNumber = 31, - }; - // repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999; - int uninterpreted_option_size() const; - private: - int _internal_uninterpreted_option_size() const; - public: - void clear_uninterpreted_option(); - ::PROTOBUF_NAMESPACE_ID::UninterpretedOption* mutable_uninterpreted_option(int index); - ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::UninterpretedOption >* - mutable_uninterpreted_option(); - private: - const ::PROTOBUF_NAMESPACE_ID::UninterpretedOption& _internal_uninterpreted_option(int index) const; - ::PROTOBUF_NAMESPACE_ID::UninterpretedOption* _internal_add_uninterpreted_option(); - public: - const ::PROTOBUF_NAMESPACE_ID::UninterpretedOption& uninterpreted_option(int index) const; - ::PROTOBUF_NAMESPACE_ID::UninterpretedOption* add_uninterpreted_option(); - const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::UninterpretedOption >& - uninterpreted_option() const; - - // optional string java_package = 1; - bool has_java_package() const; - private: - bool _internal_has_java_package() const; - public: - void clear_java_package(); - const std::string& java_package() const; - template <typename ArgT0 = const std::string&, typename... ArgT> - void set_java_package(ArgT0&& arg0, ArgT... args); - std::string* mutable_java_package(); - PROTOBUF_NODISCARD std::string* release_java_package(); - void set_allocated_java_package(std::string* java_package); - private: - const std::string& _internal_java_package() const; - inline PROTOBUF_ALWAYS_INLINE void _internal_set_java_package(const std::string& value); - std::string* _internal_mutable_java_package(); - public: - - // optional string java_outer_classname = 8; - bool has_java_outer_classname() const; - private: - bool _internal_has_java_outer_classname() const; - public: - void clear_java_outer_classname(); - const std::string& java_outer_classname() const; - template <typename ArgT0 = const std::string&, typename... ArgT> - void set_java_outer_classname(ArgT0&& arg0, ArgT... args); - std::string* mutable_java_outer_classname(); - PROTOBUF_NODISCARD std::string* release_java_outer_classname(); - void set_allocated_java_outer_classname(std::string* java_outer_classname); - private: - const std::string& _internal_java_outer_classname() const; - inline PROTOBUF_ALWAYS_INLINE void _internal_set_java_outer_classname(const std::string& value); - std::string* _internal_mutable_java_outer_classname(); - public: - - // optional string go_package = 11; - bool has_go_package() const; - private: - bool _internal_has_go_package() const; - public: - void clear_go_package(); - const std::string& go_package() const; - template <typename ArgT0 = const std::string&, typename... ArgT> - void set_go_package(ArgT0&& arg0, ArgT... args); - std::string* mutable_go_package(); - PROTOBUF_NODISCARD std::string* release_go_package(); - void set_allocated_go_package(std::string* go_package); - private: - const std::string& _internal_go_package() const; - inline PROTOBUF_ALWAYS_INLINE void _internal_set_go_package(const std::string& value); - std::string* _internal_mutable_go_package(); - public: - - // optional string objc_class_prefix = 36; - bool has_objc_class_prefix() const; - private: - bool _internal_has_objc_class_prefix() const; - public: - void clear_objc_class_prefix(); - const std::string& objc_class_prefix() const; - template <typename ArgT0 = const std::string&, typename... ArgT> - void set_objc_class_prefix(ArgT0&& arg0, ArgT... args); - std::string* mutable_objc_class_prefix(); - PROTOBUF_NODISCARD std::string* release_objc_class_prefix(); - void set_allocated_objc_class_prefix(std::string* objc_class_prefix); - private: - const std::string& _internal_objc_class_prefix() const; - inline PROTOBUF_ALWAYS_INLINE void _internal_set_objc_class_prefix(const std::string& value); - std::string* _internal_mutable_objc_class_prefix(); - public: - - // optional string csharp_namespace = 37; - bool has_csharp_namespace() const; - private: - bool _internal_has_csharp_namespace() const; - public: - void clear_csharp_namespace(); - const std::string& csharp_namespace() const; - template <typename ArgT0 = const std::string&, typename... ArgT> - void set_csharp_namespace(ArgT0&& arg0, ArgT... args); - std::string* mutable_csharp_namespace(); - PROTOBUF_NODISCARD std::string* release_csharp_namespace(); - void set_allocated_csharp_namespace(std::string* csharp_namespace); - private: - const std::string& _internal_csharp_namespace() const; - inline PROTOBUF_ALWAYS_INLINE void _internal_set_csharp_namespace(const std::string& value); - std::string* _internal_mutable_csharp_namespace(); - public: - - // optional string swift_prefix = 39; - bool has_swift_prefix() const; - private: - bool _internal_has_swift_prefix() const; - public: - void clear_swift_prefix(); - const std::string& swift_prefix() const; - template <typename ArgT0 = const std::string&, typename... ArgT> - void set_swift_prefix(ArgT0&& arg0, ArgT... args); - std::string* mutable_swift_prefix(); - PROTOBUF_NODISCARD std::string* release_swift_prefix(); - void set_allocated_swift_prefix(std::string* swift_prefix); - private: - const std::string& _internal_swift_prefix() const; - inline PROTOBUF_ALWAYS_INLINE void _internal_set_swift_prefix(const std::string& value); - std::string* _internal_mutable_swift_prefix(); - public: - - // optional string php_class_prefix = 40; - bool has_php_class_prefix() const; - private: - bool _internal_has_php_class_prefix() const; - public: - void clear_php_class_prefix(); - const std::string& php_class_prefix() const; - template <typename ArgT0 = const std::string&, typename... ArgT> - void set_php_class_prefix(ArgT0&& arg0, ArgT... args); - std::string* mutable_php_class_prefix(); - PROTOBUF_NODISCARD std::string* release_php_class_prefix(); - void set_allocated_php_class_prefix(std::string* php_class_prefix); - private: - const std::string& _internal_php_class_prefix() const; - inline PROTOBUF_ALWAYS_INLINE void _internal_set_php_class_prefix(const std::string& value); - std::string* _internal_mutable_php_class_prefix(); - public: - - // optional string php_namespace = 41; - bool has_php_namespace() const; - private: - bool _internal_has_php_namespace() const; - public: - void clear_php_namespace(); - const std::string& php_namespace() const; - template <typename ArgT0 = const std::string&, typename... ArgT> - void set_php_namespace(ArgT0&& arg0, ArgT... args); - std::string* mutable_php_namespace(); - PROTOBUF_NODISCARD std::string* release_php_namespace(); - void set_allocated_php_namespace(std::string* php_namespace); - private: - const std::string& _internal_php_namespace() const; - inline PROTOBUF_ALWAYS_INLINE void _internal_set_php_namespace(const std::string& value); - std::string* _internal_mutable_php_namespace(); - public: - - // optional string php_metadata_namespace = 44; - bool has_php_metadata_namespace() const; - private: - bool _internal_has_php_metadata_namespace() const; - public: - void clear_php_metadata_namespace(); - const std::string& php_metadata_namespace() const; - template <typename ArgT0 = const std::string&, typename... ArgT> - void set_php_metadata_namespace(ArgT0&& arg0, ArgT... args); - std::string* mutable_php_metadata_namespace(); - PROTOBUF_NODISCARD std::string* release_php_metadata_namespace(); - void set_allocated_php_metadata_namespace(std::string* php_metadata_namespace); - private: - const std::string& _internal_php_metadata_namespace() const; - inline PROTOBUF_ALWAYS_INLINE void _internal_set_php_metadata_namespace(const std::string& value); - std::string* _internal_mutable_php_metadata_namespace(); - public: - - // optional string ruby_package = 45; - bool has_ruby_package() const; - private: - bool _internal_has_ruby_package() const; - public: - void clear_ruby_package(); - const std::string& ruby_package() const; - template <typename ArgT0 = const std::string&, typename... ArgT> - void set_ruby_package(ArgT0&& arg0, ArgT... args); - std::string* mutable_ruby_package(); - PROTOBUF_NODISCARD std::string* release_ruby_package(); - void set_allocated_ruby_package(std::string* ruby_package); - private: - const std::string& _internal_ruby_package() const; - inline PROTOBUF_ALWAYS_INLINE void _internal_set_ruby_package(const std::string& value); - std::string* _internal_mutable_ruby_package(); - public: - - // optional bool java_multiple_files = 10 [default = false]; - bool has_java_multiple_files() const; - private: - bool _internal_has_java_multiple_files() const; - public: - void clear_java_multiple_files(); - bool java_multiple_files() const; - void set_java_multiple_files(bool value); - private: - bool _internal_java_multiple_files() const; - void _internal_set_java_multiple_files(bool value); - public: - - // optional bool java_generate_equals_and_hash = 20 [deprecated = true]; - PROTOBUF_DEPRECATED bool has_java_generate_equals_and_hash() const; - private: - bool _internal_has_java_generate_equals_and_hash() const; - public: - PROTOBUF_DEPRECATED void clear_java_generate_equals_and_hash(); - PROTOBUF_DEPRECATED bool java_generate_equals_and_hash() const; - PROTOBUF_DEPRECATED void set_java_generate_equals_and_hash(bool value); - private: - bool _internal_java_generate_equals_and_hash() const; - void _internal_set_java_generate_equals_and_hash(bool value); - public: - - // optional bool java_string_check_utf8 = 27 [default = false]; - bool has_java_string_check_utf8() const; - private: - bool _internal_has_java_string_check_utf8() const; - public: - void clear_java_string_check_utf8(); - bool java_string_check_utf8() const; - void set_java_string_check_utf8(bool value); - private: - bool _internal_java_string_check_utf8() const; - void _internal_set_java_string_check_utf8(bool value); - public: - - // optional bool cc_generic_services = 16 [default = false]; - bool has_cc_generic_services() const; - private: - bool _internal_has_cc_generic_services() const; - public: - void clear_cc_generic_services(); - bool cc_generic_services() const; - void set_cc_generic_services(bool value); - private: - bool _internal_cc_generic_services() const; - void _internal_set_cc_generic_services(bool value); - public: - - // optional bool java_generic_services = 17 [default = false]; - bool has_java_generic_services() const; - private: - bool _internal_has_java_generic_services() const; - public: - void clear_java_generic_services(); - bool java_generic_services() const; - void set_java_generic_services(bool value); - private: - bool _internal_java_generic_services() const; - void _internal_set_java_generic_services(bool value); - public: - - // optional bool py_generic_services = 18 [default = false]; - bool has_py_generic_services() const; - private: - bool _internal_has_py_generic_services() const; - public: - void clear_py_generic_services(); - bool py_generic_services() const; - void set_py_generic_services(bool value); - private: - bool _internal_py_generic_services() const; - void _internal_set_py_generic_services(bool value); - public: - - // optional bool php_generic_services = 42 [default = false]; - bool has_php_generic_services() const; - private: - bool _internal_has_php_generic_services() const; - public: - void clear_php_generic_services(); - bool php_generic_services() const; - void set_php_generic_services(bool value); - private: - bool _internal_php_generic_services() const; - void _internal_set_php_generic_services(bool value); - public: - - // optional bool deprecated = 23 [default = false]; - bool has_deprecated() const; - private: - bool _internal_has_deprecated() const; - public: - void clear_deprecated(); - bool deprecated() const; - void set_deprecated(bool value); - private: - bool _internal_deprecated() const; - void _internal_set_deprecated(bool value); - public: - - // optional .google.protobuf.FileOptions.OptimizeMode optimize_for = 9 [default = SPEED]; - bool has_optimize_for() const; - private: - bool _internal_has_optimize_for() const; - public: - void clear_optimize_for(); - ::PROTOBUF_NAMESPACE_ID::FileOptions_OptimizeMode optimize_for() const; - void set_optimize_for(::PROTOBUF_NAMESPACE_ID::FileOptions_OptimizeMode value); - private: - ::PROTOBUF_NAMESPACE_ID::FileOptions_OptimizeMode _internal_optimize_for() const; - void _internal_set_optimize_for(::PROTOBUF_NAMESPACE_ID::FileOptions_OptimizeMode value); - public: - - // optional bool cc_enable_arenas = 31 [default = true]; - bool has_cc_enable_arenas() const; - private: - bool _internal_has_cc_enable_arenas() const; - public: - void clear_cc_enable_arenas(); - bool cc_enable_arenas() const; - void set_cc_enable_arenas(bool value); - private: - bool _internal_cc_enable_arenas() const; - void _internal_set_cc_enable_arenas(bool value); - public: - - - template <typename _proto_TypeTraits, - ::PROTOBUF_NAMESPACE_ID::internal::FieldType _field_type, - bool _is_packed> - inline bool HasExtension( - const ::PROTOBUF_NAMESPACE_ID::internal::ExtensionIdentifier< - FileOptions, _proto_TypeTraits, _field_type, _is_packed>& id) const { - - return _impl_._extensions_.Has(id.number()); - } - - template <typename _proto_TypeTraits, - ::PROTOBUF_NAMESPACE_ID::internal::FieldType _field_type, - bool _is_packed> - inline void ClearExtension( - const ::PROTOBUF_NAMESPACE_ID::internal::ExtensionIdentifier< - FileOptions, _proto_TypeTraits, _field_type, _is_packed>& id) { - _impl_._extensions_.ClearExtension(id.number()); - - } - - template <typename _proto_TypeTraits, - ::PROTOBUF_NAMESPACE_ID::internal::FieldType _field_type, - bool _is_packed> - inline int ExtensionSize( - const ::PROTOBUF_NAMESPACE_ID::internal::ExtensionIdentifier< - FileOptions, _proto_TypeTraits, _field_type, _is_packed>& id) const { - - return _impl_._extensions_.ExtensionSize(id.number()); - } - - template <typename _proto_TypeTraits, - ::PROTOBUF_NAMESPACE_ID::internal::FieldType _field_type, - bool _is_packed> - inline typename _proto_TypeTraits::Singular::ConstType GetExtension( - const ::PROTOBUF_NAMESPACE_ID::internal::ExtensionIdentifier< - FileOptions, _proto_TypeTraits, _field_type, _is_packed>& id) const { - - return _proto_TypeTraits::Get(id.number(), _impl_._extensions_, - id.default_value()); - } - - template <typename _proto_TypeTraits, - ::PROTOBUF_NAMESPACE_ID::internal::FieldType _field_type, - bool _is_packed> - inline typename _proto_TypeTraits::Singular::MutableType MutableExtension( - const ::PROTOBUF_NAMESPACE_ID::internal::ExtensionIdentifier< - FileOptions, _proto_TypeTraits, _field_type, _is_packed>& id) { - - return _proto_TypeTraits::Mutable(id.number(), _field_type, - &_impl_._extensions_); - } - - template <typename _proto_TypeTraits, - ::PROTOBUF_NAMESPACE_ID::internal::FieldType _field_type, - bool _is_packed> - inline void SetExtension( - const ::PROTOBUF_NAMESPACE_ID::internal::ExtensionIdentifier< - FileOptions, _proto_TypeTraits, _field_type, _is_packed>& id, - typename _proto_TypeTraits::Singular::ConstType value) { - _proto_TypeTraits::Set(id.number(), _field_type, value, &_impl_._extensions_); - - } - - template <typename _proto_TypeTraits, - ::PROTOBUF_NAMESPACE_ID::internal::FieldType _field_type, - bool _is_packed> - inline void SetAllocatedExtension( - const ::PROTOBUF_NAMESPACE_ID::internal::ExtensionIdentifier< - FileOptions, _proto_TypeTraits, _field_type, _is_packed>& id, - typename _proto_TypeTraits::Singular::MutableType value) { - _proto_TypeTraits::SetAllocated(id.number(), _field_type, value, - &_impl_._extensions_); - - } - template <typename _proto_TypeTraits, - ::PROTOBUF_NAMESPACE_ID::internal::FieldType _field_type, - bool _is_packed> - inline void UnsafeArenaSetAllocatedExtension( - const ::PROTOBUF_NAMESPACE_ID::internal::ExtensionIdentifier< - FileOptions, _proto_TypeTraits, _field_type, _is_packed>& id, - typename _proto_TypeTraits::Singular::MutableType value) { - _proto_TypeTraits::UnsafeArenaSetAllocated(id.number(), _field_type, - value, &_impl_._extensions_); - - } - template <typename _proto_TypeTraits, - ::PROTOBUF_NAMESPACE_ID::internal::FieldType _field_type, - bool _is_packed> - PROTOBUF_NODISCARD inline - typename _proto_TypeTraits::Singular::MutableType - ReleaseExtension( - const ::PROTOBUF_NAMESPACE_ID::internal::ExtensionIdentifier< - FileOptions, _proto_TypeTraits, _field_type, _is_packed>& id) { - - return _proto_TypeTraits::Release(id.number(), _field_type, - &_impl_._extensions_); - } - template <typename _proto_TypeTraits, - ::PROTOBUF_NAMESPACE_ID::internal::FieldType _field_type, - bool _is_packed> - inline typename _proto_TypeTraits::Singular::MutableType - UnsafeArenaReleaseExtension( - const ::PROTOBUF_NAMESPACE_ID::internal::ExtensionIdentifier< - FileOptions, _proto_TypeTraits, _field_type, _is_packed>& id) { - - return _proto_TypeTraits::UnsafeArenaRelease(id.number(), _field_type, - &_impl_._extensions_); - } - - template <typename _proto_TypeTraits, - ::PROTOBUF_NAMESPACE_ID::internal::FieldType _field_type, - bool _is_packed> - inline typename _proto_TypeTraits::Repeated::ConstType GetExtension( - const ::PROTOBUF_NAMESPACE_ID::internal::ExtensionIdentifier< - FileOptions, _proto_TypeTraits, _field_type, _is_packed>& id, - int index) const { - - return _proto_TypeTraits::Get(id.number(), _impl_._extensions_, index); - } - - template <typename _proto_TypeTraits, - ::PROTOBUF_NAMESPACE_ID::internal::FieldType _field_type, - bool _is_packed> - inline typename _proto_TypeTraits::Repeated::MutableType MutableExtension( - const ::PROTOBUF_NAMESPACE_ID::internal::ExtensionIdentifier< - FileOptions, _proto_TypeTraits, _field_type, _is_packed>& id, - int index) { - - return _proto_TypeTraits::Mutable(id.number(), index, &_impl_._extensions_); - } - - template <typename _proto_TypeTraits, - ::PROTOBUF_NAMESPACE_ID::internal::FieldType _field_type, - bool _is_packed> - inline void SetExtension( - const ::PROTOBUF_NAMESPACE_ID::internal::ExtensionIdentifier< - FileOptions, _proto_TypeTraits, _field_type, _is_packed>& id, - int index, typename _proto_TypeTraits::Repeated::ConstType value) { - _proto_TypeTraits::Set(id.number(), index, value, &_impl_._extensions_); - - } - - template <typename _proto_TypeTraits, - ::PROTOBUF_NAMESPACE_ID::internal::FieldType _field_type, - bool _is_packed> - inline typename _proto_TypeTraits::Repeated::MutableType AddExtension( - const ::PROTOBUF_NAMESPACE_ID::internal::ExtensionIdentifier< - FileOptions, _proto_TypeTraits, _field_type, _is_packed>& id) { - typename _proto_TypeTraits::Repeated::MutableType to_add = - _proto_TypeTraits::Add(id.number(), _field_type, &_impl_._extensions_); - - return to_add; - } - - template <typename _proto_TypeTraits, - ::PROTOBUF_NAMESPACE_ID::internal::FieldType _field_type, - bool _is_packed> - inline void AddExtension( - const ::PROTOBUF_NAMESPACE_ID::internal::ExtensionIdentifier< - FileOptions, _proto_TypeTraits, _field_type, _is_packed>& id, - typename _proto_TypeTraits::Repeated::ConstType value) { - _proto_TypeTraits::Add(id.number(), _field_type, _is_packed, value, - &_impl_._extensions_); - - } - - template <typename _proto_TypeTraits, - ::PROTOBUF_NAMESPACE_ID::internal::FieldType _field_type, - bool _is_packed> - inline const typename _proto_TypeTraits::Repeated::RepeatedFieldType& - GetRepeatedExtension( - const ::PROTOBUF_NAMESPACE_ID::internal::ExtensionIdentifier< - FileOptions, _proto_TypeTraits, _field_type, _is_packed>& id) const { - - return _proto_TypeTraits::GetRepeated(id.number(), _impl_._extensions_); - } - - template <typename _proto_TypeTraits, - ::PROTOBUF_NAMESPACE_ID::internal::FieldType _field_type, - bool _is_packed> - inline typename _proto_TypeTraits::Repeated::RepeatedFieldType* - MutableRepeatedExtension( - const ::PROTOBUF_NAMESPACE_ID::internal::ExtensionIdentifier< - FileOptions, _proto_TypeTraits, _field_type, _is_packed>& id) { - - return _proto_TypeTraits::MutableRepeated(id.number(), _field_type, - _is_packed, &_impl_._extensions_); - } - - // @@protoc_insertion_point(class_scope:google.protobuf.FileOptions) - private: - class _Internal; - - template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper; - typedef void InternalArenaConstructable_; - typedef void DestructorSkippable_; - struct Impl_ { - ::PROTOBUF_NAMESPACE_ID::internal::ExtensionSet _extensions_; - - ::PROTOBUF_NAMESPACE_ID::internal::HasBits<1> _has_bits_; - mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_; - ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::UninterpretedOption > uninterpreted_option_; - ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr java_package_; - ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr java_outer_classname_; - ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr go_package_; - ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr objc_class_prefix_; - ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr csharp_namespace_; - ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr swift_prefix_; - ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr php_class_prefix_; - ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr php_namespace_; - ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr php_metadata_namespace_; - ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr ruby_package_; - bool java_multiple_files_; - bool java_generate_equals_and_hash_; - bool java_string_check_utf8_; - bool cc_generic_services_; - bool java_generic_services_; - bool py_generic_services_; - bool php_generic_services_; - bool deprecated_; - int optimize_for_; - bool cc_enable_arenas_; - }; - union { Impl_ _impl_; }; - friend struct ::TableStruct_google_2fprotobuf_2fdescriptor_2eproto; -}; -// ------------------------------------------------------------------- - -class PROTOBUF_EXPORT MessageOptions final : - public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:google.protobuf.MessageOptions) */ { - public: - inline MessageOptions() : MessageOptions(nullptr) {} - ~MessageOptions() override; - explicit PROTOBUF_CONSTEXPR MessageOptions(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized); - - MessageOptions(const MessageOptions& from); - MessageOptions(MessageOptions&& from) noexcept - : MessageOptions() { - *this = ::std::move(from); - } - - inline MessageOptions& operator=(const MessageOptions& from) { - CopyFrom(from); - return *this; - } - inline MessageOptions& operator=(MessageOptions&& from) noexcept { - if (this == &from) return *this; - if (GetOwningArena() == from.GetOwningArena() - #ifdef PROTOBUF_FORCE_COPY_IN_MOVE - && GetOwningArena() != nullptr - #endif // !PROTOBUF_FORCE_COPY_IN_MOVE - ) { - InternalSwap(&from); - } else { - CopyFrom(from); - } - return *this; - } - - inline const ::PROTOBUF_NAMESPACE_ID::UnknownFieldSet& unknown_fields() const { - return _internal_metadata_.unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(::PROTOBUF_NAMESPACE_ID::UnknownFieldSet::default_instance); - } - inline ::PROTOBUF_NAMESPACE_ID::UnknownFieldSet* mutable_unknown_fields() { - return _internal_metadata_.mutable_unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(); - } - - static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() { - return GetDescriptor(); - } - static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() { - return default_instance().GetMetadata().descriptor; - } - static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() { - return default_instance().GetMetadata().reflection; - } - static const MessageOptions& default_instance() { - return *internal_default_instance(); - } - static inline const MessageOptions* internal_default_instance() { - return reinterpret_cast<const MessageOptions*>( - &_MessageOptions_default_instance_); - } - static constexpr int kIndexInFileMessages = - 14; - - friend void swap(MessageOptions& a, MessageOptions& b) { - a.Swap(&b); - } - inline void Swap(MessageOptions* other) { - if (other == this) return; - #ifdef PROTOBUF_FORCE_COPY_IN_SWAP - if (GetOwningArena() != nullptr && - GetOwningArena() == other->GetOwningArena()) { - #else // PROTOBUF_FORCE_COPY_IN_SWAP - if (GetOwningArena() == other->GetOwningArena()) { - #endif // !PROTOBUF_FORCE_COPY_IN_SWAP - InternalSwap(other); - } else { - ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other); - } - } - void UnsafeArenaSwap(MessageOptions* other) { - if (other == this) return; - GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena()); - InternalSwap(other); - } - - // implements Message ---------------------------------------------- - - MessageOptions* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final { - return CreateMaybeMessage<MessageOptions>(arena); - } - using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom; - void CopyFrom(const MessageOptions& from); - using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom; - void MergeFrom( const MessageOptions& from) { - MessageOptions::MergeImpl(*this, from); - } - private: - static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message& to_msg, const ::PROTOBUF_NAMESPACE_ID::Message& from_msg); - public: - PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final; - bool IsInitialized() const final; - - size_t ByteSizeLong() const final; - const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final; - uint8_t* _InternalSerialize( - uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final; - int GetCachedSize() const final { return _impl_._cached_size_.Get(); } - - private: - void SharedCtor(::PROTOBUF_NAMESPACE_ID::Arena* arena, bool is_message_owned); - void SharedDtor(); - void SetCachedSize(int size) const final; - void InternalSwap(MessageOptions* other); - - private: - friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata; - static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() { - return "google.protobuf.MessageOptions"; - } - protected: - explicit MessageOptions(::PROTOBUF_NAMESPACE_ID::Arena* arena, - bool is_message_owned = false); - public: - - static const ClassData _class_data_; - const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final; - - ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final; - - // nested types ---------------------------------------------------- - - // accessors ------------------------------------------------------- - - enum : int { - kUninterpretedOptionFieldNumber = 999, - kMessageSetWireFormatFieldNumber = 1, - kNoStandardDescriptorAccessorFieldNumber = 2, - kDeprecatedFieldNumber = 3, - kMapEntryFieldNumber = 7, - }; - // repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999; - int uninterpreted_option_size() const; - private: - int _internal_uninterpreted_option_size() const; - public: - void clear_uninterpreted_option(); - ::PROTOBUF_NAMESPACE_ID::UninterpretedOption* mutable_uninterpreted_option(int index); - ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::UninterpretedOption >* - mutable_uninterpreted_option(); - private: - const ::PROTOBUF_NAMESPACE_ID::UninterpretedOption& _internal_uninterpreted_option(int index) const; - ::PROTOBUF_NAMESPACE_ID::UninterpretedOption* _internal_add_uninterpreted_option(); - public: - const ::PROTOBUF_NAMESPACE_ID::UninterpretedOption& uninterpreted_option(int index) const; - ::PROTOBUF_NAMESPACE_ID::UninterpretedOption* add_uninterpreted_option(); - const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::UninterpretedOption >& - uninterpreted_option() const; - - // optional bool message_set_wire_format = 1 [default = false]; - bool has_message_set_wire_format() const; - private: - bool _internal_has_message_set_wire_format() const; - public: - void clear_message_set_wire_format(); - bool message_set_wire_format() const; - void set_message_set_wire_format(bool value); - private: - bool _internal_message_set_wire_format() const; - void _internal_set_message_set_wire_format(bool value); - public: - - // optional bool no_standard_descriptor_accessor = 2 [default = false]; - bool has_no_standard_descriptor_accessor() const; - private: - bool _internal_has_no_standard_descriptor_accessor() const; - public: - void clear_no_standard_descriptor_accessor(); - bool no_standard_descriptor_accessor() const; - void set_no_standard_descriptor_accessor(bool value); - private: - bool _internal_no_standard_descriptor_accessor() const; - void _internal_set_no_standard_descriptor_accessor(bool value); - public: - - // optional bool deprecated = 3 [default = false]; - bool has_deprecated() const; - private: - bool _internal_has_deprecated() const; - public: - void clear_deprecated(); - bool deprecated() const; - void set_deprecated(bool value); - private: - bool _internal_deprecated() const; - void _internal_set_deprecated(bool value); - public: - - // optional bool map_entry = 7; - bool has_map_entry() const; - private: - bool _internal_has_map_entry() const; - public: - void clear_map_entry(); - bool map_entry() const; - void set_map_entry(bool value); - private: - bool _internal_map_entry() const; - void _internal_set_map_entry(bool value); - public: - - - template <typename _proto_TypeTraits, - ::PROTOBUF_NAMESPACE_ID::internal::FieldType _field_type, - bool _is_packed> - inline bool HasExtension( - const ::PROTOBUF_NAMESPACE_ID::internal::ExtensionIdentifier< - MessageOptions, _proto_TypeTraits, _field_type, _is_packed>& id) const { - - return _impl_._extensions_.Has(id.number()); - } - - template <typename _proto_TypeTraits, - ::PROTOBUF_NAMESPACE_ID::internal::FieldType _field_type, - bool _is_packed> - inline void ClearExtension( - const ::PROTOBUF_NAMESPACE_ID::internal::ExtensionIdentifier< - MessageOptions, _proto_TypeTraits, _field_type, _is_packed>& id) { - _impl_._extensions_.ClearExtension(id.number()); - - } - - template <typename _proto_TypeTraits, - ::PROTOBUF_NAMESPACE_ID::internal::FieldType _field_type, - bool _is_packed> - inline int ExtensionSize( - const ::PROTOBUF_NAMESPACE_ID::internal::ExtensionIdentifier< - MessageOptions, _proto_TypeTraits, _field_type, _is_packed>& id) const { - - return _impl_._extensions_.ExtensionSize(id.number()); - } - - template <typename _proto_TypeTraits, - ::PROTOBUF_NAMESPACE_ID::internal::FieldType _field_type, - bool _is_packed> - inline typename _proto_TypeTraits::Singular::ConstType GetExtension( - const ::PROTOBUF_NAMESPACE_ID::internal::ExtensionIdentifier< - MessageOptions, _proto_TypeTraits, _field_type, _is_packed>& id) const { - - return _proto_TypeTraits::Get(id.number(), _impl_._extensions_, - id.default_value()); - } - - template <typename _proto_TypeTraits, - ::PROTOBUF_NAMESPACE_ID::internal::FieldType _field_type, - bool _is_packed> - inline typename _proto_TypeTraits::Singular::MutableType MutableExtension( - const ::PROTOBUF_NAMESPACE_ID::internal::ExtensionIdentifier< - MessageOptions, _proto_TypeTraits, _field_type, _is_packed>& id) { - - return _proto_TypeTraits::Mutable(id.number(), _field_type, - &_impl_._extensions_); - } - - template <typename _proto_TypeTraits, - ::PROTOBUF_NAMESPACE_ID::internal::FieldType _field_type, - bool _is_packed> - inline void SetExtension( - const ::PROTOBUF_NAMESPACE_ID::internal::ExtensionIdentifier< - MessageOptions, _proto_TypeTraits, _field_type, _is_packed>& id, - typename _proto_TypeTraits::Singular::ConstType value) { - _proto_TypeTraits::Set(id.number(), _field_type, value, &_impl_._extensions_); - - } - - template <typename _proto_TypeTraits, - ::PROTOBUF_NAMESPACE_ID::internal::FieldType _field_type, - bool _is_packed> - inline void SetAllocatedExtension( - const ::PROTOBUF_NAMESPACE_ID::internal::ExtensionIdentifier< - MessageOptions, _proto_TypeTraits, _field_type, _is_packed>& id, - typename _proto_TypeTraits::Singular::MutableType value) { - _proto_TypeTraits::SetAllocated(id.number(), _field_type, value, - &_impl_._extensions_); - - } - template <typename _proto_TypeTraits, - ::PROTOBUF_NAMESPACE_ID::internal::FieldType _field_type, - bool _is_packed> - inline void UnsafeArenaSetAllocatedExtension( - const ::PROTOBUF_NAMESPACE_ID::internal::ExtensionIdentifier< - MessageOptions, _proto_TypeTraits, _field_type, _is_packed>& id, - typename _proto_TypeTraits::Singular::MutableType value) { - _proto_TypeTraits::UnsafeArenaSetAllocated(id.number(), _field_type, - value, &_impl_._extensions_); - - } - template <typename _proto_TypeTraits, - ::PROTOBUF_NAMESPACE_ID::internal::FieldType _field_type, - bool _is_packed> - PROTOBUF_NODISCARD inline - typename _proto_TypeTraits::Singular::MutableType - ReleaseExtension( - const ::PROTOBUF_NAMESPACE_ID::internal::ExtensionIdentifier< - MessageOptions, _proto_TypeTraits, _field_type, _is_packed>& id) { - - return _proto_TypeTraits::Release(id.number(), _field_type, - &_impl_._extensions_); - } - template <typename _proto_TypeTraits, - ::PROTOBUF_NAMESPACE_ID::internal::FieldType _field_type, - bool _is_packed> - inline typename _proto_TypeTraits::Singular::MutableType - UnsafeArenaReleaseExtension( - const ::PROTOBUF_NAMESPACE_ID::internal::ExtensionIdentifier< - MessageOptions, _proto_TypeTraits, _field_type, _is_packed>& id) { - - return _proto_TypeTraits::UnsafeArenaRelease(id.number(), _field_type, - &_impl_._extensions_); - } - - template <typename _proto_TypeTraits, - ::PROTOBUF_NAMESPACE_ID::internal::FieldType _field_type, - bool _is_packed> - inline typename _proto_TypeTraits::Repeated::ConstType GetExtension( - const ::PROTOBUF_NAMESPACE_ID::internal::ExtensionIdentifier< - MessageOptions, _proto_TypeTraits, _field_type, _is_packed>& id, - int index) const { - - return _proto_TypeTraits::Get(id.number(), _impl_._extensions_, index); - } - - template <typename _proto_TypeTraits, - ::PROTOBUF_NAMESPACE_ID::internal::FieldType _field_type, - bool _is_packed> - inline typename _proto_TypeTraits::Repeated::MutableType MutableExtension( - const ::PROTOBUF_NAMESPACE_ID::internal::ExtensionIdentifier< - MessageOptions, _proto_TypeTraits, _field_type, _is_packed>& id, - int index) { - - return _proto_TypeTraits::Mutable(id.number(), index, &_impl_._extensions_); - } - - template <typename _proto_TypeTraits, - ::PROTOBUF_NAMESPACE_ID::internal::FieldType _field_type, - bool _is_packed> - inline void SetExtension( - const ::PROTOBUF_NAMESPACE_ID::internal::ExtensionIdentifier< - MessageOptions, _proto_TypeTraits, _field_type, _is_packed>& id, - int index, typename _proto_TypeTraits::Repeated::ConstType value) { - _proto_TypeTraits::Set(id.number(), index, value, &_impl_._extensions_); - - } - - template <typename _proto_TypeTraits, - ::PROTOBUF_NAMESPACE_ID::internal::FieldType _field_type, - bool _is_packed> - inline typename _proto_TypeTraits::Repeated::MutableType AddExtension( - const ::PROTOBUF_NAMESPACE_ID::internal::ExtensionIdentifier< - MessageOptions, _proto_TypeTraits, _field_type, _is_packed>& id) { - typename _proto_TypeTraits::Repeated::MutableType to_add = - _proto_TypeTraits::Add(id.number(), _field_type, &_impl_._extensions_); - - return to_add; - } - - template <typename _proto_TypeTraits, - ::PROTOBUF_NAMESPACE_ID::internal::FieldType _field_type, - bool _is_packed> - inline void AddExtension( - const ::PROTOBUF_NAMESPACE_ID::internal::ExtensionIdentifier< - MessageOptions, _proto_TypeTraits, _field_type, _is_packed>& id, - typename _proto_TypeTraits::Repeated::ConstType value) { - _proto_TypeTraits::Add(id.number(), _field_type, _is_packed, value, - &_impl_._extensions_); - - } - - template <typename _proto_TypeTraits, - ::PROTOBUF_NAMESPACE_ID::internal::FieldType _field_type, - bool _is_packed> - inline const typename _proto_TypeTraits::Repeated::RepeatedFieldType& - GetRepeatedExtension( - const ::PROTOBUF_NAMESPACE_ID::internal::ExtensionIdentifier< - MessageOptions, _proto_TypeTraits, _field_type, _is_packed>& id) const { - - return _proto_TypeTraits::GetRepeated(id.number(), _impl_._extensions_); - } - - template <typename _proto_TypeTraits, - ::PROTOBUF_NAMESPACE_ID::internal::FieldType _field_type, - bool _is_packed> - inline typename _proto_TypeTraits::Repeated::RepeatedFieldType* - MutableRepeatedExtension( - const ::PROTOBUF_NAMESPACE_ID::internal::ExtensionIdentifier< - MessageOptions, _proto_TypeTraits, _field_type, _is_packed>& id) { - - return _proto_TypeTraits::MutableRepeated(id.number(), _field_type, - _is_packed, &_impl_._extensions_); - } - - // @@protoc_insertion_point(class_scope:google.protobuf.MessageOptions) - private: - class _Internal; - - template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper; - typedef void InternalArenaConstructable_; - typedef void DestructorSkippable_; - struct Impl_ { - ::PROTOBUF_NAMESPACE_ID::internal::ExtensionSet _extensions_; - - ::PROTOBUF_NAMESPACE_ID::internal::HasBits<1> _has_bits_; - mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_; - ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::UninterpretedOption > uninterpreted_option_; - bool message_set_wire_format_; - bool no_standard_descriptor_accessor_; - bool deprecated_; - bool map_entry_; - }; - union { Impl_ _impl_; }; - friend struct ::TableStruct_google_2fprotobuf_2fdescriptor_2eproto; -}; -// ------------------------------------------------------------------- - -class PROTOBUF_EXPORT FieldOptions final : - public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:google.protobuf.FieldOptions) */ { - public: - inline FieldOptions() : FieldOptions(nullptr) {} - ~FieldOptions() override; - explicit PROTOBUF_CONSTEXPR FieldOptions(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized); - - FieldOptions(const FieldOptions& from); - FieldOptions(FieldOptions&& from) noexcept - : FieldOptions() { - *this = ::std::move(from); - } - - inline FieldOptions& operator=(const FieldOptions& from) { - CopyFrom(from); - return *this; - } - inline FieldOptions& operator=(FieldOptions&& from) noexcept { - if (this == &from) return *this; - if (GetOwningArena() == from.GetOwningArena() - #ifdef PROTOBUF_FORCE_COPY_IN_MOVE - && GetOwningArena() != nullptr - #endif // !PROTOBUF_FORCE_COPY_IN_MOVE - ) { - InternalSwap(&from); - } else { - CopyFrom(from); - } - return *this; - } - - inline const ::PROTOBUF_NAMESPACE_ID::UnknownFieldSet& unknown_fields() const { - return _internal_metadata_.unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(::PROTOBUF_NAMESPACE_ID::UnknownFieldSet::default_instance); - } - inline ::PROTOBUF_NAMESPACE_ID::UnknownFieldSet* mutable_unknown_fields() { - return _internal_metadata_.mutable_unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(); - } - - static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() { - return GetDescriptor(); - } - static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() { - return default_instance().GetMetadata().descriptor; - } - static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() { - return default_instance().GetMetadata().reflection; - } - static const FieldOptions& default_instance() { - return *internal_default_instance(); - } - static inline const FieldOptions* internal_default_instance() { - return reinterpret_cast<const FieldOptions*>( - &_FieldOptions_default_instance_); - } - static constexpr int kIndexInFileMessages = - 15; - - friend void swap(FieldOptions& a, FieldOptions& b) { - a.Swap(&b); - } - inline void Swap(FieldOptions* other) { - if (other == this) return; - #ifdef PROTOBUF_FORCE_COPY_IN_SWAP - if (GetOwningArena() != nullptr && - GetOwningArena() == other->GetOwningArena()) { - #else // PROTOBUF_FORCE_COPY_IN_SWAP - if (GetOwningArena() == other->GetOwningArena()) { - #endif // !PROTOBUF_FORCE_COPY_IN_SWAP - InternalSwap(other); - } else { - ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other); - } - } - void UnsafeArenaSwap(FieldOptions* other) { - if (other == this) return; - GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena()); - InternalSwap(other); - } - - // implements Message ---------------------------------------------- - - FieldOptions* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final { - return CreateMaybeMessage<FieldOptions>(arena); - } - using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom; - void CopyFrom(const FieldOptions& from); - using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom; - void MergeFrom( const FieldOptions& from) { - FieldOptions::MergeImpl(*this, from); - } - private: - static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message& to_msg, const ::PROTOBUF_NAMESPACE_ID::Message& from_msg); - public: - PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final; - bool IsInitialized() const final; - - size_t ByteSizeLong() const final; - const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final; - uint8_t* _InternalSerialize( - uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final; - int GetCachedSize() const final { return _impl_._cached_size_.Get(); } - - private: - void SharedCtor(::PROTOBUF_NAMESPACE_ID::Arena* arena, bool is_message_owned); - void SharedDtor(); - void SetCachedSize(int size) const final; - void InternalSwap(FieldOptions* other); - - private: - friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata; - static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() { - return "google.protobuf.FieldOptions"; - } - protected: - explicit FieldOptions(::PROTOBUF_NAMESPACE_ID::Arena* arena, - bool is_message_owned = false); - public: - - static const ClassData _class_data_; - const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final; - - ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final; - - // nested types ---------------------------------------------------- - - typedef FieldOptions_CType CType; - static constexpr CType STRING = - FieldOptions_CType_STRING; - static constexpr CType CORD = - FieldOptions_CType_CORD; - static constexpr CType STRING_PIECE = - FieldOptions_CType_STRING_PIECE; - static inline bool CType_IsValid(int value) { - return FieldOptions_CType_IsValid(value); - } - static constexpr CType CType_MIN = - FieldOptions_CType_CType_MIN; - static constexpr CType CType_MAX = - FieldOptions_CType_CType_MAX; - static constexpr int CType_ARRAYSIZE = - FieldOptions_CType_CType_ARRAYSIZE; - static inline const ::PROTOBUF_NAMESPACE_ID::EnumDescriptor* - CType_descriptor() { - return FieldOptions_CType_descriptor(); - } - template<typename T> - static inline const std::string& CType_Name(T enum_t_value) { - static_assert(::std::is_same<T, CType>::value || - ::std::is_integral<T>::value, - "Incorrect type passed to function CType_Name."); - return FieldOptions_CType_Name(enum_t_value); - } - static inline bool CType_Parse(::PROTOBUF_NAMESPACE_ID::ConstStringParam name, - CType* value) { - return FieldOptions_CType_Parse(name, value); - } - - typedef FieldOptions_JSType JSType; - static constexpr JSType JS_NORMAL = - FieldOptions_JSType_JS_NORMAL; - static constexpr JSType JS_STRING = - FieldOptions_JSType_JS_STRING; - static constexpr JSType JS_NUMBER = - FieldOptions_JSType_JS_NUMBER; - static inline bool JSType_IsValid(int value) { - return FieldOptions_JSType_IsValid(value); - } - static constexpr JSType JSType_MIN = - FieldOptions_JSType_JSType_MIN; - static constexpr JSType JSType_MAX = - FieldOptions_JSType_JSType_MAX; - static constexpr int JSType_ARRAYSIZE = - FieldOptions_JSType_JSType_ARRAYSIZE; - static inline const ::PROTOBUF_NAMESPACE_ID::EnumDescriptor* - JSType_descriptor() { - return FieldOptions_JSType_descriptor(); - } - template<typename T> - static inline const std::string& JSType_Name(T enum_t_value) { - static_assert(::std::is_same<T, JSType>::value || - ::std::is_integral<T>::value, - "Incorrect type passed to function JSType_Name."); - return FieldOptions_JSType_Name(enum_t_value); - } - static inline bool JSType_Parse(::PROTOBUF_NAMESPACE_ID::ConstStringParam name, - JSType* value) { - return FieldOptions_JSType_Parse(name, value); - } - - // accessors ------------------------------------------------------- - - enum : int { - kUninterpretedOptionFieldNumber = 999, - kCtypeFieldNumber = 1, - kJstypeFieldNumber = 6, - kPackedFieldNumber = 2, - kLazyFieldNumber = 5, - kUnverifiedLazyFieldNumber = 15, - kDeprecatedFieldNumber = 3, - kWeakFieldNumber = 10, - }; - // repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999; - int uninterpreted_option_size() const; - private: - int _internal_uninterpreted_option_size() const; - public: - void clear_uninterpreted_option(); - ::PROTOBUF_NAMESPACE_ID::UninterpretedOption* mutable_uninterpreted_option(int index); - ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::UninterpretedOption >* - mutable_uninterpreted_option(); - private: - const ::PROTOBUF_NAMESPACE_ID::UninterpretedOption& _internal_uninterpreted_option(int index) const; - ::PROTOBUF_NAMESPACE_ID::UninterpretedOption* _internal_add_uninterpreted_option(); - public: - const ::PROTOBUF_NAMESPACE_ID::UninterpretedOption& uninterpreted_option(int index) const; - ::PROTOBUF_NAMESPACE_ID::UninterpretedOption* add_uninterpreted_option(); - const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::UninterpretedOption >& - uninterpreted_option() const; - - // optional .google.protobuf.FieldOptions.CType ctype = 1 [default = STRING]; - bool has_ctype() const; - private: - bool _internal_has_ctype() const; - public: - void clear_ctype(); - ::PROTOBUF_NAMESPACE_ID::FieldOptions_CType ctype() const; - void set_ctype(::PROTOBUF_NAMESPACE_ID::FieldOptions_CType value); - private: - ::PROTOBUF_NAMESPACE_ID::FieldOptions_CType _internal_ctype() const; - void _internal_set_ctype(::PROTOBUF_NAMESPACE_ID::FieldOptions_CType value); - public: - - // optional .google.protobuf.FieldOptions.JSType jstype = 6 [default = JS_NORMAL]; - bool has_jstype() const; - private: - bool _internal_has_jstype() const; - public: - void clear_jstype(); - ::PROTOBUF_NAMESPACE_ID::FieldOptions_JSType jstype() const; - void set_jstype(::PROTOBUF_NAMESPACE_ID::FieldOptions_JSType value); - private: - ::PROTOBUF_NAMESPACE_ID::FieldOptions_JSType _internal_jstype() const; - void _internal_set_jstype(::PROTOBUF_NAMESPACE_ID::FieldOptions_JSType value); - public: - - // optional bool packed = 2; - bool has_packed() const; - private: - bool _internal_has_packed() const; - public: - void clear_packed(); - bool packed() const; - void set_packed(bool value); - private: - bool _internal_packed() const; - void _internal_set_packed(bool value); - public: - - // optional bool lazy = 5 [default = false]; - bool has_lazy() const; - private: - bool _internal_has_lazy() const; - public: - void clear_lazy(); - bool lazy() const; - void set_lazy(bool value); - private: - bool _internal_lazy() const; - void _internal_set_lazy(bool value); - public: - - // optional bool unverified_lazy = 15 [default = false]; - bool has_unverified_lazy() const; - private: - bool _internal_has_unverified_lazy() const; - public: - void clear_unverified_lazy(); - bool unverified_lazy() const; - void set_unverified_lazy(bool value); - private: - bool _internal_unverified_lazy() const; - void _internal_set_unverified_lazy(bool value); - public: - - // optional bool deprecated = 3 [default = false]; - bool has_deprecated() const; - private: - bool _internal_has_deprecated() const; - public: - void clear_deprecated(); - bool deprecated() const; - void set_deprecated(bool value); - private: - bool _internal_deprecated() const; - void _internal_set_deprecated(bool value); - public: - - // optional bool weak = 10 [default = false]; - bool has_weak() const; - private: - bool _internal_has_weak() const; - public: - void clear_weak(); - bool weak() const; - void set_weak(bool value); - private: - bool _internal_weak() const; - void _internal_set_weak(bool value); - public: - - - template <typename _proto_TypeTraits, - ::PROTOBUF_NAMESPACE_ID::internal::FieldType _field_type, - bool _is_packed> - inline bool HasExtension( - const ::PROTOBUF_NAMESPACE_ID::internal::ExtensionIdentifier< - FieldOptions, _proto_TypeTraits, _field_type, _is_packed>& id) const { - - return _impl_._extensions_.Has(id.number()); - } - - template <typename _proto_TypeTraits, - ::PROTOBUF_NAMESPACE_ID::internal::FieldType _field_type, - bool _is_packed> - inline void ClearExtension( - const ::PROTOBUF_NAMESPACE_ID::internal::ExtensionIdentifier< - FieldOptions, _proto_TypeTraits, _field_type, _is_packed>& id) { - _impl_._extensions_.ClearExtension(id.number()); - - } - - template <typename _proto_TypeTraits, - ::PROTOBUF_NAMESPACE_ID::internal::FieldType _field_type, - bool _is_packed> - inline int ExtensionSize( - const ::PROTOBUF_NAMESPACE_ID::internal::ExtensionIdentifier< - FieldOptions, _proto_TypeTraits, _field_type, _is_packed>& id) const { - - return _impl_._extensions_.ExtensionSize(id.number()); - } - - template <typename _proto_TypeTraits, - ::PROTOBUF_NAMESPACE_ID::internal::FieldType _field_type, - bool _is_packed> - inline typename _proto_TypeTraits::Singular::ConstType GetExtension( - const ::PROTOBUF_NAMESPACE_ID::internal::ExtensionIdentifier< - FieldOptions, _proto_TypeTraits, _field_type, _is_packed>& id) const { - - return _proto_TypeTraits::Get(id.number(), _impl_._extensions_, - id.default_value()); - } - - template <typename _proto_TypeTraits, - ::PROTOBUF_NAMESPACE_ID::internal::FieldType _field_type, - bool _is_packed> - inline typename _proto_TypeTraits::Singular::MutableType MutableExtension( - const ::PROTOBUF_NAMESPACE_ID::internal::ExtensionIdentifier< - FieldOptions, _proto_TypeTraits, _field_type, _is_packed>& id) { - - return _proto_TypeTraits::Mutable(id.number(), _field_type, - &_impl_._extensions_); - } - - template <typename _proto_TypeTraits, - ::PROTOBUF_NAMESPACE_ID::internal::FieldType _field_type, - bool _is_packed> - inline void SetExtension( - const ::PROTOBUF_NAMESPACE_ID::internal::ExtensionIdentifier< - FieldOptions, _proto_TypeTraits, _field_type, _is_packed>& id, - typename _proto_TypeTraits::Singular::ConstType value) { - _proto_TypeTraits::Set(id.number(), _field_type, value, &_impl_._extensions_); - - } - - template <typename _proto_TypeTraits, - ::PROTOBUF_NAMESPACE_ID::internal::FieldType _field_type, - bool _is_packed> - inline void SetAllocatedExtension( - const ::PROTOBUF_NAMESPACE_ID::internal::ExtensionIdentifier< - FieldOptions, _proto_TypeTraits, _field_type, _is_packed>& id, - typename _proto_TypeTraits::Singular::MutableType value) { - _proto_TypeTraits::SetAllocated(id.number(), _field_type, value, - &_impl_._extensions_); - - } - template <typename _proto_TypeTraits, - ::PROTOBUF_NAMESPACE_ID::internal::FieldType _field_type, - bool _is_packed> - inline void UnsafeArenaSetAllocatedExtension( - const ::PROTOBUF_NAMESPACE_ID::internal::ExtensionIdentifier< - FieldOptions, _proto_TypeTraits, _field_type, _is_packed>& id, - typename _proto_TypeTraits::Singular::MutableType value) { - _proto_TypeTraits::UnsafeArenaSetAllocated(id.number(), _field_type, - value, &_impl_._extensions_); - - } - template <typename _proto_TypeTraits, - ::PROTOBUF_NAMESPACE_ID::internal::FieldType _field_type, - bool _is_packed> - PROTOBUF_NODISCARD inline - typename _proto_TypeTraits::Singular::MutableType - ReleaseExtension( - const ::PROTOBUF_NAMESPACE_ID::internal::ExtensionIdentifier< - FieldOptions, _proto_TypeTraits, _field_type, _is_packed>& id) { - - return _proto_TypeTraits::Release(id.number(), _field_type, - &_impl_._extensions_); - } - template <typename _proto_TypeTraits, - ::PROTOBUF_NAMESPACE_ID::internal::FieldType _field_type, - bool _is_packed> - inline typename _proto_TypeTraits::Singular::MutableType - UnsafeArenaReleaseExtension( - const ::PROTOBUF_NAMESPACE_ID::internal::ExtensionIdentifier< - FieldOptions, _proto_TypeTraits, _field_type, _is_packed>& id) { - - return _proto_TypeTraits::UnsafeArenaRelease(id.number(), _field_type, - &_impl_._extensions_); - } - - template <typename _proto_TypeTraits, - ::PROTOBUF_NAMESPACE_ID::internal::FieldType _field_type, - bool _is_packed> - inline typename _proto_TypeTraits::Repeated::ConstType GetExtension( - const ::PROTOBUF_NAMESPACE_ID::internal::ExtensionIdentifier< - FieldOptions, _proto_TypeTraits, _field_type, _is_packed>& id, - int index) const { - - return _proto_TypeTraits::Get(id.number(), _impl_._extensions_, index); - } - - template <typename _proto_TypeTraits, - ::PROTOBUF_NAMESPACE_ID::internal::FieldType _field_type, - bool _is_packed> - inline typename _proto_TypeTraits::Repeated::MutableType MutableExtension( - const ::PROTOBUF_NAMESPACE_ID::internal::ExtensionIdentifier< - FieldOptions, _proto_TypeTraits, _field_type, _is_packed>& id, - int index) { - - return _proto_TypeTraits::Mutable(id.number(), index, &_impl_._extensions_); - } - - template <typename _proto_TypeTraits, - ::PROTOBUF_NAMESPACE_ID::internal::FieldType _field_type, - bool _is_packed> - inline void SetExtension( - const ::PROTOBUF_NAMESPACE_ID::internal::ExtensionIdentifier< - FieldOptions, _proto_TypeTraits, _field_type, _is_packed>& id, - int index, typename _proto_TypeTraits::Repeated::ConstType value) { - _proto_TypeTraits::Set(id.number(), index, value, &_impl_._extensions_); - - } - - template <typename _proto_TypeTraits, - ::PROTOBUF_NAMESPACE_ID::internal::FieldType _field_type, - bool _is_packed> - inline typename _proto_TypeTraits::Repeated::MutableType AddExtension( - const ::PROTOBUF_NAMESPACE_ID::internal::ExtensionIdentifier< - FieldOptions, _proto_TypeTraits, _field_type, _is_packed>& id) { - typename _proto_TypeTraits::Repeated::MutableType to_add = - _proto_TypeTraits::Add(id.number(), _field_type, &_impl_._extensions_); - - return to_add; - } - - template <typename _proto_TypeTraits, - ::PROTOBUF_NAMESPACE_ID::internal::FieldType _field_type, - bool _is_packed> - inline void AddExtension( - const ::PROTOBUF_NAMESPACE_ID::internal::ExtensionIdentifier< - FieldOptions, _proto_TypeTraits, _field_type, _is_packed>& id, - typename _proto_TypeTraits::Repeated::ConstType value) { - _proto_TypeTraits::Add(id.number(), _field_type, _is_packed, value, - &_impl_._extensions_); - - } - - template <typename _proto_TypeTraits, - ::PROTOBUF_NAMESPACE_ID::internal::FieldType _field_type, - bool _is_packed> - inline const typename _proto_TypeTraits::Repeated::RepeatedFieldType& - GetRepeatedExtension( - const ::PROTOBUF_NAMESPACE_ID::internal::ExtensionIdentifier< - FieldOptions, _proto_TypeTraits, _field_type, _is_packed>& id) const { - - return _proto_TypeTraits::GetRepeated(id.number(), _impl_._extensions_); - } - - template <typename _proto_TypeTraits, - ::PROTOBUF_NAMESPACE_ID::internal::FieldType _field_type, - bool _is_packed> - inline typename _proto_TypeTraits::Repeated::RepeatedFieldType* - MutableRepeatedExtension( - const ::PROTOBUF_NAMESPACE_ID::internal::ExtensionIdentifier< - FieldOptions, _proto_TypeTraits, _field_type, _is_packed>& id) { - - return _proto_TypeTraits::MutableRepeated(id.number(), _field_type, - _is_packed, &_impl_._extensions_); - } - - // @@protoc_insertion_point(class_scope:google.protobuf.FieldOptions) - private: - class _Internal; - - template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper; - typedef void InternalArenaConstructable_; - typedef void DestructorSkippable_; - struct Impl_ { - ::PROTOBUF_NAMESPACE_ID::internal::ExtensionSet _extensions_; - - ::PROTOBUF_NAMESPACE_ID::internal::HasBits<1> _has_bits_; - mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_; - ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::UninterpretedOption > uninterpreted_option_; - int ctype_; - int jstype_; - bool packed_; - bool lazy_; - bool unverified_lazy_; - bool deprecated_; - bool weak_; - }; - union { Impl_ _impl_; }; - friend struct ::TableStruct_google_2fprotobuf_2fdescriptor_2eproto; -}; -// ------------------------------------------------------------------- - -class PROTOBUF_EXPORT OneofOptions final : - public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:google.protobuf.OneofOptions) */ { - public: - inline OneofOptions() : OneofOptions(nullptr) {} - ~OneofOptions() override; - explicit PROTOBUF_CONSTEXPR OneofOptions(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized); - - OneofOptions(const OneofOptions& from); - OneofOptions(OneofOptions&& from) noexcept - : OneofOptions() { - *this = ::std::move(from); - } - - inline OneofOptions& operator=(const OneofOptions& from) { - CopyFrom(from); - return *this; - } - inline OneofOptions& operator=(OneofOptions&& from) noexcept { - if (this == &from) return *this; - if (GetOwningArena() == from.GetOwningArena() - #ifdef PROTOBUF_FORCE_COPY_IN_MOVE - && GetOwningArena() != nullptr - #endif // !PROTOBUF_FORCE_COPY_IN_MOVE - ) { - InternalSwap(&from); - } else { - CopyFrom(from); - } - return *this; - } - - inline const ::PROTOBUF_NAMESPACE_ID::UnknownFieldSet& unknown_fields() const { - return _internal_metadata_.unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(::PROTOBUF_NAMESPACE_ID::UnknownFieldSet::default_instance); - } - inline ::PROTOBUF_NAMESPACE_ID::UnknownFieldSet* mutable_unknown_fields() { - return _internal_metadata_.mutable_unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(); - } - - static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() { - return GetDescriptor(); - } - static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() { - return default_instance().GetMetadata().descriptor; - } - static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() { - return default_instance().GetMetadata().reflection; - } - static const OneofOptions& default_instance() { - return *internal_default_instance(); - } - static inline const OneofOptions* internal_default_instance() { - return reinterpret_cast<const OneofOptions*>( - &_OneofOptions_default_instance_); - } - static constexpr int kIndexInFileMessages = - 16; - - friend void swap(OneofOptions& a, OneofOptions& b) { - a.Swap(&b); - } - inline void Swap(OneofOptions* other) { - if (other == this) return; - #ifdef PROTOBUF_FORCE_COPY_IN_SWAP - if (GetOwningArena() != nullptr && - GetOwningArena() == other->GetOwningArena()) { - #else // PROTOBUF_FORCE_COPY_IN_SWAP - if (GetOwningArena() == other->GetOwningArena()) { - #endif // !PROTOBUF_FORCE_COPY_IN_SWAP - InternalSwap(other); - } else { - ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other); - } - } - void UnsafeArenaSwap(OneofOptions* other) { - if (other == this) return; - GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena()); - InternalSwap(other); - } - - // implements Message ---------------------------------------------- - - OneofOptions* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final { - return CreateMaybeMessage<OneofOptions>(arena); - } - using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom; - void CopyFrom(const OneofOptions& from); - using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom; - void MergeFrom( const OneofOptions& from) { - OneofOptions::MergeImpl(*this, from); - } - private: - static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message& to_msg, const ::PROTOBUF_NAMESPACE_ID::Message& from_msg); - public: - PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final; - bool IsInitialized() const final; - - size_t ByteSizeLong() const final; - const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final; - uint8_t* _InternalSerialize( - uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final; - int GetCachedSize() const final { return _impl_._cached_size_.Get(); } - - private: - void SharedCtor(::PROTOBUF_NAMESPACE_ID::Arena* arena, bool is_message_owned); - void SharedDtor(); - void SetCachedSize(int size) const final; - void InternalSwap(OneofOptions* other); - - private: - friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata; - static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() { - return "google.protobuf.OneofOptions"; - } - protected: - explicit OneofOptions(::PROTOBUF_NAMESPACE_ID::Arena* arena, - bool is_message_owned = false); - public: - - static const ClassData _class_data_; - const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final; - - ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final; - - // nested types ---------------------------------------------------- - - // accessors ------------------------------------------------------- - - enum : int { - kUninterpretedOptionFieldNumber = 999, - }; - // repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999; - int uninterpreted_option_size() const; - private: - int _internal_uninterpreted_option_size() const; - public: - void clear_uninterpreted_option(); - ::PROTOBUF_NAMESPACE_ID::UninterpretedOption* mutable_uninterpreted_option(int index); - ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::UninterpretedOption >* - mutable_uninterpreted_option(); - private: - const ::PROTOBUF_NAMESPACE_ID::UninterpretedOption& _internal_uninterpreted_option(int index) const; - ::PROTOBUF_NAMESPACE_ID::UninterpretedOption* _internal_add_uninterpreted_option(); - public: - const ::PROTOBUF_NAMESPACE_ID::UninterpretedOption& uninterpreted_option(int index) const; - ::PROTOBUF_NAMESPACE_ID::UninterpretedOption* add_uninterpreted_option(); - const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::UninterpretedOption >& - uninterpreted_option() const; - - - template <typename _proto_TypeTraits, - ::PROTOBUF_NAMESPACE_ID::internal::FieldType _field_type, - bool _is_packed> - inline bool HasExtension( - const ::PROTOBUF_NAMESPACE_ID::internal::ExtensionIdentifier< - OneofOptions, _proto_TypeTraits, _field_type, _is_packed>& id) const { - - return _impl_._extensions_.Has(id.number()); - } - - template <typename _proto_TypeTraits, - ::PROTOBUF_NAMESPACE_ID::internal::FieldType _field_type, - bool _is_packed> - inline void ClearExtension( - const ::PROTOBUF_NAMESPACE_ID::internal::ExtensionIdentifier< - OneofOptions, _proto_TypeTraits, _field_type, _is_packed>& id) { - _impl_._extensions_.ClearExtension(id.number()); - - } - - template <typename _proto_TypeTraits, - ::PROTOBUF_NAMESPACE_ID::internal::FieldType _field_type, - bool _is_packed> - inline int ExtensionSize( - const ::PROTOBUF_NAMESPACE_ID::internal::ExtensionIdentifier< - OneofOptions, _proto_TypeTraits, _field_type, _is_packed>& id) const { - - return _impl_._extensions_.ExtensionSize(id.number()); - } - - template <typename _proto_TypeTraits, - ::PROTOBUF_NAMESPACE_ID::internal::FieldType _field_type, - bool _is_packed> - inline typename _proto_TypeTraits::Singular::ConstType GetExtension( - const ::PROTOBUF_NAMESPACE_ID::internal::ExtensionIdentifier< - OneofOptions, _proto_TypeTraits, _field_type, _is_packed>& id) const { - - return _proto_TypeTraits::Get(id.number(), _impl_._extensions_, - id.default_value()); - } - - template <typename _proto_TypeTraits, - ::PROTOBUF_NAMESPACE_ID::internal::FieldType _field_type, - bool _is_packed> - inline typename _proto_TypeTraits::Singular::MutableType MutableExtension( - const ::PROTOBUF_NAMESPACE_ID::internal::ExtensionIdentifier< - OneofOptions, _proto_TypeTraits, _field_type, _is_packed>& id) { - - return _proto_TypeTraits::Mutable(id.number(), _field_type, - &_impl_._extensions_); - } - - template <typename _proto_TypeTraits, - ::PROTOBUF_NAMESPACE_ID::internal::FieldType _field_type, - bool _is_packed> - inline void SetExtension( - const ::PROTOBUF_NAMESPACE_ID::internal::ExtensionIdentifier< - OneofOptions, _proto_TypeTraits, _field_type, _is_packed>& id, - typename _proto_TypeTraits::Singular::ConstType value) { - _proto_TypeTraits::Set(id.number(), _field_type, value, &_impl_._extensions_); - - } - - template <typename _proto_TypeTraits, - ::PROTOBUF_NAMESPACE_ID::internal::FieldType _field_type, - bool _is_packed> - inline void SetAllocatedExtension( - const ::PROTOBUF_NAMESPACE_ID::internal::ExtensionIdentifier< - OneofOptions, _proto_TypeTraits, _field_type, _is_packed>& id, - typename _proto_TypeTraits::Singular::MutableType value) { - _proto_TypeTraits::SetAllocated(id.number(), _field_type, value, - &_impl_._extensions_); - - } - template <typename _proto_TypeTraits, - ::PROTOBUF_NAMESPACE_ID::internal::FieldType _field_type, - bool _is_packed> - inline void UnsafeArenaSetAllocatedExtension( - const ::PROTOBUF_NAMESPACE_ID::internal::ExtensionIdentifier< - OneofOptions, _proto_TypeTraits, _field_type, _is_packed>& id, - typename _proto_TypeTraits::Singular::MutableType value) { - _proto_TypeTraits::UnsafeArenaSetAllocated(id.number(), _field_type, - value, &_impl_._extensions_); - - } - template <typename _proto_TypeTraits, - ::PROTOBUF_NAMESPACE_ID::internal::FieldType _field_type, - bool _is_packed> - PROTOBUF_NODISCARD inline - typename _proto_TypeTraits::Singular::MutableType - ReleaseExtension( - const ::PROTOBUF_NAMESPACE_ID::internal::ExtensionIdentifier< - OneofOptions, _proto_TypeTraits, _field_type, _is_packed>& id) { - - return _proto_TypeTraits::Release(id.number(), _field_type, - &_impl_._extensions_); - } - template <typename _proto_TypeTraits, - ::PROTOBUF_NAMESPACE_ID::internal::FieldType _field_type, - bool _is_packed> - inline typename _proto_TypeTraits::Singular::MutableType - UnsafeArenaReleaseExtension( - const ::PROTOBUF_NAMESPACE_ID::internal::ExtensionIdentifier< - OneofOptions, _proto_TypeTraits, _field_type, _is_packed>& id) { - - return _proto_TypeTraits::UnsafeArenaRelease(id.number(), _field_type, - &_impl_._extensions_); - } - - template <typename _proto_TypeTraits, - ::PROTOBUF_NAMESPACE_ID::internal::FieldType _field_type, - bool _is_packed> - inline typename _proto_TypeTraits::Repeated::ConstType GetExtension( - const ::PROTOBUF_NAMESPACE_ID::internal::ExtensionIdentifier< - OneofOptions, _proto_TypeTraits, _field_type, _is_packed>& id, - int index) const { - - return _proto_TypeTraits::Get(id.number(), _impl_._extensions_, index); - } - - template <typename _proto_TypeTraits, - ::PROTOBUF_NAMESPACE_ID::internal::FieldType _field_type, - bool _is_packed> - inline typename _proto_TypeTraits::Repeated::MutableType MutableExtension( - const ::PROTOBUF_NAMESPACE_ID::internal::ExtensionIdentifier< - OneofOptions, _proto_TypeTraits, _field_type, _is_packed>& id, - int index) { - - return _proto_TypeTraits::Mutable(id.number(), index, &_impl_._extensions_); - } - - template <typename _proto_TypeTraits, - ::PROTOBUF_NAMESPACE_ID::internal::FieldType _field_type, - bool _is_packed> - inline void SetExtension( - const ::PROTOBUF_NAMESPACE_ID::internal::ExtensionIdentifier< - OneofOptions, _proto_TypeTraits, _field_type, _is_packed>& id, - int index, typename _proto_TypeTraits::Repeated::ConstType value) { - _proto_TypeTraits::Set(id.number(), index, value, &_impl_._extensions_); - - } - - template <typename _proto_TypeTraits, - ::PROTOBUF_NAMESPACE_ID::internal::FieldType _field_type, - bool _is_packed> - inline typename _proto_TypeTraits::Repeated::MutableType AddExtension( - const ::PROTOBUF_NAMESPACE_ID::internal::ExtensionIdentifier< - OneofOptions, _proto_TypeTraits, _field_type, _is_packed>& id) { - typename _proto_TypeTraits::Repeated::MutableType to_add = - _proto_TypeTraits::Add(id.number(), _field_type, &_impl_._extensions_); - - return to_add; - } - - template <typename _proto_TypeTraits, - ::PROTOBUF_NAMESPACE_ID::internal::FieldType _field_type, - bool _is_packed> - inline void AddExtension( - const ::PROTOBUF_NAMESPACE_ID::internal::ExtensionIdentifier< - OneofOptions, _proto_TypeTraits, _field_type, _is_packed>& id, - typename _proto_TypeTraits::Repeated::ConstType value) { - _proto_TypeTraits::Add(id.number(), _field_type, _is_packed, value, - &_impl_._extensions_); - - } - - template <typename _proto_TypeTraits, - ::PROTOBUF_NAMESPACE_ID::internal::FieldType _field_type, - bool _is_packed> - inline const typename _proto_TypeTraits::Repeated::RepeatedFieldType& - GetRepeatedExtension( - const ::PROTOBUF_NAMESPACE_ID::internal::ExtensionIdentifier< - OneofOptions, _proto_TypeTraits, _field_type, _is_packed>& id) const { - - return _proto_TypeTraits::GetRepeated(id.number(), _impl_._extensions_); - } - - template <typename _proto_TypeTraits, - ::PROTOBUF_NAMESPACE_ID::internal::FieldType _field_type, - bool _is_packed> - inline typename _proto_TypeTraits::Repeated::RepeatedFieldType* - MutableRepeatedExtension( - const ::PROTOBUF_NAMESPACE_ID::internal::ExtensionIdentifier< - OneofOptions, _proto_TypeTraits, _field_type, _is_packed>& id) { - - return _proto_TypeTraits::MutableRepeated(id.number(), _field_type, - _is_packed, &_impl_._extensions_); - } - - // @@protoc_insertion_point(class_scope:google.protobuf.OneofOptions) - private: - class _Internal; - - template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper; - typedef void InternalArenaConstructable_; - typedef void DestructorSkippable_; - struct Impl_ { - ::PROTOBUF_NAMESPACE_ID::internal::ExtensionSet _extensions_; - - ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::UninterpretedOption > uninterpreted_option_; - mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_; - }; - union { Impl_ _impl_; }; - friend struct ::TableStruct_google_2fprotobuf_2fdescriptor_2eproto; -}; -// ------------------------------------------------------------------- - -class PROTOBUF_EXPORT EnumOptions final : - public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:google.protobuf.EnumOptions) */ { - public: - inline EnumOptions() : EnumOptions(nullptr) {} - ~EnumOptions() override; - explicit PROTOBUF_CONSTEXPR EnumOptions(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized); - - EnumOptions(const EnumOptions& from); - EnumOptions(EnumOptions&& from) noexcept - : EnumOptions() { - *this = ::std::move(from); - } - - inline EnumOptions& operator=(const EnumOptions& from) { - CopyFrom(from); - return *this; - } - inline EnumOptions& operator=(EnumOptions&& from) noexcept { - if (this == &from) return *this; - if (GetOwningArena() == from.GetOwningArena() - #ifdef PROTOBUF_FORCE_COPY_IN_MOVE - && GetOwningArena() != nullptr - #endif // !PROTOBUF_FORCE_COPY_IN_MOVE - ) { - InternalSwap(&from); - } else { - CopyFrom(from); - } - return *this; - } - - inline const ::PROTOBUF_NAMESPACE_ID::UnknownFieldSet& unknown_fields() const { - return _internal_metadata_.unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(::PROTOBUF_NAMESPACE_ID::UnknownFieldSet::default_instance); - } - inline ::PROTOBUF_NAMESPACE_ID::UnknownFieldSet* mutable_unknown_fields() { - return _internal_metadata_.mutable_unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(); - } - - static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() { - return GetDescriptor(); - } - static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() { - return default_instance().GetMetadata().descriptor; - } - static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() { - return default_instance().GetMetadata().reflection; - } - static const EnumOptions& default_instance() { - return *internal_default_instance(); - } - static inline const EnumOptions* internal_default_instance() { - return reinterpret_cast<const EnumOptions*>( - &_EnumOptions_default_instance_); - } - static constexpr int kIndexInFileMessages = - 17; - - friend void swap(EnumOptions& a, EnumOptions& b) { - a.Swap(&b); - } - inline void Swap(EnumOptions* other) { - if (other == this) return; - #ifdef PROTOBUF_FORCE_COPY_IN_SWAP - if (GetOwningArena() != nullptr && - GetOwningArena() == other->GetOwningArena()) { - #else // PROTOBUF_FORCE_COPY_IN_SWAP - if (GetOwningArena() == other->GetOwningArena()) { - #endif // !PROTOBUF_FORCE_COPY_IN_SWAP - InternalSwap(other); - } else { - ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other); - } - } - void UnsafeArenaSwap(EnumOptions* other) { - if (other == this) return; - GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena()); - InternalSwap(other); - } - - // implements Message ---------------------------------------------- - - EnumOptions* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final { - return CreateMaybeMessage<EnumOptions>(arena); - } - using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom; - void CopyFrom(const EnumOptions& from); - using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom; - void MergeFrom( const EnumOptions& from) { - EnumOptions::MergeImpl(*this, from); - } - private: - static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message& to_msg, const ::PROTOBUF_NAMESPACE_ID::Message& from_msg); - public: - PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final; - bool IsInitialized() const final; - - size_t ByteSizeLong() const final; - const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final; - uint8_t* _InternalSerialize( - uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final; - int GetCachedSize() const final { return _impl_._cached_size_.Get(); } - - private: - void SharedCtor(::PROTOBUF_NAMESPACE_ID::Arena* arena, bool is_message_owned); - void SharedDtor(); - void SetCachedSize(int size) const final; - void InternalSwap(EnumOptions* other); - - private: - friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata; - static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() { - return "google.protobuf.EnumOptions"; - } - protected: - explicit EnumOptions(::PROTOBUF_NAMESPACE_ID::Arena* arena, - bool is_message_owned = false); - public: - - static const ClassData _class_data_; - const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final; - - ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final; - - // nested types ---------------------------------------------------- - - // accessors ------------------------------------------------------- - - enum : int { - kUninterpretedOptionFieldNumber = 999, - kAllowAliasFieldNumber = 2, - kDeprecatedFieldNumber = 3, - }; - // repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999; - int uninterpreted_option_size() const; - private: - int _internal_uninterpreted_option_size() const; - public: - void clear_uninterpreted_option(); - ::PROTOBUF_NAMESPACE_ID::UninterpretedOption* mutable_uninterpreted_option(int index); - ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::UninterpretedOption >* - mutable_uninterpreted_option(); - private: - const ::PROTOBUF_NAMESPACE_ID::UninterpretedOption& _internal_uninterpreted_option(int index) const; - ::PROTOBUF_NAMESPACE_ID::UninterpretedOption* _internal_add_uninterpreted_option(); - public: - const ::PROTOBUF_NAMESPACE_ID::UninterpretedOption& uninterpreted_option(int index) const; - ::PROTOBUF_NAMESPACE_ID::UninterpretedOption* add_uninterpreted_option(); - const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::UninterpretedOption >& - uninterpreted_option() const; - - // optional bool allow_alias = 2; - bool has_allow_alias() const; - private: - bool _internal_has_allow_alias() const; - public: - void clear_allow_alias(); - bool allow_alias() const; - void set_allow_alias(bool value); - private: - bool _internal_allow_alias() const; - void _internal_set_allow_alias(bool value); - public: - - // optional bool deprecated = 3 [default = false]; - bool has_deprecated() const; - private: - bool _internal_has_deprecated() const; - public: - void clear_deprecated(); - bool deprecated() const; - void set_deprecated(bool value); - private: - bool _internal_deprecated() const; - void _internal_set_deprecated(bool value); - public: - - - template <typename _proto_TypeTraits, - ::PROTOBUF_NAMESPACE_ID::internal::FieldType _field_type, - bool _is_packed> - inline bool HasExtension( - const ::PROTOBUF_NAMESPACE_ID::internal::ExtensionIdentifier< - EnumOptions, _proto_TypeTraits, _field_type, _is_packed>& id) const { - - return _impl_._extensions_.Has(id.number()); - } - - template <typename _proto_TypeTraits, - ::PROTOBUF_NAMESPACE_ID::internal::FieldType _field_type, - bool _is_packed> - inline void ClearExtension( - const ::PROTOBUF_NAMESPACE_ID::internal::ExtensionIdentifier< - EnumOptions, _proto_TypeTraits, _field_type, _is_packed>& id) { - _impl_._extensions_.ClearExtension(id.number()); - - } - - template <typename _proto_TypeTraits, - ::PROTOBUF_NAMESPACE_ID::internal::FieldType _field_type, - bool _is_packed> - inline int ExtensionSize( - const ::PROTOBUF_NAMESPACE_ID::internal::ExtensionIdentifier< - EnumOptions, _proto_TypeTraits, _field_type, _is_packed>& id) const { - - return _impl_._extensions_.ExtensionSize(id.number()); - } - - template <typename _proto_TypeTraits, - ::PROTOBUF_NAMESPACE_ID::internal::FieldType _field_type, - bool _is_packed> - inline typename _proto_TypeTraits::Singular::ConstType GetExtension( - const ::PROTOBUF_NAMESPACE_ID::internal::ExtensionIdentifier< - EnumOptions, _proto_TypeTraits, _field_type, _is_packed>& id) const { - - return _proto_TypeTraits::Get(id.number(), _impl_._extensions_, - id.default_value()); - } - - template <typename _proto_TypeTraits, - ::PROTOBUF_NAMESPACE_ID::internal::FieldType _field_type, - bool _is_packed> - inline typename _proto_TypeTraits::Singular::MutableType MutableExtension( - const ::PROTOBUF_NAMESPACE_ID::internal::ExtensionIdentifier< - EnumOptions, _proto_TypeTraits, _field_type, _is_packed>& id) { - - return _proto_TypeTraits::Mutable(id.number(), _field_type, - &_impl_._extensions_); - } - - template <typename _proto_TypeTraits, - ::PROTOBUF_NAMESPACE_ID::internal::FieldType _field_type, - bool _is_packed> - inline void SetExtension( - const ::PROTOBUF_NAMESPACE_ID::internal::ExtensionIdentifier< - EnumOptions, _proto_TypeTraits, _field_type, _is_packed>& id, - typename _proto_TypeTraits::Singular::ConstType value) { - _proto_TypeTraits::Set(id.number(), _field_type, value, &_impl_._extensions_); - - } - - template <typename _proto_TypeTraits, - ::PROTOBUF_NAMESPACE_ID::internal::FieldType _field_type, - bool _is_packed> - inline void SetAllocatedExtension( - const ::PROTOBUF_NAMESPACE_ID::internal::ExtensionIdentifier< - EnumOptions, _proto_TypeTraits, _field_type, _is_packed>& id, - typename _proto_TypeTraits::Singular::MutableType value) { - _proto_TypeTraits::SetAllocated(id.number(), _field_type, value, - &_impl_._extensions_); - - } - template <typename _proto_TypeTraits, - ::PROTOBUF_NAMESPACE_ID::internal::FieldType _field_type, - bool _is_packed> - inline void UnsafeArenaSetAllocatedExtension( - const ::PROTOBUF_NAMESPACE_ID::internal::ExtensionIdentifier< - EnumOptions, _proto_TypeTraits, _field_type, _is_packed>& id, - typename _proto_TypeTraits::Singular::MutableType value) { - _proto_TypeTraits::UnsafeArenaSetAllocated(id.number(), _field_type, - value, &_impl_._extensions_); - - } - template <typename _proto_TypeTraits, - ::PROTOBUF_NAMESPACE_ID::internal::FieldType _field_type, - bool _is_packed> - PROTOBUF_NODISCARD inline - typename _proto_TypeTraits::Singular::MutableType - ReleaseExtension( - const ::PROTOBUF_NAMESPACE_ID::internal::ExtensionIdentifier< - EnumOptions, _proto_TypeTraits, _field_type, _is_packed>& id) { - - return _proto_TypeTraits::Release(id.number(), _field_type, - &_impl_._extensions_); - } - template <typename _proto_TypeTraits, - ::PROTOBUF_NAMESPACE_ID::internal::FieldType _field_type, - bool _is_packed> - inline typename _proto_TypeTraits::Singular::MutableType - UnsafeArenaReleaseExtension( - const ::PROTOBUF_NAMESPACE_ID::internal::ExtensionIdentifier< - EnumOptions, _proto_TypeTraits, _field_type, _is_packed>& id) { - - return _proto_TypeTraits::UnsafeArenaRelease(id.number(), _field_type, - &_impl_._extensions_); - } - - template <typename _proto_TypeTraits, - ::PROTOBUF_NAMESPACE_ID::internal::FieldType _field_type, - bool _is_packed> - inline typename _proto_TypeTraits::Repeated::ConstType GetExtension( - const ::PROTOBUF_NAMESPACE_ID::internal::ExtensionIdentifier< - EnumOptions, _proto_TypeTraits, _field_type, _is_packed>& id, - int index) const { - - return _proto_TypeTraits::Get(id.number(), _impl_._extensions_, index); - } - - template <typename _proto_TypeTraits, - ::PROTOBUF_NAMESPACE_ID::internal::FieldType _field_type, - bool _is_packed> - inline typename _proto_TypeTraits::Repeated::MutableType MutableExtension( - const ::PROTOBUF_NAMESPACE_ID::internal::ExtensionIdentifier< - EnumOptions, _proto_TypeTraits, _field_type, _is_packed>& id, - int index) { - - return _proto_TypeTraits::Mutable(id.number(), index, &_impl_._extensions_); - } - - template <typename _proto_TypeTraits, - ::PROTOBUF_NAMESPACE_ID::internal::FieldType _field_type, - bool _is_packed> - inline void SetExtension( - const ::PROTOBUF_NAMESPACE_ID::internal::ExtensionIdentifier< - EnumOptions, _proto_TypeTraits, _field_type, _is_packed>& id, - int index, typename _proto_TypeTraits::Repeated::ConstType value) { - _proto_TypeTraits::Set(id.number(), index, value, &_impl_._extensions_); - - } - - template <typename _proto_TypeTraits, - ::PROTOBUF_NAMESPACE_ID::internal::FieldType _field_type, - bool _is_packed> - inline typename _proto_TypeTraits::Repeated::MutableType AddExtension( - const ::PROTOBUF_NAMESPACE_ID::internal::ExtensionIdentifier< - EnumOptions, _proto_TypeTraits, _field_type, _is_packed>& id) { - typename _proto_TypeTraits::Repeated::MutableType to_add = - _proto_TypeTraits::Add(id.number(), _field_type, &_impl_._extensions_); - - return to_add; - } - - template <typename _proto_TypeTraits, - ::PROTOBUF_NAMESPACE_ID::internal::FieldType _field_type, - bool _is_packed> - inline void AddExtension( - const ::PROTOBUF_NAMESPACE_ID::internal::ExtensionIdentifier< - EnumOptions, _proto_TypeTraits, _field_type, _is_packed>& id, - typename _proto_TypeTraits::Repeated::ConstType value) { - _proto_TypeTraits::Add(id.number(), _field_type, _is_packed, value, - &_impl_._extensions_); - - } - - template <typename _proto_TypeTraits, - ::PROTOBUF_NAMESPACE_ID::internal::FieldType _field_type, - bool _is_packed> - inline const typename _proto_TypeTraits::Repeated::RepeatedFieldType& - GetRepeatedExtension( - const ::PROTOBUF_NAMESPACE_ID::internal::ExtensionIdentifier< - EnumOptions, _proto_TypeTraits, _field_type, _is_packed>& id) const { - - return _proto_TypeTraits::GetRepeated(id.number(), _impl_._extensions_); - } - - template <typename _proto_TypeTraits, - ::PROTOBUF_NAMESPACE_ID::internal::FieldType _field_type, - bool _is_packed> - inline typename _proto_TypeTraits::Repeated::RepeatedFieldType* - MutableRepeatedExtension( - const ::PROTOBUF_NAMESPACE_ID::internal::ExtensionIdentifier< - EnumOptions, _proto_TypeTraits, _field_type, _is_packed>& id) { - - return _proto_TypeTraits::MutableRepeated(id.number(), _field_type, - _is_packed, &_impl_._extensions_); - } - - // @@protoc_insertion_point(class_scope:google.protobuf.EnumOptions) - private: - class _Internal; - - template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper; - typedef void InternalArenaConstructable_; - typedef void DestructorSkippable_; - struct Impl_ { - ::PROTOBUF_NAMESPACE_ID::internal::ExtensionSet _extensions_; - - ::PROTOBUF_NAMESPACE_ID::internal::HasBits<1> _has_bits_; - mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_; - ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::UninterpretedOption > uninterpreted_option_; - bool allow_alias_; - bool deprecated_; - }; - union { Impl_ _impl_; }; - friend struct ::TableStruct_google_2fprotobuf_2fdescriptor_2eproto; -}; -// ------------------------------------------------------------------- - -class PROTOBUF_EXPORT EnumValueOptions final : - public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:google.protobuf.EnumValueOptions) */ { - public: - inline EnumValueOptions() : EnumValueOptions(nullptr) {} - ~EnumValueOptions() override; - explicit PROTOBUF_CONSTEXPR EnumValueOptions(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized); - - EnumValueOptions(const EnumValueOptions& from); - EnumValueOptions(EnumValueOptions&& from) noexcept - : EnumValueOptions() { - *this = ::std::move(from); - } - - inline EnumValueOptions& operator=(const EnumValueOptions& from) { - CopyFrom(from); - return *this; - } - inline EnumValueOptions& operator=(EnumValueOptions&& from) noexcept { - if (this == &from) return *this; - if (GetOwningArena() == from.GetOwningArena() - #ifdef PROTOBUF_FORCE_COPY_IN_MOVE - && GetOwningArena() != nullptr - #endif // !PROTOBUF_FORCE_COPY_IN_MOVE - ) { - InternalSwap(&from); - } else { - CopyFrom(from); - } - return *this; - } - - inline const ::PROTOBUF_NAMESPACE_ID::UnknownFieldSet& unknown_fields() const { - return _internal_metadata_.unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(::PROTOBUF_NAMESPACE_ID::UnknownFieldSet::default_instance); - } - inline ::PROTOBUF_NAMESPACE_ID::UnknownFieldSet* mutable_unknown_fields() { - return _internal_metadata_.mutable_unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(); - } - - static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() { - return GetDescriptor(); - } - static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() { - return default_instance().GetMetadata().descriptor; - } - static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() { - return default_instance().GetMetadata().reflection; - } - static const EnumValueOptions& default_instance() { - return *internal_default_instance(); - } - static inline const EnumValueOptions* internal_default_instance() { - return reinterpret_cast<const EnumValueOptions*>( - &_EnumValueOptions_default_instance_); - } - static constexpr int kIndexInFileMessages = - 18; - - friend void swap(EnumValueOptions& a, EnumValueOptions& b) { - a.Swap(&b); - } - inline void Swap(EnumValueOptions* other) { - if (other == this) return; - #ifdef PROTOBUF_FORCE_COPY_IN_SWAP - if (GetOwningArena() != nullptr && - GetOwningArena() == other->GetOwningArena()) { - #else // PROTOBUF_FORCE_COPY_IN_SWAP - if (GetOwningArena() == other->GetOwningArena()) { - #endif // !PROTOBUF_FORCE_COPY_IN_SWAP - InternalSwap(other); - } else { - ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other); - } - } - void UnsafeArenaSwap(EnumValueOptions* other) { - if (other == this) return; - GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena()); - InternalSwap(other); - } - - // implements Message ---------------------------------------------- - - EnumValueOptions* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final { - return CreateMaybeMessage<EnumValueOptions>(arena); - } - using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom; - void CopyFrom(const EnumValueOptions& from); - using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom; - void MergeFrom( const EnumValueOptions& from) { - EnumValueOptions::MergeImpl(*this, from); - } - private: - static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message& to_msg, const ::PROTOBUF_NAMESPACE_ID::Message& from_msg); - public: - PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final; - bool IsInitialized() const final; - - size_t ByteSizeLong() const final; - const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final; - uint8_t* _InternalSerialize( - uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final; - int GetCachedSize() const final { return _impl_._cached_size_.Get(); } - - private: - void SharedCtor(::PROTOBUF_NAMESPACE_ID::Arena* arena, bool is_message_owned); - void SharedDtor(); - void SetCachedSize(int size) const final; - void InternalSwap(EnumValueOptions* other); - - private: - friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata; - static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() { - return "google.protobuf.EnumValueOptions"; - } - protected: - explicit EnumValueOptions(::PROTOBUF_NAMESPACE_ID::Arena* arena, - bool is_message_owned = false); - public: - - static const ClassData _class_data_; - const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final; - - ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final; - - // nested types ---------------------------------------------------- - - // accessors ------------------------------------------------------- - - enum : int { - kUninterpretedOptionFieldNumber = 999, - kDeprecatedFieldNumber = 1, - }; - // repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999; - int uninterpreted_option_size() const; - private: - int _internal_uninterpreted_option_size() const; - public: - void clear_uninterpreted_option(); - ::PROTOBUF_NAMESPACE_ID::UninterpretedOption* mutable_uninterpreted_option(int index); - ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::UninterpretedOption >* - mutable_uninterpreted_option(); - private: - const ::PROTOBUF_NAMESPACE_ID::UninterpretedOption& _internal_uninterpreted_option(int index) const; - ::PROTOBUF_NAMESPACE_ID::UninterpretedOption* _internal_add_uninterpreted_option(); - public: - const ::PROTOBUF_NAMESPACE_ID::UninterpretedOption& uninterpreted_option(int index) const; - ::PROTOBUF_NAMESPACE_ID::UninterpretedOption* add_uninterpreted_option(); - const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::UninterpretedOption >& - uninterpreted_option() const; - - // optional bool deprecated = 1 [default = false]; - bool has_deprecated() const; - private: - bool _internal_has_deprecated() const; - public: - void clear_deprecated(); - bool deprecated() const; - void set_deprecated(bool value); - private: - bool _internal_deprecated() const; - void _internal_set_deprecated(bool value); - public: - - - template <typename _proto_TypeTraits, - ::PROTOBUF_NAMESPACE_ID::internal::FieldType _field_type, - bool _is_packed> - inline bool HasExtension( - const ::PROTOBUF_NAMESPACE_ID::internal::ExtensionIdentifier< - EnumValueOptions, _proto_TypeTraits, _field_type, _is_packed>& id) const { - - return _impl_._extensions_.Has(id.number()); - } - - template <typename _proto_TypeTraits, - ::PROTOBUF_NAMESPACE_ID::internal::FieldType _field_type, - bool _is_packed> - inline void ClearExtension( - const ::PROTOBUF_NAMESPACE_ID::internal::ExtensionIdentifier< - EnumValueOptions, _proto_TypeTraits, _field_type, _is_packed>& id) { - _impl_._extensions_.ClearExtension(id.number()); - - } - - template <typename _proto_TypeTraits, - ::PROTOBUF_NAMESPACE_ID::internal::FieldType _field_type, - bool _is_packed> - inline int ExtensionSize( - const ::PROTOBUF_NAMESPACE_ID::internal::ExtensionIdentifier< - EnumValueOptions, _proto_TypeTraits, _field_type, _is_packed>& id) const { - - return _impl_._extensions_.ExtensionSize(id.number()); - } - - template <typename _proto_TypeTraits, - ::PROTOBUF_NAMESPACE_ID::internal::FieldType _field_type, - bool _is_packed> - inline typename _proto_TypeTraits::Singular::ConstType GetExtension( - const ::PROTOBUF_NAMESPACE_ID::internal::ExtensionIdentifier< - EnumValueOptions, _proto_TypeTraits, _field_type, _is_packed>& id) const { - - return _proto_TypeTraits::Get(id.number(), _impl_._extensions_, - id.default_value()); - } - - template <typename _proto_TypeTraits, - ::PROTOBUF_NAMESPACE_ID::internal::FieldType _field_type, - bool _is_packed> - inline typename _proto_TypeTraits::Singular::MutableType MutableExtension( - const ::PROTOBUF_NAMESPACE_ID::internal::ExtensionIdentifier< - EnumValueOptions, _proto_TypeTraits, _field_type, _is_packed>& id) { - - return _proto_TypeTraits::Mutable(id.number(), _field_type, - &_impl_._extensions_); - } - - template <typename _proto_TypeTraits, - ::PROTOBUF_NAMESPACE_ID::internal::FieldType _field_type, - bool _is_packed> - inline void SetExtension( - const ::PROTOBUF_NAMESPACE_ID::internal::ExtensionIdentifier< - EnumValueOptions, _proto_TypeTraits, _field_type, _is_packed>& id, - typename _proto_TypeTraits::Singular::ConstType value) { - _proto_TypeTraits::Set(id.number(), _field_type, value, &_impl_._extensions_); - - } - - template <typename _proto_TypeTraits, - ::PROTOBUF_NAMESPACE_ID::internal::FieldType _field_type, - bool _is_packed> - inline void SetAllocatedExtension( - const ::PROTOBUF_NAMESPACE_ID::internal::ExtensionIdentifier< - EnumValueOptions, _proto_TypeTraits, _field_type, _is_packed>& id, - typename _proto_TypeTraits::Singular::MutableType value) { - _proto_TypeTraits::SetAllocated(id.number(), _field_type, value, - &_impl_._extensions_); - - } - template <typename _proto_TypeTraits, - ::PROTOBUF_NAMESPACE_ID::internal::FieldType _field_type, - bool _is_packed> - inline void UnsafeArenaSetAllocatedExtension( - const ::PROTOBUF_NAMESPACE_ID::internal::ExtensionIdentifier< - EnumValueOptions, _proto_TypeTraits, _field_type, _is_packed>& id, - typename _proto_TypeTraits::Singular::MutableType value) { - _proto_TypeTraits::UnsafeArenaSetAllocated(id.number(), _field_type, - value, &_impl_._extensions_); - - } - template <typename _proto_TypeTraits, - ::PROTOBUF_NAMESPACE_ID::internal::FieldType _field_type, - bool _is_packed> - PROTOBUF_NODISCARD inline - typename _proto_TypeTraits::Singular::MutableType - ReleaseExtension( - const ::PROTOBUF_NAMESPACE_ID::internal::ExtensionIdentifier< - EnumValueOptions, _proto_TypeTraits, _field_type, _is_packed>& id) { - - return _proto_TypeTraits::Release(id.number(), _field_type, - &_impl_._extensions_); - } - template <typename _proto_TypeTraits, - ::PROTOBUF_NAMESPACE_ID::internal::FieldType _field_type, - bool _is_packed> - inline typename _proto_TypeTraits::Singular::MutableType - UnsafeArenaReleaseExtension( - const ::PROTOBUF_NAMESPACE_ID::internal::ExtensionIdentifier< - EnumValueOptions, _proto_TypeTraits, _field_type, _is_packed>& id) { - - return _proto_TypeTraits::UnsafeArenaRelease(id.number(), _field_type, - &_impl_._extensions_); - } - - template <typename _proto_TypeTraits, - ::PROTOBUF_NAMESPACE_ID::internal::FieldType _field_type, - bool _is_packed> - inline typename _proto_TypeTraits::Repeated::ConstType GetExtension( - const ::PROTOBUF_NAMESPACE_ID::internal::ExtensionIdentifier< - EnumValueOptions, _proto_TypeTraits, _field_type, _is_packed>& id, - int index) const { - - return _proto_TypeTraits::Get(id.number(), _impl_._extensions_, index); - } - - template <typename _proto_TypeTraits, - ::PROTOBUF_NAMESPACE_ID::internal::FieldType _field_type, - bool _is_packed> - inline typename _proto_TypeTraits::Repeated::MutableType MutableExtension( - const ::PROTOBUF_NAMESPACE_ID::internal::ExtensionIdentifier< - EnumValueOptions, _proto_TypeTraits, _field_type, _is_packed>& id, - int index) { - - return _proto_TypeTraits::Mutable(id.number(), index, &_impl_._extensions_); - } - - template <typename _proto_TypeTraits, - ::PROTOBUF_NAMESPACE_ID::internal::FieldType _field_type, - bool _is_packed> - inline void SetExtension( - const ::PROTOBUF_NAMESPACE_ID::internal::ExtensionIdentifier< - EnumValueOptions, _proto_TypeTraits, _field_type, _is_packed>& id, - int index, typename _proto_TypeTraits::Repeated::ConstType value) { - _proto_TypeTraits::Set(id.number(), index, value, &_impl_._extensions_); - - } - - template <typename _proto_TypeTraits, - ::PROTOBUF_NAMESPACE_ID::internal::FieldType _field_type, - bool _is_packed> - inline typename _proto_TypeTraits::Repeated::MutableType AddExtension( - const ::PROTOBUF_NAMESPACE_ID::internal::ExtensionIdentifier< - EnumValueOptions, _proto_TypeTraits, _field_type, _is_packed>& id) { - typename _proto_TypeTraits::Repeated::MutableType to_add = - _proto_TypeTraits::Add(id.number(), _field_type, &_impl_._extensions_); - - return to_add; - } - - template <typename _proto_TypeTraits, - ::PROTOBUF_NAMESPACE_ID::internal::FieldType _field_type, - bool _is_packed> - inline void AddExtension( - const ::PROTOBUF_NAMESPACE_ID::internal::ExtensionIdentifier< - EnumValueOptions, _proto_TypeTraits, _field_type, _is_packed>& id, - typename _proto_TypeTraits::Repeated::ConstType value) { - _proto_TypeTraits::Add(id.number(), _field_type, _is_packed, value, - &_impl_._extensions_); - - } - - template <typename _proto_TypeTraits, - ::PROTOBUF_NAMESPACE_ID::internal::FieldType _field_type, - bool _is_packed> - inline const typename _proto_TypeTraits::Repeated::RepeatedFieldType& - GetRepeatedExtension( - const ::PROTOBUF_NAMESPACE_ID::internal::ExtensionIdentifier< - EnumValueOptions, _proto_TypeTraits, _field_type, _is_packed>& id) const { - - return _proto_TypeTraits::GetRepeated(id.number(), _impl_._extensions_); - } - - template <typename _proto_TypeTraits, - ::PROTOBUF_NAMESPACE_ID::internal::FieldType _field_type, - bool _is_packed> - inline typename _proto_TypeTraits::Repeated::RepeatedFieldType* - MutableRepeatedExtension( - const ::PROTOBUF_NAMESPACE_ID::internal::ExtensionIdentifier< - EnumValueOptions, _proto_TypeTraits, _field_type, _is_packed>& id) { - - return _proto_TypeTraits::MutableRepeated(id.number(), _field_type, - _is_packed, &_impl_._extensions_); - } - - // @@protoc_insertion_point(class_scope:google.protobuf.EnumValueOptions) - private: - class _Internal; - - template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper; - typedef void InternalArenaConstructable_; - typedef void DestructorSkippable_; - struct Impl_ { - ::PROTOBUF_NAMESPACE_ID::internal::ExtensionSet _extensions_; - - ::PROTOBUF_NAMESPACE_ID::internal::HasBits<1> _has_bits_; - mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_; - ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::UninterpretedOption > uninterpreted_option_; - bool deprecated_; - }; - union { Impl_ _impl_; }; - friend struct ::TableStruct_google_2fprotobuf_2fdescriptor_2eproto; -}; -// ------------------------------------------------------------------- - -class PROTOBUF_EXPORT ServiceOptions final : - public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:google.protobuf.ServiceOptions) */ { - public: - inline ServiceOptions() : ServiceOptions(nullptr) {} - ~ServiceOptions() override; - explicit PROTOBUF_CONSTEXPR ServiceOptions(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized); - - ServiceOptions(const ServiceOptions& from); - ServiceOptions(ServiceOptions&& from) noexcept - : ServiceOptions() { - *this = ::std::move(from); - } - - inline ServiceOptions& operator=(const ServiceOptions& from) { - CopyFrom(from); - return *this; - } - inline ServiceOptions& operator=(ServiceOptions&& from) noexcept { - if (this == &from) return *this; - if (GetOwningArena() == from.GetOwningArena() - #ifdef PROTOBUF_FORCE_COPY_IN_MOVE - && GetOwningArena() != nullptr - #endif // !PROTOBUF_FORCE_COPY_IN_MOVE - ) { - InternalSwap(&from); - } else { - CopyFrom(from); - } - return *this; - } - - inline const ::PROTOBUF_NAMESPACE_ID::UnknownFieldSet& unknown_fields() const { - return _internal_metadata_.unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(::PROTOBUF_NAMESPACE_ID::UnknownFieldSet::default_instance); - } - inline ::PROTOBUF_NAMESPACE_ID::UnknownFieldSet* mutable_unknown_fields() { - return _internal_metadata_.mutable_unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(); - } - - static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() { - return GetDescriptor(); - } - static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() { - return default_instance().GetMetadata().descriptor; - } - static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() { - return default_instance().GetMetadata().reflection; - } - static const ServiceOptions& default_instance() { - return *internal_default_instance(); - } - static inline const ServiceOptions* internal_default_instance() { - return reinterpret_cast<const ServiceOptions*>( - &_ServiceOptions_default_instance_); - } - static constexpr int kIndexInFileMessages = - 19; - - friend void swap(ServiceOptions& a, ServiceOptions& b) { - a.Swap(&b); - } - inline void Swap(ServiceOptions* other) { - if (other == this) return; - #ifdef PROTOBUF_FORCE_COPY_IN_SWAP - if (GetOwningArena() != nullptr && - GetOwningArena() == other->GetOwningArena()) { - #else // PROTOBUF_FORCE_COPY_IN_SWAP - if (GetOwningArena() == other->GetOwningArena()) { - #endif // !PROTOBUF_FORCE_COPY_IN_SWAP - InternalSwap(other); - } else { - ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other); - } - } - void UnsafeArenaSwap(ServiceOptions* other) { - if (other == this) return; - GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena()); - InternalSwap(other); - } - - // implements Message ---------------------------------------------- - - ServiceOptions* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final { - return CreateMaybeMessage<ServiceOptions>(arena); - } - using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom; - void CopyFrom(const ServiceOptions& from); - using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom; - void MergeFrom( const ServiceOptions& from) { - ServiceOptions::MergeImpl(*this, from); - } - private: - static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message& to_msg, const ::PROTOBUF_NAMESPACE_ID::Message& from_msg); - public: - PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final; - bool IsInitialized() const final; - - size_t ByteSizeLong() const final; - const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final; - uint8_t* _InternalSerialize( - uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final; - int GetCachedSize() const final { return _impl_._cached_size_.Get(); } - - private: - void SharedCtor(::PROTOBUF_NAMESPACE_ID::Arena* arena, bool is_message_owned); - void SharedDtor(); - void SetCachedSize(int size) const final; - void InternalSwap(ServiceOptions* other); - - private: - friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata; - static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() { - return "google.protobuf.ServiceOptions"; - } - protected: - explicit ServiceOptions(::PROTOBUF_NAMESPACE_ID::Arena* arena, - bool is_message_owned = false); - public: - - static const ClassData _class_data_; - const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final; - - ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final; - - // nested types ---------------------------------------------------- - - // accessors ------------------------------------------------------- - - enum : int { - kUninterpretedOptionFieldNumber = 999, - kDeprecatedFieldNumber = 33, - }; - // repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999; - int uninterpreted_option_size() const; - private: - int _internal_uninterpreted_option_size() const; - public: - void clear_uninterpreted_option(); - ::PROTOBUF_NAMESPACE_ID::UninterpretedOption* mutable_uninterpreted_option(int index); - ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::UninterpretedOption >* - mutable_uninterpreted_option(); - private: - const ::PROTOBUF_NAMESPACE_ID::UninterpretedOption& _internal_uninterpreted_option(int index) const; - ::PROTOBUF_NAMESPACE_ID::UninterpretedOption* _internal_add_uninterpreted_option(); - public: - const ::PROTOBUF_NAMESPACE_ID::UninterpretedOption& uninterpreted_option(int index) const; - ::PROTOBUF_NAMESPACE_ID::UninterpretedOption* add_uninterpreted_option(); - const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::UninterpretedOption >& - uninterpreted_option() const; - - // optional bool deprecated = 33 [default = false]; - bool has_deprecated() const; - private: - bool _internal_has_deprecated() const; - public: - void clear_deprecated(); - bool deprecated() const; - void set_deprecated(bool value); - private: - bool _internal_deprecated() const; - void _internal_set_deprecated(bool value); - public: - - - template <typename _proto_TypeTraits, - ::PROTOBUF_NAMESPACE_ID::internal::FieldType _field_type, - bool _is_packed> - inline bool HasExtension( - const ::PROTOBUF_NAMESPACE_ID::internal::ExtensionIdentifier< - ServiceOptions, _proto_TypeTraits, _field_type, _is_packed>& id) const { - - return _impl_._extensions_.Has(id.number()); - } - - template <typename _proto_TypeTraits, - ::PROTOBUF_NAMESPACE_ID::internal::FieldType _field_type, - bool _is_packed> - inline void ClearExtension( - const ::PROTOBUF_NAMESPACE_ID::internal::ExtensionIdentifier< - ServiceOptions, _proto_TypeTraits, _field_type, _is_packed>& id) { - _impl_._extensions_.ClearExtension(id.number()); - - } - - template <typename _proto_TypeTraits, - ::PROTOBUF_NAMESPACE_ID::internal::FieldType _field_type, - bool _is_packed> - inline int ExtensionSize( - const ::PROTOBUF_NAMESPACE_ID::internal::ExtensionIdentifier< - ServiceOptions, _proto_TypeTraits, _field_type, _is_packed>& id) const { - - return _impl_._extensions_.ExtensionSize(id.number()); - } - - template <typename _proto_TypeTraits, - ::PROTOBUF_NAMESPACE_ID::internal::FieldType _field_type, - bool _is_packed> - inline typename _proto_TypeTraits::Singular::ConstType GetExtension( - const ::PROTOBUF_NAMESPACE_ID::internal::ExtensionIdentifier< - ServiceOptions, _proto_TypeTraits, _field_type, _is_packed>& id) const { - - return _proto_TypeTraits::Get(id.number(), _impl_._extensions_, - id.default_value()); - } - - template <typename _proto_TypeTraits, - ::PROTOBUF_NAMESPACE_ID::internal::FieldType _field_type, - bool _is_packed> - inline typename _proto_TypeTraits::Singular::MutableType MutableExtension( - const ::PROTOBUF_NAMESPACE_ID::internal::ExtensionIdentifier< - ServiceOptions, _proto_TypeTraits, _field_type, _is_packed>& id) { - - return _proto_TypeTraits::Mutable(id.number(), _field_type, - &_impl_._extensions_); - } - - template <typename _proto_TypeTraits, - ::PROTOBUF_NAMESPACE_ID::internal::FieldType _field_type, - bool _is_packed> - inline void SetExtension( - const ::PROTOBUF_NAMESPACE_ID::internal::ExtensionIdentifier< - ServiceOptions, _proto_TypeTraits, _field_type, _is_packed>& id, - typename _proto_TypeTraits::Singular::ConstType value) { - _proto_TypeTraits::Set(id.number(), _field_type, value, &_impl_._extensions_); - - } - - template <typename _proto_TypeTraits, - ::PROTOBUF_NAMESPACE_ID::internal::FieldType _field_type, - bool _is_packed> - inline void SetAllocatedExtension( - const ::PROTOBUF_NAMESPACE_ID::internal::ExtensionIdentifier< - ServiceOptions, _proto_TypeTraits, _field_type, _is_packed>& id, - typename _proto_TypeTraits::Singular::MutableType value) { - _proto_TypeTraits::SetAllocated(id.number(), _field_type, value, - &_impl_._extensions_); - - } - template <typename _proto_TypeTraits, - ::PROTOBUF_NAMESPACE_ID::internal::FieldType _field_type, - bool _is_packed> - inline void UnsafeArenaSetAllocatedExtension( - const ::PROTOBUF_NAMESPACE_ID::internal::ExtensionIdentifier< - ServiceOptions, _proto_TypeTraits, _field_type, _is_packed>& id, - typename _proto_TypeTraits::Singular::MutableType value) { - _proto_TypeTraits::UnsafeArenaSetAllocated(id.number(), _field_type, - value, &_impl_._extensions_); - - } - template <typename _proto_TypeTraits, - ::PROTOBUF_NAMESPACE_ID::internal::FieldType _field_type, - bool _is_packed> - PROTOBUF_NODISCARD inline - typename _proto_TypeTraits::Singular::MutableType - ReleaseExtension( - const ::PROTOBUF_NAMESPACE_ID::internal::ExtensionIdentifier< - ServiceOptions, _proto_TypeTraits, _field_type, _is_packed>& id) { - - return _proto_TypeTraits::Release(id.number(), _field_type, - &_impl_._extensions_); - } - template <typename _proto_TypeTraits, - ::PROTOBUF_NAMESPACE_ID::internal::FieldType _field_type, - bool _is_packed> - inline typename _proto_TypeTraits::Singular::MutableType - UnsafeArenaReleaseExtension( - const ::PROTOBUF_NAMESPACE_ID::internal::ExtensionIdentifier< - ServiceOptions, _proto_TypeTraits, _field_type, _is_packed>& id) { - - return _proto_TypeTraits::UnsafeArenaRelease(id.number(), _field_type, - &_impl_._extensions_); - } - - template <typename _proto_TypeTraits, - ::PROTOBUF_NAMESPACE_ID::internal::FieldType _field_type, - bool _is_packed> - inline typename _proto_TypeTraits::Repeated::ConstType GetExtension( - const ::PROTOBUF_NAMESPACE_ID::internal::ExtensionIdentifier< - ServiceOptions, _proto_TypeTraits, _field_type, _is_packed>& id, - int index) const { - - return _proto_TypeTraits::Get(id.number(), _impl_._extensions_, index); - } - - template <typename _proto_TypeTraits, - ::PROTOBUF_NAMESPACE_ID::internal::FieldType _field_type, - bool _is_packed> - inline typename _proto_TypeTraits::Repeated::MutableType MutableExtension( - const ::PROTOBUF_NAMESPACE_ID::internal::ExtensionIdentifier< - ServiceOptions, _proto_TypeTraits, _field_type, _is_packed>& id, - int index) { - - return _proto_TypeTraits::Mutable(id.number(), index, &_impl_._extensions_); - } - - template <typename _proto_TypeTraits, - ::PROTOBUF_NAMESPACE_ID::internal::FieldType _field_type, - bool _is_packed> - inline void SetExtension( - const ::PROTOBUF_NAMESPACE_ID::internal::ExtensionIdentifier< - ServiceOptions, _proto_TypeTraits, _field_type, _is_packed>& id, - int index, typename _proto_TypeTraits::Repeated::ConstType value) { - _proto_TypeTraits::Set(id.number(), index, value, &_impl_._extensions_); - - } - - template <typename _proto_TypeTraits, - ::PROTOBUF_NAMESPACE_ID::internal::FieldType _field_type, - bool _is_packed> - inline typename _proto_TypeTraits::Repeated::MutableType AddExtension( - const ::PROTOBUF_NAMESPACE_ID::internal::ExtensionIdentifier< - ServiceOptions, _proto_TypeTraits, _field_type, _is_packed>& id) { - typename _proto_TypeTraits::Repeated::MutableType to_add = - _proto_TypeTraits::Add(id.number(), _field_type, &_impl_._extensions_); - - return to_add; - } - - template <typename _proto_TypeTraits, - ::PROTOBUF_NAMESPACE_ID::internal::FieldType _field_type, - bool _is_packed> - inline void AddExtension( - const ::PROTOBUF_NAMESPACE_ID::internal::ExtensionIdentifier< - ServiceOptions, _proto_TypeTraits, _field_type, _is_packed>& id, - typename _proto_TypeTraits::Repeated::ConstType value) { - _proto_TypeTraits::Add(id.number(), _field_type, _is_packed, value, - &_impl_._extensions_); - - } - - template <typename _proto_TypeTraits, - ::PROTOBUF_NAMESPACE_ID::internal::FieldType _field_type, - bool _is_packed> - inline const typename _proto_TypeTraits::Repeated::RepeatedFieldType& - GetRepeatedExtension( - const ::PROTOBUF_NAMESPACE_ID::internal::ExtensionIdentifier< - ServiceOptions, _proto_TypeTraits, _field_type, _is_packed>& id) const { - - return _proto_TypeTraits::GetRepeated(id.number(), _impl_._extensions_); - } - - template <typename _proto_TypeTraits, - ::PROTOBUF_NAMESPACE_ID::internal::FieldType _field_type, - bool _is_packed> - inline typename _proto_TypeTraits::Repeated::RepeatedFieldType* - MutableRepeatedExtension( - const ::PROTOBUF_NAMESPACE_ID::internal::ExtensionIdentifier< - ServiceOptions, _proto_TypeTraits, _field_type, _is_packed>& id) { - - return _proto_TypeTraits::MutableRepeated(id.number(), _field_type, - _is_packed, &_impl_._extensions_); - } - - // @@protoc_insertion_point(class_scope:google.protobuf.ServiceOptions) - private: - class _Internal; - - template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper; - typedef void InternalArenaConstructable_; - typedef void DestructorSkippable_; - struct Impl_ { - ::PROTOBUF_NAMESPACE_ID::internal::ExtensionSet _extensions_; - - ::PROTOBUF_NAMESPACE_ID::internal::HasBits<1> _has_bits_; - mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_; - ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::UninterpretedOption > uninterpreted_option_; - bool deprecated_; - }; - union { Impl_ _impl_; }; - friend struct ::TableStruct_google_2fprotobuf_2fdescriptor_2eproto; -}; -// ------------------------------------------------------------------- - -class PROTOBUF_EXPORT MethodOptions final : - public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:google.protobuf.MethodOptions) */ { - public: - inline MethodOptions() : MethodOptions(nullptr) {} - ~MethodOptions() override; - explicit PROTOBUF_CONSTEXPR MethodOptions(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized); - - MethodOptions(const MethodOptions& from); - MethodOptions(MethodOptions&& from) noexcept - : MethodOptions() { - *this = ::std::move(from); - } - - inline MethodOptions& operator=(const MethodOptions& from) { - CopyFrom(from); - return *this; - } - inline MethodOptions& operator=(MethodOptions&& from) noexcept { - if (this == &from) return *this; - if (GetOwningArena() == from.GetOwningArena() - #ifdef PROTOBUF_FORCE_COPY_IN_MOVE - && GetOwningArena() != nullptr - #endif // !PROTOBUF_FORCE_COPY_IN_MOVE - ) { - InternalSwap(&from); - } else { - CopyFrom(from); - } - return *this; - } - - inline const ::PROTOBUF_NAMESPACE_ID::UnknownFieldSet& unknown_fields() const { - return _internal_metadata_.unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(::PROTOBUF_NAMESPACE_ID::UnknownFieldSet::default_instance); - } - inline ::PROTOBUF_NAMESPACE_ID::UnknownFieldSet* mutable_unknown_fields() { - return _internal_metadata_.mutable_unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(); - } - - static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() { - return GetDescriptor(); - } - static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() { - return default_instance().GetMetadata().descriptor; - } - static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() { - return default_instance().GetMetadata().reflection; - } - static const MethodOptions& default_instance() { - return *internal_default_instance(); - } - static inline const MethodOptions* internal_default_instance() { - return reinterpret_cast<const MethodOptions*>( - &_MethodOptions_default_instance_); - } - static constexpr int kIndexInFileMessages = - 20; - - friend void swap(MethodOptions& a, MethodOptions& b) { - a.Swap(&b); - } - inline void Swap(MethodOptions* other) { - if (other == this) return; - #ifdef PROTOBUF_FORCE_COPY_IN_SWAP - if (GetOwningArena() != nullptr && - GetOwningArena() == other->GetOwningArena()) { - #else // PROTOBUF_FORCE_COPY_IN_SWAP - if (GetOwningArena() == other->GetOwningArena()) { - #endif // !PROTOBUF_FORCE_COPY_IN_SWAP - InternalSwap(other); - } else { - ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other); - } - } - void UnsafeArenaSwap(MethodOptions* other) { - if (other == this) return; - GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena()); - InternalSwap(other); - } - - // implements Message ---------------------------------------------- - - MethodOptions* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final { - return CreateMaybeMessage<MethodOptions>(arena); - } - using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom; - void CopyFrom(const MethodOptions& from); - using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom; - void MergeFrom( const MethodOptions& from) { - MethodOptions::MergeImpl(*this, from); - } - private: - static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message& to_msg, const ::PROTOBUF_NAMESPACE_ID::Message& from_msg); - public: - PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final; - bool IsInitialized() const final; - - size_t ByteSizeLong() const final; - const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final; - uint8_t* _InternalSerialize( - uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final; - int GetCachedSize() const final { return _impl_._cached_size_.Get(); } - - private: - void SharedCtor(::PROTOBUF_NAMESPACE_ID::Arena* arena, bool is_message_owned); - void SharedDtor(); - void SetCachedSize(int size) const final; - void InternalSwap(MethodOptions* other); - - private: - friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata; - static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() { - return "google.protobuf.MethodOptions"; - } - protected: - explicit MethodOptions(::PROTOBUF_NAMESPACE_ID::Arena* arena, - bool is_message_owned = false); - public: - - static const ClassData _class_data_; - const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final; - - ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final; - - // nested types ---------------------------------------------------- - - typedef MethodOptions_IdempotencyLevel IdempotencyLevel; - static constexpr IdempotencyLevel IDEMPOTENCY_UNKNOWN = - MethodOptions_IdempotencyLevel_IDEMPOTENCY_UNKNOWN; - static constexpr IdempotencyLevel NO_SIDE_EFFECTS = - MethodOptions_IdempotencyLevel_NO_SIDE_EFFECTS; - static constexpr IdempotencyLevel IDEMPOTENT = - MethodOptions_IdempotencyLevel_IDEMPOTENT; - static inline bool IdempotencyLevel_IsValid(int value) { - return MethodOptions_IdempotencyLevel_IsValid(value); - } - static constexpr IdempotencyLevel IdempotencyLevel_MIN = - MethodOptions_IdempotencyLevel_IdempotencyLevel_MIN; - static constexpr IdempotencyLevel IdempotencyLevel_MAX = - MethodOptions_IdempotencyLevel_IdempotencyLevel_MAX; - static constexpr int IdempotencyLevel_ARRAYSIZE = - MethodOptions_IdempotencyLevel_IdempotencyLevel_ARRAYSIZE; - static inline const ::PROTOBUF_NAMESPACE_ID::EnumDescriptor* - IdempotencyLevel_descriptor() { - return MethodOptions_IdempotencyLevel_descriptor(); - } - template<typename T> - static inline const std::string& IdempotencyLevel_Name(T enum_t_value) { - static_assert(::std::is_same<T, IdempotencyLevel>::value || - ::std::is_integral<T>::value, - "Incorrect type passed to function IdempotencyLevel_Name."); - return MethodOptions_IdempotencyLevel_Name(enum_t_value); - } - static inline bool IdempotencyLevel_Parse(::PROTOBUF_NAMESPACE_ID::ConstStringParam name, - IdempotencyLevel* value) { - return MethodOptions_IdempotencyLevel_Parse(name, value); - } - - // accessors ------------------------------------------------------- - - enum : int { - kUninterpretedOptionFieldNumber = 999, - kDeprecatedFieldNumber = 33, - kIdempotencyLevelFieldNumber = 34, - }; - // repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999; - int uninterpreted_option_size() const; - private: - int _internal_uninterpreted_option_size() const; - public: - void clear_uninterpreted_option(); - ::PROTOBUF_NAMESPACE_ID::UninterpretedOption* mutable_uninterpreted_option(int index); - ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::UninterpretedOption >* - mutable_uninterpreted_option(); - private: - const ::PROTOBUF_NAMESPACE_ID::UninterpretedOption& _internal_uninterpreted_option(int index) const; - ::PROTOBUF_NAMESPACE_ID::UninterpretedOption* _internal_add_uninterpreted_option(); - public: - const ::PROTOBUF_NAMESPACE_ID::UninterpretedOption& uninterpreted_option(int index) const; - ::PROTOBUF_NAMESPACE_ID::UninterpretedOption* add_uninterpreted_option(); - const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::UninterpretedOption >& - uninterpreted_option() const; - - // optional bool deprecated = 33 [default = false]; - bool has_deprecated() const; - private: - bool _internal_has_deprecated() const; - public: - void clear_deprecated(); - bool deprecated() const; - void set_deprecated(bool value); - private: - bool _internal_deprecated() const; - void _internal_set_deprecated(bool value); - public: - - // optional .google.protobuf.MethodOptions.IdempotencyLevel idempotency_level = 34 [default = IDEMPOTENCY_UNKNOWN]; - bool has_idempotency_level() const; - private: - bool _internal_has_idempotency_level() const; - public: - void clear_idempotency_level(); - ::PROTOBUF_NAMESPACE_ID::MethodOptions_IdempotencyLevel idempotency_level() const; - void set_idempotency_level(::PROTOBUF_NAMESPACE_ID::MethodOptions_IdempotencyLevel value); - private: - ::PROTOBUF_NAMESPACE_ID::MethodOptions_IdempotencyLevel _internal_idempotency_level() const; - void _internal_set_idempotency_level(::PROTOBUF_NAMESPACE_ID::MethodOptions_IdempotencyLevel value); - public: - - - template <typename _proto_TypeTraits, - ::PROTOBUF_NAMESPACE_ID::internal::FieldType _field_type, - bool _is_packed> - inline bool HasExtension( - const ::PROTOBUF_NAMESPACE_ID::internal::ExtensionIdentifier< - MethodOptions, _proto_TypeTraits, _field_type, _is_packed>& id) const { - - return _impl_._extensions_.Has(id.number()); - } - - template <typename _proto_TypeTraits, - ::PROTOBUF_NAMESPACE_ID::internal::FieldType _field_type, - bool _is_packed> - inline void ClearExtension( - const ::PROTOBUF_NAMESPACE_ID::internal::ExtensionIdentifier< - MethodOptions, _proto_TypeTraits, _field_type, _is_packed>& id) { - _impl_._extensions_.ClearExtension(id.number()); - - } - - template <typename _proto_TypeTraits, - ::PROTOBUF_NAMESPACE_ID::internal::FieldType _field_type, - bool _is_packed> - inline int ExtensionSize( - const ::PROTOBUF_NAMESPACE_ID::internal::ExtensionIdentifier< - MethodOptions, _proto_TypeTraits, _field_type, _is_packed>& id) const { - - return _impl_._extensions_.ExtensionSize(id.number()); - } - - template <typename _proto_TypeTraits, - ::PROTOBUF_NAMESPACE_ID::internal::FieldType _field_type, - bool _is_packed> - inline typename _proto_TypeTraits::Singular::ConstType GetExtension( - const ::PROTOBUF_NAMESPACE_ID::internal::ExtensionIdentifier< - MethodOptions, _proto_TypeTraits, _field_type, _is_packed>& id) const { - - return _proto_TypeTraits::Get(id.number(), _impl_._extensions_, - id.default_value()); - } - - template <typename _proto_TypeTraits, - ::PROTOBUF_NAMESPACE_ID::internal::FieldType _field_type, - bool _is_packed> - inline typename _proto_TypeTraits::Singular::MutableType MutableExtension( - const ::PROTOBUF_NAMESPACE_ID::internal::ExtensionIdentifier< - MethodOptions, _proto_TypeTraits, _field_type, _is_packed>& id) { - - return _proto_TypeTraits::Mutable(id.number(), _field_type, - &_impl_._extensions_); - } - - template <typename _proto_TypeTraits, - ::PROTOBUF_NAMESPACE_ID::internal::FieldType _field_type, - bool _is_packed> - inline void SetExtension( - const ::PROTOBUF_NAMESPACE_ID::internal::ExtensionIdentifier< - MethodOptions, _proto_TypeTraits, _field_type, _is_packed>& id, - typename _proto_TypeTraits::Singular::ConstType value) { - _proto_TypeTraits::Set(id.number(), _field_type, value, &_impl_._extensions_); - - } - - template <typename _proto_TypeTraits, - ::PROTOBUF_NAMESPACE_ID::internal::FieldType _field_type, - bool _is_packed> - inline void SetAllocatedExtension( - const ::PROTOBUF_NAMESPACE_ID::internal::ExtensionIdentifier< - MethodOptions, _proto_TypeTraits, _field_type, _is_packed>& id, - typename _proto_TypeTraits::Singular::MutableType value) { - _proto_TypeTraits::SetAllocated(id.number(), _field_type, value, - &_impl_._extensions_); - - } - template <typename _proto_TypeTraits, - ::PROTOBUF_NAMESPACE_ID::internal::FieldType _field_type, - bool _is_packed> - inline void UnsafeArenaSetAllocatedExtension( - const ::PROTOBUF_NAMESPACE_ID::internal::ExtensionIdentifier< - MethodOptions, _proto_TypeTraits, _field_type, _is_packed>& id, - typename _proto_TypeTraits::Singular::MutableType value) { - _proto_TypeTraits::UnsafeArenaSetAllocated(id.number(), _field_type, - value, &_impl_._extensions_); - - } - template <typename _proto_TypeTraits, - ::PROTOBUF_NAMESPACE_ID::internal::FieldType _field_type, - bool _is_packed> - PROTOBUF_NODISCARD inline - typename _proto_TypeTraits::Singular::MutableType - ReleaseExtension( - const ::PROTOBUF_NAMESPACE_ID::internal::ExtensionIdentifier< - MethodOptions, _proto_TypeTraits, _field_type, _is_packed>& id) { - - return _proto_TypeTraits::Release(id.number(), _field_type, - &_impl_._extensions_); - } - template <typename _proto_TypeTraits, - ::PROTOBUF_NAMESPACE_ID::internal::FieldType _field_type, - bool _is_packed> - inline typename _proto_TypeTraits::Singular::MutableType - UnsafeArenaReleaseExtension( - const ::PROTOBUF_NAMESPACE_ID::internal::ExtensionIdentifier< - MethodOptions, _proto_TypeTraits, _field_type, _is_packed>& id) { - - return _proto_TypeTraits::UnsafeArenaRelease(id.number(), _field_type, - &_impl_._extensions_); - } - - template <typename _proto_TypeTraits, - ::PROTOBUF_NAMESPACE_ID::internal::FieldType _field_type, - bool _is_packed> - inline typename _proto_TypeTraits::Repeated::ConstType GetExtension( - const ::PROTOBUF_NAMESPACE_ID::internal::ExtensionIdentifier< - MethodOptions, _proto_TypeTraits, _field_type, _is_packed>& id, - int index) const { - - return _proto_TypeTraits::Get(id.number(), _impl_._extensions_, index); - } - - template <typename _proto_TypeTraits, - ::PROTOBUF_NAMESPACE_ID::internal::FieldType _field_type, - bool _is_packed> - inline typename _proto_TypeTraits::Repeated::MutableType MutableExtension( - const ::PROTOBUF_NAMESPACE_ID::internal::ExtensionIdentifier< - MethodOptions, _proto_TypeTraits, _field_type, _is_packed>& id, - int index) { - - return _proto_TypeTraits::Mutable(id.number(), index, &_impl_._extensions_); - } - - template <typename _proto_TypeTraits, - ::PROTOBUF_NAMESPACE_ID::internal::FieldType _field_type, - bool _is_packed> - inline void SetExtension( - const ::PROTOBUF_NAMESPACE_ID::internal::ExtensionIdentifier< - MethodOptions, _proto_TypeTraits, _field_type, _is_packed>& id, - int index, typename _proto_TypeTraits::Repeated::ConstType value) { - _proto_TypeTraits::Set(id.number(), index, value, &_impl_._extensions_); - - } - - template <typename _proto_TypeTraits, - ::PROTOBUF_NAMESPACE_ID::internal::FieldType _field_type, - bool _is_packed> - inline typename _proto_TypeTraits::Repeated::MutableType AddExtension( - const ::PROTOBUF_NAMESPACE_ID::internal::ExtensionIdentifier< - MethodOptions, _proto_TypeTraits, _field_type, _is_packed>& id) { - typename _proto_TypeTraits::Repeated::MutableType to_add = - _proto_TypeTraits::Add(id.number(), _field_type, &_impl_._extensions_); - - return to_add; - } - - template <typename _proto_TypeTraits, - ::PROTOBUF_NAMESPACE_ID::internal::FieldType _field_type, - bool _is_packed> - inline void AddExtension( - const ::PROTOBUF_NAMESPACE_ID::internal::ExtensionIdentifier< - MethodOptions, _proto_TypeTraits, _field_type, _is_packed>& id, - typename _proto_TypeTraits::Repeated::ConstType value) { - _proto_TypeTraits::Add(id.number(), _field_type, _is_packed, value, - &_impl_._extensions_); - - } - - template <typename _proto_TypeTraits, - ::PROTOBUF_NAMESPACE_ID::internal::FieldType _field_type, - bool _is_packed> - inline const typename _proto_TypeTraits::Repeated::RepeatedFieldType& - GetRepeatedExtension( - const ::PROTOBUF_NAMESPACE_ID::internal::ExtensionIdentifier< - MethodOptions, _proto_TypeTraits, _field_type, _is_packed>& id) const { - - return _proto_TypeTraits::GetRepeated(id.number(), _impl_._extensions_); - } - - template <typename _proto_TypeTraits, - ::PROTOBUF_NAMESPACE_ID::internal::FieldType _field_type, - bool _is_packed> - inline typename _proto_TypeTraits::Repeated::RepeatedFieldType* - MutableRepeatedExtension( - const ::PROTOBUF_NAMESPACE_ID::internal::ExtensionIdentifier< - MethodOptions, _proto_TypeTraits, _field_type, _is_packed>& id) { - - return _proto_TypeTraits::MutableRepeated(id.number(), _field_type, - _is_packed, &_impl_._extensions_); - } - - // @@protoc_insertion_point(class_scope:google.protobuf.MethodOptions) - private: - class _Internal; - - template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper; - typedef void InternalArenaConstructable_; - typedef void DestructorSkippable_; - struct Impl_ { - ::PROTOBUF_NAMESPACE_ID::internal::ExtensionSet _extensions_; - - ::PROTOBUF_NAMESPACE_ID::internal::HasBits<1> _has_bits_; - mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_; - ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::UninterpretedOption > uninterpreted_option_; - bool deprecated_; - int idempotency_level_; - }; - union { Impl_ _impl_; }; - friend struct ::TableStruct_google_2fprotobuf_2fdescriptor_2eproto; -}; -// ------------------------------------------------------------------- - -class PROTOBUF_EXPORT UninterpretedOption_NamePart final : - public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:google.protobuf.UninterpretedOption.NamePart) */ { - public: - inline UninterpretedOption_NamePart() : UninterpretedOption_NamePart(nullptr) {} - ~UninterpretedOption_NamePart() override; - explicit PROTOBUF_CONSTEXPR UninterpretedOption_NamePart(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized); - - UninterpretedOption_NamePart(const UninterpretedOption_NamePart& from); - UninterpretedOption_NamePart(UninterpretedOption_NamePart&& from) noexcept - : UninterpretedOption_NamePart() { - *this = ::std::move(from); - } - - inline UninterpretedOption_NamePart& operator=(const UninterpretedOption_NamePart& from) { - CopyFrom(from); - return *this; - } - inline UninterpretedOption_NamePart& operator=(UninterpretedOption_NamePart&& from) noexcept { - if (this == &from) return *this; - if (GetOwningArena() == from.GetOwningArena() - #ifdef PROTOBUF_FORCE_COPY_IN_MOVE - && GetOwningArena() != nullptr - #endif // !PROTOBUF_FORCE_COPY_IN_MOVE - ) { - InternalSwap(&from); - } else { - CopyFrom(from); - } - return *this; - } - - inline const ::PROTOBUF_NAMESPACE_ID::UnknownFieldSet& unknown_fields() const { - return _internal_metadata_.unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(::PROTOBUF_NAMESPACE_ID::UnknownFieldSet::default_instance); - } - inline ::PROTOBUF_NAMESPACE_ID::UnknownFieldSet* mutable_unknown_fields() { - return _internal_metadata_.mutable_unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(); - } - - static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() { - return GetDescriptor(); - } - static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() { - return default_instance().GetMetadata().descriptor; - } - static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() { - return default_instance().GetMetadata().reflection; - } - static const UninterpretedOption_NamePart& default_instance() { - return *internal_default_instance(); - } - static inline const UninterpretedOption_NamePart* internal_default_instance() { - return reinterpret_cast<const UninterpretedOption_NamePart*>( - &_UninterpretedOption_NamePart_default_instance_); - } - static constexpr int kIndexInFileMessages = - 21; - - friend void swap(UninterpretedOption_NamePart& a, UninterpretedOption_NamePart& b) { - a.Swap(&b); - } - inline void Swap(UninterpretedOption_NamePart* other) { - if (other == this) return; - #ifdef PROTOBUF_FORCE_COPY_IN_SWAP - if (GetOwningArena() != nullptr && - GetOwningArena() == other->GetOwningArena()) { - #else // PROTOBUF_FORCE_COPY_IN_SWAP - if (GetOwningArena() == other->GetOwningArena()) { - #endif // !PROTOBUF_FORCE_COPY_IN_SWAP - InternalSwap(other); - } else { - ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other); - } - } - void UnsafeArenaSwap(UninterpretedOption_NamePart* other) { - if (other == this) return; - GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena()); - InternalSwap(other); - } - - // implements Message ---------------------------------------------- - - UninterpretedOption_NamePart* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final { - return CreateMaybeMessage<UninterpretedOption_NamePart>(arena); - } - using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom; - void CopyFrom(const UninterpretedOption_NamePart& from); - using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom; - void MergeFrom( const UninterpretedOption_NamePart& from) { - UninterpretedOption_NamePart::MergeImpl(*this, from); - } - private: - static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message& to_msg, const ::PROTOBUF_NAMESPACE_ID::Message& from_msg); - public: - PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final; - bool IsInitialized() const final; - - size_t ByteSizeLong() const final; - const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final; - uint8_t* _InternalSerialize( - uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final; - int GetCachedSize() const final { return _impl_._cached_size_.Get(); } - - private: - void SharedCtor(::PROTOBUF_NAMESPACE_ID::Arena* arena, bool is_message_owned); - void SharedDtor(); - void SetCachedSize(int size) const final; - void InternalSwap(UninterpretedOption_NamePart* other); - - private: - friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata; - static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() { - return "google.protobuf.UninterpretedOption.NamePart"; - } - protected: - explicit UninterpretedOption_NamePart(::PROTOBUF_NAMESPACE_ID::Arena* arena, - bool is_message_owned = false); - public: - - static const ClassData _class_data_; - const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final; - - ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final; - - // nested types ---------------------------------------------------- - - // accessors ------------------------------------------------------- - - enum : int { - kNamePartFieldNumber = 1, - kIsExtensionFieldNumber = 2, - }; - // required string name_part = 1; - bool has_name_part() const; - private: - bool _internal_has_name_part() const; - public: - void clear_name_part(); - const std::string& name_part() const; - template <typename ArgT0 = const std::string&, typename... ArgT> - void set_name_part(ArgT0&& arg0, ArgT... args); - std::string* mutable_name_part(); - PROTOBUF_NODISCARD std::string* release_name_part(); - void set_allocated_name_part(std::string* name_part); - private: - const std::string& _internal_name_part() const; - inline PROTOBUF_ALWAYS_INLINE void _internal_set_name_part(const std::string& value); - std::string* _internal_mutable_name_part(); - public: - - // required bool is_extension = 2; - bool has_is_extension() const; - private: - bool _internal_has_is_extension() const; - public: - void clear_is_extension(); - bool is_extension() const; - void set_is_extension(bool value); - private: - bool _internal_is_extension() const; - void _internal_set_is_extension(bool value); - public: - - // @@protoc_insertion_point(class_scope:google.protobuf.UninterpretedOption.NamePart) - private: - class _Internal; - - // helper for ByteSizeLong() - size_t RequiredFieldsByteSizeFallback() const; - - template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper; - typedef void InternalArenaConstructable_; - typedef void DestructorSkippable_; - struct Impl_ { - ::PROTOBUF_NAMESPACE_ID::internal::HasBits<1> _has_bits_; - mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_; - ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr name_part_; - bool is_extension_; - }; - union { Impl_ _impl_; }; - friend struct ::TableStruct_google_2fprotobuf_2fdescriptor_2eproto; -}; -// ------------------------------------------------------------------- - -class PROTOBUF_EXPORT UninterpretedOption final : - public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:google.protobuf.UninterpretedOption) */ { - public: - inline UninterpretedOption() : UninterpretedOption(nullptr) {} - ~UninterpretedOption() override; - explicit PROTOBUF_CONSTEXPR UninterpretedOption(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized); - - UninterpretedOption(const UninterpretedOption& from); - UninterpretedOption(UninterpretedOption&& from) noexcept - : UninterpretedOption() { - *this = ::std::move(from); - } - - inline UninterpretedOption& operator=(const UninterpretedOption& from) { - CopyFrom(from); - return *this; - } - inline UninterpretedOption& operator=(UninterpretedOption&& from) noexcept { - if (this == &from) return *this; - if (GetOwningArena() == from.GetOwningArena() - #ifdef PROTOBUF_FORCE_COPY_IN_MOVE - && GetOwningArena() != nullptr - #endif // !PROTOBUF_FORCE_COPY_IN_MOVE - ) { - InternalSwap(&from); - } else { - CopyFrom(from); - } - return *this; - } - - inline const ::PROTOBUF_NAMESPACE_ID::UnknownFieldSet& unknown_fields() const { - return _internal_metadata_.unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(::PROTOBUF_NAMESPACE_ID::UnknownFieldSet::default_instance); - } - inline ::PROTOBUF_NAMESPACE_ID::UnknownFieldSet* mutable_unknown_fields() { - return _internal_metadata_.mutable_unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(); - } - - static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() { - return GetDescriptor(); - } - static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() { - return default_instance().GetMetadata().descriptor; - } - static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() { - return default_instance().GetMetadata().reflection; - } - static const UninterpretedOption& default_instance() { - return *internal_default_instance(); - } - static inline const UninterpretedOption* internal_default_instance() { - return reinterpret_cast<const UninterpretedOption*>( - &_UninterpretedOption_default_instance_); - } - static constexpr int kIndexInFileMessages = - 22; - - friend void swap(UninterpretedOption& a, UninterpretedOption& b) { - a.Swap(&b); - } - inline void Swap(UninterpretedOption* other) { - if (other == this) return; - #ifdef PROTOBUF_FORCE_COPY_IN_SWAP - if (GetOwningArena() != nullptr && - GetOwningArena() == other->GetOwningArena()) { - #else // PROTOBUF_FORCE_COPY_IN_SWAP - if (GetOwningArena() == other->GetOwningArena()) { - #endif // !PROTOBUF_FORCE_COPY_IN_SWAP - InternalSwap(other); - } else { - ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other); - } - } - void UnsafeArenaSwap(UninterpretedOption* other) { - if (other == this) return; - GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena()); - InternalSwap(other); - } - - // implements Message ---------------------------------------------- - - UninterpretedOption* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final { - return CreateMaybeMessage<UninterpretedOption>(arena); - } - using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom; - void CopyFrom(const UninterpretedOption& from); - using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom; - void MergeFrom( const UninterpretedOption& from) { - UninterpretedOption::MergeImpl(*this, from); - } - private: - static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message& to_msg, const ::PROTOBUF_NAMESPACE_ID::Message& from_msg); - public: - PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final; - bool IsInitialized() const final; - - size_t ByteSizeLong() const final; - const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final; - uint8_t* _InternalSerialize( - uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final; - int GetCachedSize() const final { return _impl_._cached_size_.Get(); } - - private: - void SharedCtor(::PROTOBUF_NAMESPACE_ID::Arena* arena, bool is_message_owned); - void SharedDtor(); - void SetCachedSize(int size) const final; - void InternalSwap(UninterpretedOption* other); - - private: - friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata; - static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() { - return "google.protobuf.UninterpretedOption"; - } - protected: - explicit UninterpretedOption(::PROTOBUF_NAMESPACE_ID::Arena* arena, - bool is_message_owned = false); - public: - - static const ClassData _class_data_; - const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final; - - ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final; - - // nested types ---------------------------------------------------- - - typedef UninterpretedOption_NamePart NamePart; - - // accessors ------------------------------------------------------- - - enum : int { - kNameFieldNumber = 2, - kIdentifierValueFieldNumber = 3, - kStringValueFieldNumber = 7, - kAggregateValueFieldNumber = 8, - kPositiveIntValueFieldNumber = 4, - kNegativeIntValueFieldNumber = 5, - kDoubleValueFieldNumber = 6, - }; - // repeated .google.protobuf.UninterpretedOption.NamePart name = 2; - int name_size() const; - private: - int _internal_name_size() const; - public: - void clear_name(); - ::PROTOBUF_NAMESPACE_ID::UninterpretedOption_NamePart* mutable_name(int index); - ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::UninterpretedOption_NamePart >* - mutable_name(); - private: - const ::PROTOBUF_NAMESPACE_ID::UninterpretedOption_NamePart& _internal_name(int index) const; - ::PROTOBUF_NAMESPACE_ID::UninterpretedOption_NamePart* _internal_add_name(); - public: - const ::PROTOBUF_NAMESPACE_ID::UninterpretedOption_NamePart& name(int index) const; - ::PROTOBUF_NAMESPACE_ID::UninterpretedOption_NamePart* add_name(); - const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::UninterpretedOption_NamePart >& - name() const; - - // optional string identifier_value = 3; - bool has_identifier_value() const; - private: - bool _internal_has_identifier_value() const; - public: - void clear_identifier_value(); - const std::string& identifier_value() const; - template <typename ArgT0 = const std::string&, typename... ArgT> - void set_identifier_value(ArgT0&& arg0, ArgT... args); - std::string* mutable_identifier_value(); - PROTOBUF_NODISCARD std::string* release_identifier_value(); - void set_allocated_identifier_value(std::string* identifier_value); - private: - const std::string& _internal_identifier_value() const; - inline PROTOBUF_ALWAYS_INLINE void _internal_set_identifier_value(const std::string& value); - std::string* _internal_mutable_identifier_value(); - public: - - // optional bytes string_value = 7; - bool has_string_value() const; - private: - bool _internal_has_string_value() const; - public: - void clear_string_value(); - const std::string& string_value() const; - template <typename ArgT0 = const std::string&, typename... ArgT> - void set_string_value(ArgT0&& arg0, ArgT... args); - std::string* mutable_string_value(); - PROTOBUF_NODISCARD std::string* release_string_value(); - void set_allocated_string_value(std::string* string_value); - private: - const std::string& _internal_string_value() const; - inline PROTOBUF_ALWAYS_INLINE void _internal_set_string_value(const std::string& value); - std::string* _internal_mutable_string_value(); - public: - - // optional string aggregate_value = 8; - bool has_aggregate_value() const; - private: - bool _internal_has_aggregate_value() const; - public: - void clear_aggregate_value(); - const std::string& aggregate_value() const; - template <typename ArgT0 = const std::string&, typename... ArgT> - void set_aggregate_value(ArgT0&& arg0, ArgT... args); - std::string* mutable_aggregate_value(); - PROTOBUF_NODISCARD std::string* release_aggregate_value(); - void set_allocated_aggregate_value(std::string* aggregate_value); - private: - const std::string& _internal_aggregate_value() const; - inline PROTOBUF_ALWAYS_INLINE void _internal_set_aggregate_value(const std::string& value); - std::string* _internal_mutable_aggregate_value(); - public: - - // optional uint64 positive_int_value = 4; - bool has_positive_int_value() const; - private: - bool _internal_has_positive_int_value() const; - public: - void clear_positive_int_value(); - uint64_t positive_int_value() const; - void set_positive_int_value(uint64_t value); - private: - uint64_t _internal_positive_int_value() const; - void _internal_set_positive_int_value(uint64_t value); - public: - - // optional int64 negative_int_value = 5; - bool has_negative_int_value() const; - private: - bool _internal_has_negative_int_value() const; - public: - void clear_negative_int_value(); - int64_t negative_int_value() const; - void set_negative_int_value(int64_t value); - private: - int64_t _internal_negative_int_value() const; - void _internal_set_negative_int_value(int64_t value); - public: - - // optional double double_value = 6; - bool has_double_value() const; - private: - bool _internal_has_double_value() const; - public: - void clear_double_value(); - double double_value() const; - void set_double_value(double value); - private: - double _internal_double_value() const; - void _internal_set_double_value(double value); - public: - - // @@protoc_insertion_point(class_scope:google.protobuf.UninterpretedOption) - private: - class _Internal; - - template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper; - typedef void InternalArenaConstructable_; - typedef void DestructorSkippable_; - struct Impl_ { - ::PROTOBUF_NAMESPACE_ID::internal::HasBits<1> _has_bits_; - mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_; - ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::UninterpretedOption_NamePart > name_; - ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr identifier_value_; - ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr string_value_; - ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr aggregate_value_; - uint64_t positive_int_value_; - int64_t negative_int_value_; - double double_value_; - }; - union { Impl_ _impl_; }; - friend struct ::TableStruct_google_2fprotobuf_2fdescriptor_2eproto; -}; -// ------------------------------------------------------------------- - -class PROTOBUF_EXPORT SourceCodeInfo_Location final : - public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:google.protobuf.SourceCodeInfo.Location) */ { - public: - inline SourceCodeInfo_Location() : SourceCodeInfo_Location(nullptr) {} - ~SourceCodeInfo_Location() override; - explicit PROTOBUF_CONSTEXPR SourceCodeInfo_Location(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized); - - SourceCodeInfo_Location(const SourceCodeInfo_Location& from); - SourceCodeInfo_Location(SourceCodeInfo_Location&& from) noexcept - : SourceCodeInfo_Location() { - *this = ::std::move(from); - } - - inline SourceCodeInfo_Location& operator=(const SourceCodeInfo_Location& from) { - CopyFrom(from); - return *this; - } - inline SourceCodeInfo_Location& operator=(SourceCodeInfo_Location&& from) noexcept { - if (this == &from) return *this; - if (GetOwningArena() == from.GetOwningArena() - #ifdef PROTOBUF_FORCE_COPY_IN_MOVE - && GetOwningArena() != nullptr - #endif // !PROTOBUF_FORCE_COPY_IN_MOVE - ) { - InternalSwap(&from); - } else { - CopyFrom(from); - } - return *this; - } - - inline const ::PROTOBUF_NAMESPACE_ID::UnknownFieldSet& unknown_fields() const { - return _internal_metadata_.unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(::PROTOBUF_NAMESPACE_ID::UnknownFieldSet::default_instance); - } - inline ::PROTOBUF_NAMESPACE_ID::UnknownFieldSet* mutable_unknown_fields() { - return _internal_metadata_.mutable_unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(); - } - - static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() { - return GetDescriptor(); - } - static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() { - return default_instance().GetMetadata().descriptor; - } - static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() { - return default_instance().GetMetadata().reflection; - } - static const SourceCodeInfo_Location& default_instance() { - return *internal_default_instance(); - } - static inline const SourceCodeInfo_Location* internal_default_instance() { - return reinterpret_cast<const SourceCodeInfo_Location*>( - &_SourceCodeInfo_Location_default_instance_); - } - static constexpr int kIndexInFileMessages = - 23; - - friend void swap(SourceCodeInfo_Location& a, SourceCodeInfo_Location& b) { - a.Swap(&b); - } - inline void Swap(SourceCodeInfo_Location* other) { - if (other == this) return; - #ifdef PROTOBUF_FORCE_COPY_IN_SWAP - if (GetOwningArena() != nullptr && - GetOwningArena() == other->GetOwningArena()) { - #else // PROTOBUF_FORCE_COPY_IN_SWAP - if (GetOwningArena() == other->GetOwningArena()) { - #endif // !PROTOBUF_FORCE_COPY_IN_SWAP - InternalSwap(other); - } else { - ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other); - } - } - void UnsafeArenaSwap(SourceCodeInfo_Location* other) { - if (other == this) return; - GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena()); - InternalSwap(other); - } - - // implements Message ---------------------------------------------- - - SourceCodeInfo_Location* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final { - return CreateMaybeMessage<SourceCodeInfo_Location>(arena); - } - using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom; - void CopyFrom(const SourceCodeInfo_Location& from); - using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom; - void MergeFrom( const SourceCodeInfo_Location& from) { - SourceCodeInfo_Location::MergeImpl(*this, from); - } - private: - static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message& to_msg, const ::PROTOBUF_NAMESPACE_ID::Message& from_msg); - public: - PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final; - bool IsInitialized() const final; - - size_t ByteSizeLong() const final; - const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final; - uint8_t* _InternalSerialize( - uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final; - int GetCachedSize() const final { return _impl_._cached_size_.Get(); } - - private: - void SharedCtor(::PROTOBUF_NAMESPACE_ID::Arena* arena, bool is_message_owned); - void SharedDtor(); - void SetCachedSize(int size) const final; - void InternalSwap(SourceCodeInfo_Location* other); - - private: - friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata; - static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() { - return "google.protobuf.SourceCodeInfo.Location"; - } - protected: - explicit SourceCodeInfo_Location(::PROTOBUF_NAMESPACE_ID::Arena* arena, - bool is_message_owned = false); - public: - - static const ClassData _class_data_; - const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final; - - ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final; - - // nested types ---------------------------------------------------- - - // accessors ------------------------------------------------------- - - enum : int { - kPathFieldNumber = 1, - kSpanFieldNumber = 2, - kLeadingDetachedCommentsFieldNumber = 6, - kLeadingCommentsFieldNumber = 3, - kTrailingCommentsFieldNumber = 4, - }; - // repeated int32 path = 1 [packed = true]; - int path_size() const; - private: - int _internal_path_size() const; - public: - void clear_path(); - private: - int32_t _internal_path(int index) const; - const ::PROTOBUF_NAMESPACE_ID::RepeatedField< int32_t >& - _internal_path() const; - void _internal_add_path(int32_t value); - ::PROTOBUF_NAMESPACE_ID::RepeatedField< int32_t >* - _internal_mutable_path(); - public: - int32_t path(int index) const; - void set_path(int index, int32_t value); - void add_path(int32_t value); - const ::PROTOBUF_NAMESPACE_ID::RepeatedField< int32_t >& - path() const; - ::PROTOBUF_NAMESPACE_ID::RepeatedField< int32_t >* - mutable_path(); - - // repeated int32 span = 2 [packed = true]; - int span_size() const; - private: - int _internal_span_size() const; - public: - void clear_span(); - private: - int32_t _internal_span(int index) const; - const ::PROTOBUF_NAMESPACE_ID::RepeatedField< int32_t >& - _internal_span() const; - void _internal_add_span(int32_t value); - ::PROTOBUF_NAMESPACE_ID::RepeatedField< int32_t >* - _internal_mutable_span(); - public: - int32_t span(int index) const; - void set_span(int index, int32_t value); - void add_span(int32_t value); - const ::PROTOBUF_NAMESPACE_ID::RepeatedField< int32_t >& - span() const; - ::PROTOBUF_NAMESPACE_ID::RepeatedField< int32_t >* - mutable_span(); - - // repeated string leading_detached_comments = 6; - int leading_detached_comments_size() const; - private: - int _internal_leading_detached_comments_size() const; - public: - void clear_leading_detached_comments(); - const std::string& leading_detached_comments(int index) const; - std::string* mutable_leading_detached_comments(int index); - void set_leading_detached_comments(int index, const std::string& value); - void set_leading_detached_comments(int index, std::string&& value); - void set_leading_detached_comments(int index, const char* value); - void set_leading_detached_comments(int index, const char* value, size_t size); - std::string* add_leading_detached_comments(); - void add_leading_detached_comments(const std::string& value); - void add_leading_detached_comments(std::string&& value); - void add_leading_detached_comments(const char* value); - void add_leading_detached_comments(const char* value, size_t size); - const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField<std::string>& leading_detached_comments() const; - ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField<std::string>* mutable_leading_detached_comments(); - private: - const std::string& _internal_leading_detached_comments(int index) const; - std::string* _internal_add_leading_detached_comments(); - public: - - // optional string leading_comments = 3; - bool has_leading_comments() const; - private: - bool _internal_has_leading_comments() const; - public: - void clear_leading_comments(); - const std::string& leading_comments() const; - template <typename ArgT0 = const std::string&, typename... ArgT> - void set_leading_comments(ArgT0&& arg0, ArgT... args); - std::string* mutable_leading_comments(); - PROTOBUF_NODISCARD std::string* release_leading_comments(); - void set_allocated_leading_comments(std::string* leading_comments); - private: - const std::string& _internal_leading_comments() const; - inline PROTOBUF_ALWAYS_INLINE void _internal_set_leading_comments(const std::string& value); - std::string* _internal_mutable_leading_comments(); - public: - - // optional string trailing_comments = 4; - bool has_trailing_comments() const; - private: - bool _internal_has_trailing_comments() const; - public: - void clear_trailing_comments(); - const std::string& trailing_comments() const; - template <typename ArgT0 = const std::string&, typename... ArgT> - void set_trailing_comments(ArgT0&& arg0, ArgT... args); - std::string* mutable_trailing_comments(); - PROTOBUF_NODISCARD std::string* release_trailing_comments(); - void set_allocated_trailing_comments(std::string* trailing_comments); - private: - const std::string& _internal_trailing_comments() const; - inline PROTOBUF_ALWAYS_INLINE void _internal_set_trailing_comments(const std::string& value); - std::string* _internal_mutable_trailing_comments(); - public: - - // @@protoc_insertion_point(class_scope:google.protobuf.SourceCodeInfo.Location) - private: - class _Internal; - - template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper; - typedef void InternalArenaConstructable_; - typedef void DestructorSkippable_; - struct Impl_ { - ::PROTOBUF_NAMESPACE_ID::internal::HasBits<1> _has_bits_; - mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_; - ::PROTOBUF_NAMESPACE_ID::RepeatedField< int32_t > path_; - mutable std::atomic<int> _path_cached_byte_size_; - ::PROTOBUF_NAMESPACE_ID::RepeatedField< int32_t > span_; - mutable std::atomic<int> _span_cached_byte_size_; - ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField<std::string> leading_detached_comments_; - ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr leading_comments_; - ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr trailing_comments_; - }; - union { Impl_ _impl_; }; - friend struct ::TableStruct_google_2fprotobuf_2fdescriptor_2eproto; -}; -// ------------------------------------------------------------------- - -class PROTOBUF_EXPORT SourceCodeInfo final : - public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:google.protobuf.SourceCodeInfo) */ { - public: - inline SourceCodeInfo() : SourceCodeInfo(nullptr) {} - ~SourceCodeInfo() override; - explicit PROTOBUF_CONSTEXPR SourceCodeInfo(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized); - - SourceCodeInfo(const SourceCodeInfo& from); - SourceCodeInfo(SourceCodeInfo&& from) noexcept - : SourceCodeInfo() { - *this = ::std::move(from); - } - - inline SourceCodeInfo& operator=(const SourceCodeInfo& from) { - CopyFrom(from); - return *this; - } - inline SourceCodeInfo& operator=(SourceCodeInfo&& from) noexcept { - if (this == &from) return *this; - if (GetOwningArena() == from.GetOwningArena() - #ifdef PROTOBUF_FORCE_COPY_IN_MOVE - && GetOwningArena() != nullptr - #endif // !PROTOBUF_FORCE_COPY_IN_MOVE - ) { - InternalSwap(&from); - } else { - CopyFrom(from); - } - return *this; - } - - inline const ::PROTOBUF_NAMESPACE_ID::UnknownFieldSet& unknown_fields() const { - return _internal_metadata_.unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(::PROTOBUF_NAMESPACE_ID::UnknownFieldSet::default_instance); - } - inline ::PROTOBUF_NAMESPACE_ID::UnknownFieldSet* mutable_unknown_fields() { - return _internal_metadata_.mutable_unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(); - } - - static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() { - return GetDescriptor(); - } - static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() { - return default_instance().GetMetadata().descriptor; - } - static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() { - return default_instance().GetMetadata().reflection; - } - static const SourceCodeInfo& default_instance() { - return *internal_default_instance(); - } - static inline const SourceCodeInfo* internal_default_instance() { - return reinterpret_cast<const SourceCodeInfo*>( - &_SourceCodeInfo_default_instance_); - } - static constexpr int kIndexInFileMessages = - 24; - - friend void swap(SourceCodeInfo& a, SourceCodeInfo& b) { - a.Swap(&b); - } - inline void Swap(SourceCodeInfo* other) { - if (other == this) return; - #ifdef PROTOBUF_FORCE_COPY_IN_SWAP - if (GetOwningArena() != nullptr && - GetOwningArena() == other->GetOwningArena()) { - #else // PROTOBUF_FORCE_COPY_IN_SWAP - if (GetOwningArena() == other->GetOwningArena()) { - #endif // !PROTOBUF_FORCE_COPY_IN_SWAP - InternalSwap(other); - } else { - ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other); - } - } - void UnsafeArenaSwap(SourceCodeInfo* other) { - if (other == this) return; - GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena()); - InternalSwap(other); - } - - // implements Message ---------------------------------------------- - - SourceCodeInfo* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final { - return CreateMaybeMessage<SourceCodeInfo>(arena); - } - using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom; - void CopyFrom(const SourceCodeInfo& from); - using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom; - void MergeFrom( const SourceCodeInfo& from) { - SourceCodeInfo::MergeImpl(*this, from); - } - private: - static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message& to_msg, const ::PROTOBUF_NAMESPACE_ID::Message& from_msg); - public: - PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final; - bool IsInitialized() const final; - - size_t ByteSizeLong() const final; - const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final; - uint8_t* _InternalSerialize( - uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final; - int GetCachedSize() const final { return _impl_._cached_size_.Get(); } - - private: - void SharedCtor(::PROTOBUF_NAMESPACE_ID::Arena* arena, bool is_message_owned); - void SharedDtor(); - void SetCachedSize(int size) const final; - void InternalSwap(SourceCodeInfo* other); - - private: - friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata; - static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() { - return "google.protobuf.SourceCodeInfo"; - } - protected: - explicit SourceCodeInfo(::PROTOBUF_NAMESPACE_ID::Arena* arena, - bool is_message_owned = false); - public: - - static const ClassData _class_data_; - const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final; - - ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final; - - // nested types ---------------------------------------------------- - - typedef SourceCodeInfo_Location Location; - - // accessors ------------------------------------------------------- - - enum : int { - kLocationFieldNumber = 1, - }; - // repeated .google.protobuf.SourceCodeInfo.Location location = 1; - int location_size() const; - private: - int _internal_location_size() const; - public: - void clear_location(); - ::PROTOBUF_NAMESPACE_ID::SourceCodeInfo_Location* mutable_location(int index); - ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::SourceCodeInfo_Location >* - mutable_location(); - private: - const ::PROTOBUF_NAMESPACE_ID::SourceCodeInfo_Location& _internal_location(int index) const; - ::PROTOBUF_NAMESPACE_ID::SourceCodeInfo_Location* _internal_add_location(); - public: - const ::PROTOBUF_NAMESPACE_ID::SourceCodeInfo_Location& location(int index) const; - ::PROTOBUF_NAMESPACE_ID::SourceCodeInfo_Location* add_location(); - const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::SourceCodeInfo_Location >& - location() const; - - // @@protoc_insertion_point(class_scope:google.protobuf.SourceCodeInfo) - private: - class _Internal; - - template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper; - typedef void InternalArenaConstructable_; - typedef void DestructorSkippable_; - struct Impl_ { - ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::SourceCodeInfo_Location > location_; - mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_; - }; - union { Impl_ _impl_; }; - friend struct ::TableStruct_google_2fprotobuf_2fdescriptor_2eproto; -}; -// ------------------------------------------------------------------- - -class PROTOBUF_EXPORT GeneratedCodeInfo_Annotation final : - public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:google.protobuf.GeneratedCodeInfo.Annotation) */ { - public: - inline GeneratedCodeInfo_Annotation() : GeneratedCodeInfo_Annotation(nullptr) {} - ~GeneratedCodeInfo_Annotation() override; - explicit PROTOBUF_CONSTEXPR GeneratedCodeInfo_Annotation(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized); - - GeneratedCodeInfo_Annotation(const GeneratedCodeInfo_Annotation& from); - GeneratedCodeInfo_Annotation(GeneratedCodeInfo_Annotation&& from) noexcept - : GeneratedCodeInfo_Annotation() { - *this = ::std::move(from); - } - - inline GeneratedCodeInfo_Annotation& operator=(const GeneratedCodeInfo_Annotation& from) { - CopyFrom(from); - return *this; - } - inline GeneratedCodeInfo_Annotation& operator=(GeneratedCodeInfo_Annotation&& from) noexcept { - if (this == &from) return *this; - if (GetOwningArena() == from.GetOwningArena() - #ifdef PROTOBUF_FORCE_COPY_IN_MOVE - && GetOwningArena() != nullptr - #endif // !PROTOBUF_FORCE_COPY_IN_MOVE - ) { - InternalSwap(&from); - } else { - CopyFrom(from); - } - return *this; - } - - inline const ::PROTOBUF_NAMESPACE_ID::UnknownFieldSet& unknown_fields() const { - return _internal_metadata_.unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(::PROTOBUF_NAMESPACE_ID::UnknownFieldSet::default_instance); - } - inline ::PROTOBUF_NAMESPACE_ID::UnknownFieldSet* mutable_unknown_fields() { - return _internal_metadata_.mutable_unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(); - } - - static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() { - return GetDescriptor(); - } - static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() { - return default_instance().GetMetadata().descriptor; - } - static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() { - return default_instance().GetMetadata().reflection; - } - static const GeneratedCodeInfo_Annotation& default_instance() { - return *internal_default_instance(); - } - static inline const GeneratedCodeInfo_Annotation* internal_default_instance() { - return reinterpret_cast<const GeneratedCodeInfo_Annotation*>( - &_GeneratedCodeInfo_Annotation_default_instance_); - } - static constexpr int kIndexInFileMessages = - 25; - - friend void swap(GeneratedCodeInfo_Annotation& a, GeneratedCodeInfo_Annotation& b) { - a.Swap(&b); - } - inline void Swap(GeneratedCodeInfo_Annotation* other) { - if (other == this) return; - #ifdef PROTOBUF_FORCE_COPY_IN_SWAP - if (GetOwningArena() != nullptr && - GetOwningArena() == other->GetOwningArena()) { - #else // PROTOBUF_FORCE_COPY_IN_SWAP - if (GetOwningArena() == other->GetOwningArena()) { - #endif // !PROTOBUF_FORCE_COPY_IN_SWAP - InternalSwap(other); - } else { - ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other); - } - } - void UnsafeArenaSwap(GeneratedCodeInfo_Annotation* other) { - if (other == this) return; - GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena()); - InternalSwap(other); - } - - // implements Message ---------------------------------------------- - - GeneratedCodeInfo_Annotation* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final { - return CreateMaybeMessage<GeneratedCodeInfo_Annotation>(arena); - } - using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom; - void CopyFrom(const GeneratedCodeInfo_Annotation& from); - using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom; - void MergeFrom( const GeneratedCodeInfo_Annotation& from) { - GeneratedCodeInfo_Annotation::MergeImpl(*this, from); - } - private: - static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message& to_msg, const ::PROTOBUF_NAMESPACE_ID::Message& from_msg); - public: - PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final; - bool IsInitialized() const final; - - size_t ByteSizeLong() const final; - const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final; - uint8_t* _InternalSerialize( - uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final; - int GetCachedSize() const final { return _impl_._cached_size_.Get(); } - - private: - void SharedCtor(::PROTOBUF_NAMESPACE_ID::Arena* arena, bool is_message_owned); - void SharedDtor(); - void SetCachedSize(int size) const final; - void InternalSwap(GeneratedCodeInfo_Annotation* other); - - private: - friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata; - static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() { - return "google.protobuf.GeneratedCodeInfo.Annotation"; - } - protected: - explicit GeneratedCodeInfo_Annotation(::PROTOBUF_NAMESPACE_ID::Arena* arena, - bool is_message_owned = false); - public: - - static const ClassData _class_data_; - const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final; - - ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final; - - // nested types ---------------------------------------------------- - - // accessors ------------------------------------------------------- - - enum : int { - kPathFieldNumber = 1, - kSourceFileFieldNumber = 2, - kBeginFieldNumber = 3, - kEndFieldNumber = 4, - }; - // repeated int32 path = 1 [packed = true]; - int path_size() const; - private: - int _internal_path_size() const; - public: - void clear_path(); - private: - int32_t _internal_path(int index) const; - const ::PROTOBUF_NAMESPACE_ID::RepeatedField< int32_t >& - _internal_path() const; - void _internal_add_path(int32_t value); - ::PROTOBUF_NAMESPACE_ID::RepeatedField< int32_t >* - _internal_mutable_path(); - public: - int32_t path(int index) const; - void set_path(int index, int32_t value); - void add_path(int32_t value); - const ::PROTOBUF_NAMESPACE_ID::RepeatedField< int32_t >& - path() const; - ::PROTOBUF_NAMESPACE_ID::RepeatedField< int32_t >* - mutable_path(); - - // optional string source_file = 2; - bool has_source_file() const; - private: - bool _internal_has_source_file() const; - public: - void clear_source_file(); - const std::string& source_file() const; - template <typename ArgT0 = const std::string&, typename... ArgT> - void set_source_file(ArgT0&& arg0, ArgT... args); - std::string* mutable_source_file(); - PROTOBUF_NODISCARD std::string* release_source_file(); - void set_allocated_source_file(std::string* source_file); - private: - const std::string& _internal_source_file() const; - inline PROTOBUF_ALWAYS_INLINE void _internal_set_source_file(const std::string& value); - std::string* _internal_mutable_source_file(); - public: - - // optional int32 begin = 3; - bool has_begin() const; - private: - bool _internal_has_begin() const; - public: - void clear_begin(); - int32_t begin() const; - void set_begin(int32_t value); - private: - int32_t _internal_begin() const; - void _internal_set_begin(int32_t value); - public: - - // optional int32 end = 4; - bool has_end() const; - private: - bool _internal_has_end() const; - public: - void clear_end(); - int32_t end() const; - void set_end(int32_t value); - private: - int32_t _internal_end() const; - void _internal_set_end(int32_t value); - public: - - // @@protoc_insertion_point(class_scope:google.protobuf.GeneratedCodeInfo.Annotation) - private: - class _Internal; - - template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper; - typedef void InternalArenaConstructable_; - typedef void DestructorSkippable_; - struct Impl_ { - ::PROTOBUF_NAMESPACE_ID::internal::HasBits<1> _has_bits_; - mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_; - ::PROTOBUF_NAMESPACE_ID::RepeatedField< int32_t > path_; - mutable std::atomic<int> _path_cached_byte_size_; - ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr source_file_; - int32_t begin_; - int32_t end_; - }; - union { Impl_ _impl_; }; - friend struct ::TableStruct_google_2fprotobuf_2fdescriptor_2eproto; -}; -// ------------------------------------------------------------------- - -class PROTOBUF_EXPORT GeneratedCodeInfo final : - public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:google.protobuf.GeneratedCodeInfo) */ { - public: - inline GeneratedCodeInfo() : GeneratedCodeInfo(nullptr) {} - ~GeneratedCodeInfo() override; - explicit PROTOBUF_CONSTEXPR GeneratedCodeInfo(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized); - - GeneratedCodeInfo(const GeneratedCodeInfo& from); - GeneratedCodeInfo(GeneratedCodeInfo&& from) noexcept - : GeneratedCodeInfo() { - *this = ::std::move(from); - } - - inline GeneratedCodeInfo& operator=(const GeneratedCodeInfo& from) { - CopyFrom(from); - return *this; - } - inline GeneratedCodeInfo& operator=(GeneratedCodeInfo&& from) noexcept { - if (this == &from) return *this; - if (GetOwningArena() == from.GetOwningArena() - #ifdef PROTOBUF_FORCE_COPY_IN_MOVE - && GetOwningArena() != nullptr - #endif // !PROTOBUF_FORCE_COPY_IN_MOVE - ) { - InternalSwap(&from); - } else { - CopyFrom(from); - } - return *this; - } - - inline const ::PROTOBUF_NAMESPACE_ID::UnknownFieldSet& unknown_fields() const { - return _internal_metadata_.unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(::PROTOBUF_NAMESPACE_ID::UnknownFieldSet::default_instance); - } - inline ::PROTOBUF_NAMESPACE_ID::UnknownFieldSet* mutable_unknown_fields() { - return _internal_metadata_.mutable_unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(); - } - - static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() { - return GetDescriptor(); - } - static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() { - return default_instance().GetMetadata().descriptor; - } - static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() { - return default_instance().GetMetadata().reflection; - } - static const GeneratedCodeInfo& default_instance() { - return *internal_default_instance(); - } - static inline const GeneratedCodeInfo* internal_default_instance() { - return reinterpret_cast<const GeneratedCodeInfo*>( - &_GeneratedCodeInfo_default_instance_); - } - static constexpr int kIndexInFileMessages = - 26; - - friend void swap(GeneratedCodeInfo& a, GeneratedCodeInfo& b) { - a.Swap(&b); - } - inline void Swap(GeneratedCodeInfo* other) { - if (other == this) return; - #ifdef PROTOBUF_FORCE_COPY_IN_SWAP - if (GetOwningArena() != nullptr && - GetOwningArena() == other->GetOwningArena()) { - #else // PROTOBUF_FORCE_COPY_IN_SWAP - if (GetOwningArena() == other->GetOwningArena()) { - #endif // !PROTOBUF_FORCE_COPY_IN_SWAP - InternalSwap(other); - } else { - ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other); - } - } - void UnsafeArenaSwap(GeneratedCodeInfo* other) { - if (other == this) return; - GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena()); - InternalSwap(other); - } - - // implements Message ---------------------------------------------- - - GeneratedCodeInfo* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final { - return CreateMaybeMessage<GeneratedCodeInfo>(arena); - } - using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom; - void CopyFrom(const GeneratedCodeInfo& from); - using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom; - void MergeFrom( const GeneratedCodeInfo& from) { - GeneratedCodeInfo::MergeImpl(*this, from); - } - private: - static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message& to_msg, const ::PROTOBUF_NAMESPACE_ID::Message& from_msg); - public: - PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final; - bool IsInitialized() const final; - - size_t ByteSizeLong() const final; - const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final; - uint8_t* _InternalSerialize( - uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final; - int GetCachedSize() const final { return _impl_._cached_size_.Get(); } - - private: - void SharedCtor(::PROTOBUF_NAMESPACE_ID::Arena* arena, bool is_message_owned); - void SharedDtor(); - void SetCachedSize(int size) const final; - void InternalSwap(GeneratedCodeInfo* other); - - private: - friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata; - static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() { - return "google.protobuf.GeneratedCodeInfo"; - } - protected: - explicit GeneratedCodeInfo(::PROTOBUF_NAMESPACE_ID::Arena* arena, - bool is_message_owned = false); - public: - - static const ClassData _class_data_; - const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final; - - ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final; - - // nested types ---------------------------------------------------- - - typedef GeneratedCodeInfo_Annotation Annotation; - - // accessors ------------------------------------------------------- - - enum : int { - kAnnotationFieldNumber = 1, - }; - // repeated .google.protobuf.GeneratedCodeInfo.Annotation annotation = 1; - int annotation_size() const; - private: - int _internal_annotation_size() const; - public: - void clear_annotation(); - ::PROTOBUF_NAMESPACE_ID::GeneratedCodeInfo_Annotation* mutable_annotation(int index); - ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::GeneratedCodeInfo_Annotation >* - mutable_annotation(); - private: - const ::PROTOBUF_NAMESPACE_ID::GeneratedCodeInfo_Annotation& _internal_annotation(int index) const; - ::PROTOBUF_NAMESPACE_ID::GeneratedCodeInfo_Annotation* _internal_add_annotation(); - public: - const ::PROTOBUF_NAMESPACE_ID::GeneratedCodeInfo_Annotation& annotation(int index) const; - ::PROTOBUF_NAMESPACE_ID::GeneratedCodeInfo_Annotation* add_annotation(); - const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::GeneratedCodeInfo_Annotation >& - annotation() const; - - // @@protoc_insertion_point(class_scope:google.protobuf.GeneratedCodeInfo) - private: - class _Internal; - - template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper; - typedef void InternalArenaConstructable_; - typedef void DestructorSkippable_; - struct Impl_ { - ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::GeneratedCodeInfo_Annotation > annotation_; - mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_; - }; - union { Impl_ _impl_; }; - friend struct ::TableStruct_google_2fprotobuf_2fdescriptor_2eproto; -}; -// =================================================================== - - -// =================================================================== - -#ifdef __GNUC__ - #pragma GCC diagnostic push - #pragma GCC diagnostic ignored "-Wstrict-aliasing" -#endif // __GNUC__ -// FileDescriptorSet - -// repeated .google.protobuf.FileDescriptorProto file = 1; -inline int FileDescriptorSet::_internal_file_size() const { - return _impl_.file_.size(); -} -inline int FileDescriptorSet::file_size() const { - return _internal_file_size(); -} -inline void FileDescriptorSet::clear_file() { - _impl_.file_.Clear(); -} -inline ::PROTOBUF_NAMESPACE_ID::FileDescriptorProto* FileDescriptorSet::mutable_file(int index) { - // @@protoc_insertion_point(field_mutable:google.protobuf.FileDescriptorSet.file) - return _impl_.file_.Mutable(index); -} -inline ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::FileDescriptorProto >* -FileDescriptorSet::mutable_file() { - // @@protoc_insertion_point(field_mutable_list:google.protobuf.FileDescriptorSet.file) - return &_impl_.file_; -} -inline const ::PROTOBUF_NAMESPACE_ID::FileDescriptorProto& FileDescriptorSet::_internal_file(int index) const { - return _impl_.file_.Get(index); -} -inline const ::PROTOBUF_NAMESPACE_ID::FileDescriptorProto& FileDescriptorSet::file(int index) const { - // @@protoc_insertion_point(field_get:google.protobuf.FileDescriptorSet.file) - return _internal_file(index); -} -inline ::PROTOBUF_NAMESPACE_ID::FileDescriptorProto* FileDescriptorSet::_internal_add_file() { - return _impl_.file_.Add(); -} -inline ::PROTOBUF_NAMESPACE_ID::FileDescriptorProto* FileDescriptorSet::add_file() { - ::PROTOBUF_NAMESPACE_ID::FileDescriptorProto* _add = _internal_add_file(); - // @@protoc_insertion_point(field_add:google.protobuf.FileDescriptorSet.file) - return _add; -} -inline const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::FileDescriptorProto >& -FileDescriptorSet::file() const { - // @@protoc_insertion_point(field_list:google.protobuf.FileDescriptorSet.file) - return _impl_.file_; -} - -// ------------------------------------------------------------------- - -// FileDescriptorProto - -// optional string name = 1; -inline bool FileDescriptorProto::_internal_has_name() const { - bool value = (_impl_._has_bits_[0] & 0x00000001u) != 0; - return value; -} -inline bool FileDescriptorProto::has_name() const { - return _internal_has_name(); -} -inline void FileDescriptorProto::clear_name() { - _impl_.name_.ClearToEmpty(); - _impl_._has_bits_[0] &= ~0x00000001u; -} -inline const std::string& FileDescriptorProto::name() const { - // @@protoc_insertion_point(field_get:google.protobuf.FileDescriptorProto.name) - return _internal_name(); -} -template <typename ArgT0, typename... ArgT> -inline PROTOBUF_ALWAYS_INLINE -void FileDescriptorProto::set_name(ArgT0&& arg0, ArgT... args) { - _impl_._has_bits_[0] |= 0x00000001u; - _impl_.name_.Set(static_cast<ArgT0 &&>(arg0), args..., GetArenaForAllocation()); - // @@protoc_insertion_point(field_set:google.protobuf.FileDescriptorProto.name) -} -inline std::string* FileDescriptorProto::mutable_name() { - std::string* _s = _internal_mutable_name(); - // @@protoc_insertion_point(field_mutable:google.protobuf.FileDescriptorProto.name) - return _s; -} -inline const std::string& FileDescriptorProto::_internal_name() const { - return _impl_.name_.Get(); -} -inline void FileDescriptorProto::_internal_set_name(const std::string& value) { - _impl_._has_bits_[0] |= 0x00000001u; - _impl_.name_.Set(value, GetArenaForAllocation()); -} -inline std::string* FileDescriptorProto::_internal_mutable_name() { - _impl_._has_bits_[0] |= 0x00000001u; - return _impl_.name_.Mutable(GetArenaForAllocation()); -} -inline std::string* FileDescriptorProto::release_name() { - // @@protoc_insertion_point(field_release:google.protobuf.FileDescriptorProto.name) - if (!_internal_has_name()) { - return nullptr; - } - _impl_._has_bits_[0] &= ~0x00000001u; - auto* p = _impl_.name_.Release(); -#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING - if (_impl_.name_.IsDefault()) { - _impl_.name_.Set("", GetArenaForAllocation()); - } -#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING - return p; -} -inline void FileDescriptorProto::set_allocated_name(std::string* name) { - if (name != nullptr) { - _impl_._has_bits_[0] |= 0x00000001u; - } else { - _impl_._has_bits_[0] &= ~0x00000001u; - } - _impl_.name_.SetAllocated(name, GetArenaForAllocation()); -#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING - if (_impl_.name_.IsDefault()) { - _impl_.name_.Set("", GetArenaForAllocation()); - } -#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING - // @@protoc_insertion_point(field_set_allocated:google.protobuf.FileDescriptorProto.name) -} - -// optional string package = 2; -inline bool FileDescriptorProto::_internal_has_package() const { - bool value = (_impl_._has_bits_[0] & 0x00000002u) != 0; - return value; -} -inline bool FileDescriptorProto::has_package() const { - return _internal_has_package(); -} -inline void FileDescriptorProto::clear_package() { - _impl_.package_.ClearToEmpty(); - _impl_._has_bits_[0] &= ~0x00000002u; -} -inline const std::string& FileDescriptorProto::package() const { - // @@protoc_insertion_point(field_get:google.protobuf.FileDescriptorProto.package) - return _internal_package(); -} -template <typename ArgT0, typename... ArgT> -inline PROTOBUF_ALWAYS_INLINE -void FileDescriptorProto::set_package(ArgT0&& arg0, ArgT... args) { - _impl_._has_bits_[0] |= 0x00000002u; - _impl_.package_.Set(static_cast<ArgT0 &&>(arg0), args..., GetArenaForAllocation()); - // @@protoc_insertion_point(field_set:google.protobuf.FileDescriptorProto.package) -} -inline std::string* FileDescriptorProto::mutable_package() { - std::string* _s = _internal_mutable_package(); - // @@protoc_insertion_point(field_mutable:google.protobuf.FileDescriptorProto.package) - return _s; -} -inline const std::string& FileDescriptorProto::_internal_package() const { - return _impl_.package_.Get(); -} -inline void FileDescriptorProto::_internal_set_package(const std::string& value) { - _impl_._has_bits_[0] |= 0x00000002u; - _impl_.package_.Set(value, GetArenaForAllocation()); -} -inline std::string* FileDescriptorProto::_internal_mutable_package() { - _impl_._has_bits_[0] |= 0x00000002u; - return _impl_.package_.Mutable(GetArenaForAllocation()); -} -inline std::string* FileDescriptorProto::release_package() { - // @@protoc_insertion_point(field_release:google.protobuf.FileDescriptorProto.package) - if (!_internal_has_package()) { - return nullptr; - } - _impl_._has_bits_[0] &= ~0x00000002u; - auto* p = _impl_.package_.Release(); -#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING - if (_impl_.package_.IsDefault()) { - _impl_.package_.Set("", GetArenaForAllocation()); - } -#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING - return p; -} -inline void FileDescriptorProto::set_allocated_package(std::string* package) { - if (package != nullptr) { - _impl_._has_bits_[0] |= 0x00000002u; - } else { - _impl_._has_bits_[0] &= ~0x00000002u; - } - _impl_.package_.SetAllocated(package, GetArenaForAllocation()); -#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING - if (_impl_.package_.IsDefault()) { - _impl_.package_.Set("", GetArenaForAllocation()); - } -#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING - // @@protoc_insertion_point(field_set_allocated:google.protobuf.FileDescriptorProto.package) -} - -// repeated string dependency = 3; -inline int FileDescriptorProto::_internal_dependency_size() const { - return _impl_.dependency_.size(); -} -inline int FileDescriptorProto::dependency_size() const { - return _internal_dependency_size(); -} -inline void FileDescriptorProto::clear_dependency() { - _impl_.dependency_.Clear(); -} -inline std::string* FileDescriptorProto::add_dependency() { - std::string* _s = _internal_add_dependency(); - // @@protoc_insertion_point(field_add_mutable:google.protobuf.FileDescriptorProto.dependency) - return _s; -} -inline const std::string& FileDescriptorProto::_internal_dependency(int index) const { - return _impl_.dependency_.Get(index); -} -inline const std::string& FileDescriptorProto::dependency(int index) const { - // @@protoc_insertion_point(field_get:google.protobuf.FileDescriptorProto.dependency) - return _internal_dependency(index); -} -inline std::string* FileDescriptorProto::mutable_dependency(int index) { - // @@protoc_insertion_point(field_mutable:google.protobuf.FileDescriptorProto.dependency) - return _impl_.dependency_.Mutable(index); -} -inline void FileDescriptorProto::set_dependency(int index, const std::string& value) { - _impl_.dependency_.Mutable(index)->assign(value); - // @@protoc_insertion_point(field_set:google.protobuf.FileDescriptorProto.dependency) -} -inline void FileDescriptorProto::set_dependency(int index, std::string&& value) { - _impl_.dependency_.Mutable(index)->assign(std::move(value)); - // @@protoc_insertion_point(field_set:google.protobuf.FileDescriptorProto.dependency) -} -inline void FileDescriptorProto::set_dependency(int index, const char* value) { - GOOGLE_DCHECK(value != nullptr); - _impl_.dependency_.Mutable(index)->assign(value); - // @@protoc_insertion_point(field_set_char:google.protobuf.FileDescriptorProto.dependency) -} -inline void FileDescriptorProto::set_dependency(int index, const char* value, size_t size) { - _impl_.dependency_.Mutable(index)->assign( - reinterpret_cast<const char*>(value), size); - // @@protoc_insertion_point(field_set_pointer:google.protobuf.FileDescriptorProto.dependency) -} -inline std::string* FileDescriptorProto::_internal_add_dependency() { - return _impl_.dependency_.Add(); -} -inline void FileDescriptorProto::add_dependency(const std::string& value) { - _impl_.dependency_.Add()->assign(value); - // @@protoc_insertion_point(field_add:google.protobuf.FileDescriptorProto.dependency) -} -inline void FileDescriptorProto::add_dependency(std::string&& value) { - _impl_.dependency_.Add(std::move(value)); - // @@protoc_insertion_point(field_add:google.protobuf.FileDescriptorProto.dependency) -} -inline void FileDescriptorProto::add_dependency(const char* value) { - GOOGLE_DCHECK(value != nullptr); - _impl_.dependency_.Add()->assign(value); - // @@protoc_insertion_point(field_add_char:google.protobuf.FileDescriptorProto.dependency) -} -inline void FileDescriptorProto::add_dependency(const char* value, size_t size) { - _impl_.dependency_.Add()->assign(reinterpret_cast<const char*>(value), size); - // @@protoc_insertion_point(field_add_pointer:google.protobuf.FileDescriptorProto.dependency) -} -inline const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField<std::string>& -FileDescriptorProto::dependency() const { - // @@protoc_insertion_point(field_list:google.protobuf.FileDescriptorProto.dependency) - return _impl_.dependency_; -} -inline ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField<std::string>* -FileDescriptorProto::mutable_dependency() { - // @@protoc_insertion_point(field_mutable_list:google.protobuf.FileDescriptorProto.dependency) - return &_impl_.dependency_; -} - -// repeated int32 public_dependency = 10; -inline int FileDescriptorProto::_internal_public_dependency_size() const { - return _impl_.public_dependency_.size(); -} -inline int FileDescriptorProto::public_dependency_size() const { - return _internal_public_dependency_size(); -} -inline void FileDescriptorProto::clear_public_dependency() { - _impl_.public_dependency_.Clear(); -} -inline int32_t FileDescriptorProto::_internal_public_dependency(int index) const { - return _impl_.public_dependency_.Get(index); -} -inline int32_t FileDescriptorProto::public_dependency(int index) const { - // @@protoc_insertion_point(field_get:google.protobuf.FileDescriptorProto.public_dependency) - return _internal_public_dependency(index); -} -inline void FileDescriptorProto::set_public_dependency(int index, int32_t value) { - _impl_.public_dependency_.Set(index, value); - // @@protoc_insertion_point(field_set:google.protobuf.FileDescriptorProto.public_dependency) -} -inline void FileDescriptorProto::_internal_add_public_dependency(int32_t value) { - _impl_.public_dependency_.Add(value); -} -inline void FileDescriptorProto::add_public_dependency(int32_t value) { - _internal_add_public_dependency(value); - // @@protoc_insertion_point(field_add:google.protobuf.FileDescriptorProto.public_dependency) -} -inline const ::PROTOBUF_NAMESPACE_ID::RepeatedField< int32_t >& -FileDescriptorProto::_internal_public_dependency() const { - return _impl_.public_dependency_; -} -inline const ::PROTOBUF_NAMESPACE_ID::RepeatedField< int32_t >& -FileDescriptorProto::public_dependency() const { - // @@protoc_insertion_point(field_list:google.protobuf.FileDescriptorProto.public_dependency) - return _internal_public_dependency(); -} -inline ::PROTOBUF_NAMESPACE_ID::RepeatedField< int32_t >* -FileDescriptorProto::_internal_mutable_public_dependency() { - return &_impl_.public_dependency_; -} -inline ::PROTOBUF_NAMESPACE_ID::RepeatedField< int32_t >* -FileDescriptorProto::mutable_public_dependency() { - // @@protoc_insertion_point(field_mutable_list:google.protobuf.FileDescriptorProto.public_dependency) - return _internal_mutable_public_dependency(); -} - -// repeated int32 weak_dependency = 11; -inline int FileDescriptorProto::_internal_weak_dependency_size() const { - return _impl_.weak_dependency_.size(); -} -inline int FileDescriptorProto::weak_dependency_size() const { - return _internal_weak_dependency_size(); -} -inline void FileDescriptorProto::clear_weak_dependency() { - _impl_.weak_dependency_.Clear(); -} -inline int32_t FileDescriptorProto::_internal_weak_dependency(int index) const { - return _impl_.weak_dependency_.Get(index); -} -inline int32_t FileDescriptorProto::weak_dependency(int index) const { - // @@protoc_insertion_point(field_get:google.protobuf.FileDescriptorProto.weak_dependency) - return _internal_weak_dependency(index); -} -inline void FileDescriptorProto::set_weak_dependency(int index, int32_t value) { - _impl_.weak_dependency_.Set(index, value); - // @@protoc_insertion_point(field_set:google.protobuf.FileDescriptorProto.weak_dependency) -} -inline void FileDescriptorProto::_internal_add_weak_dependency(int32_t value) { - _impl_.weak_dependency_.Add(value); -} -inline void FileDescriptorProto::add_weak_dependency(int32_t value) { - _internal_add_weak_dependency(value); - // @@protoc_insertion_point(field_add:google.protobuf.FileDescriptorProto.weak_dependency) -} -inline const ::PROTOBUF_NAMESPACE_ID::RepeatedField< int32_t >& -FileDescriptorProto::_internal_weak_dependency() const { - return _impl_.weak_dependency_; -} -inline const ::PROTOBUF_NAMESPACE_ID::RepeatedField< int32_t >& -FileDescriptorProto::weak_dependency() const { - // @@protoc_insertion_point(field_list:google.protobuf.FileDescriptorProto.weak_dependency) - return _internal_weak_dependency(); -} -inline ::PROTOBUF_NAMESPACE_ID::RepeatedField< int32_t >* -FileDescriptorProto::_internal_mutable_weak_dependency() { - return &_impl_.weak_dependency_; -} -inline ::PROTOBUF_NAMESPACE_ID::RepeatedField< int32_t >* -FileDescriptorProto::mutable_weak_dependency() { - // @@protoc_insertion_point(field_mutable_list:google.protobuf.FileDescriptorProto.weak_dependency) - return _internal_mutable_weak_dependency(); -} - -// repeated .google.protobuf.DescriptorProto message_type = 4; -inline int FileDescriptorProto::_internal_message_type_size() const { - return _impl_.message_type_.size(); -} -inline int FileDescriptorProto::message_type_size() const { - return _internal_message_type_size(); -} -inline void FileDescriptorProto::clear_message_type() { - _impl_.message_type_.Clear(); -} -inline ::PROTOBUF_NAMESPACE_ID::DescriptorProto* FileDescriptorProto::mutable_message_type(int index) { - // @@protoc_insertion_point(field_mutable:google.protobuf.FileDescriptorProto.message_type) - return _impl_.message_type_.Mutable(index); -} -inline ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::DescriptorProto >* -FileDescriptorProto::mutable_message_type() { - // @@protoc_insertion_point(field_mutable_list:google.protobuf.FileDescriptorProto.message_type) - return &_impl_.message_type_; -} -inline const ::PROTOBUF_NAMESPACE_ID::DescriptorProto& FileDescriptorProto::_internal_message_type(int index) const { - return _impl_.message_type_.Get(index); -} -inline const ::PROTOBUF_NAMESPACE_ID::DescriptorProto& FileDescriptorProto::message_type(int index) const { - // @@protoc_insertion_point(field_get:google.protobuf.FileDescriptorProto.message_type) - return _internal_message_type(index); -} -inline ::PROTOBUF_NAMESPACE_ID::DescriptorProto* FileDescriptorProto::_internal_add_message_type() { - return _impl_.message_type_.Add(); -} -inline ::PROTOBUF_NAMESPACE_ID::DescriptorProto* FileDescriptorProto::add_message_type() { - ::PROTOBUF_NAMESPACE_ID::DescriptorProto* _add = _internal_add_message_type(); - // @@protoc_insertion_point(field_add:google.protobuf.FileDescriptorProto.message_type) - return _add; -} -inline const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::DescriptorProto >& -FileDescriptorProto::message_type() const { - // @@protoc_insertion_point(field_list:google.protobuf.FileDescriptorProto.message_type) - return _impl_.message_type_; -} - -// repeated .google.protobuf.EnumDescriptorProto enum_type = 5; -inline int FileDescriptorProto::_internal_enum_type_size() const { - return _impl_.enum_type_.size(); -} -inline int FileDescriptorProto::enum_type_size() const { - return _internal_enum_type_size(); -} -inline void FileDescriptorProto::clear_enum_type() { - _impl_.enum_type_.Clear(); -} -inline ::PROTOBUF_NAMESPACE_ID::EnumDescriptorProto* FileDescriptorProto::mutable_enum_type(int index) { - // @@protoc_insertion_point(field_mutable:google.protobuf.FileDescriptorProto.enum_type) - return _impl_.enum_type_.Mutable(index); -} -inline ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::EnumDescriptorProto >* -FileDescriptorProto::mutable_enum_type() { - // @@protoc_insertion_point(field_mutable_list:google.protobuf.FileDescriptorProto.enum_type) - return &_impl_.enum_type_; -} -inline const ::PROTOBUF_NAMESPACE_ID::EnumDescriptorProto& FileDescriptorProto::_internal_enum_type(int index) const { - return _impl_.enum_type_.Get(index); -} -inline const ::PROTOBUF_NAMESPACE_ID::EnumDescriptorProto& FileDescriptorProto::enum_type(int index) const { - // @@protoc_insertion_point(field_get:google.protobuf.FileDescriptorProto.enum_type) - return _internal_enum_type(index); -} -inline ::PROTOBUF_NAMESPACE_ID::EnumDescriptorProto* FileDescriptorProto::_internal_add_enum_type() { - return _impl_.enum_type_.Add(); -} -inline ::PROTOBUF_NAMESPACE_ID::EnumDescriptorProto* FileDescriptorProto::add_enum_type() { - ::PROTOBUF_NAMESPACE_ID::EnumDescriptorProto* _add = _internal_add_enum_type(); - // @@protoc_insertion_point(field_add:google.protobuf.FileDescriptorProto.enum_type) - return _add; -} -inline const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::EnumDescriptorProto >& -FileDescriptorProto::enum_type() const { - // @@protoc_insertion_point(field_list:google.protobuf.FileDescriptorProto.enum_type) - return _impl_.enum_type_; -} - -// repeated .google.protobuf.ServiceDescriptorProto service = 6; -inline int FileDescriptorProto::_internal_service_size() const { - return _impl_.service_.size(); -} -inline int FileDescriptorProto::service_size() const { - return _internal_service_size(); -} -inline void FileDescriptorProto::clear_service() { - _impl_.service_.Clear(); -} -inline ::PROTOBUF_NAMESPACE_ID::ServiceDescriptorProto* FileDescriptorProto::mutable_service(int index) { - // @@protoc_insertion_point(field_mutable:google.protobuf.FileDescriptorProto.service) - return _impl_.service_.Mutable(index); -} -inline ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::ServiceDescriptorProto >* -FileDescriptorProto::mutable_service() { - // @@protoc_insertion_point(field_mutable_list:google.protobuf.FileDescriptorProto.service) - return &_impl_.service_; -} -inline const ::PROTOBUF_NAMESPACE_ID::ServiceDescriptorProto& FileDescriptorProto::_internal_service(int index) const { - return _impl_.service_.Get(index); -} -inline const ::PROTOBUF_NAMESPACE_ID::ServiceDescriptorProto& FileDescriptorProto::service(int index) const { - // @@protoc_insertion_point(field_get:google.protobuf.FileDescriptorProto.service) - return _internal_service(index); -} -inline ::PROTOBUF_NAMESPACE_ID::ServiceDescriptorProto* FileDescriptorProto::_internal_add_service() { - return _impl_.service_.Add(); -} -inline ::PROTOBUF_NAMESPACE_ID::ServiceDescriptorProto* FileDescriptorProto::add_service() { - ::PROTOBUF_NAMESPACE_ID::ServiceDescriptorProto* _add = _internal_add_service(); - // @@protoc_insertion_point(field_add:google.protobuf.FileDescriptorProto.service) - return _add; -} -inline const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::ServiceDescriptorProto >& -FileDescriptorProto::service() const { - // @@protoc_insertion_point(field_list:google.protobuf.FileDescriptorProto.service) - return _impl_.service_; -} - -// repeated .google.protobuf.FieldDescriptorProto extension = 7; -inline int FileDescriptorProto::_internal_extension_size() const { - return _impl_.extension_.size(); -} -inline int FileDescriptorProto::extension_size() const { - return _internal_extension_size(); -} -inline void FileDescriptorProto::clear_extension() { - _impl_.extension_.Clear(); -} -inline ::PROTOBUF_NAMESPACE_ID::FieldDescriptorProto* FileDescriptorProto::mutable_extension(int index) { - // @@protoc_insertion_point(field_mutable:google.protobuf.FileDescriptorProto.extension) - return _impl_.extension_.Mutable(index); -} -inline ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::FieldDescriptorProto >* -FileDescriptorProto::mutable_extension() { - // @@protoc_insertion_point(field_mutable_list:google.protobuf.FileDescriptorProto.extension) - return &_impl_.extension_; -} -inline const ::PROTOBUF_NAMESPACE_ID::FieldDescriptorProto& FileDescriptorProto::_internal_extension(int index) const { - return _impl_.extension_.Get(index); -} -inline const ::PROTOBUF_NAMESPACE_ID::FieldDescriptorProto& FileDescriptorProto::extension(int index) const { - // @@protoc_insertion_point(field_get:google.protobuf.FileDescriptorProto.extension) - return _internal_extension(index); -} -inline ::PROTOBUF_NAMESPACE_ID::FieldDescriptorProto* FileDescriptorProto::_internal_add_extension() { - return _impl_.extension_.Add(); -} -inline ::PROTOBUF_NAMESPACE_ID::FieldDescriptorProto* FileDescriptorProto::add_extension() { - ::PROTOBUF_NAMESPACE_ID::FieldDescriptorProto* _add = _internal_add_extension(); - // @@protoc_insertion_point(field_add:google.protobuf.FileDescriptorProto.extension) - return _add; -} -inline const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::FieldDescriptorProto >& -FileDescriptorProto::extension() const { - // @@protoc_insertion_point(field_list:google.protobuf.FileDescriptorProto.extension) - return _impl_.extension_; -} - -// optional .google.protobuf.FileOptions options = 8; -inline bool FileDescriptorProto::_internal_has_options() const { - bool value = (_impl_._has_bits_[0] & 0x00000008u) != 0; - PROTOBUF_ASSUME(!value || _impl_.options_ != nullptr); - return value; -} -inline bool FileDescriptorProto::has_options() const { - return _internal_has_options(); -} -inline void FileDescriptorProto::clear_options() { - if (_impl_.options_ != nullptr) _impl_.options_->Clear(); - _impl_._has_bits_[0] &= ~0x00000008u; -} -inline const ::PROTOBUF_NAMESPACE_ID::FileOptions& FileDescriptorProto::_internal_options() const { - const ::PROTOBUF_NAMESPACE_ID::FileOptions* p = _impl_.options_; - return p != nullptr ? *p : reinterpret_cast<const ::PROTOBUF_NAMESPACE_ID::FileOptions&>( - ::PROTOBUF_NAMESPACE_ID::_FileOptions_default_instance_); -} -inline const ::PROTOBUF_NAMESPACE_ID::FileOptions& FileDescriptorProto::options() const { - // @@protoc_insertion_point(field_get:google.protobuf.FileDescriptorProto.options) - return _internal_options(); -} -inline void FileDescriptorProto::unsafe_arena_set_allocated_options( - ::PROTOBUF_NAMESPACE_ID::FileOptions* options) { - if (GetArenaForAllocation() == nullptr) { - delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(_impl_.options_); - } - _impl_.options_ = options; - if (options) { - _impl_._has_bits_[0] |= 0x00000008u; - } else { - _impl_._has_bits_[0] &= ~0x00000008u; - } - // @@protoc_insertion_point(field_unsafe_arena_set_allocated:google.protobuf.FileDescriptorProto.options) -} -inline ::PROTOBUF_NAMESPACE_ID::FileOptions* FileDescriptorProto::release_options() { - _impl_._has_bits_[0] &= ~0x00000008u; - ::PROTOBUF_NAMESPACE_ID::FileOptions* temp = _impl_.options_; - _impl_.options_ = nullptr; -#ifdef PROTOBUF_FORCE_COPY_IN_RELEASE - auto* old = reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(temp); - temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp); - if (GetArenaForAllocation() == nullptr) { delete old; } -#else // PROTOBUF_FORCE_COPY_IN_RELEASE - if (GetArenaForAllocation() != nullptr) { - temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp); - } -#endif // !PROTOBUF_FORCE_COPY_IN_RELEASE - return temp; -} -inline ::PROTOBUF_NAMESPACE_ID::FileOptions* FileDescriptorProto::unsafe_arena_release_options() { - // @@protoc_insertion_point(field_release:google.protobuf.FileDescriptorProto.options) - _impl_._has_bits_[0] &= ~0x00000008u; - ::PROTOBUF_NAMESPACE_ID::FileOptions* temp = _impl_.options_; - _impl_.options_ = nullptr; - return temp; -} -inline ::PROTOBUF_NAMESPACE_ID::FileOptions* FileDescriptorProto::_internal_mutable_options() { - _impl_._has_bits_[0] |= 0x00000008u; - if (_impl_.options_ == nullptr) { - auto* p = CreateMaybeMessage<::PROTOBUF_NAMESPACE_ID::FileOptions>(GetArenaForAllocation()); - _impl_.options_ = p; - } - return _impl_.options_; -} -inline ::PROTOBUF_NAMESPACE_ID::FileOptions* FileDescriptorProto::mutable_options() { - ::PROTOBUF_NAMESPACE_ID::FileOptions* _msg = _internal_mutable_options(); - // @@protoc_insertion_point(field_mutable:google.protobuf.FileDescriptorProto.options) - return _msg; -} -inline void FileDescriptorProto::set_allocated_options(::PROTOBUF_NAMESPACE_ID::FileOptions* options) { - ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation(); - if (message_arena == nullptr) { - delete _impl_.options_; - } - if (options) { - ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena = - ::PROTOBUF_NAMESPACE_ID::Arena::InternalGetOwningArena(options); - if (message_arena != submessage_arena) { - options = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage( - message_arena, options, submessage_arena); - } - _impl_._has_bits_[0] |= 0x00000008u; - } else { - _impl_._has_bits_[0] &= ~0x00000008u; - } - _impl_.options_ = options; - // @@protoc_insertion_point(field_set_allocated:google.protobuf.FileDescriptorProto.options) -} - -// optional .google.protobuf.SourceCodeInfo source_code_info = 9; -inline bool FileDescriptorProto::_internal_has_source_code_info() const { - bool value = (_impl_._has_bits_[0] & 0x00000010u) != 0; - PROTOBUF_ASSUME(!value || _impl_.source_code_info_ != nullptr); - return value; -} -inline bool FileDescriptorProto::has_source_code_info() const { - return _internal_has_source_code_info(); -} -inline void FileDescriptorProto::clear_source_code_info() { - if (_impl_.source_code_info_ != nullptr) _impl_.source_code_info_->Clear(); - _impl_._has_bits_[0] &= ~0x00000010u; -} -inline const ::PROTOBUF_NAMESPACE_ID::SourceCodeInfo& FileDescriptorProto::_internal_source_code_info() const { - const ::PROTOBUF_NAMESPACE_ID::SourceCodeInfo* p = _impl_.source_code_info_; - return p != nullptr ? *p : reinterpret_cast<const ::PROTOBUF_NAMESPACE_ID::SourceCodeInfo&>( - ::PROTOBUF_NAMESPACE_ID::_SourceCodeInfo_default_instance_); -} -inline const ::PROTOBUF_NAMESPACE_ID::SourceCodeInfo& FileDescriptorProto::source_code_info() const { - // @@protoc_insertion_point(field_get:google.protobuf.FileDescriptorProto.source_code_info) - return _internal_source_code_info(); -} -inline void FileDescriptorProto::unsafe_arena_set_allocated_source_code_info( - ::PROTOBUF_NAMESPACE_ID::SourceCodeInfo* source_code_info) { - if (GetArenaForAllocation() == nullptr) { - delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(_impl_.source_code_info_); - } - _impl_.source_code_info_ = source_code_info; - if (source_code_info) { - _impl_._has_bits_[0] |= 0x00000010u; - } else { - _impl_._has_bits_[0] &= ~0x00000010u; - } - // @@protoc_insertion_point(field_unsafe_arena_set_allocated:google.protobuf.FileDescriptorProto.source_code_info) -} -inline ::PROTOBUF_NAMESPACE_ID::SourceCodeInfo* FileDescriptorProto::release_source_code_info() { - _impl_._has_bits_[0] &= ~0x00000010u; - ::PROTOBUF_NAMESPACE_ID::SourceCodeInfo* temp = _impl_.source_code_info_; - _impl_.source_code_info_ = nullptr; -#ifdef PROTOBUF_FORCE_COPY_IN_RELEASE - auto* old = reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(temp); - temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp); - if (GetArenaForAllocation() == nullptr) { delete old; } -#else // PROTOBUF_FORCE_COPY_IN_RELEASE - if (GetArenaForAllocation() != nullptr) { - temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp); - } -#endif // !PROTOBUF_FORCE_COPY_IN_RELEASE - return temp; -} -inline ::PROTOBUF_NAMESPACE_ID::SourceCodeInfo* FileDescriptorProto::unsafe_arena_release_source_code_info() { - // @@protoc_insertion_point(field_release:google.protobuf.FileDescriptorProto.source_code_info) - _impl_._has_bits_[0] &= ~0x00000010u; - ::PROTOBUF_NAMESPACE_ID::SourceCodeInfo* temp = _impl_.source_code_info_; - _impl_.source_code_info_ = nullptr; - return temp; -} -inline ::PROTOBUF_NAMESPACE_ID::SourceCodeInfo* FileDescriptorProto::_internal_mutable_source_code_info() { - _impl_._has_bits_[0] |= 0x00000010u; - if (_impl_.source_code_info_ == nullptr) { - auto* p = CreateMaybeMessage<::PROTOBUF_NAMESPACE_ID::SourceCodeInfo>(GetArenaForAllocation()); - _impl_.source_code_info_ = p; - } - return _impl_.source_code_info_; -} -inline ::PROTOBUF_NAMESPACE_ID::SourceCodeInfo* FileDescriptorProto::mutable_source_code_info() { - ::PROTOBUF_NAMESPACE_ID::SourceCodeInfo* _msg = _internal_mutable_source_code_info(); - // @@protoc_insertion_point(field_mutable:google.protobuf.FileDescriptorProto.source_code_info) - return _msg; -} -inline void FileDescriptorProto::set_allocated_source_code_info(::PROTOBUF_NAMESPACE_ID::SourceCodeInfo* source_code_info) { - ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation(); - if (message_arena == nullptr) { - delete _impl_.source_code_info_; - } - if (source_code_info) { - ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena = - ::PROTOBUF_NAMESPACE_ID::Arena::InternalGetOwningArena(source_code_info); - if (message_arena != submessage_arena) { - source_code_info = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage( - message_arena, source_code_info, submessage_arena); - } - _impl_._has_bits_[0] |= 0x00000010u; - } else { - _impl_._has_bits_[0] &= ~0x00000010u; - } - _impl_.source_code_info_ = source_code_info; - // @@protoc_insertion_point(field_set_allocated:google.protobuf.FileDescriptorProto.source_code_info) -} - -// optional string syntax = 12; -inline bool FileDescriptorProto::_internal_has_syntax() const { - bool value = (_impl_._has_bits_[0] & 0x00000004u) != 0; - return value; -} -inline bool FileDescriptorProto::has_syntax() const { - return _internal_has_syntax(); -} -inline void FileDescriptorProto::clear_syntax() { - _impl_.syntax_.ClearToEmpty(); - _impl_._has_bits_[0] &= ~0x00000004u; -} -inline const std::string& FileDescriptorProto::syntax() const { - // @@protoc_insertion_point(field_get:google.protobuf.FileDescriptorProto.syntax) - return _internal_syntax(); -} -template <typename ArgT0, typename... ArgT> -inline PROTOBUF_ALWAYS_INLINE -void FileDescriptorProto::set_syntax(ArgT0&& arg0, ArgT... args) { - _impl_._has_bits_[0] |= 0x00000004u; - _impl_.syntax_.Set(static_cast<ArgT0 &&>(arg0), args..., GetArenaForAllocation()); - // @@protoc_insertion_point(field_set:google.protobuf.FileDescriptorProto.syntax) -} -inline std::string* FileDescriptorProto::mutable_syntax() { - std::string* _s = _internal_mutable_syntax(); - // @@protoc_insertion_point(field_mutable:google.protobuf.FileDescriptorProto.syntax) - return _s; -} -inline const std::string& FileDescriptorProto::_internal_syntax() const { - return _impl_.syntax_.Get(); -} -inline void FileDescriptorProto::_internal_set_syntax(const std::string& value) { - _impl_._has_bits_[0] |= 0x00000004u; - _impl_.syntax_.Set(value, GetArenaForAllocation()); -} -inline std::string* FileDescriptorProto::_internal_mutable_syntax() { - _impl_._has_bits_[0] |= 0x00000004u; - return _impl_.syntax_.Mutable(GetArenaForAllocation()); -} -inline std::string* FileDescriptorProto::release_syntax() { - // @@protoc_insertion_point(field_release:google.protobuf.FileDescriptorProto.syntax) - if (!_internal_has_syntax()) { - return nullptr; - } - _impl_._has_bits_[0] &= ~0x00000004u; - auto* p = _impl_.syntax_.Release(); -#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING - if (_impl_.syntax_.IsDefault()) { - _impl_.syntax_.Set("", GetArenaForAllocation()); - } -#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING - return p; -} -inline void FileDescriptorProto::set_allocated_syntax(std::string* syntax) { - if (syntax != nullptr) { - _impl_._has_bits_[0] |= 0x00000004u; - } else { - _impl_._has_bits_[0] &= ~0x00000004u; - } - _impl_.syntax_.SetAllocated(syntax, GetArenaForAllocation()); -#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING - if (_impl_.syntax_.IsDefault()) { - _impl_.syntax_.Set("", GetArenaForAllocation()); - } -#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING - // @@protoc_insertion_point(field_set_allocated:google.protobuf.FileDescriptorProto.syntax) -} - -// ------------------------------------------------------------------- - -// DescriptorProto_ExtensionRange - -// optional int32 start = 1; -inline bool DescriptorProto_ExtensionRange::_internal_has_start() const { - bool value = (_impl_._has_bits_[0] & 0x00000002u) != 0; - return value; -} -inline bool DescriptorProto_ExtensionRange::has_start() const { - return _internal_has_start(); -} -inline void DescriptorProto_ExtensionRange::clear_start() { - _impl_.start_ = 0; - _impl_._has_bits_[0] &= ~0x00000002u; -} -inline int32_t DescriptorProto_ExtensionRange::_internal_start() const { - return _impl_.start_; -} -inline int32_t DescriptorProto_ExtensionRange::start() const { - // @@protoc_insertion_point(field_get:google.protobuf.DescriptorProto.ExtensionRange.start) - return _internal_start(); -} -inline void DescriptorProto_ExtensionRange::_internal_set_start(int32_t value) { - _impl_._has_bits_[0] |= 0x00000002u; - _impl_.start_ = value; -} -inline void DescriptorProto_ExtensionRange::set_start(int32_t value) { - _internal_set_start(value); - // @@protoc_insertion_point(field_set:google.protobuf.DescriptorProto.ExtensionRange.start) -} - -// optional int32 end = 2; -inline bool DescriptorProto_ExtensionRange::_internal_has_end() const { - bool value = (_impl_._has_bits_[0] & 0x00000004u) != 0; - return value; -} -inline bool DescriptorProto_ExtensionRange::has_end() const { - return _internal_has_end(); -} -inline void DescriptorProto_ExtensionRange::clear_end() { - _impl_.end_ = 0; - _impl_._has_bits_[0] &= ~0x00000004u; -} -inline int32_t DescriptorProto_ExtensionRange::_internal_end() const { - return _impl_.end_; -} -inline int32_t DescriptorProto_ExtensionRange::end() const { - // @@protoc_insertion_point(field_get:google.protobuf.DescriptorProto.ExtensionRange.end) - return _internal_end(); -} -inline void DescriptorProto_ExtensionRange::_internal_set_end(int32_t value) { - _impl_._has_bits_[0] |= 0x00000004u; - _impl_.end_ = value; -} -inline void DescriptorProto_ExtensionRange::set_end(int32_t value) { - _internal_set_end(value); - // @@protoc_insertion_point(field_set:google.protobuf.DescriptorProto.ExtensionRange.end) -} - -// optional .google.protobuf.ExtensionRangeOptions options = 3; -inline bool DescriptorProto_ExtensionRange::_internal_has_options() const { - bool value = (_impl_._has_bits_[0] & 0x00000001u) != 0; - PROTOBUF_ASSUME(!value || _impl_.options_ != nullptr); - return value; -} -inline bool DescriptorProto_ExtensionRange::has_options() const { - return _internal_has_options(); -} -inline void DescriptorProto_ExtensionRange::clear_options() { - if (_impl_.options_ != nullptr) _impl_.options_->Clear(); - _impl_._has_bits_[0] &= ~0x00000001u; -} -inline const ::PROTOBUF_NAMESPACE_ID::ExtensionRangeOptions& DescriptorProto_ExtensionRange::_internal_options() const { - const ::PROTOBUF_NAMESPACE_ID::ExtensionRangeOptions* p = _impl_.options_; - return p != nullptr ? *p : reinterpret_cast<const ::PROTOBUF_NAMESPACE_ID::ExtensionRangeOptions&>( - ::PROTOBUF_NAMESPACE_ID::_ExtensionRangeOptions_default_instance_); -} -inline const ::PROTOBUF_NAMESPACE_ID::ExtensionRangeOptions& DescriptorProto_ExtensionRange::options() const { - // @@protoc_insertion_point(field_get:google.protobuf.DescriptorProto.ExtensionRange.options) - return _internal_options(); -} -inline void DescriptorProto_ExtensionRange::unsafe_arena_set_allocated_options( - ::PROTOBUF_NAMESPACE_ID::ExtensionRangeOptions* options) { - if (GetArenaForAllocation() == nullptr) { - delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(_impl_.options_); - } - _impl_.options_ = options; - if (options) { - _impl_._has_bits_[0] |= 0x00000001u; - } else { - _impl_._has_bits_[0] &= ~0x00000001u; - } - // @@protoc_insertion_point(field_unsafe_arena_set_allocated:google.protobuf.DescriptorProto.ExtensionRange.options) -} -inline ::PROTOBUF_NAMESPACE_ID::ExtensionRangeOptions* DescriptorProto_ExtensionRange::release_options() { - _impl_._has_bits_[0] &= ~0x00000001u; - ::PROTOBUF_NAMESPACE_ID::ExtensionRangeOptions* temp = _impl_.options_; - _impl_.options_ = nullptr; -#ifdef PROTOBUF_FORCE_COPY_IN_RELEASE - auto* old = reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(temp); - temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp); - if (GetArenaForAllocation() == nullptr) { delete old; } -#else // PROTOBUF_FORCE_COPY_IN_RELEASE - if (GetArenaForAllocation() != nullptr) { - temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp); - } -#endif // !PROTOBUF_FORCE_COPY_IN_RELEASE - return temp; -} -inline ::PROTOBUF_NAMESPACE_ID::ExtensionRangeOptions* DescriptorProto_ExtensionRange::unsafe_arena_release_options() { - // @@protoc_insertion_point(field_release:google.protobuf.DescriptorProto.ExtensionRange.options) - _impl_._has_bits_[0] &= ~0x00000001u; - ::PROTOBUF_NAMESPACE_ID::ExtensionRangeOptions* temp = _impl_.options_; - _impl_.options_ = nullptr; - return temp; -} -inline ::PROTOBUF_NAMESPACE_ID::ExtensionRangeOptions* DescriptorProto_ExtensionRange::_internal_mutable_options() { - _impl_._has_bits_[0] |= 0x00000001u; - if (_impl_.options_ == nullptr) { - auto* p = CreateMaybeMessage<::PROTOBUF_NAMESPACE_ID::ExtensionRangeOptions>(GetArenaForAllocation()); - _impl_.options_ = p; - } - return _impl_.options_; -} -inline ::PROTOBUF_NAMESPACE_ID::ExtensionRangeOptions* DescriptorProto_ExtensionRange::mutable_options() { - ::PROTOBUF_NAMESPACE_ID::ExtensionRangeOptions* _msg = _internal_mutable_options(); - // @@protoc_insertion_point(field_mutable:google.protobuf.DescriptorProto.ExtensionRange.options) - return _msg; -} -inline void DescriptorProto_ExtensionRange::set_allocated_options(::PROTOBUF_NAMESPACE_ID::ExtensionRangeOptions* options) { - ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation(); - if (message_arena == nullptr) { - delete _impl_.options_; - } - if (options) { - ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena = - ::PROTOBUF_NAMESPACE_ID::Arena::InternalGetOwningArena(options); - if (message_arena != submessage_arena) { - options = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage( - message_arena, options, submessage_arena); - } - _impl_._has_bits_[0] |= 0x00000001u; - } else { - _impl_._has_bits_[0] &= ~0x00000001u; - } - _impl_.options_ = options; - // @@protoc_insertion_point(field_set_allocated:google.protobuf.DescriptorProto.ExtensionRange.options) -} - -// ------------------------------------------------------------------- - -// DescriptorProto_ReservedRange - -// optional int32 start = 1; -inline bool DescriptorProto_ReservedRange::_internal_has_start() const { - bool value = (_impl_._has_bits_[0] & 0x00000001u) != 0; - return value; -} -inline bool DescriptorProto_ReservedRange::has_start() const { - return _internal_has_start(); -} -inline void DescriptorProto_ReservedRange::clear_start() { - _impl_.start_ = 0; - _impl_._has_bits_[0] &= ~0x00000001u; -} -inline int32_t DescriptorProto_ReservedRange::_internal_start() const { - return _impl_.start_; -} -inline int32_t DescriptorProto_ReservedRange::start() const { - // @@protoc_insertion_point(field_get:google.protobuf.DescriptorProto.ReservedRange.start) - return _internal_start(); -} -inline void DescriptorProto_ReservedRange::_internal_set_start(int32_t value) { - _impl_._has_bits_[0] |= 0x00000001u; - _impl_.start_ = value; -} -inline void DescriptorProto_ReservedRange::set_start(int32_t value) { - _internal_set_start(value); - // @@protoc_insertion_point(field_set:google.protobuf.DescriptorProto.ReservedRange.start) -} - -// optional int32 end = 2; -inline bool DescriptorProto_ReservedRange::_internal_has_end() const { - bool value = (_impl_._has_bits_[0] & 0x00000002u) != 0; - return value; -} -inline bool DescriptorProto_ReservedRange::has_end() const { - return _internal_has_end(); -} -inline void DescriptorProto_ReservedRange::clear_end() { - _impl_.end_ = 0; - _impl_._has_bits_[0] &= ~0x00000002u; -} -inline int32_t DescriptorProto_ReservedRange::_internal_end() const { - return _impl_.end_; -} -inline int32_t DescriptorProto_ReservedRange::end() const { - // @@protoc_insertion_point(field_get:google.protobuf.DescriptorProto.ReservedRange.end) - return _internal_end(); -} -inline void DescriptorProto_ReservedRange::_internal_set_end(int32_t value) { - _impl_._has_bits_[0] |= 0x00000002u; - _impl_.end_ = value; -} -inline void DescriptorProto_ReservedRange::set_end(int32_t value) { - _internal_set_end(value); - // @@protoc_insertion_point(field_set:google.protobuf.DescriptorProto.ReservedRange.end) -} - -// ------------------------------------------------------------------- - -// DescriptorProto - -// optional string name = 1; -inline bool DescriptorProto::_internal_has_name() const { - bool value = (_impl_._has_bits_[0] & 0x00000001u) != 0; - return value; -} -inline bool DescriptorProto::has_name() const { - return _internal_has_name(); -} -inline void DescriptorProto::clear_name() { - _impl_.name_.ClearToEmpty(); - _impl_._has_bits_[0] &= ~0x00000001u; -} -inline const std::string& DescriptorProto::name() const { - // @@protoc_insertion_point(field_get:google.protobuf.DescriptorProto.name) - return _internal_name(); -} -template <typename ArgT0, typename... ArgT> -inline PROTOBUF_ALWAYS_INLINE -void DescriptorProto::set_name(ArgT0&& arg0, ArgT... args) { - _impl_._has_bits_[0] |= 0x00000001u; - _impl_.name_.Set(static_cast<ArgT0 &&>(arg0), args..., GetArenaForAllocation()); - // @@protoc_insertion_point(field_set:google.protobuf.DescriptorProto.name) -} -inline std::string* DescriptorProto::mutable_name() { - std::string* _s = _internal_mutable_name(); - // @@protoc_insertion_point(field_mutable:google.protobuf.DescriptorProto.name) - return _s; -} -inline const std::string& DescriptorProto::_internal_name() const { - return _impl_.name_.Get(); -} -inline void DescriptorProto::_internal_set_name(const std::string& value) { - _impl_._has_bits_[0] |= 0x00000001u; - _impl_.name_.Set(value, GetArenaForAllocation()); -} -inline std::string* DescriptorProto::_internal_mutable_name() { - _impl_._has_bits_[0] |= 0x00000001u; - return _impl_.name_.Mutable(GetArenaForAllocation()); -} -inline std::string* DescriptorProto::release_name() { - // @@protoc_insertion_point(field_release:google.protobuf.DescriptorProto.name) - if (!_internal_has_name()) { - return nullptr; - } - _impl_._has_bits_[0] &= ~0x00000001u; - auto* p = _impl_.name_.Release(); -#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING - if (_impl_.name_.IsDefault()) { - _impl_.name_.Set("", GetArenaForAllocation()); - } -#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING - return p; -} -inline void DescriptorProto::set_allocated_name(std::string* name) { - if (name != nullptr) { - _impl_._has_bits_[0] |= 0x00000001u; - } else { - _impl_._has_bits_[0] &= ~0x00000001u; - } - _impl_.name_.SetAllocated(name, GetArenaForAllocation()); -#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING - if (_impl_.name_.IsDefault()) { - _impl_.name_.Set("", GetArenaForAllocation()); - } -#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING - // @@protoc_insertion_point(field_set_allocated:google.protobuf.DescriptorProto.name) -} - -// repeated .google.protobuf.FieldDescriptorProto field = 2; -inline int DescriptorProto::_internal_field_size() const { - return _impl_.field_.size(); -} -inline int DescriptorProto::field_size() const { - return _internal_field_size(); -} -inline void DescriptorProto::clear_field() { - _impl_.field_.Clear(); -} -inline ::PROTOBUF_NAMESPACE_ID::FieldDescriptorProto* DescriptorProto::mutable_field(int index) { - // @@protoc_insertion_point(field_mutable:google.protobuf.DescriptorProto.field) - return _impl_.field_.Mutable(index); -} -inline ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::FieldDescriptorProto >* -DescriptorProto::mutable_field() { - // @@protoc_insertion_point(field_mutable_list:google.protobuf.DescriptorProto.field) - return &_impl_.field_; -} -inline const ::PROTOBUF_NAMESPACE_ID::FieldDescriptorProto& DescriptorProto::_internal_field(int index) const { - return _impl_.field_.Get(index); -} -inline const ::PROTOBUF_NAMESPACE_ID::FieldDescriptorProto& DescriptorProto::field(int index) const { - // @@protoc_insertion_point(field_get:google.protobuf.DescriptorProto.field) - return _internal_field(index); -} -inline ::PROTOBUF_NAMESPACE_ID::FieldDescriptorProto* DescriptorProto::_internal_add_field() { - return _impl_.field_.Add(); -} -inline ::PROTOBUF_NAMESPACE_ID::FieldDescriptorProto* DescriptorProto::add_field() { - ::PROTOBUF_NAMESPACE_ID::FieldDescriptorProto* _add = _internal_add_field(); - // @@protoc_insertion_point(field_add:google.protobuf.DescriptorProto.field) - return _add; -} -inline const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::FieldDescriptorProto >& -DescriptorProto::field() const { - // @@protoc_insertion_point(field_list:google.protobuf.DescriptorProto.field) - return _impl_.field_; -} - -// repeated .google.protobuf.FieldDescriptorProto extension = 6; -inline int DescriptorProto::_internal_extension_size() const { - return _impl_.extension_.size(); -} -inline int DescriptorProto::extension_size() const { - return _internal_extension_size(); -} -inline void DescriptorProto::clear_extension() { - _impl_.extension_.Clear(); -} -inline ::PROTOBUF_NAMESPACE_ID::FieldDescriptorProto* DescriptorProto::mutable_extension(int index) { - // @@protoc_insertion_point(field_mutable:google.protobuf.DescriptorProto.extension) - return _impl_.extension_.Mutable(index); -} -inline ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::FieldDescriptorProto >* -DescriptorProto::mutable_extension() { - // @@protoc_insertion_point(field_mutable_list:google.protobuf.DescriptorProto.extension) - return &_impl_.extension_; -} -inline const ::PROTOBUF_NAMESPACE_ID::FieldDescriptorProto& DescriptorProto::_internal_extension(int index) const { - return _impl_.extension_.Get(index); -} -inline const ::PROTOBUF_NAMESPACE_ID::FieldDescriptorProto& DescriptorProto::extension(int index) const { - // @@protoc_insertion_point(field_get:google.protobuf.DescriptorProto.extension) - return _internal_extension(index); -} -inline ::PROTOBUF_NAMESPACE_ID::FieldDescriptorProto* DescriptorProto::_internal_add_extension() { - return _impl_.extension_.Add(); -} -inline ::PROTOBUF_NAMESPACE_ID::FieldDescriptorProto* DescriptorProto::add_extension() { - ::PROTOBUF_NAMESPACE_ID::FieldDescriptorProto* _add = _internal_add_extension(); - // @@protoc_insertion_point(field_add:google.protobuf.DescriptorProto.extension) - return _add; -} -inline const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::FieldDescriptorProto >& -DescriptorProto::extension() const { - // @@protoc_insertion_point(field_list:google.protobuf.DescriptorProto.extension) - return _impl_.extension_; -} - -// repeated .google.protobuf.DescriptorProto nested_type = 3; -inline int DescriptorProto::_internal_nested_type_size() const { - return _impl_.nested_type_.size(); -} -inline int DescriptorProto::nested_type_size() const { - return _internal_nested_type_size(); -} -inline void DescriptorProto::clear_nested_type() { - _impl_.nested_type_.Clear(); -} -inline ::PROTOBUF_NAMESPACE_ID::DescriptorProto* DescriptorProto::mutable_nested_type(int index) { - // @@protoc_insertion_point(field_mutable:google.protobuf.DescriptorProto.nested_type) - return _impl_.nested_type_.Mutable(index); -} -inline ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::DescriptorProto >* -DescriptorProto::mutable_nested_type() { - // @@protoc_insertion_point(field_mutable_list:google.protobuf.DescriptorProto.nested_type) - return &_impl_.nested_type_; -} -inline const ::PROTOBUF_NAMESPACE_ID::DescriptorProto& DescriptorProto::_internal_nested_type(int index) const { - return _impl_.nested_type_.Get(index); -} -inline const ::PROTOBUF_NAMESPACE_ID::DescriptorProto& DescriptorProto::nested_type(int index) const { - // @@protoc_insertion_point(field_get:google.protobuf.DescriptorProto.nested_type) - return _internal_nested_type(index); -} -inline ::PROTOBUF_NAMESPACE_ID::DescriptorProto* DescriptorProto::_internal_add_nested_type() { - return _impl_.nested_type_.Add(); -} -inline ::PROTOBUF_NAMESPACE_ID::DescriptorProto* DescriptorProto::add_nested_type() { - ::PROTOBUF_NAMESPACE_ID::DescriptorProto* _add = _internal_add_nested_type(); - // @@protoc_insertion_point(field_add:google.protobuf.DescriptorProto.nested_type) - return _add; -} -inline const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::DescriptorProto >& -DescriptorProto::nested_type() const { - // @@protoc_insertion_point(field_list:google.protobuf.DescriptorProto.nested_type) - return _impl_.nested_type_; -} - -// repeated .google.protobuf.EnumDescriptorProto enum_type = 4; -inline int DescriptorProto::_internal_enum_type_size() const { - return _impl_.enum_type_.size(); -} -inline int DescriptorProto::enum_type_size() const { - return _internal_enum_type_size(); -} -inline void DescriptorProto::clear_enum_type() { - _impl_.enum_type_.Clear(); -} -inline ::PROTOBUF_NAMESPACE_ID::EnumDescriptorProto* DescriptorProto::mutable_enum_type(int index) { - // @@protoc_insertion_point(field_mutable:google.protobuf.DescriptorProto.enum_type) - return _impl_.enum_type_.Mutable(index); -} -inline ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::EnumDescriptorProto >* -DescriptorProto::mutable_enum_type() { - // @@protoc_insertion_point(field_mutable_list:google.protobuf.DescriptorProto.enum_type) - return &_impl_.enum_type_; -} -inline const ::PROTOBUF_NAMESPACE_ID::EnumDescriptorProto& DescriptorProto::_internal_enum_type(int index) const { - return _impl_.enum_type_.Get(index); -} -inline const ::PROTOBUF_NAMESPACE_ID::EnumDescriptorProto& DescriptorProto::enum_type(int index) const { - // @@protoc_insertion_point(field_get:google.protobuf.DescriptorProto.enum_type) - return _internal_enum_type(index); -} -inline ::PROTOBUF_NAMESPACE_ID::EnumDescriptorProto* DescriptorProto::_internal_add_enum_type() { - return _impl_.enum_type_.Add(); -} -inline ::PROTOBUF_NAMESPACE_ID::EnumDescriptorProto* DescriptorProto::add_enum_type() { - ::PROTOBUF_NAMESPACE_ID::EnumDescriptorProto* _add = _internal_add_enum_type(); - // @@protoc_insertion_point(field_add:google.protobuf.DescriptorProto.enum_type) - return _add; -} -inline const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::EnumDescriptorProto >& -DescriptorProto::enum_type() const { - // @@protoc_insertion_point(field_list:google.protobuf.DescriptorProto.enum_type) - return _impl_.enum_type_; -} - -// repeated .google.protobuf.DescriptorProto.ExtensionRange extension_range = 5; -inline int DescriptorProto::_internal_extension_range_size() const { - return _impl_.extension_range_.size(); -} -inline int DescriptorProto::extension_range_size() const { - return _internal_extension_range_size(); -} -inline void DescriptorProto::clear_extension_range() { - _impl_.extension_range_.Clear(); -} -inline ::PROTOBUF_NAMESPACE_ID::DescriptorProto_ExtensionRange* DescriptorProto::mutable_extension_range(int index) { - // @@protoc_insertion_point(field_mutable:google.protobuf.DescriptorProto.extension_range) - return _impl_.extension_range_.Mutable(index); -} -inline ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::DescriptorProto_ExtensionRange >* -DescriptorProto::mutable_extension_range() { - // @@protoc_insertion_point(field_mutable_list:google.protobuf.DescriptorProto.extension_range) - return &_impl_.extension_range_; -} -inline const ::PROTOBUF_NAMESPACE_ID::DescriptorProto_ExtensionRange& DescriptorProto::_internal_extension_range(int index) const { - return _impl_.extension_range_.Get(index); -} -inline const ::PROTOBUF_NAMESPACE_ID::DescriptorProto_ExtensionRange& DescriptorProto::extension_range(int index) const { - // @@protoc_insertion_point(field_get:google.protobuf.DescriptorProto.extension_range) - return _internal_extension_range(index); -} -inline ::PROTOBUF_NAMESPACE_ID::DescriptorProto_ExtensionRange* DescriptorProto::_internal_add_extension_range() { - return _impl_.extension_range_.Add(); -} -inline ::PROTOBUF_NAMESPACE_ID::DescriptorProto_ExtensionRange* DescriptorProto::add_extension_range() { - ::PROTOBUF_NAMESPACE_ID::DescriptorProto_ExtensionRange* _add = _internal_add_extension_range(); - // @@protoc_insertion_point(field_add:google.protobuf.DescriptorProto.extension_range) - return _add; -} -inline const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::DescriptorProto_ExtensionRange >& -DescriptorProto::extension_range() const { - // @@protoc_insertion_point(field_list:google.protobuf.DescriptorProto.extension_range) - return _impl_.extension_range_; -} - -// repeated .google.protobuf.OneofDescriptorProto oneof_decl = 8; -inline int DescriptorProto::_internal_oneof_decl_size() const { - return _impl_.oneof_decl_.size(); -} -inline int DescriptorProto::oneof_decl_size() const { - return _internal_oneof_decl_size(); -} -inline void DescriptorProto::clear_oneof_decl() { - _impl_.oneof_decl_.Clear(); -} -inline ::PROTOBUF_NAMESPACE_ID::OneofDescriptorProto* DescriptorProto::mutable_oneof_decl(int index) { - // @@protoc_insertion_point(field_mutable:google.protobuf.DescriptorProto.oneof_decl) - return _impl_.oneof_decl_.Mutable(index); -} -inline ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::OneofDescriptorProto >* -DescriptorProto::mutable_oneof_decl() { - // @@protoc_insertion_point(field_mutable_list:google.protobuf.DescriptorProto.oneof_decl) - return &_impl_.oneof_decl_; -} -inline const ::PROTOBUF_NAMESPACE_ID::OneofDescriptorProto& DescriptorProto::_internal_oneof_decl(int index) const { - return _impl_.oneof_decl_.Get(index); -} -inline const ::PROTOBUF_NAMESPACE_ID::OneofDescriptorProto& DescriptorProto::oneof_decl(int index) const { - // @@protoc_insertion_point(field_get:google.protobuf.DescriptorProto.oneof_decl) - return _internal_oneof_decl(index); -} -inline ::PROTOBUF_NAMESPACE_ID::OneofDescriptorProto* DescriptorProto::_internal_add_oneof_decl() { - return _impl_.oneof_decl_.Add(); -} -inline ::PROTOBUF_NAMESPACE_ID::OneofDescriptorProto* DescriptorProto::add_oneof_decl() { - ::PROTOBUF_NAMESPACE_ID::OneofDescriptorProto* _add = _internal_add_oneof_decl(); - // @@protoc_insertion_point(field_add:google.protobuf.DescriptorProto.oneof_decl) - return _add; -} -inline const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::OneofDescriptorProto >& -DescriptorProto::oneof_decl() const { - // @@protoc_insertion_point(field_list:google.protobuf.DescriptorProto.oneof_decl) - return _impl_.oneof_decl_; -} - -// optional .google.protobuf.MessageOptions options = 7; -inline bool DescriptorProto::_internal_has_options() const { - bool value = (_impl_._has_bits_[0] & 0x00000002u) != 0; - PROTOBUF_ASSUME(!value || _impl_.options_ != nullptr); - return value; -} -inline bool DescriptorProto::has_options() const { - return _internal_has_options(); -} -inline void DescriptorProto::clear_options() { - if (_impl_.options_ != nullptr) _impl_.options_->Clear(); - _impl_._has_bits_[0] &= ~0x00000002u; -} -inline const ::PROTOBUF_NAMESPACE_ID::MessageOptions& DescriptorProto::_internal_options() const { - const ::PROTOBUF_NAMESPACE_ID::MessageOptions* p = _impl_.options_; - return p != nullptr ? *p : reinterpret_cast<const ::PROTOBUF_NAMESPACE_ID::MessageOptions&>( - ::PROTOBUF_NAMESPACE_ID::_MessageOptions_default_instance_); -} -inline const ::PROTOBUF_NAMESPACE_ID::MessageOptions& DescriptorProto::options() const { - // @@protoc_insertion_point(field_get:google.protobuf.DescriptorProto.options) - return _internal_options(); -} -inline void DescriptorProto::unsafe_arena_set_allocated_options( - ::PROTOBUF_NAMESPACE_ID::MessageOptions* options) { - if (GetArenaForAllocation() == nullptr) { - delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(_impl_.options_); - } - _impl_.options_ = options; - if (options) { - _impl_._has_bits_[0] |= 0x00000002u; - } else { - _impl_._has_bits_[0] &= ~0x00000002u; - } - // @@protoc_insertion_point(field_unsafe_arena_set_allocated:google.protobuf.DescriptorProto.options) -} -inline ::PROTOBUF_NAMESPACE_ID::MessageOptions* DescriptorProto::release_options() { - _impl_._has_bits_[0] &= ~0x00000002u; - ::PROTOBUF_NAMESPACE_ID::MessageOptions* temp = _impl_.options_; - _impl_.options_ = nullptr; -#ifdef PROTOBUF_FORCE_COPY_IN_RELEASE - auto* old = reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(temp); - temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp); - if (GetArenaForAllocation() == nullptr) { delete old; } -#else // PROTOBUF_FORCE_COPY_IN_RELEASE - if (GetArenaForAllocation() != nullptr) { - temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp); - } -#endif // !PROTOBUF_FORCE_COPY_IN_RELEASE - return temp; -} -inline ::PROTOBUF_NAMESPACE_ID::MessageOptions* DescriptorProto::unsafe_arena_release_options() { - // @@protoc_insertion_point(field_release:google.protobuf.DescriptorProto.options) - _impl_._has_bits_[0] &= ~0x00000002u; - ::PROTOBUF_NAMESPACE_ID::MessageOptions* temp = _impl_.options_; - _impl_.options_ = nullptr; - return temp; -} -inline ::PROTOBUF_NAMESPACE_ID::MessageOptions* DescriptorProto::_internal_mutable_options() { - _impl_._has_bits_[0] |= 0x00000002u; - if (_impl_.options_ == nullptr) { - auto* p = CreateMaybeMessage<::PROTOBUF_NAMESPACE_ID::MessageOptions>(GetArenaForAllocation()); - _impl_.options_ = p; - } - return _impl_.options_; -} -inline ::PROTOBUF_NAMESPACE_ID::MessageOptions* DescriptorProto::mutable_options() { - ::PROTOBUF_NAMESPACE_ID::MessageOptions* _msg = _internal_mutable_options(); - // @@protoc_insertion_point(field_mutable:google.protobuf.DescriptorProto.options) - return _msg; -} -inline void DescriptorProto::set_allocated_options(::PROTOBUF_NAMESPACE_ID::MessageOptions* options) { - ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation(); - if (message_arena == nullptr) { - delete _impl_.options_; - } - if (options) { - ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena = - ::PROTOBUF_NAMESPACE_ID::Arena::InternalGetOwningArena(options); - if (message_arena != submessage_arena) { - options = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage( - message_arena, options, submessage_arena); - } - _impl_._has_bits_[0] |= 0x00000002u; - } else { - _impl_._has_bits_[0] &= ~0x00000002u; - } - _impl_.options_ = options; - // @@protoc_insertion_point(field_set_allocated:google.protobuf.DescriptorProto.options) -} - -// repeated .google.protobuf.DescriptorProto.ReservedRange reserved_range = 9; -inline int DescriptorProto::_internal_reserved_range_size() const { - return _impl_.reserved_range_.size(); -} -inline int DescriptorProto::reserved_range_size() const { - return _internal_reserved_range_size(); -} -inline void DescriptorProto::clear_reserved_range() { - _impl_.reserved_range_.Clear(); -} -inline ::PROTOBUF_NAMESPACE_ID::DescriptorProto_ReservedRange* DescriptorProto::mutable_reserved_range(int index) { - // @@protoc_insertion_point(field_mutable:google.protobuf.DescriptorProto.reserved_range) - return _impl_.reserved_range_.Mutable(index); -} -inline ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::DescriptorProto_ReservedRange >* -DescriptorProto::mutable_reserved_range() { - // @@protoc_insertion_point(field_mutable_list:google.protobuf.DescriptorProto.reserved_range) - return &_impl_.reserved_range_; -} -inline const ::PROTOBUF_NAMESPACE_ID::DescriptorProto_ReservedRange& DescriptorProto::_internal_reserved_range(int index) const { - return _impl_.reserved_range_.Get(index); -} -inline const ::PROTOBUF_NAMESPACE_ID::DescriptorProto_ReservedRange& DescriptorProto::reserved_range(int index) const { - // @@protoc_insertion_point(field_get:google.protobuf.DescriptorProto.reserved_range) - return _internal_reserved_range(index); -} -inline ::PROTOBUF_NAMESPACE_ID::DescriptorProto_ReservedRange* DescriptorProto::_internal_add_reserved_range() { - return _impl_.reserved_range_.Add(); -} -inline ::PROTOBUF_NAMESPACE_ID::DescriptorProto_ReservedRange* DescriptorProto::add_reserved_range() { - ::PROTOBUF_NAMESPACE_ID::DescriptorProto_ReservedRange* _add = _internal_add_reserved_range(); - // @@protoc_insertion_point(field_add:google.protobuf.DescriptorProto.reserved_range) - return _add; -} -inline const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::DescriptorProto_ReservedRange >& -DescriptorProto::reserved_range() const { - // @@protoc_insertion_point(field_list:google.protobuf.DescriptorProto.reserved_range) - return _impl_.reserved_range_; -} - -// repeated string reserved_name = 10; -inline int DescriptorProto::_internal_reserved_name_size() const { - return _impl_.reserved_name_.size(); -} -inline int DescriptorProto::reserved_name_size() const { - return _internal_reserved_name_size(); -} -inline void DescriptorProto::clear_reserved_name() { - _impl_.reserved_name_.Clear(); -} -inline std::string* DescriptorProto::add_reserved_name() { - std::string* _s = _internal_add_reserved_name(); - // @@protoc_insertion_point(field_add_mutable:google.protobuf.DescriptorProto.reserved_name) - return _s; -} -inline const std::string& DescriptorProto::_internal_reserved_name(int index) const { - return _impl_.reserved_name_.Get(index); -} -inline const std::string& DescriptorProto::reserved_name(int index) const { - // @@protoc_insertion_point(field_get:google.protobuf.DescriptorProto.reserved_name) - return _internal_reserved_name(index); -} -inline std::string* DescriptorProto::mutable_reserved_name(int index) { - // @@protoc_insertion_point(field_mutable:google.protobuf.DescriptorProto.reserved_name) - return _impl_.reserved_name_.Mutable(index); -} -inline void DescriptorProto::set_reserved_name(int index, const std::string& value) { - _impl_.reserved_name_.Mutable(index)->assign(value); - // @@protoc_insertion_point(field_set:google.protobuf.DescriptorProto.reserved_name) -} -inline void DescriptorProto::set_reserved_name(int index, std::string&& value) { - _impl_.reserved_name_.Mutable(index)->assign(std::move(value)); - // @@protoc_insertion_point(field_set:google.protobuf.DescriptorProto.reserved_name) -} -inline void DescriptorProto::set_reserved_name(int index, const char* value) { - GOOGLE_DCHECK(value != nullptr); - _impl_.reserved_name_.Mutable(index)->assign(value); - // @@protoc_insertion_point(field_set_char:google.protobuf.DescriptorProto.reserved_name) -} -inline void DescriptorProto::set_reserved_name(int index, const char* value, size_t size) { - _impl_.reserved_name_.Mutable(index)->assign( - reinterpret_cast<const char*>(value), size); - // @@protoc_insertion_point(field_set_pointer:google.protobuf.DescriptorProto.reserved_name) -} -inline std::string* DescriptorProto::_internal_add_reserved_name() { - return _impl_.reserved_name_.Add(); -} -inline void DescriptorProto::add_reserved_name(const std::string& value) { - _impl_.reserved_name_.Add()->assign(value); - // @@protoc_insertion_point(field_add:google.protobuf.DescriptorProto.reserved_name) -} -inline void DescriptorProto::add_reserved_name(std::string&& value) { - _impl_.reserved_name_.Add(std::move(value)); - // @@protoc_insertion_point(field_add:google.protobuf.DescriptorProto.reserved_name) -} -inline void DescriptorProto::add_reserved_name(const char* value) { - GOOGLE_DCHECK(value != nullptr); - _impl_.reserved_name_.Add()->assign(value); - // @@protoc_insertion_point(field_add_char:google.protobuf.DescriptorProto.reserved_name) -} -inline void DescriptorProto::add_reserved_name(const char* value, size_t size) { - _impl_.reserved_name_.Add()->assign(reinterpret_cast<const char*>(value), size); - // @@protoc_insertion_point(field_add_pointer:google.protobuf.DescriptorProto.reserved_name) -} -inline const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField<std::string>& -DescriptorProto::reserved_name() const { - // @@protoc_insertion_point(field_list:google.protobuf.DescriptorProto.reserved_name) - return _impl_.reserved_name_; -} -inline ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField<std::string>* -DescriptorProto::mutable_reserved_name() { - // @@protoc_insertion_point(field_mutable_list:google.protobuf.DescriptorProto.reserved_name) - return &_impl_.reserved_name_; -} - -// ------------------------------------------------------------------- - -// ExtensionRangeOptions - -// repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999; -inline int ExtensionRangeOptions::_internal_uninterpreted_option_size() const { - return _impl_.uninterpreted_option_.size(); -} -inline int ExtensionRangeOptions::uninterpreted_option_size() const { - return _internal_uninterpreted_option_size(); -} -inline void ExtensionRangeOptions::clear_uninterpreted_option() { - _impl_.uninterpreted_option_.Clear(); -} -inline ::PROTOBUF_NAMESPACE_ID::UninterpretedOption* ExtensionRangeOptions::mutable_uninterpreted_option(int index) { - // @@protoc_insertion_point(field_mutable:google.protobuf.ExtensionRangeOptions.uninterpreted_option) - return _impl_.uninterpreted_option_.Mutable(index); -} -inline ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::UninterpretedOption >* -ExtensionRangeOptions::mutable_uninterpreted_option() { - // @@protoc_insertion_point(field_mutable_list:google.protobuf.ExtensionRangeOptions.uninterpreted_option) - return &_impl_.uninterpreted_option_; -} -inline const ::PROTOBUF_NAMESPACE_ID::UninterpretedOption& ExtensionRangeOptions::_internal_uninterpreted_option(int index) const { - return _impl_.uninterpreted_option_.Get(index); -} -inline const ::PROTOBUF_NAMESPACE_ID::UninterpretedOption& ExtensionRangeOptions::uninterpreted_option(int index) const { - // @@protoc_insertion_point(field_get:google.protobuf.ExtensionRangeOptions.uninterpreted_option) - return _internal_uninterpreted_option(index); -} -inline ::PROTOBUF_NAMESPACE_ID::UninterpretedOption* ExtensionRangeOptions::_internal_add_uninterpreted_option() { - return _impl_.uninterpreted_option_.Add(); -} -inline ::PROTOBUF_NAMESPACE_ID::UninterpretedOption* ExtensionRangeOptions::add_uninterpreted_option() { - ::PROTOBUF_NAMESPACE_ID::UninterpretedOption* _add = _internal_add_uninterpreted_option(); - // @@protoc_insertion_point(field_add:google.protobuf.ExtensionRangeOptions.uninterpreted_option) - return _add; -} -inline const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::UninterpretedOption >& -ExtensionRangeOptions::uninterpreted_option() const { - // @@protoc_insertion_point(field_list:google.protobuf.ExtensionRangeOptions.uninterpreted_option) - return _impl_.uninterpreted_option_; -} - -// ------------------------------------------------------------------- - -// FieldDescriptorProto - -// optional string name = 1; -inline bool FieldDescriptorProto::_internal_has_name() const { - bool value = (_impl_._has_bits_[0] & 0x00000001u) != 0; - return value; -} -inline bool FieldDescriptorProto::has_name() const { - return _internal_has_name(); -} -inline void FieldDescriptorProto::clear_name() { - _impl_.name_.ClearToEmpty(); - _impl_._has_bits_[0] &= ~0x00000001u; -} -inline const std::string& FieldDescriptorProto::name() const { - // @@protoc_insertion_point(field_get:google.protobuf.FieldDescriptorProto.name) - return _internal_name(); -} -template <typename ArgT0, typename... ArgT> -inline PROTOBUF_ALWAYS_INLINE -void FieldDescriptorProto::set_name(ArgT0&& arg0, ArgT... args) { - _impl_._has_bits_[0] |= 0x00000001u; - _impl_.name_.Set(static_cast<ArgT0 &&>(arg0), args..., GetArenaForAllocation()); - // @@protoc_insertion_point(field_set:google.protobuf.FieldDescriptorProto.name) -} -inline std::string* FieldDescriptorProto::mutable_name() { - std::string* _s = _internal_mutable_name(); - // @@protoc_insertion_point(field_mutable:google.protobuf.FieldDescriptorProto.name) - return _s; -} -inline const std::string& FieldDescriptorProto::_internal_name() const { - return _impl_.name_.Get(); -} -inline void FieldDescriptorProto::_internal_set_name(const std::string& value) { - _impl_._has_bits_[0] |= 0x00000001u; - _impl_.name_.Set(value, GetArenaForAllocation()); -} -inline std::string* FieldDescriptorProto::_internal_mutable_name() { - _impl_._has_bits_[0] |= 0x00000001u; - return _impl_.name_.Mutable(GetArenaForAllocation()); -} -inline std::string* FieldDescriptorProto::release_name() { - // @@protoc_insertion_point(field_release:google.protobuf.FieldDescriptorProto.name) - if (!_internal_has_name()) { - return nullptr; - } - _impl_._has_bits_[0] &= ~0x00000001u; - auto* p = _impl_.name_.Release(); -#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING - if (_impl_.name_.IsDefault()) { - _impl_.name_.Set("", GetArenaForAllocation()); - } -#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING - return p; -} -inline void FieldDescriptorProto::set_allocated_name(std::string* name) { - if (name != nullptr) { - _impl_._has_bits_[0] |= 0x00000001u; - } else { - _impl_._has_bits_[0] &= ~0x00000001u; - } - _impl_.name_.SetAllocated(name, GetArenaForAllocation()); -#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING - if (_impl_.name_.IsDefault()) { - _impl_.name_.Set("", GetArenaForAllocation()); - } -#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING - // @@protoc_insertion_point(field_set_allocated:google.protobuf.FieldDescriptorProto.name) -} - -// optional int32 number = 3; -inline bool FieldDescriptorProto::_internal_has_number() const { - bool value = (_impl_._has_bits_[0] & 0x00000040u) != 0; - return value; -} -inline bool FieldDescriptorProto::has_number() const { - return _internal_has_number(); -} -inline void FieldDescriptorProto::clear_number() { - _impl_.number_ = 0; - _impl_._has_bits_[0] &= ~0x00000040u; -} -inline int32_t FieldDescriptorProto::_internal_number() const { - return _impl_.number_; -} -inline int32_t FieldDescriptorProto::number() const { - // @@protoc_insertion_point(field_get:google.protobuf.FieldDescriptorProto.number) - return _internal_number(); -} -inline void FieldDescriptorProto::_internal_set_number(int32_t value) { - _impl_._has_bits_[0] |= 0x00000040u; - _impl_.number_ = value; -} -inline void FieldDescriptorProto::set_number(int32_t value) { - _internal_set_number(value); - // @@protoc_insertion_point(field_set:google.protobuf.FieldDescriptorProto.number) -} - -// optional .google.protobuf.FieldDescriptorProto.Label label = 4; -inline bool FieldDescriptorProto::_internal_has_label() const { - bool value = (_impl_._has_bits_[0] & 0x00000200u) != 0; - return value; -} -inline bool FieldDescriptorProto::has_label() const { - return _internal_has_label(); -} -inline void FieldDescriptorProto::clear_label() { - _impl_.label_ = 1; - _impl_._has_bits_[0] &= ~0x00000200u; -} -inline ::PROTOBUF_NAMESPACE_ID::FieldDescriptorProto_Label FieldDescriptorProto::_internal_label() const { - return static_cast< ::PROTOBUF_NAMESPACE_ID::FieldDescriptorProto_Label >(_impl_.label_); -} -inline ::PROTOBUF_NAMESPACE_ID::FieldDescriptorProto_Label FieldDescriptorProto::label() const { - // @@protoc_insertion_point(field_get:google.protobuf.FieldDescriptorProto.label) - return _internal_label(); -} -inline void FieldDescriptorProto::_internal_set_label(::PROTOBUF_NAMESPACE_ID::FieldDescriptorProto_Label value) { - assert(::PROTOBUF_NAMESPACE_ID::FieldDescriptorProto_Label_IsValid(value)); - _impl_._has_bits_[0] |= 0x00000200u; - _impl_.label_ = value; -} -inline void FieldDescriptorProto::set_label(::PROTOBUF_NAMESPACE_ID::FieldDescriptorProto_Label value) { - _internal_set_label(value); - // @@protoc_insertion_point(field_set:google.protobuf.FieldDescriptorProto.label) -} - -// optional .google.protobuf.FieldDescriptorProto.Type type = 5; -inline bool FieldDescriptorProto::_internal_has_type() const { - bool value = (_impl_._has_bits_[0] & 0x00000400u) != 0; - return value; -} -inline bool FieldDescriptorProto::has_type() const { - return _internal_has_type(); -} -inline void FieldDescriptorProto::clear_type() { - _impl_.type_ = 1; - _impl_._has_bits_[0] &= ~0x00000400u; -} -inline ::PROTOBUF_NAMESPACE_ID::FieldDescriptorProto_Type FieldDescriptorProto::_internal_type() const { - return static_cast< ::PROTOBUF_NAMESPACE_ID::FieldDescriptorProto_Type >(_impl_.type_); -} -inline ::PROTOBUF_NAMESPACE_ID::FieldDescriptorProto_Type FieldDescriptorProto::type() const { - // @@protoc_insertion_point(field_get:google.protobuf.FieldDescriptorProto.type) - return _internal_type(); -} -inline void FieldDescriptorProto::_internal_set_type(::PROTOBUF_NAMESPACE_ID::FieldDescriptorProto_Type value) { - assert(::PROTOBUF_NAMESPACE_ID::FieldDescriptorProto_Type_IsValid(value)); - _impl_._has_bits_[0] |= 0x00000400u; - _impl_.type_ = value; -} -inline void FieldDescriptorProto::set_type(::PROTOBUF_NAMESPACE_ID::FieldDescriptorProto_Type value) { - _internal_set_type(value); - // @@protoc_insertion_point(field_set:google.protobuf.FieldDescriptorProto.type) -} - -// optional string type_name = 6; -inline bool FieldDescriptorProto::_internal_has_type_name() const { - bool value = (_impl_._has_bits_[0] & 0x00000004u) != 0; - return value; -} -inline bool FieldDescriptorProto::has_type_name() const { - return _internal_has_type_name(); -} -inline void FieldDescriptorProto::clear_type_name() { - _impl_.type_name_.ClearToEmpty(); - _impl_._has_bits_[0] &= ~0x00000004u; -} -inline const std::string& FieldDescriptorProto::type_name() const { - // @@protoc_insertion_point(field_get:google.protobuf.FieldDescriptorProto.type_name) - return _internal_type_name(); -} -template <typename ArgT0, typename... ArgT> -inline PROTOBUF_ALWAYS_INLINE -void FieldDescriptorProto::set_type_name(ArgT0&& arg0, ArgT... args) { - _impl_._has_bits_[0] |= 0x00000004u; - _impl_.type_name_.Set(static_cast<ArgT0 &&>(arg0), args..., GetArenaForAllocation()); - // @@protoc_insertion_point(field_set:google.protobuf.FieldDescriptorProto.type_name) -} -inline std::string* FieldDescriptorProto::mutable_type_name() { - std::string* _s = _internal_mutable_type_name(); - // @@protoc_insertion_point(field_mutable:google.protobuf.FieldDescriptorProto.type_name) - return _s; -} -inline const std::string& FieldDescriptorProto::_internal_type_name() const { - return _impl_.type_name_.Get(); -} -inline void FieldDescriptorProto::_internal_set_type_name(const std::string& value) { - _impl_._has_bits_[0] |= 0x00000004u; - _impl_.type_name_.Set(value, GetArenaForAllocation()); -} -inline std::string* FieldDescriptorProto::_internal_mutable_type_name() { - _impl_._has_bits_[0] |= 0x00000004u; - return _impl_.type_name_.Mutable(GetArenaForAllocation()); -} -inline std::string* FieldDescriptorProto::release_type_name() { - // @@protoc_insertion_point(field_release:google.protobuf.FieldDescriptorProto.type_name) - if (!_internal_has_type_name()) { - return nullptr; - } - _impl_._has_bits_[0] &= ~0x00000004u; - auto* p = _impl_.type_name_.Release(); -#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING - if (_impl_.type_name_.IsDefault()) { - _impl_.type_name_.Set("", GetArenaForAllocation()); - } -#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING - return p; -} -inline void FieldDescriptorProto::set_allocated_type_name(std::string* type_name) { - if (type_name != nullptr) { - _impl_._has_bits_[0] |= 0x00000004u; - } else { - _impl_._has_bits_[0] &= ~0x00000004u; - } - _impl_.type_name_.SetAllocated(type_name, GetArenaForAllocation()); -#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING - if (_impl_.type_name_.IsDefault()) { - _impl_.type_name_.Set("", GetArenaForAllocation()); - } -#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING - // @@protoc_insertion_point(field_set_allocated:google.protobuf.FieldDescriptorProto.type_name) -} - -// optional string extendee = 2; -inline bool FieldDescriptorProto::_internal_has_extendee() const { - bool value = (_impl_._has_bits_[0] & 0x00000002u) != 0; - return value; -} -inline bool FieldDescriptorProto::has_extendee() const { - return _internal_has_extendee(); -} -inline void FieldDescriptorProto::clear_extendee() { - _impl_.extendee_.ClearToEmpty(); - _impl_._has_bits_[0] &= ~0x00000002u; -} -inline const std::string& FieldDescriptorProto::extendee() const { - // @@protoc_insertion_point(field_get:google.protobuf.FieldDescriptorProto.extendee) - return _internal_extendee(); -} -template <typename ArgT0, typename... ArgT> -inline PROTOBUF_ALWAYS_INLINE -void FieldDescriptorProto::set_extendee(ArgT0&& arg0, ArgT... args) { - _impl_._has_bits_[0] |= 0x00000002u; - _impl_.extendee_.Set(static_cast<ArgT0 &&>(arg0), args..., GetArenaForAllocation()); - // @@protoc_insertion_point(field_set:google.protobuf.FieldDescriptorProto.extendee) -} -inline std::string* FieldDescriptorProto::mutable_extendee() { - std::string* _s = _internal_mutable_extendee(); - // @@protoc_insertion_point(field_mutable:google.protobuf.FieldDescriptorProto.extendee) - return _s; -} -inline const std::string& FieldDescriptorProto::_internal_extendee() const { - return _impl_.extendee_.Get(); -} -inline void FieldDescriptorProto::_internal_set_extendee(const std::string& value) { - _impl_._has_bits_[0] |= 0x00000002u; - _impl_.extendee_.Set(value, GetArenaForAllocation()); -} -inline std::string* FieldDescriptorProto::_internal_mutable_extendee() { - _impl_._has_bits_[0] |= 0x00000002u; - return _impl_.extendee_.Mutable(GetArenaForAllocation()); -} -inline std::string* FieldDescriptorProto::release_extendee() { - // @@protoc_insertion_point(field_release:google.protobuf.FieldDescriptorProto.extendee) - if (!_internal_has_extendee()) { - return nullptr; - } - _impl_._has_bits_[0] &= ~0x00000002u; - auto* p = _impl_.extendee_.Release(); -#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING - if (_impl_.extendee_.IsDefault()) { - _impl_.extendee_.Set("", GetArenaForAllocation()); - } -#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING - return p; -} -inline void FieldDescriptorProto::set_allocated_extendee(std::string* extendee) { - if (extendee != nullptr) { - _impl_._has_bits_[0] |= 0x00000002u; - } else { - _impl_._has_bits_[0] &= ~0x00000002u; - } - _impl_.extendee_.SetAllocated(extendee, GetArenaForAllocation()); -#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING - if (_impl_.extendee_.IsDefault()) { - _impl_.extendee_.Set("", GetArenaForAllocation()); - } -#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING - // @@protoc_insertion_point(field_set_allocated:google.protobuf.FieldDescriptorProto.extendee) -} - -// optional string default_value = 7; -inline bool FieldDescriptorProto::_internal_has_default_value() const { - bool value = (_impl_._has_bits_[0] & 0x00000008u) != 0; - return value; -} -inline bool FieldDescriptorProto::has_default_value() const { - return _internal_has_default_value(); -} -inline void FieldDescriptorProto::clear_default_value() { - _impl_.default_value_.ClearToEmpty(); - _impl_._has_bits_[0] &= ~0x00000008u; -} -inline const std::string& FieldDescriptorProto::default_value() const { - // @@protoc_insertion_point(field_get:google.protobuf.FieldDescriptorProto.default_value) - return _internal_default_value(); -} -template <typename ArgT0, typename... ArgT> -inline PROTOBUF_ALWAYS_INLINE -void FieldDescriptorProto::set_default_value(ArgT0&& arg0, ArgT... args) { - _impl_._has_bits_[0] |= 0x00000008u; - _impl_.default_value_.Set(static_cast<ArgT0 &&>(arg0), args..., GetArenaForAllocation()); - // @@protoc_insertion_point(field_set:google.protobuf.FieldDescriptorProto.default_value) -} -inline std::string* FieldDescriptorProto::mutable_default_value() { - std::string* _s = _internal_mutable_default_value(); - // @@protoc_insertion_point(field_mutable:google.protobuf.FieldDescriptorProto.default_value) - return _s; -} -inline const std::string& FieldDescriptorProto::_internal_default_value() const { - return _impl_.default_value_.Get(); -} -inline void FieldDescriptorProto::_internal_set_default_value(const std::string& value) { - _impl_._has_bits_[0] |= 0x00000008u; - _impl_.default_value_.Set(value, GetArenaForAllocation()); -} -inline std::string* FieldDescriptorProto::_internal_mutable_default_value() { - _impl_._has_bits_[0] |= 0x00000008u; - return _impl_.default_value_.Mutable(GetArenaForAllocation()); -} -inline std::string* FieldDescriptorProto::release_default_value() { - // @@protoc_insertion_point(field_release:google.protobuf.FieldDescriptorProto.default_value) - if (!_internal_has_default_value()) { - return nullptr; - } - _impl_._has_bits_[0] &= ~0x00000008u; - auto* p = _impl_.default_value_.Release(); -#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING - if (_impl_.default_value_.IsDefault()) { - _impl_.default_value_.Set("", GetArenaForAllocation()); - } -#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING - return p; -} -inline void FieldDescriptorProto::set_allocated_default_value(std::string* default_value) { - if (default_value != nullptr) { - _impl_._has_bits_[0] |= 0x00000008u; - } else { - _impl_._has_bits_[0] &= ~0x00000008u; - } - _impl_.default_value_.SetAllocated(default_value, GetArenaForAllocation()); -#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING - if (_impl_.default_value_.IsDefault()) { - _impl_.default_value_.Set("", GetArenaForAllocation()); - } -#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING - // @@protoc_insertion_point(field_set_allocated:google.protobuf.FieldDescriptorProto.default_value) -} - -// optional int32 oneof_index = 9; -inline bool FieldDescriptorProto::_internal_has_oneof_index() const { - bool value = (_impl_._has_bits_[0] & 0x00000080u) != 0; - return value; -} -inline bool FieldDescriptorProto::has_oneof_index() const { - return _internal_has_oneof_index(); -} -inline void FieldDescriptorProto::clear_oneof_index() { - _impl_.oneof_index_ = 0; - _impl_._has_bits_[0] &= ~0x00000080u; -} -inline int32_t FieldDescriptorProto::_internal_oneof_index() const { - return _impl_.oneof_index_; -} -inline int32_t FieldDescriptorProto::oneof_index() const { - // @@protoc_insertion_point(field_get:google.protobuf.FieldDescriptorProto.oneof_index) - return _internal_oneof_index(); -} -inline void FieldDescriptorProto::_internal_set_oneof_index(int32_t value) { - _impl_._has_bits_[0] |= 0x00000080u; - _impl_.oneof_index_ = value; -} -inline void FieldDescriptorProto::set_oneof_index(int32_t value) { - _internal_set_oneof_index(value); - // @@protoc_insertion_point(field_set:google.protobuf.FieldDescriptorProto.oneof_index) -} - -// optional string json_name = 10; -inline bool FieldDescriptorProto::_internal_has_json_name() const { - bool value = (_impl_._has_bits_[0] & 0x00000010u) != 0; - return value; -} -inline bool FieldDescriptorProto::has_json_name() const { - return _internal_has_json_name(); -} -inline void FieldDescriptorProto::clear_json_name() { - _impl_.json_name_.ClearToEmpty(); - _impl_._has_bits_[0] &= ~0x00000010u; -} -inline const std::string& FieldDescriptorProto::json_name() const { - // @@protoc_insertion_point(field_get:google.protobuf.FieldDescriptorProto.json_name) - return _internal_json_name(); -} -template <typename ArgT0, typename... ArgT> -inline PROTOBUF_ALWAYS_INLINE -void FieldDescriptorProto::set_json_name(ArgT0&& arg0, ArgT... args) { - _impl_._has_bits_[0] |= 0x00000010u; - _impl_.json_name_.Set(static_cast<ArgT0 &&>(arg0), args..., GetArenaForAllocation()); - // @@protoc_insertion_point(field_set:google.protobuf.FieldDescriptorProto.json_name) -} -inline std::string* FieldDescriptorProto::mutable_json_name() { - std::string* _s = _internal_mutable_json_name(); - // @@protoc_insertion_point(field_mutable:google.protobuf.FieldDescriptorProto.json_name) - return _s; -} -inline const std::string& FieldDescriptorProto::_internal_json_name() const { - return _impl_.json_name_.Get(); -} -inline void FieldDescriptorProto::_internal_set_json_name(const std::string& value) { - _impl_._has_bits_[0] |= 0x00000010u; - _impl_.json_name_.Set(value, GetArenaForAllocation()); -} -inline std::string* FieldDescriptorProto::_internal_mutable_json_name() { - _impl_._has_bits_[0] |= 0x00000010u; - return _impl_.json_name_.Mutable(GetArenaForAllocation()); -} -inline std::string* FieldDescriptorProto::release_json_name() { - // @@protoc_insertion_point(field_release:google.protobuf.FieldDescriptorProto.json_name) - if (!_internal_has_json_name()) { - return nullptr; - } - _impl_._has_bits_[0] &= ~0x00000010u; - auto* p = _impl_.json_name_.Release(); -#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING - if (_impl_.json_name_.IsDefault()) { - _impl_.json_name_.Set("", GetArenaForAllocation()); - } -#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING - return p; -} -inline void FieldDescriptorProto::set_allocated_json_name(std::string* json_name) { - if (json_name != nullptr) { - _impl_._has_bits_[0] |= 0x00000010u; - } else { - _impl_._has_bits_[0] &= ~0x00000010u; - } - _impl_.json_name_.SetAllocated(json_name, GetArenaForAllocation()); -#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING - if (_impl_.json_name_.IsDefault()) { - _impl_.json_name_.Set("", GetArenaForAllocation()); - } -#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING - // @@protoc_insertion_point(field_set_allocated:google.protobuf.FieldDescriptorProto.json_name) -} - -// optional .google.protobuf.FieldOptions options = 8; -inline bool FieldDescriptorProto::_internal_has_options() const { - bool value = (_impl_._has_bits_[0] & 0x00000020u) != 0; - PROTOBUF_ASSUME(!value || _impl_.options_ != nullptr); - return value; -} -inline bool FieldDescriptorProto::has_options() const { - return _internal_has_options(); -} -inline void FieldDescriptorProto::clear_options() { - if (_impl_.options_ != nullptr) _impl_.options_->Clear(); - _impl_._has_bits_[0] &= ~0x00000020u; -} -inline const ::PROTOBUF_NAMESPACE_ID::FieldOptions& FieldDescriptorProto::_internal_options() const { - const ::PROTOBUF_NAMESPACE_ID::FieldOptions* p = _impl_.options_; - return p != nullptr ? *p : reinterpret_cast<const ::PROTOBUF_NAMESPACE_ID::FieldOptions&>( - ::PROTOBUF_NAMESPACE_ID::_FieldOptions_default_instance_); -} -inline const ::PROTOBUF_NAMESPACE_ID::FieldOptions& FieldDescriptorProto::options() const { - // @@protoc_insertion_point(field_get:google.protobuf.FieldDescriptorProto.options) - return _internal_options(); -} -inline void FieldDescriptorProto::unsafe_arena_set_allocated_options( - ::PROTOBUF_NAMESPACE_ID::FieldOptions* options) { - if (GetArenaForAllocation() == nullptr) { - delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(_impl_.options_); - } - _impl_.options_ = options; - if (options) { - _impl_._has_bits_[0] |= 0x00000020u; - } else { - _impl_._has_bits_[0] &= ~0x00000020u; - } - // @@protoc_insertion_point(field_unsafe_arena_set_allocated:google.protobuf.FieldDescriptorProto.options) -} -inline ::PROTOBUF_NAMESPACE_ID::FieldOptions* FieldDescriptorProto::release_options() { - _impl_._has_bits_[0] &= ~0x00000020u; - ::PROTOBUF_NAMESPACE_ID::FieldOptions* temp = _impl_.options_; - _impl_.options_ = nullptr; -#ifdef PROTOBUF_FORCE_COPY_IN_RELEASE - auto* old = reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(temp); - temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp); - if (GetArenaForAllocation() == nullptr) { delete old; } -#else // PROTOBUF_FORCE_COPY_IN_RELEASE - if (GetArenaForAllocation() != nullptr) { - temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp); - } -#endif // !PROTOBUF_FORCE_COPY_IN_RELEASE - return temp; -} -inline ::PROTOBUF_NAMESPACE_ID::FieldOptions* FieldDescriptorProto::unsafe_arena_release_options() { - // @@protoc_insertion_point(field_release:google.protobuf.FieldDescriptorProto.options) - _impl_._has_bits_[0] &= ~0x00000020u; - ::PROTOBUF_NAMESPACE_ID::FieldOptions* temp = _impl_.options_; - _impl_.options_ = nullptr; - return temp; -} -inline ::PROTOBUF_NAMESPACE_ID::FieldOptions* FieldDescriptorProto::_internal_mutable_options() { - _impl_._has_bits_[0] |= 0x00000020u; - if (_impl_.options_ == nullptr) { - auto* p = CreateMaybeMessage<::PROTOBUF_NAMESPACE_ID::FieldOptions>(GetArenaForAllocation()); - _impl_.options_ = p; - } - return _impl_.options_; -} -inline ::PROTOBUF_NAMESPACE_ID::FieldOptions* FieldDescriptorProto::mutable_options() { - ::PROTOBUF_NAMESPACE_ID::FieldOptions* _msg = _internal_mutable_options(); - // @@protoc_insertion_point(field_mutable:google.protobuf.FieldDescriptorProto.options) - return _msg; -} -inline void FieldDescriptorProto::set_allocated_options(::PROTOBUF_NAMESPACE_ID::FieldOptions* options) { - ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation(); - if (message_arena == nullptr) { - delete _impl_.options_; - } - if (options) { - ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena = - ::PROTOBUF_NAMESPACE_ID::Arena::InternalGetOwningArena(options); - if (message_arena != submessage_arena) { - options = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage( - message_arena, options, submessage_arena); - } - _impl_._has_bits_[0] |= 0x00000020u; - } else { - _impl_._has_bits_[0] &= ~0x00000020u; - } - _impl_.options_ = options; - // @@protoc_insertion_point(field_set_allocated:google.protobuf.FieldDescriptorProto.options) -} - -// optional bool proto3_optional = 17; -inline bool FieldDescriptorProto::_internal_has_proto3_optional() const { - bool value = (_impl_._has_bits_[0] & 0x00000100u) != 0; - return value; -} -inline bool FieldDescriptorProto::has_proto3_optional() const { - return _internal_has_proto3_optional(); -} -inline void FieldDescriptorProto::clear_proto3_optional() { - _impl_.proto3_optional_ = false; - _impl_._has_bits_[0] &= ~0x00000100u; -} -inline bool FieldDescriptorProto::_internal_proto3_optional() const { - return _impl_.proto3_optional_; -} -inline bool FieldDescriptorProto::proto3_optional() const { - // @@protoc_insertion_point(field_get:google.protobuf.FieldDescriptorProto.proto3_optional) - return _internal_proto3_optional(); -} -inline void FieldDescriptorProto::_internal_set_proto3_optional(bool value) { - _impl_._has_bits_[0] |= 0x00000100u; - _impl_.proto3_optional_ = value; -} -inline void FieldDescriptorProto::set_proto3_optional(bool value) { - _internal_set_proto3_optional(value); - // @@protoc_insertion_point(field_set:google.protobuf.FieldDescriptorProto.proto3_optional) -} - -// ------------------------------------------------------------------- - -// OneofDescriptorProto - -// optional string name = 1; -inline bool OneofDescriptorProto::_internal_has_name() const { - bool value = (_impl_._has_bits_[0] & 0x00000001u) != 0; - return value; -} -inline bool OneofDescriptorProto::has_name() const { - return _internal_has_name(); -} -inline void OneofDescriptorProto::clear_name() { - _impl_.name_.ClearToEmpty(); - _impl_._has_bits_[0] &= ~0x00000001u; -} -inline const std::string& OneofDescriptorProto::name() const { - // @@protoc_insertion_point(field_get:google.protobuf.OneofDescriptorProto.name) - return _internal_name(); -} -template <typename ArgT0, typename... ArgT> -inline PROTOBUF_ALWAYS_INLINE -void OneofDescriptorProto::set_name(ArgT0&& arg0, ArgT... args) { - _impl_._has_bits_[0] |= 0x00000001u; - _impl_.name_.Set(static_cast<ArgT0 &&>(arg0), args..., GetArenaForAllocation()); - // @@protoc_insertion_point(field_set:google.protobuf.OneofDescriptorProto.name) -} -inline std::string* OneofDescriptorProto::mutable_name() { - std::string* _s = _internal_mutable_name(); - // @@protoc_insertion_point(field_mutable:google.protobuf.OneofDescriptorProto.name) - return _s; -} -inline const std::string& OneofDescriptorProto::_internal_name() const { - return _impl_.name_.Get(); -} -inline void OneofDescriptorProto::_internal_set_name(const std::string& value) { - _impl_._has_bits_[0] |= 0x00000001u; - _impl_.name_.Set(value, GetArenaForAllocation()); -} -inline std::string* OneofDescriptorProto::_internal_mutable_name() { - _impl_._has_bits_[0] |= 0x00000001u; - return _impl_.name_.Mutable(GetArenaForAllocation()); -} -inline std::string* OneofDescriptorProto::release_name() { - // @@protoc_insertion_point(field_release:google.protobuf.OneofDescriptorProto.name) - if (!_internal_has_name()) { - return nullptr; - } - _impl_._has_bits_[0] &= ~0x00000001u; - auto* p = _impl_.name_.Release(); -#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING - if (_impl_.name_.IsDefault()) { - _impl_.name_.Set("", GetArenaForAllocation()); - } -#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING - return p; -} -inline void OneofDescriptorProto::set_allocated_name(std::string* name) { - if (name != nullptr) { - _impl_._has_bits_[0] |= 0x00000001u; - } else { - _impl_._has_bits_[0] &= ~0x00000001u; - } - _impl_.name_.SetAllocated(name, GetArenaForAllocation()); -#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING - if (_impl_.name_.IsDefault()) { - _impl_.name_.Set("", GetArenaForAllocation()); - } -#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING - // @@protoc_insertion_point(field_set_allocated:google.protobuf.OneofDescriptorProto.name) -} - -// optional .google.protobuf.OneofOptions options = 2; -inline bool OneofDescriptorProto::_internal_has_options() const { - bool value = (_impl_._has_bits_[0] & 0x00000002u) != 0; - PROTOBUF_ASSUME(!value || _impl_.options_ != nullptr); - return value; -} -inline bool OneofDescriptorProto::has_options() const { - return _internal_has_options(); -} -inline void OneofDescriptorProto::clear_options() { - if (_impl_.options_ != nullptr) _impl_.options_->Clear(); - _impl_._has_bits_[0] &= ~0x00000002u; -} -inline const ::PROTOBUF_NAMESPACE_ID::OneofOptions& OneofDescriptorProto::_internal_options() const { - const ::PROTOBUF_NAMESPACE_ID::OneofOptions* p = _impl_.options_; - return p != nullptr ? *p : reinterpret_cast<const ::PROTOBUF_NAMESPACE_ID::OneofOptions&>( - ::PROTOBUF_NAMESPACE_ID::_OneofOptions_default_instance_); -} -inline const ::PROTOBUF_NAMESPACE_ID::OneofOptions& OneofDescriptorProto::options() const { - // @@protoc_insertion_point(field_get:google.protobuf.OneofDescriptorProto.options) - return _internal_options(); -} -inline void OneofDescriptorProto::unsafe_arena_set_allocated_options( - ::PROTOBUF_NAMESPACE_ID::OneofOptions* options) { - if (GetArenaForAllocation() == nullptr) { - delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(_impl_.options_); - } - _impl_.options_ = options; - if (options) { - _impl_._has_bits_[0] |= 0x00000002u; - } else { - _impl_._has_bits_[0] &= ~0x00000002u; - } - // @@protoc_insertion_point(field_unsafe_arena_set_allocated:google.protobuf.OneofDescriptorProto.options) -} -inline ::PROTOBUF_NAMESPACE_ID::OneofOptions* OneofDescriptorProto::release_options() { - _impl_._has_bits_[0] &= ~0x00000002u; - ::PROTOBUF_NAMESPACE_ID::OneofOptions* temp = _impl_.options_; - _impl_.options_ = nullptr; -#ifdef PROTOBUF_FORCE_COPY_IN_RELEASE - auto* old = reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(temp); - temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp); - if (GetArenaForAllocation() == nullptr) { delete old; } -#else // PROTOBUF_FORCE_COPY_IN_RELEASE - if (GetArenaForAllocation() != nullptr) { - temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp); - } -#endif // !PROTOBUF_FORCE_COPY_IN_RELEASE - return temp; -} -inline ::PROTOBUF_NAMESPACE_ID::OneofOptions* OneofDescriptorProto::unsafe_arena_release_options() { - // @@protoc_insertion_point(field_release:google.protobuf.OneofDescriptorProto.options) - _impl_._has_bits_[0] &= ~0x00000002u; - ::PROTOBUF_NAMESPACE_ID::OneofOptions* temp = _impl_.options_; - _impl_.options_ = nullptr; - return temp; -} -inline ::PROTOBUF_NAMESPACE_ID::OneofOptions* OneofDescriptorProto::_internal_mutable_options() { - _impl_._has_bits_[0] |= 0x00000002u; - if (_impl_.options_ == nullptr) { - auto* p = CreateMaybeMessage<::PROTOBUF_NAMESPACE_ID::OneofOptions>(GetArenaForAllocation()); - _impl_.options_ = p; - } - return _impl_.options_; -} -inline ::PROTOBUF_NAMESPACE_ID::OneofOptions* OneofDescriptorProto::mutable_options() { - ::PROTOBUF_NAMESPACE_ID::OneofOptions* _msg = _internal_mutable_options(); - // @@protoc_insertion_point(field_mutable:google.protobuf.OneofDescriptorProto.options) - return _msg; -} -inline void OneofDescriptorProto::set_allocated_options(::PROTOBUF_NAMESPACE_ID::OneofOptions* options) { - ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation(); - if (message_arena == nullptr) { - delete _impl_.options_; - } - if (options) { - ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena = - ::PROTOBUF_NAMESPACE_ID::Arena::InternalGetOwningArena(options); - if (message_arena != submessage_arena) { - options = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage( - message_arena, options, submessage_arena); - } - _impl_._has_bits_[0] |= 0x00000002u; - } else { - _impl_._has_bits_[0] &= ~0x00000002u; - } - _impl_.options_ = options; - // @@protoc_insertion_point(field_set_allocated:google.protobuf.OneofDescriptorProto.options) -} - -// ------------------------------------------------------------------- - -// EnumDescriptorProto_EnumReservedRange - -// optional int32 start = 1; -inline bool EnumDescriptorProto_EnumReservedRange::_internal_has_start() const { - bool value = (_impl_._has_bits_[0] & 0x00000001u) != 0; - return value; -} -inline bool EnumDescriptorProto_EnumReservedRange::has_start() const { - return _internal_has_start(); -} -inline void EnumDescriptorProto_EnumReservedRange::clear_start() { - _impl_.start_ = 0; - _impl_._has_bits_[0] &= ~0x00000001u; -} -inline int32_t EnumDescriptorProto_EnumReservedRange::_internal_start() const { - return _impl_.start_; -} -inline int32_t EnumDescriptorProto_EnumReservedRange::start() const { - // @@protoc_insertion_point(field_get:google.protobuf.EnumDescriptorProto.EnumReservedRange.start) - return _internal_start(); -} -inline void EnumDescriptorProto_EnumReservedRange::_internal_set_start(int32_t value) { - _impl_._has_bits_[0] |= 0x00000001u; - _impl_.start_ = value; -} -inline void EnumDescriptorProto_EnumReservedRange::set_start(int32_t value) { - _internal_set_start(value); - // @@protoc_insertion_point(field_set:google.protobuf.EnumDescriptorProto.EnumReservedRange.start) -} - -// optional int32 end = 2; -inline bool EnumDescriptorProto_EnumReservedRange::_internal_has_end() const { - bool value = (_impl_._has_bits_[0] & 0x00000002u) != 0; - return value; -} -inline bool EnumDescriptorProto_EnumReservedRange::has_end() const { - return _internal_has_end(); -} -inline void EnumDescriptorProto_EnumReservedRange::clear_end() { - _impl_.end_ = 0; - _impl_._has_bits_[0] &= ~0x00000002u; -} -inline int32_t EnumDescriptorProto_EnumReservedRange::_internal_end() const { - return _impl_.end_; -} -inline int32_t EnumDescriptorProto_EnumReservedRange::end() const { - // @@protoc_insertion_point(field_get:google.protobuf.EnumDescriptorProto.EnumReservedRange.end) - return _internal_end(); -} -inline void EnumDescriptorProto_EnumReservedRange::_internal_set_end(int32_t value) { - _impl_._has_bits_[0] |= 0x00000002u; - _impl_.end_ = value; -} -inline void EnumDescriptorProto_EnumReservedRange::set_end(int32_t value) { - _internal_set_end(value); - // @@protoc_insertion_point(field_set:google.protobuf.EnumDescriptorProto.EnumReservedRange.end) -} - -// ------------------------------------------------------------------- - -// EnumDescriptorProto - -// optional string name = 1; -inline bool EnumDescriptorProto::_internal_has_name() const { - bool value = (_impl_._has_bits_[0] & 0x00000001u) != 0; - return value; -} -inline bool EnumDescriptorProto::has_name() const { - return _internal_has_name(); -} -inline void EnumDescriptorProto::clear_name() { - _impl_.name_.ClearToEmpty(); - _impl_._has_bits_[0] &= ~0x00000001u; -} -inline const std::string& EnumDescriptorProto::name() const { - // @@protoc_insertion_point(field_get:google.protobuf.EnumDescriptorProto.name) - return _internal_name(); -} -template <typename ArgT0, typename... ArgT> -inline PROTOBUF_ALWAYS_INLINE -void EnumDescriptorProto::set_name(ArgT0&& arg0, ArgT... args) { - _impl_._has_bits_[0] |= 0x00000001u; - _impl_.name_.Set(static_cast<ArgT0 &&>(arg0), args..., GetArenaForAllocation()); - // @@protoc_insertion_point(field_set:google.protobuf.EnumDescriptorProto.name) -} -inline std::string* EnumDescriptorProto::mutable_name() { - std::string* _s = _internal_mutable_name(); - // @@protoc_insertion_point(field_mutable:google.protobuf.EnumDescriptorProto.name) - return _s; -} -inline const std::string& EnumDescriptorProto::_internal_name() const { - return _impl_.name_.Get(); -} -inline void EnumDescriptorProto::_internal_set_name(const std::string& value) { - _impl_._has_bits_[0] |= 0x00000001u; - _impl_.name_.Set(value, GetArenaForAllocation()); -} -inline std::string* EnumDescriptorProto::_internal_mutable_name() { - _impl_._has_bits_[0] |= 0x00000001u; - return _impl_.name_.Mutable(GetArenaForAllocation()); -} -inline std::string* EnumDescriptorProto::release_name() { - // @@protoc_insertion_point(field_release:google.protobuf.EnumDescriptorProto.name) - if (!_internal_has_name()) { - return nullptr; - } - _impl_._has_bits_[0] &= ~0x00000001u; - auto* p = _impl_.name_.Release(); -#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING - if (_impl_.name_.IsDefault()) { - _impl_.name_.Set("", GetArenaForAllocation()); - } -#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING - return p; -} -inline void EnumDescriptorProto::set_allocated_name(std::string* name) { - if (name != nullptr) { - _impl_._has_bits_[0] |= 0x00000001u; - } else { - _impl_._has_bits_[0] &= ~0x00000001u; - } - _impl_.name_.SetAllocated(name, GetArenaForAllocation()); -#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING - if (_impl_.name_.IsDefault()) { - _impl_.name_.Set("", GetArenaForAllocation()); - } -#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING - // @@protoc_insertion_point(field_set_allocated:google.protobuf.EnumDescriptorProto.name) -} - -// repeated .google.protobuf.EnumValueDescriptorProto value = 2; -inline int EnumDescriptorProto::_internal_value_size() const { - return _impl_.value_.size(); -} -inline int EnumDescriptorProto::value_size() const { - return _internal_value_size(); -} -inline void EnumDescriptorProto::clear_value() { - _impl_.value_.Clear(); -} -inline ::PROTOBUF_NAMESPACE_ID::EnumValueDescriptorProto* EnumDescriptorProto::mutable_value(int index) { - // @@protoc_insertion_point(field_mutable:google.protobuf.EnumDescriptorProto.value) - return _impl_.value_.Mutable(index); -} -inline ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::EnumValueDescriptorProto >* -EnumDescriptorProto::mutable_value() { - // @@protoc_insertion_point(field_mutable_list:google.protobuf.EnumDescriptorProto.value) - return &_impl_.value_; -} -inline const ::PROTOBUF_NAMESPACE_ID::EnumValueDescriptorProto& EnumDescriptorProto::_internal_value(int index) const { - return _impl_.value_.Get(index); -} -inline const ::PROTOBUF_NAMESPACE_ID::EnumValueDescriptorProto& EnumDescriptorProto::value(int index) const { - // @@protoc_insertion_point(field_get:google.protobuf.EnumDescriptorProto.value) - return _internal_value(index); -} -inline ::PROTOBUF_NAMESPACE_ID::EnumValueDescriptorProto* EnumDescriptorProto::_internal_add_value() { - return _impl_.value_.Add(); -} -inline ::PROTOBUF_NAMESPACE_ID::EnumValueDescriptorProto* EnumDescriptorProto::add_value() { - ::PROTOBUF_NAMESPACE_ID::EnumValueDescriptorProto* _add = _internal_add_value(); - // @@protoc_insertion_point(field_add:google.protobuf.EnumDescriptorProto.value) - return _add; -} -inline const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::EnumValueDescriptorProto >& -EnumDescriptorProto::value() const { - // @@protoc_insertion_point(field_list:google.protobuf.EnumDescriptorProto.value) - return _impl_.value_; -} - -// optional .google.protobuf.EnumOptions options = 3; -inline bool EnumDescriptorProto::_internal_has_options() const { - bool value = (_impl_._has_bits_[0] & 0x00000002u) != 0; - PROTOBUF_ASSUME(!value || _impl_.options_ != nullptr); - return value; -} -inline bool EnumDescriptorProto::has_options() const { - return _internal_has_options(); -} -inline void EnumDescriptorProto::clear_options() { - if (_impl_.options_ != nullptr) _impl_.options_->Clear(); - _impl_._has_bits_[0] &= ~0x00000002u; -} -inline const ::PROTOBUF_NAMESPACE_ID::EnumOptions& EnumDescriptorProto::_internal_options() const { - const ::PROTOBUF_NAMESPACE_ID::EnumOptions* p = _impl_.options_; - return p != nullptr ? *p : reinterpret_cast<const ::PROTOBUF_NAMESPACE_ID::EnumOptions&>( - ::PROTOBUF_NAMESPACE_ID::_EnumOptions_default_instance_); -} -inline const ::PROTOBUF_NAMESPACE_ID::EnumOptions& EnumDescriptorProto::options() const { - // @@protoc_insertion_point(field_get:google.protobuf.EnumDescriptorProto.options) - return _internal_options(); -} -inline void EnumDescriptorProto::unsafe_arena_set_allocated_options( - ::PROTOBUF_NAMESPACE_ID::EnumOptions* options) { - if (GetArenaForAllocation() == nullptr) { - delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(_impl_.options_); - } - _impl_.options_ = options; - if (options) { - _impl_._has_bits_[0] |= 0x00000002u; - } else { - _impl_._has_bits_[0] &= ~0x00000002u; - } - // @@protoc_insertion_point(field_unsafe_arena_set_allocated:google.protobuf.EnumDescriptorProto.options) -} -inline ::PROTOBUF_NAMESPACE_ID::EnumOptions* EnumDescriptorProto::release_options() { - _impl_._has_bits_[0] &= ~0x00000002u; - ::PROTOBUF_NAMESPACE_ID::EnumOptions* temp = _impl_.options_; - _impl_.options_ = nullptr; -#ifdef PROTOBUF_FORCE_COPY_IN_RELEASE - auto* old = reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(temp); - temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp); - if (GetArenaForAllocation() == nullptr) { delete old; } -#else // PROTOBUF_FORCE_COPY_IN_RELEASE - if (GetArenaForAllocation() != nullptr) { - temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp); - } -#endif // !PROTOBUF_FORCE_COPY_IN_RELEASE - return temp; -} -inline ::PROTOBUF_NAMESPACE_ID::EnumOptions* EnumDescriptorProto::unsafe_arena_release_options() { - // @@protoc_insertion_point(field_release:google.protobuf.EnumDescriptorProto.options) - _impl_._has_bits_[0] &= ~0x00000002u; - ::PROTOBUF_NAMESPACE_ID::EnumOptions* temp = _impl_.options_; - _impl_.options_ = nullptr; - return temp; -} -inline ::PROTOBUF_NAMESPACE_ID::EnumOptions* EnumDescriptorProto::_internal_mutable_options() { - _impl_._has_bits_[0] |= 0x00000002u; - if (_impl_.options_ == nullptr) { - auto* p = CreateMaybeMessage<::PROTOBUF_NAMESPACE_ID::EnumOptions>(GetArenaForAllocation()); - _impl_.options_ = p; - } - return _impl_.options_; -} -inline ::PROTOBUF_NAMESPACE_ID::EnumOptions* EnumDescriptorProto::mutable_options() { - ::PROTOBUF_NAMESPACE_ID::EnumOptions* _msg = _internal_mutable_options(); - // @@protoc_insertion_point(field_mutable:google.protobuf.EnumDescriptorProto.options) - return _msg; -} -inline void EnumDescriptorProto::set_allocated_options(::PROTOBUF_NAMESPACE_ID::EnumOptions* options) { - ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation(); - if (message_arena == nullptr) { - delete _impl_.options_; - } - if (options) { - ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena = - ::PROTOBUF_NAMESPACE_ID::Arena::InternalGetOwningArena(options); - if (message_arena != submessage_arena) { - options = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage( - message_arena, options, submessage_arena); - } - _impl_._has_bits_[0] |= 0x00000002u; - } else { - _impl_._has_bits_[0] &= ~0x00000002u; - } - _impl_.options_ = options; - // @@protoc_insertion_point(field_set_allocated:google.protobuf.EnumDescriptorProto.options) -} - -// repeated .google.protobuf.EnumDescriptorProto.EnumReservedRange reserved_range = 4; -inline int EnumDescriptorProto::_internal_reserved_range_size() const { - return _impl_.reserved_range_.size(); -} -inline int EnumDescriptorProto::reserved_range_size() const { - return _internal_reserved_range_size(); -} -inline void EnumDescriptorProto::clear_reserved_range() { - _impl_.reserved_range_.Clear(); -} -inline ::PROTOBUF_NAMESPACE_ID::EnumDescriptorProto_EnumReservedRange* EnumDescriptorProto::mutable_reserved_range(int index) { - // @@protoc_insertion_point(field_mutable:google.protobuf.EnumDescriptorProto.reserved_range) - return _impl_.reserved_range_.Mutable(index); -} -inline ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::EnumDescriptorProto_EnumReservedRange >* -EnumDescriptorProto::mutable_reserved_range() { - // @@protoc_insertion_point(field_mutable_list:google.protobuf.EnumDescriptorProto.reserved_range) - return &_impl_.reserved_range_; -} -inline const ::PROTOBUF_NAMESPACE_ID::EnumDescriptorProto_EnumReservedRange& EnumDescriptorProto::_internal_reserved_range(int index) const { - return _impl_.reserved_range_.Get(index); -} -inline const ::PROTOBUF_NAMESPACE_ID::EnumDescriptorProto_EnumReservedRange& EnumDescriptorProto::reserved_range(int index) const { - // @@protoc_insertion_point(field_get:google.protobuf.EnumDescriptorProto.reserved_range) - return _internal_reserved_range(index); -} -inline ::PROTOBUF_NAMESPACE_ID::EnumDescriptorProto_EnumReservedRange* EnumDescriptorProto::_internal_add_reserved_range() { - return _impl_.reserved_range_.Add(); -} -inline ::PROTOBUF_NAMESPACE_ID::EnumDescriptorProto_EnumReservedRange* EnumDescriptorProto::add_reserved_range() { - ::PROTOBUF_NAMESPACE_ID::EnumDescriptorProto_EnumReservedRange* _add = _internal_add_reserved_range(); - // @@protoc_insertion_point(field_add:google.protobuf.EnumDescriptorProto.reserved_range) - return _add; -} -inline const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::EnumDescriptorProto_EnumReservedRange >& -EnumDescriptorProto::reserved_range() const { - // @@protoc_insertion_point(field_list:google.protobuf.EnumDescriptorProto.reserved_range) - return _impl_.reserved_range_; -} - -// repeated string reserved_name = 5; -inline int EnumDescriptorProto::_internal_reserved_name_size() const { - return _impl_.reserved_name_.size(); -} -inline int EnumDescriptorProto::reserved_name_size() const { - return _internal_reserved_name_size(); -} -inline void EnumDescriptorProto::clear_reserved_name() { - _impl_.reserved_name_.Clear(); -} -inline std::string* EnumDescriptorProto::add_reserved_name() { - std::string* _s = _internal_add_reserved_name(); - // @@protoc_insertion_point(field_add_mutable:google.protobuf.EnumDescriptorProto.reserved_name) - return _s; -} -inline const std::string& EnumDescriptorProto::_internal_reserved_name(int index) const { - return _impl_.reserved_name_.Get(index); -} -inline const std::string& EnumDescriptorProto::reserved_name(int index) const { - // @@protoc_insertion_point(field_get:google.protobuf.EnumDescriptorProto.reserved_name) - return _internal_reserved_name(index); -} -inline std::string* EnumDescriptorProto::mutable_reserved_name(int index) { - // @@protoc_insertion_point(field_mutable:google.protobuf.EnumDescriptorProto.reserved_name) - return _impl_.reserved_name_.Mutable(index); -} -inline void EnumDescriptorProto::set_reserved_name(int index, const std::string& value) { - _impl_.reserved_name_.Mutable(index)->assign(value); - // @@protoc_insertion_point(field_set:google.protobuf.EnumDescriptorProto.reserved_name) -} -inline void EnumDescriptorProto::set_reserved_name(int index, std::string&& value) { - _impl_.reserved_name_.Mutable(index)->assign(std::move(value)); - // @@protoc_insertion_point(field_set:google.protobuf.EnumDescriptorProto.reserved_name) -} -inline void EnumDescriptorProto::set_reserved_name(int index, const char* value) { - GOOGLE_DCHECK(value != nullptr); - _impl_.reserved_name_.Mutable(index)->assign(value); - // @@protoc_insertion_point(field_set_char:google.protobuf.EnumDescriptorProto.reserved_name) -} -inline void EnumDescriptorProto::set_reserved_name(int index, const char* value, size_t size) { - _impl_.reserved_name_.Mutable(index)->assign( - reinterpret_cast<const char*>(value), size); - // @@protoc_insertion_point(field_set_pointer:google.protobuf.EnumDescriptorProto.reserved_name) -} -inline std::string* EnumDescriptorProto::_internal_add_reserved_name() { - return _impl_.reserved_name_.Add(); -} -inline void EnumDescriptorProto::add_reserved_name(const std::string& value) { - _impl_.reserved_name_.Add()->assign(value); - // @@protoc_insertion_point(field_add:google.protobuf.EnumDescriptorProto.reserved_name) -} -inline void EnumDescriptorProto::add_reserved_name(std::string&& value) { - _impl_.reserved_name_.Add(std::move(value)); - // @@protoc_insertion_point(field_add:google.protobuf.EnumDescriptorProto.reserved_name) -} -inline void EnumDescriptorProto::add_reserved_name(const char* value) { - GOOGLE_DCHECK(value != nullptr); - _impl_.reserved_name_.Add()->assign(value); - // @@protoc_insertion_point(field_add_char:google.protobuf.EnumDescriptorProto.reserved_name) -} -inline void EnumDescriptorProto::add_reserved_name(const char* value, size_t size) { - _impl_.reserved_name_.Add()->assign(reinterpret_cast<const char*>(value), size); - // @@protoc_insertion_point(field_add_pointer:google.protobuf.EnumDescriptorProto.reserved_name) -} -inline const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField<std::string>& -EnumDescriptorProto::reserved_name() const { - // @@protoc_insertion_point(field_list:google.protobuf.EnumDescriptorProto.reserved_name) - return _impl_.reserved_name_; -} -inline ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField<std::string>* -EnumDescriptorProto::mutable_reserved_name() { - // @@protoc_insertion_point(field_mutable_list:google.protobuf.EnumDescriptorProto.reserved_name) - return &_impl_.reserved_name_; -} - -// ------------------------------------------------------------------- - -// EnumValueDescriptorProto - -// optional string name = 1; -inline bool EnumValueDescriptorProto::_internal_has_name() const { - bool value = (_impl_._has_bits_[0] & 0x00000001u) != 0; - return value; -} -inline bool EnumValueDescriptorProto::has_name() const { - return _internal_has_name(); -} -inline void EnumValueDescriptorProto::clear_name() { - _impl_.name_.ClearToEmpty(); - _impl_._has_bits_[0] &= ~0x00000001u; -} -inline const std::string& EnumValueDescriptorProto::name() const { - // @@protoc_insertion_point(field_get:google.protobuf.EnumValueDescriptorProto.name) - return _internal_name(); -} -template <typename ArgT0, typename... ArgT> -inline PROTOBUF_ALWAYS_INLINE -void EnumValueDescriptorProto::set_name(ArgT0&& arg0, ArgT... args) { - _impl_._has_bits_[0] |= 0x00000001u; - _impl_.name_.Set(static_cast<ArgT0 &&>(arg0), args..., GetArenaForAllocation()); - // @@protoc_insertion_point(field_set:google.protobuf.EnumValueDescriptorProto.name) -} -inline std::string* EnumValueDescriptorProto::mutable_name() { - std::string* _s = _internal_mutable_name(); - // @@protoc_insertion_point(field_mutable:google.protobuf.EnumValueDescriptorProto.name) - return _s; -} -inline const std::string& EnumValueDescriptorProto::_internal_name() const { - return _impl_.name_.Get(); -} -inline void EnumValueDescriptorProto::_internal_set_name(const std::string& value) { - _impl_._has_bits_[0] |= 0x00000001u; - _impl_.name_.Set(value, GetArenaForAllocation()); -} -inline std::string* EnumValueDescriptorProto::_internal_mutable_name() { - _impl_._has_bits_[0] |= 0x00000001u; - return _impl_.name_.Mutable(GetArenaForAllocation()); -} -inline std::string* EnumValueDescriptorProto::release_name() { - // @@protoc_insertion_point(field_release:google.protobuf.EnumValueDescriptorProto.name) - if (!_internal_has_name()) { - return nullptr; - } - _impl_._has_bits_[0] &= ~0x00000001u; - auto* p = _impl_.name_.Release(); -#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING - if (_impl_.name_.IsDefault()) { - _impl_.name_.Set("", GetArenaForAllocation()); - } -#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING - return p; -} -inline void EnumValueDescriptorProto::set_allocated_name(std::string* name) { - if (name != nullptr) { - _impl_._has_bits_[0] |= 0x00000001u; - } else { - _impl_._has_bits_[0] &= ~0x00000001u; - } - _impl_.name_.SetAllocated(name, GetArenaForAllocation()); -#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING - if (_impl_.name_.IsDefault()) { - _impl_.name_.Set("", GetArenaForAllocation()); - } -#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING - // @@protoc_insertion_point(field_set_allocated:google.protobuf.EnumValueDescriptorProto.name) -} - -// optional int32 number = 2; -inline bool EnumValueDescriptorProto::_internal_has_number() const { - bool value = (_impl_._has_bits_[0] & 0x00000004u) != 0; - return value; -} -inline bool EnumValueDescriptorProto::has_number() const { - return _internal_has_number(); -} -inline void EnumValueDescriptorProto::clear_number() { - _impl_.number_ = 0; - _impl_._has_bits_[0] &= ~0x00000004u; -} -inline int32_t EnumValueDescriptorProto::_internal_number() const { - return _impl_.number_; -} -inline int32_t EnumValueDescriptorProto::number() const { - // @@protoc_insertion_point(field_get:google.protobuf.EnumValueDescriptorProto.number) - return _internal_number(); -} -inline void EnumValueDescriptorProto::_internal_set_number(int32_t value) { - _impl_._has_bits_[0] |= 0x00000004u; - _impl_.number_ = value; -} -inline void EnumValueDescriptorProto::set_number(int32_t value) { - _internal_set_number(value); - // @@protoc_insertion_point(field_set:google.protobuf.EnumValueDescriptorProto.number) -} - -// optional .google.protobuf.EnumValueOptions options = 3; -inline bool EnumValueDescriptorProto::_internal_has_options() const { - bool value = (_impl_._has_bits_[0] & 0x00000002u) != 0; - PROTOBUF_ASSUME(!value || _impl_.options_ != nullptr); - return value; -} -inline bool EnumValueDescriptorProto::has_options() const { - return _internal_has_options(); -} -inline void EnumValueDescriptorProto::clear_options() { - if (_impl_.options_ != nullptr) _impl_.options_->Clear(); - _impl_._has_bits_[0] &= ~0x00000002u; -} -inline const ::PROTOBUF_NAMESPACE_ID::EnumValueOptions& EnumValueDescriptorProto::_internal_options() const { - const ::PROTOBUF_NAMESPACE_ID::EnumValueOptions* p = _impl_.options_; - return p != nullptr ? *p : reinterpret_cast<const ::PROTOBUF_NAMESPACE_ID::EnumValueOptions&>( - ::PROTOBUF_NAMESPACE_ID::_EnumValueOptions_default_instance_); -} -inline const ::PROTOBUF_NAMESPACE_ID::EnumValueOptions& EnumValueDescriptorProto::options() const { - // @@protoc_insertion_point(field_get:google.protobuf.EnumValueDescriptorProto.options) - return _internal_options(); -} -inline void EnumValueDescriptorProto::unsafe_arena_set_allocated_options( - ::PROTOBUF_NAMESPACE_ID::EnumValueOptions* options) { - if (GetArenaForAllocation() == nullptr) { - delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(_impl_.options_); - } - _impl_.options_ = options; - if (options) { - _impl_._has_bits_[0] |= 0x00000002u; - } else { - _impl_._has_bits_[0] &= ~0x00000002u; - } - // @@protoc_insertion_point(field_unsafe_arena_set_allocated:google.protobuf.EnumValueDescriptorProto.options) -} -inline ::PROTOBUF_NAMESPACE_ID::EnumValueOptions* EnumValueDescriptorProto::release_options() { - _impl_._has_bits_[0] &= ~0x00000002u; - ::PROTOBUF_NAMESPACE_ID::EnumValueOptions* temp = _impl_.options_; - _impl_.options_ = nullptr; -#ifdef PROTOBUF_FORCE_COPY_IN_RELEASE - auto* old = reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(temp); - temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp); - if (GetArenaForAllocation() == nullptr) { delete old; } -#else // PROTOBUF_FORCE_COPY_IN_RELEASE - if (GetArenaForAllocation() != nullptr) { - temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp); - } -#endif // !PROTOBUF_FORCE_COPY_IN_RELEASE - return temp; -} -inline ::PROTOBUF_NAMESPACE_ID::EnumValueOptions* EnumValueDescriptorProto::unsafe_arena_release_options() { - // @@protoc_insertion_point(field_release:google.protobuf.EnumValueDescriptorProto.options) - _impl_._has_bits_[0] &= ~0x00000002u; - ::PROTOBUF_NAMESPACE_ID::EnumValueOptions* temp = _impl_.options_; - _impl_.options_ = nullptr; - return temp; -} -inline ::PROTOBUF_NAMESPACE_ID::EnumValueOptions* EnumValueDescriptorProto::_internal_mutable_options() { - _impl_._has_bits_[0] |= 0x00000002u; - if (_impl_.options_ == nullptr) { - auto* p = CreateMaybeMessage<::PROTOBUF_NAMESPACE_ID::EnumValueOptions>(GetArenaForAllocation()); - _impl_.options_ = p; - } - return _impl_.options_; -} -inline ::PROTOBUF_NAMESPACE_ID::EnumValueOptions* EnumValueDescriptorProto::mutable_options() { - ::PROTOBUF_NAMESPACE_ID::EnumValueOptions* _msg = _internal_mutable_options(); - // @@protoc_insertion_point(field_mutable:google.protobuf.EnumValueDescriptorProto.options) - return _msg; -} -inline void EnumValueDescriptorProto::set_allocated_options(::PROTOBUF_NAMESPACE_ID::EnumValueOptions* options) { - ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation(); - if (message_arena == nullptr) { - delete _impl_.options_; - } - if (options) { - ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena = - ::PROTOBUF_NAMESPACE_ID::Arena::InternalGetOwningArena(options); - if (message_arena != submessage_arena) { - options = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage( - message_arena, options, submessage_arena); - } - _impl_._has_bits_[0] |= 0x00000002u; - } else { - _impl_._has_bits_[0] &= ~0x00000002u; - } - _impl_.options_ = options; - // @@protoc_insertion_point(field_set_allocated:google.protobuf.EnumValueDescriptorProto.options) -} - -// ------------------------------------------------------------------- - -// ServiceDescriptorProto - -// optional string name = 1; -inline bool ServiceDescriptorProto::_internal_has_name() const { - bool value = (_impl_._has_bits_[0] & 0x00000001u) != 0; - return value; -} -inline bool ServiceDescriptorProto::has_name() const { - return _internal_has_name(); -} -inline void ServiceDescriptorProto::clear_name() { - _impl_.name_.ClearToEmpty(); - _impl_._has_bits_[0] &= ~0x00000001u; -} -inline const std::string& ServiceDescriptorProto::name() const { - // @@protoc_insertion_point(field_get:google.protobuf.ServiceDescriptorProto.name) - return _internal_name(); -} -template <typename ArgT0, typename... ArgT> -inline PROTOBUF_ALWAYS_INLINE -void ServiceDescriptorProto::set_name(ArgT0&& arg0, ArgT... args) { - _impl_._has_bits_[0] |= 0x00000001u; - _impl_.name_.Set(static_cast<ArgT0 &&>(arg0), args..., GetArenaForAllocation()); - // @@protoc_insertion_point(field_set:google.protobuf.ServiceDescriptorProto.name) -} -inline std::string* ServiceDescriptorProto::mutable_name() { - std::string* _s = _internal_mutable_name(); - // @@protoc_insertion_point(field_mutable:google.protobuf.ServiceDescriptorProto.name) - return _s; -} -inline const std::string& ServiceDescriptorProto::_internal_name() const { - return _impl_.name_.Get(); -} -inline void ServiceDescriptorProto::_internal_set_name(const std::string& value) { - _impl_._has_bits_[0] |= 0x00000001u; - _impl_.name_.Set(value, GetArenaForAllocation()); -} -inline std::string* ServiceDescriptorProto::_internal_mutable_name() { - _impl_._has_bits_[0] |= 0x00000001u; - return _impl_.name_.Mutable(GetArenaForAllocation()); -} -inline std::string* ServiceDescriptorProto::release_name() { - // @@protoc_insertion_point(field_release:google.protobuf.ServiceDescriptorProto.name) - if (!_internal_has_name()) { - return nullptr; - } - _impl_._has_bits_[0] &= ~0x00000001u; - auto* p = _impl_.name_.Release(); -#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING - if (_impl_.name_.IsDefault()) { - _impl_.name_.Set("", GetArenaForAllocation()); - } -#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING - return p; -} -inline void ServiceDescriptorProto::set_allocated_name(std::string* name) { - if (name != nullptr) { - _impl_._has_bits_[0] |= 0x00000001u; - } else { - _impl_._has_bits_[0] &= ~0x00000001u; - } - _impl_.name_.SetAllocated(name, GetArenaForAllocation()); -#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING - if (_impl_.name_.IsDefault()) { - _impl_.name_.Set("", GetArenaForAllocation()); - } -#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING - // @@protoc_insertion_point(field_set_allocated:google.protobuf.ServiceDescriptorProto.name) -} - -// repeated .google.protobuf.MethodDescriptorProto method = 2; -inline int ServiceDescriptorProto::_internal_method_size() const { - return _impl_.method_.size(); -} -inline int ServiceDescriptorProto::method_size() const { - return _internal_method_size(); -} -inline void ServiceDescriptorProto::clear_method() { - _impl_.method_.Clear(); -} -inline ::PROTOBUF_NAMESPACE_ID::MethodDescriptorProto* ServiceDescriptorProto::mutable_method(int index) { - // @@protoc_insertion_point(field_mutable:google.protobuf.ServiceDescriptorProto.method) - return _impl_.method_.Mutable(index); -} -inline ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::MethodDescriptorProto >* -ServiceDescriptorProto::mutable_method() { - // @@protoc_insertion_point(field_mutable_list:google.protobuf.ServiceDescriptorProto.method) - return &_impl_.method_; -} -inline const ::PROTOBUF_NAMESPACE_ID::MethodDescriptorProto& ServiceDescriptorProto::_internal_method(int index) const { - return _impl_.method_.Get(index); -} -inline const ::PROTOBUF_NAMESPACE_ID::MethodDescriptorProto& ServiceDescriptorProto::method(int index) const { - // @@protoc_insertion_point(field_get:google.protobuf.ServiceDescriptorProto.method) - return _internal_method(index); -} -inline ::PROTOBUF_NAMESPACE_ID::MethodDescriptorProto* ServiceDescriptorProto::_internal_add_method() { - return _impl_.method_.Add(); -} -inline ::PROTOBUF_NAMESPACE_ID::MethodDescriptorProto* ServiceDescriptorProto::add_method() { - ::PROTOBUF_NAMESPACE_ID::MethodDescriptorProto* _add = _internal_add_method(); - // @@protoc_insertion_point(field_add:google.protobuf.ServiceDescriptorProto.method) - return _add; -} -inline const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::MethodDescriptorProto >& -ServiceDescriptorProto::method() const { - // @@protoc_insertion_point(field_list:google.protobuf.ServiceDescriptorProto.method) - return _impl_.method_; -} - -// optional .google.protobuf.ServiceOptions options = 3; -inline bool ServiceDescriptorProto::_internal_has_options() const { - bool value = (_impl_._has_bits_[0] & 0x00000002u) != 0; - PROTOBUF_ASSUME(!value || _impl_.options_ != nullptr); - return value; -} -inline bool ServiceDescriptorProto::has_options() const { - return _internal_has_options(); -} -inline void ServiceDescriptorProto::clear_options() { - if (_impl_.options_ != nullptr) _impl_.options_->Clear(); - _impl_._has_bits_[0] &= ~0x00000002u; -} -inline const ::PROTOBUF_NAMESPACE_ID::ServiceOptions& ServiceDescriptorProto::_internal_options() const { - const ::PROTOBUF_NAMESPACE_ID::ServiceOptions* p = _impl_.options_; - return p != nullptr ? *p : reinterpret_cast<const ::PROTOBUF_NAMESPACE_ID::ServiceOptions&>( - ::PROTOBUF_NAMESPACE_ID::_ServiceOptions_default_instance_); -} -inline const ::PROTOBUF_NAMESPACE_ID::ServiceOptions& ServiceDescriptorProto::options() const { - // @@protoc_insertion_point(field_get:google.protobuf.ServiceDescriptorProto.options) - return _internal_options(); -} -inline void ServiceDescriptorProto::unsafe_arena_set_allocated_options( - ::PROTOBUF_NAMESPACE_ID::ServiceOptions* options) { - if (GetArenaForAllocation() == nullptr) { - delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(_impl_.options_); - } - _impl_.options_ = options; - if (options) { - _impl_._has_bits_[0] |= 0x00000002u; - } else { - _impl_._has_bits_[0] &= ~0x00000002u; - } - // @@protoc_insertion_point(field_unsafe_arena_set_allocated:google.protobuf.ServiceDescriptorProto.options) -} -inline ::PROTOBUF_NAMESPACE_ID::ServiceOptions* ServiceDescriptorProto::release_options() { - _impl_._has_bits_[0] &= ~0x00000002u; - ::PROTOBUF_NAMESPACE_ID::ServiceOptions* temp = _impl_.options_; - _impl_.options_ = nullptr; -#ifdef PROTOBUF_FORCE_COPY_IN_RELEASE - auto* old = reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(temp); - temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp); - if (GetArenaForAllocation() == nullptr) { delete old; } -#else // PROTOBUF_FORCE_COPY_IN_RELEASE - if (GetArenaForAllocation() != nullptr) { - temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp); - } -#endif // !PROTOBUF_FORCE_COPY_IN_RELEASE - return temp; -} -inline ::PROTOBUF_NAMESPACE_ID::ServiceOptions* ServiceDescriptorProto::unsafe_arena_release_options() { - // @@protoc_insertion_point(field_release:google.protobuf.ServiceDescriptorProto.options) - _impl_._has_bits_[0] &= ~0x00000002u; - ::PROTOBUF_NAMESPACE_ID::ServiceOptions* temp = _impl_.options_; - _impl_.options_ = nullptr; - return temp; -} -inline ::PROTOBUF_NAMESPACE_ID::ServiceOptions* ServiceDescriptorProto::_internal_mutable_options() { - _impl_._has_bits_[0] |= 0x00000002u; - if (_impl_.options_ == nullptr) { - auto* p = CreateMaybeMessage<::PROTOBUF_NAMESPACE_ID::ServiceOptions>(GetArenaForAllocation()); - _impl_.options_ = p; - } - return _impl_.options_; -} -inline ::PROTOBUF_NAMESPACE_ID::ServiceOptions* ServiceDescriptorProto::mutable_options() { - ::PROTOBUF_NAMESPACE_ID::ServiceOptions* _msg = _internal_mutable_options(); - // @@protoc_insertion_point(field_mutable:google.protobuf.ServiceDescriptorProto.options) - return _msg; -} -inline void ServiceDescriptorProto::set_allocated_options(::PROTOBUF_NAMESPACE_ID::ServiceOptions* options) { - ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation(); - if (message_arena == nullptr) { - delete _impl_.options_; - } - if (options) { - ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena = - ::PROTOBUF_NAMESPACE_ID::Arena::InternalGetOwningArena(options); - if (message_arena != submessage_arena) { - options = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage( - message_arena, options, submessage_arena); - } - _impl_._has_bits_[0] |= 0x00000002u; - } else { - _impl_._has_bits_[0] &= ~0x00000002u; - } - _impl_.options_ = options; - // @@protoc_insertion_point(field_set_allocated:google.protobuf.ServiceDescriptorProto.options) -} - -// ------------------------------------------------------------------- - -// MethodDescriptorProto - -// optional string name = 1; -inline bool MethodDescriptorProto::_internal_has_name() const { - bool value = (_impl_._has_bits_[0] & 0x00000001u) != 0; - return value; -} -inline bool MethodDescriptorProto::has_name() const { - return _internal_has_name(); -} -inline void MethodDescriptorProto::clear_name() { - _impl_.name_.ClearToEmpty(); - _impl_._has_bits_[0] &= ~0x00000001u; -} -inline const std::string& MethodDescriptorProto::name() const { - // @@protoc_insertion_point(field_get:google.protobuf.MethodDescriptorProto.name) - return _internal_name(); -} -template <typename ArgT0, typename... ArgT> -inline PROTOBUF_ALWAYS_INLINE -void MethodDescriptorProto::set_name(ArgT0&& arg0, ArgT... args) { - _impl_._has_bits_[0] |= 0x00000001u; - _impl_.name_.Set(static_cast<ArgT0 &&>(arg0), args..., GetArenaForAllocation()); - // @@protoc_insertion_point(field_set:google.protobuf.MethodDescriptorProto.name) -} -inline std::string* MethodDescriptorProto::mutable_name() { - std::string* _s = _internal_mutable_name(); - // @@protoc_insertion_point(field_mutable:google.protobuf.MethodDescriptorProto.name) - return _s; -} -inline const std::string& MethodDescriptorProto::_internal_name() const { - return _impl_.name_.Get(); -} -inline void MethodDescriptorProto::_internal_set_name(const std::string& value) { - _impl_._has_bits_[0] |= 0x00000001u; - _impl_.name_.Set(value, GetArenaForAllocation()); -} -inline std::string* MethodDescriptorProto::_internal_mutable_name() { - _impl_._has_bits_[0] |= 0x00000001u; - return _impl_.name_.Mutable(GetArenaForAllocation()); -} -inline std::string* MethodDescriptorProto::release_name() { - // @@protoc_insertion_point(field_release:google.protobuf.MethodDescriptorProto.name) - if (!_internal_has_name()) { - return nullptr; - } - _impl_._has_bits_[0] &= ~0x00000001u; - auto* p = _impl_.name_.Release(); -#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING - if (_impl_.name_.IsDefault()) { - _impl_.name_.Set("", GetArenaForAllocation()); - } -#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING - return p; -} -inline void MethodDescriptorProto::set_allocated_name(std::string* name) { - if (name != nullptr) { - _impl_._has_bits_[0] |= 0x00000001u; - } else { - _impl_._has_bits_[0] &= ~0x00000001u; - } - _impl_.name_.SetAllocated(name, GetArenaForAllocation()); -#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING - if (_impl_.name_.IsDefault()) { - _impl_.name_.Set("", GetArenaForAllocation()); - } -#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING - // @@protoc_insertion_point(field_set_allocated:google.protobuf.MethodDescriptorProto.name) -} - -// optional string input_type = 2; -inline bool MethodDescriptorProto::_internal_has_input_type() const { - bool value = (_impl_._has_bits_[0] & 0x00000002u) != 0; - return value; -} -inline bool MethodDescriptorProto::has_input_type() const { - return _internal_has_input_type(); -} -inline void MethodDescriptorProto::clear_input_type() { - _impl_.input_type_.ClearToEmpty(); - _impl_._has_bits_[0] &= ~0x00000002u; -} -inline const std::string& MethodDescriptorProto::input_type() const { - // @@protoc_insertion_point(field_get:google.protobuf.MethodDescriptorProto.input_type) - return _internal_input_type(); -} -template <typename ArgT0, typename... ArgT> -inline PROTOBUF_ALWAYS_INLINE -void MethodDescriptorProto::set_input_type(ArgT0&& arg0, ArgT... args) { - _impl_._has_bits_[0] |= 0x00000002u; - _impl_.input_type_.Set(static_cast<ArgT0 &&>(arg0), args..., GetArenaForAllocation()); - // @@protoc_insertion_point(field_set:google.protobuf.MethodDescriptorProto.input_type) -} -inline std::string* MethodDescriptorProto::mutable_input_type() { - std::string* _s = _internal_mutable_input_type(); - // @@protoc_insertion_point(field_mutable:google.protobuf.MethodDescriptorProto.input_type) - return _s; -} -inline const std::string& MethodDescriptorProto::_internal_input_type() const { - return _impl_.input_type_.Get(); -} -inline void MethodDescriptorProto::_internal_set_input_type(const std::string& value) { - _impl_._has_bits_[0] |= 0x00000002u; - _impl_.input_type_.Set(value, GetArenaForAllocation()); -} -inline std::string* MethodDescriptorProto::_internal_mutable_input_type() { - _impl_._has_bits_[0] |= 0x00000002u; - return _impl_.input_type_.Mutable(GetArenaForAllocation()); -} -inline std::string* MethodDescriptorProto::release_input_type() { - // @@protoc_insertion_point(field_release:google.protobuf.MethodDescriptorProto.input_type) - if (!_internal_has_input_type()) { - return nullptr; - } - _impl_._has_bits_[0] &= ~0x00000002u; - auto* p = _impl_.input_type_.Release(); -#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING - if (_impl_.input_type_.IsDefault()) { - _impl_.input_type_.Set("", GetArenaForAllocation()); - } -#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING - return p; -} -inline void MethodDescriptorProto::set_allocated_input_type(std::string* input_type) { - if (input_type != nullptr) { - _impl_._has_bits_[0] |= 0x00000002u; - } else { - _impl_._has_bits_[0] &= ~0x00000002u; - } - _impl_.input_type_.SetAllocated(input_type, GetArenaForAllocation()); -#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING - if (_impl_.input_type_.IsDefault()) { - _impl_.input_type_.Set("", GetArenaForAllocation()); - } -#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING - // @@protoc_insertion_point(field_set_allocated:google.protobuf.MethodDescriptorProto.input_type) -} - -// optional string output_type = 3; -inline bool MethodDescriptorProto::_internal_has_output_type() const { - bool value = (_impl_._has_bits_[0] & 0x00000004u) != 0; - return value; -} -inline bool MethodDescriptorProto::has_output_type() const { - return _internal_has_output_type(); -} -inline void MethodDescriptorProto::clear_output_type() { - _impl_.output_type_.ClearToEmpty(); - _impl_._has_bits_[0] &= ~0x00000004u; -} -inline const std::string& MethodDescriptorProto::output_type() const { - // @@protoc_insertion_point(field_get:google.protobuf.MethodDescriptorProto.output_type) - return _internal_output_type(); -} -template <typename ArgT0, typename... ArgT> -inline PROTOBUF_ALWAYS_INLINE -void MethodDescriptorProto::set_output_type(ArgT0&& arg0, ArgT... args) { - _impl_._has_bits_[0] |= 0x00000004u; - _impl_.output_type_.Set(static_cast<ArgT0 &&>(arg0), args..., GetArenaForAllocation()); - // @@protoc_insertion_point(field_set:google.protobuf.MethodDescriptorProto.output_type) -} -inline std::string* MethodDescriptorProto::mutable_output_type() { - std::string* _s = _internal_mutable_output_type(); - // @@protoc_insertion_point(field_mutable:google.protobuf.MethodDescriptorProto.output_type) - return _s; -} -inline const std::string& MethodDescriptorProto::_internal_output_type() const { - return _impl_.output_type_.Get(); -} -inline void MethodDescriptorProto::_internal_set_output_type(const std::string& value) { - _impl_._has_bits_[0] |= 0x00000004u; - _impl_.output_type_.Set(value, GetArenaForAllocation()); -} -inline std::string* MethodDescriptorProto::_internal_mutable_output_type() { - _impl_._has_bits_[0] |= 0x00000004u; - return _impl_.output_type_.Mutable(GetArenaForAllocation()); -} -inline std::string* MethodDescriptorProto::release_output_type() { - // @@protoc_insertion_point(field_release:google.protobuf.MethodDescriptorProto.output_type) - if (!_internal_has_output_type()) { - return nullptr; - } - _impl_._has_bits_[0] &= ~0x00000004u; - auto* p = _impl_.output_type_.Release(); -#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING - if (_impl_.output_type_.IsDefault()) { - _impl_.output_type_.Set("", GetArenaForAllocation()); - } -#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING - return p; -} -inline void MethodDescriptorProto::set_allocated_output_type(std::string* output_type) { - if (output_type != nullptr) { - _impl_._has_bits_[0] |= 0x00000004u; - } else { - _impl_._has_bits_[0] &= ~0x00000004u; - } - _impl_.output_type_.SetAllocated(output_type, GetArenaForAllocation()); -#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING - if (_impl_.output_type_.IsDefault()) { - _impl_.output_type_.Set("", GetArenaForAllocation()); - } -#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING - // @@protoc_insertion_point(field_set_allocated:google.protobuf.MethodDescriptorProto.output_type) -} - -// optional .google.protobuf.MethodOptions options = 4; -inline bool MethodDescriptorProto::_internal_has_options() const { - bool value = (_impl_._has_bits_[0] & 0x00000008u) != 0; - PROTOBUF_ASSUME(!value || _impl_.options_ != nullptr); - return value; -} -inline bool MethodDescriptorProto::has_options() const { - return _internal_has_options(); -} -inline void MethodDescriptorProto::clear_options() { - if (_impl_.options_ != nullptr) _impl_.options_->Clear(); - _impl_._has_bits_[0] &= ~0x00000008u; -} -inline const ::PROTOBUF_NAMESPACE_ID::MethodOptions& MethodDescriptorProto::_internal_options() const { - const ::PROTOBUF_NAMESPACE_ID::MethodOptions* p = _impl_.options_; - return p != nullptr ? *p : reinterpret_cast<const ::PROTOBUF_NAMESPACE_ID::MethodOptions&>( - ::PROTOBUF_NAMESPACE_ID::_MethodOptions_default_instance_); -} -inline const ::PROTOBUF_NAMESPACE_ID::MethodOptions& MethodDescriptorProto::options() const { - // @@protoc_insertion_point(field_get:google.protobuf.MethodDescriptorProto.options) - return _internal_options(); -} -inline void MethodDescriptorProto::unsafe_arena_set_allocated_options( - ::PROTOBUF_NAMESPACE_ID::MethodOptions* options) { - if (GetArenaForAllocation() == nullptr) { - delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(_impl_.options_); - } - _impl_.options_ = options; - if (options) { - _impl_._has_bits_[0] |= 0x00000008u; - } else { - _impl_._has_bits_[0] &= ~0x00000008u; - } - // @@protoc_insertion_point(field_unsafe_arena_set_allocated:google.protobuf.MethodDescriptorProto.options) -} -inline ::PROTOBUF_NAMESPACE_ID::MethodOptions* MethodDescriptorProto::release_options() { - _impl_._has_bits_[0] &= ~0x00000008u; - ::PROTOBUF_NAMESPACE_ID::MethodOptions* temp = _impl_.options_; - _impl_.options_ = nullptr; -#ifdef PROTOBUF_FORCE_COPY_IN_RELEASE - auto* old = reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(temp); - temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp); - if (GetArenaForAllocation() == nullptr) { delete old; } -#else // PROTOBUF_FORCE_COPY_IN_RELEASE - if (GetArenaForAllocation() != nullptr) { - temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp); - } -#endif // !PROTOBUF_FORCE_COPY_IN_RELEASE - return temp; -} -inline ::PROTOBUF_NAMESPACE_ID::MethodOptions* MethodDescriptorProto::unsafe_arena_release_options() { - // @@protoc_insertion_point(field_release:google.protobuf.MethodDescriptorProto.options) - _impl_._has_bits_[0] &= ~0x00000008u; - ::PROTOBUF_NAMESPACE_ID::MethodOptions* temp = _impl_.options_; - _impl_.options_ = nullptr; - return temp; -} -inline ::PROTOBUF_NAMESPACE_ID::MethodOptions* MethodDescriptorProto::_internal_mutable_options() { - _impl_._has_bits_[0] |= 0x00000008u; - if (_impl_.options_ == nullptr) { - auto* p = CreateMaybeMessage<::PROTOBUF_NAMESPACE_ID::MethodOptions>(GetArenaForAllocation()); - _impl_.options_ = p; - } - return _impl_.options_; -} -inline ::PROTOBUF_NAMESPACE_ID::MethodOptions* MethodDescriptorProto::mutable_options() { - ::PROTOBUF_NAMESPACE_ID::MethodOptions* _msg = _internal_mutable_options(); - // @@protoc_insertion_point(field_mutable:google.protobuf.MethodDescriptorProto.options) - return _msg; -} -inline void MethodDescriptorProto::set_allocated_options(::PROTOBUF_NAMESPACE_ID::MethodOptions* options) { - ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation(); - if (message_arena == nullptr) { - delete _impl_.options_; - } - if (options) { - ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena = - ::PROTOBUF_NAMESPACE_ID::Arena::InternalGetOwningArena(options); - if (message_arena != submessage_arena) { - options = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage( - message_arena, options, submessage_arena); - } - _impl_._has_bits_[0] |= 0x00000008u; - } else { - _impl_._has_bits_[0] &= ~0x00000008u; - } - _impl_.options_ = options; - // @@protoc_insertion_point(field_set_allocated:google.protobuf.MethodDescriptorProto.options) -} - -// optional bool client_streaming = 5 [default = false]; -inline bool MethodDescriptorProto::_internal_has_client_streaming() const { - bool value = (_impl_._has_bits_[0] & 0x00000010u) != 0; - return value; -} -inline bool MethodDescriptorProto::has_client_streaming() const { - return _internal_has_client_streaming(); -} -inline void MethodDescriptorProto::clear_client_streaming() { - _impl_.client_streaming_ = false; - _impl_._has_bits_[0] &= ~0x00000010u; -} -inline bool MethodDescriptorProto::_internal_client_streaming() const { - return _impl_.client_streaming_; -} -inline bool MethodDescriptorProto::client_streaming() const { - // @@protoc_insertion_point(field_get:google.protobuf.MethodDescriptorProto.client_streaming) - return _internal_client_streaming(); -} -inline void MethodDescriptorProto::_internal_set_client_streaming(bool value) { - _impl_._has_bits_[0] |= 0x00000010u; - _impl_.client_streaming_ = value; -} -inline void MethodDescriptorProto::set_client_streaming(bool value) { - _internal_set_client_streaming(value); - // @@protoc_insertion_point(field_set:google.protobuf.MethodDescriptorProto.client_streaming) -} - -// optional bool server_streaming = 6 [default = false]; -inline bool MethodDescriptorProto::_internal_has_server_streaming() const { - bool value = (_impl_._has_bits_[0] & 0x00000020u) != 0; - return value; -} -inline bool MethodDescriptorProto::has_server_streaming() const { - return _internal_has_server_streaming(); -} -inline void MethodDescriptorProto::clear_server_streaming() { - _impl_.server_streaming_ = false; - _impl_._has_bits_[0] &= ~0x00000020u; -} -inline bool MethodDescriptorProto::_internal_server_streaming() const { - return _impl_.server_streaming_; -} -inline bool MethodDescriptorProto::server_streaming() const { - // @@protoc_insertion_point(field_get:google.protobuf.MethodDescriptorProto.server_streaming) - return _internal_server_streaming(); -} -inline void MethodDescriptorProto::_internal_set_server_streaming(bool value) { - _impl_._has_bits_[0] |= 0x00000020u; - _impl_.server_streaming_ = value; -} -inline void MethodDescriptorProto::set_server_streaming(bool value) { - _internal_set_server_streaming(value); - // @@protoc_insertion_point(field_set:google.protobuf.MethodDescriptorProto.server_streaming) -} - -// ------------------------------------------------------------------- - -// FileOptions - -// optional string java_package = 1; -inline bool FileOptions::_internal_has_java_package() const { - bool value = (_impl_._has_bits_[0] & 0x00000001u) != 0; - return value; -} -inline bool FileOptions::has_java_package() const { - return _internal_has_java_package(); -} -inline void FileOptions::clear_java_package() { - _impl_.java_package_.ClearToEmpty(); - _impl_._has_bits_[0] &= ~0x00000001u; -} -inline const std::string& FileOptions::java_package() const { - // @@protoc_insertion_point(field_get:google.protobuf.FileOptions.java_package) - return _internal_java_package(); -} -template <typename ArgT0, typename... ArgT> -inline PROTOBUF_ALWAYS_INLINE -void FileOptions::set_java_package(ArgT0&& arg0, ArgT... args) { - _impl_._has_bits_[0] |= 0x00000001u; - _impl_.java_package_.Set(static_cast<ArgT0 &&>(arg0), args..., GetArenaForAllocation()); - // @@protoc_insertion_point(field_set:google.protobuf.FileOptions.java_package) -} -inline std::string* FileOptions::mutable_java_package() { - std::string* _s = _internal_mutable_java_package(); - // @@protoc_insertion_point(field_mutable:google.protobuf.FileOptions.java_package) - return _s; -} -inline const std::string& FileOptions::_internal_java_package() const { - return _impl_.java_package_.Get(); -} -inline void FileOptions::_internal_set_java_package(const std::string& value) { - _impl_._has_bits_[0] |= 0x00000001u; - _impl_.java_package_.Set(value, GetArenaForAllocation()); -} -inline std::string* FileOptions::_internal_mutable_java_package() { - _impl_._has_bits_[0] |= 0x00000001u; - return _impl_.java_package_.Mutable(GetArenaForAllocation()); -} -inline std::string* FileOptions::release_java_package() { - // @@protoc_insertion_point(field_release:google.protobuf.FileOptions.java_package) - if (!_internal_has_java_package()) { - return nullptr; - } - _impl_._has_bits_[0] &= ~0x00000001u; - auto* p = _impl_.java_package_.Release(); -#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING - if (_impl_.java_package_.IsDefault()) { - _impl_.java_package_.Set("", GetArenaForAllocation()); - } -#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING - return p; -} -inline void FileOptions::set_allocated_java_package(std::string* java_package) { - if (java_package != nullptr) { - _impl_._has_bits_[0] |= 0x00000001u; - } else { - _impl_._has_bits_[0] &= ~0x00000001u; - } - _impl_.java_package_.SetAllocated(java_package, GetArenaForAllocation()); -#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING - if (_impl_.java_package_.IsDefault()) { - _impl_.java_package_.Set("", GetArenaForAllocation()); - } -#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING - // @@protoc_insertion_point(field_set_allocated:google.protobuf.FileOptions.java_package) -} - -// optional string java_outer_classname = 8; -inline bool FileOptions::_internal_has_java_outer_classname() const { - bool value = (_impl_._has_bits_[0] & 0x00000002u) != 0; - return value; -} -inline bool FileOptions::has_java_outer_classname() const { - return _internal_has_java_outer_classname(); -} -inline void FileOptions::clear_java_outer_classname() { - _impl_.java_outer_classname_.ClearToEmpty(); - _impl_._has_bits_[0] &= ~0x00000002u; -} -inline const std::string& FileOptions::java_outer_classname() const { - // @@protoc_insertion_point(field_get:google.protobuf.FileOptions.java_outer_classname) - return _internal_java_outer_classname(); -} -template <typename ArgT0, typename... ArgT> -inline PROTOBUF_ALWAYS_INLINE -void FileOptions::set_java_outer_classname(ArgT0&& arg0, ArgT... args) { - _impl_._has_bits_[0] |= 0x00000002u; - _impl_.java_outer_classname_.Set(static_cast<ArgT0 &&>(arg0), args..., GetArenaForAllocation()); - // @@protoc_insertion_point(field_set:google.protobuf.FileOptions.java_outer_classname) -} -inline std::string* FileOptions::mutable_java_outer_classname() { - std::string* _s = _internal_mutable_java_outer_classname(); - // @@protoc_insertion_point(field_mutable:google.protobuf.FileOptions.java_outer_classname) - return _s; -} -inline const std::string& FileOptions::_internal_java_outer_classname() const { - return _impl_.java_outer_classname_.Get(); -} -inline void FileOptions::_internal_set_java_outer_classname(const std::string& value) { - _impl_._has_bits_[0] |= 0x00000002u; - _impl_.java_outer_classname_.Set(value, GetArenaForAllocation()); -} -inline std::string* FileOptions::_internal_mutable_java_outer_classname() { - _impl_._has_bits_[0] |= 0x00000002u; - return _impl_.java_outer_classname_.Mutable(GetArenaForAllocation()); -} -inline std::string* FileOptions::release_java_outer_classname() { - // @@protoc_insertion_point(field_release:google.protobuf.FileOptions.java_outer_classname) - if (!_internal_has_java_outer_classname()) { - return nullptr; - } - _impl_._has_bits_[0] &= ~0x00000002u; - auto* p = _impl_.java_outer_classname_.Release(); -#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING - if (_impl_.java_outer_classname_.IsDefault()) { - _impl_.java_outer_classname_.Set("", GetArenaForAllocation()); - } -#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING - return p; -} -inline void FileOptions::set_allocated_java_outer_classname(std::string* java_outer_classname) { - if (java_outer_classname != nullptr) { - _impl_._has_bits_[0] |= 0x00000002u; - } else { - _impl_._has_bits_[0] &= ~0x00000002u; - } - _impl_.java_outer_classname_.SetAllocated(java_outer_classname, GetArenaForAllocation()); -#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING - if (_impl_.java_outer_classname_.IsDefault()) { - _impl_.java_outer_classname_.Set("", GetArenaForAllocation()); - } -#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING - // @@protoc_insertion_point(field_set_allocated:google.protobuf.FileOptions.java_outer_classname) -} - -// optional bool java_multiple_files = 10 [default = false]; -inline bool FileOptions::_internal_has_java_multiple_files() const { - bool value = (_impl_._has_bits_[0] & 0x00000400u) != 0; - return value; -} -inline bool FileOptions::has_java_multiple_files() const { - return _internal_has_java_multiple_files(); -} -inline void FileOptions::clear_java_multiple_files() { - _impl_.java_multiple_files_ = false; - _impl_._has_bits_[0] &= ~0x00000400u; -} -inline bool FileOptions::_internal_java_multiple_files() const { - return _impl_.java_multiple_files_; -} -inline bool FileOptions::java_multiple_files() const { - // @@protoc_insertion_point(field_get:google.protobuf.FileOptions.java_multiple_files) - return _internal_java_multiple_files(); -} -inline void FileOptions::_internal_set_java_multiple_files(bool value) { - _impl_._has_bits_[0] |= 0x00000400u; - _impl_.java_multiple_files_ = value; -} -inline void FileOptions::set_java_multiple_files(bool value) { - _internal_set_java_multiple_files(value); - // @@protoc_insertion_point(field_set:google.protobuf.FileOptions.java_multiple_files) -} - -// optional bool java_generate_equals_and_hash = 20 [deprecated = true]; -inline bool FileOptions::_internal_has_java_generate_equals_and_hash() const { - bool value = (_impl_._has_bits_[0] & 0x00000800u) != 0; - return value; -} -inline bool FileOptions::has_java_generate_equals_and_hash() const { - return _internal_has_java_generate_equals_and_hash(); -} -inline void FileOptions::clear_java_generate_equals_and_hash() { - _impl_.java_generate_equals_and_hash_ = false; - _impl_._has_bits_[0] &= ~0x00000800u; -} -inline bool FileOptions::_internal_java_generate_equals_and_hash() const { - return _impl_.java_generate_equals_and_hash_; -} -inline bool FileOptions::java_generate_equals_and_hash() const { - // @@protoc_insertion_point(field_get:google.protobuf.FileOptions.java_generate_equals_and_hash) - return _internal_java_generate_equals_and_hash(); -} -inline void FileOptions::_internal_set_java_generate_equals_and_hash(bool value) { - _impl_._has_bits_[0] |= 0x00000800u; - _impl_.java_generate_equals_and_hash_ = value; -} -inline void FileOptions::set_java_generate_equals_and_hash(bool value) { - _internal_set_java_generate_equals_and_hash(value); - // @@protoc_insertion_point(field_set:google.protobuf.FileOptions.java_generate_equals_and_hash) -} - -// optional bool java_string_check_utf8 = 27 [default = false]; -inline bool FileOptions::_internal_has_java_string_check_utf8() const { - bool value = (_impl_._has_bits_[0] & 0x00001000u) != 0; - return value; -} -inline bool FileOptions::has_java_string_check_utf8() const { - return _internal_has_java_string_check_utf8(); -} -inline void FileOptions::clear_java_string_check_utf8() { - _impl_.java_string_check_utf8_ = false; - _impl_._has_bits_[0] &= ~0x00001000u; -} -inline bool FileOptions::_internal_java_string_check_utf8() const { - return _impl_.java_string_check_utf8_; -} -inline bool FileOptions::java_string_check_utf8() const { - // @@protoc_insertion_point(field_get:google.protobuf.FileOptions.java_string_check_utf8) - return _internal_java_string_check_utf8(); -} -inline void FileOptions::_internal_set_java_string_check_utf8(bool value) { - _impl_._has_bits_[0] |= 0x00001000u; - _impl_.java_string_check_utf8_ = value; -} -inline void FileOptions::set_java_string_check_utf8(bool value) { - _internal_set_java_string_check_utf8(value); - // @@protoc_insertion_point(field_set:google.protobuf.FileOptions.java_string_check_utf8) -} - -// optional .google.protobuf.FileOptions.OptimizeMode optimize_for = 9 [default = SPEED]; -inline bool FileOptions::_internal_has_optimize_for() const { - bool value = (_impl_._has_bits_[0] & 0x00040000u) != 0; - return value; -} -inline bool FileOptions::has_optimize_for() const { - return _internal_has_optimize_for(); -} -inline void FileOptions::clear_optimize_for() { - _impl_.optimize_for_ = 1; - _impl_._has_bits_[0] &= ~0x00040000u; -} -inline ::PROTOBUF_NAMESPACE_ID::FileOptions_OptimizeMode FileOptions::_internal_optimize_for() const { - return static_cast< ::PROTOBUF_NAMESPACE_ID::FileOptions_OptimizeMode >(_impl_.optimize_for_); -} -inline ::PROTOBUF_NAMESPACE_ID::FileOptions_OptimizeMode FileOptions::optimize_for() const { - // @@protoc_insertion_point(field_get:google.protobuf.FileOptions.optimize_for) - return _internal_optimize_for(); -} -inline void FileOptions::_internal_set_optimize_for(::PROTOBUF_NAMESPACE_ID::FileOptions_OptimizeMode value) { - assert(::PROTOBUF_NAMESPACE_ID::FileOptions_OptimizeMode_IsValid(value)); - _impl_._has_bits_[0] |= 0x00040000u; - _impl_.optimize_for_ = value; -} -inline void FileOptions::set_optimize_for(::PROTOBUF_NAMESPACE_ID::FileOptions_OptimizeMode value) { - _internal_set_optimize_for(value); - // @@protoc_insertion_point(field_set:google.protobuf.FileOptions.optimize_for) -} - -// optional string go_package = 11; -inline bool FileOptions::_internal_has_go_package() const { - bool value = (_impl_._has_bits_[0] & 0x00000004u) != 0; - return value; -} -inline bool FileOptions::has_go_package() const { - return _internal_has_go_package(); -} -inline void FileOptions::clear_go_package() { - _impl_.go_package_.ClearToEmpty(); - _impl_._has_bits_[0] &= ~0x00000004u; -} -inline const std::string& FileOptions::go_package() const { - // @@protoc_insertion_point(field_get:google.protobuf.FileOptions.go_package) - return _internal_go_package(); -} -template <typename ArgT0, typename... ArgT> -inline PROTOBUF_ALWAYS_INLINE -void FileOptions::set_go_package(ArgT0&& arg0, ArgT... args) { - _impl_._has_bits_[0] |= 0x00000004u; - _impl_.go_package_.Set(static_cast<ArgT0 &&>(arg0), args..., GetArenaForAllocation()); - // @@protoc_insertion_point(field_set:google.protobuf.FileOptions.go_package) -} -inline std::string* FileOptions::mutable_go_package() { - std::string* _s = _internal_mutable_go_package(); - // @@protoc_insertion_point(field_mutable:google.protobuf.FileOptions.go_package) - return _s; -} -inline const std::string& FileOptions::_internal_go_package() const { - return _impl_.go_package_.Get(); -} -inline void FileOptions::_internal_set_go_package(const std::string& value) { - _impl_._has_bits_[0] |= 0x00000004u; - _impl_.go_package_.Set(value, GetArenaForAllocation()); -} -inline std::string* FileOptions::_internal_mutable_go_package() { - _impl_._has_bits_[0] |= 0x00000004u; - return _impl_.go_package_.Mutable(GetArenaForAllocation()); -} -inline std::string* FileOptions::release_go_package() { - // @@protoc_insertion_point(field_release:google.protobuf.FileOptions.go_package) - if (!_internal_has_go_package()) { - return nullptr; - } - _impl_._has_bits_[0] &= ~0x00000004u; - auto* p = _impl_.go_package_.Release(); -#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING - if (_impl_.go_package_.IsDefault()) { - _impl_.go_package_.Set("", GetArenaForAllocation()); - } -#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING - return p; -} -inline void FileOptions::set_allocated_go_package(std::string* go_package) { - if (go_package != nullptr) { - _impl_._has_bits_[0] |= 0x00000004u; - } else { - _impl_._has_bits_[0] &= ~0x00000004u; - } - _impl_.go_package_.SetAllocated(go_package, GetArenaForAllocation()); -#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING - if (_impl_.go_package_.IsDefault()) { - _impl_.go_package_.Set("", GetArenaForAllocation()); - } -#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING - // @@protoc_insertion_point(field_set_allocated:google.protobuf.FileOptions.go_package) -} - -// optional bool cc_generic_services = 16 [default = false]; -inline bool FileOptions::_internal_has_cc_generic_services() const { - bool value = (_impl_._has_bits_[0] & 0x00002000u) != 0; - return value; -} -inline bool FileOptions::has_cc_generic_services() const { - return _internal_has_cc_generic_services(); -} -inline void FileOptions::clear_cc_generic_services() { - _impl_.cc_generic_services_ = false; - _impl_._has_bits_[0] &= ~0x00002000u; -} -inline bool FileOptions::_internal_cc_generic_services() const { - return _impl_.cc_generic_services_; -} -inline bool FileOptions::cc_generic_services() const { - // @@protoc_insertion_point(field_get:google.protobuf.FileOptions.cc_generic_services) - return _internal_cc_generic_services(); -} -inline void FileOptions::_internal_set_cc_generic_services(bool value) { - _impl_._has_bits_[0] |= 0x00002000u; - _impl_.cc_generic_services_ = value; -} -inline void FileOptions::set_cc_generic_services(bool value) { - _internal_set_cc_generic_services(value); - // @@protoc_insertion_point(field_set:google.protobuf.FileOptions.cc_generic_services) -} - -// optional bool java_generic_services = 17 [default = false]; -inline bool FileOptions::_internal_has_java_generic_services() const { - bool value = (_impl_._has_bits_[0] & 0x00004000u) != 0; - return value; -} -inline bool FileOptions::has_java_generic_services() const { - return _internal_has_java_generic_services(); -} -inline void FileOptions::clear_java_generic_services() { - _impl_.java_generic_services_ = false; - _impl_._has_bits_[0] &= ~0x00004000u; -} -inline bool FileOptions::_internal_java_generic_services() const { - return _impl_.java_generic_services_; -} -inline bool FileOptions::java_generic_services() const { - // @@protoc_insertion_point(field_get:google.protobuf.FileOptions.java_generic_services) - return _internal_java_generic_services(); -} -inline void FileOptions::_internal_set_java_generic_services(bool value) { - _impl_._has_bits_[0] |= 0x00004000u; - _impl_.java_generic_services_ = value; -} -inline void FileOptions::set_java_generic_services(bool value) { - _internal_set_java_generic_services(value); - // @@protoc_insertion_point(field_set:google.protobuf.FileOptions.java_generic_services) -} - -// optional bool py_generic_services = 18 [default = false]; -inline bool FileOptions::_internal_has_py_generic_services() const { - bool value = (_impl_._has_bits_[0] & 0x00008000u) != 0; - return value; -} -inline bool FileOptions::has_py_generic_services() const { - return _internal_has_py_generic_services(); -} -inline void FileOptions::clear_py_generic_services() { - _impl_.py_generic_services_ = false; - _impl_._has_bits_[0] &= ~0x00008000u; -} -inline bool FileOptions::_internal_py_generic_services() const { - return _impl_.py_generic_services_; -} -inline bool FileOptions::py_generic_services() const { - // @@protoc_insertion_point(field_get:google.protobuf.FileOptions.py_generic_services) - return _internal_py_generic_services(); -} -inline void FileOptions::_internal_set_py_generic_services(bool value) { - _impl_._has_bits_[0] |= 0x00008000u; - _impl_.py_generic_services_ = value; -} -inline void FileOptions::set_py_generic_services(bool value) { - _internal_set_py_generic_services(value); - // @@protoc_insertion_point(field_set:google.protobuf.FileOptions.py_generic_services) -} - -// optional bool php_generic_services = 42 [default = false]; -inline bool FileOptions::_internal_has_php_generic_services() const { - bool value = (_impl_._has_bits_[0] & 0x00010000u) != 0; - return value; -} -inline bool FileOptions::has_php_generic_services() const { - return _internal_has_php_generic_services(); -} -inline void FileOptions::clear_php_generic_services() { - _impl_.php_generic_services_ = false; - _impl_._has_bits_[0] &= ~0x00010000u; -} -inline bool FileOptions::_internal_php_generic_services() const { - return _impl_.php_generic_services_; -} -inline bool FileOptions::php_generic_services() const { - // @@protoc_insertion_point(field_get:google.protobuf.FileOptions.php_generic_services) - return _internal_php_generic_services(); -} -inline void FileOptions::_internal_set_php_generic_services(bool value) { - _impl_._has_bits_[0] |= 0x00010000u; - _impl_.php_generic_services_ = value; -} -inline void FileOptions::set_php_generic_services(bool value) { - _internal_set_php_generic_services(value); - // @@protoc_insertion_point(field_set:google.protobuf.FileOptions.php_generic_services) -} - -// optional bool deprecated = 23 [default = false]; -inline bool FileOptions::_internal_has_deprecated() const { - bool value = (_impl_._has_bits_[0] & 0x00020000u) != 0; - return value; -} -inline bool FileOptions::has_deprecated() const { - return _internal_has_deprecated(); -} -inline void FileOptions::clear_deprecated() { - _impl_.deprecated_ = false; - _impl_._has_bits_[0] &= ~0x00020000u; -} -inline bool FileOptions::_internal_deprecated() const { - return _impl_.deprecated_; -} -inline bool FileOptions::deprecated() const { - // @@protoc_insertion_point(field_get:google.protobuf.FileOptions.deprecated) - return _internal_deprecated(); -} -inline void FileOptions::_internal_set_deprecated(bool value) { - _impl_._has_bits_[0] |= 0x00020000u; - _impl_.deprecated_ = value; -} -inline void FileOptions::set_deprecated(bool value) { - _internal_set_deprecated(value); - // @@protoc_insertion_point(field_set:google.protobuf.FileOptions.deprecated) -} - -// optional bool cc_enable_arenas = 31 [default = true]; -inline bool FileOptions::_internal_has_cc_enable_arenas() const { - bool value = (_impl_._has_bits_[0] & 0x00080000u) != 0; - return value; -} -inline bool FileOptions::has_cc_enable_arenas() const { - return _internal_has_cc_enable_arenas(); -} -inline void FileOptions::clear_cc_enable_arenas() { - _impl_.cc_enable_arenas_ = true; - _impl_._has_bits_[0] &= ~0x00080000u; -} -inline bool FileOptions::_internal_cc_enable_arenas() const { - return _impl_.cc_enable_arenas_; -} -inline bool FileOptions::cc_enable_arenas() const { - // @@protoc_insertion_point(field_get:google.protobuf.FileOptions.cc_enable_arenas) - return _internal_cc_enable_arenas(); -} -inline void FileOptions::_internal_set_cc_enable_arenas(bool value) { - _impl_._has_bits_[0] |= 0x00080000u; - _impl_.cc_enable_arenas_ = value; -} -inline void FileOptions::set_cc_enable_arenas(bool value) { - _internal_set_cc_enable_arenas(value); - // @@protoc_insertion_point(field_set:google.protobuf.FileOptions.cc_enable_arenas) -} - -// optional string objc_class_prefix = 36; -inline bool FileOptions::_internal_has_objc_class_prefix() const { - bool value = (_impl_._has_bits_[0] & 0x00000008u) != 0; - return value; -} -inline bool FileOptions::has_objc_class_prefix() const { - return _internal_has_objc_class_prefix(); -} -inline void FileOptions::clear_objc_class_prefix() { - _impl_.objc_class_prefix_.ClearToEmpty(); - _impl_._has_bits_[0] &= ~0x00000008u; -} -inline const std::string& FileOptions::objc_class_prefix() const { - // @@protoc_insertion_point(field_get:google.protobuf.FileOptions.objc_class_prefix) - return _internal_objc_class_prefix(); -} -template <typename ArgT0, typename... ArgT> -inline PROTOBUF_ALWAYS_INLINE -void FileOptions::set_objc_class_prefix(ArgT0&& arg0, ArgT... args) { - _impl_._has_bits_[0] |= 0x00000008u; - _impl_.objc_class_prefix_.Set(static_cast<ArgT0 &&>(arg0), args..., GetArenaForAllocation()); - // @@protoc_insertion_point(field_set:google.protobuf.FileOptions.objc_class_prefix) -} -inline std::string* FileOptions::mutable_objc_class_prefix() { - std::string* _s = _internal_mutable_objc_class_prefix(); - // @@protoc_insertion_point(field_mutable:google.protobuf.FileOptions.objc_class_prefix) - return _s; -} -inline const std::string& FileOptions::_internal_objc_class_prefix() const { - return _impl_.objc_class_prefix_.Get(); -} -inline void FileOptions::_internal_set_objc_class_prefix(const std::string& value) { - _impl_._has_bits_[0] |= 0x00000008u; - _impl_.objc_class_prefix_.Set(value, GetArenaForAllocation()); -} -inline std::string* FileOptions::_internal_mutable_objc_class_prefix() { - _impl_._has_bits_[0] |= 0x00000008u; - return _impl_.objc_class_prefix_.Mutable(GetArenaForAllocation()); -} -inline std::string* FileOptions::release_objc_class_prefix() { - // @@protoc_insertion_point(field_release:google.protobuf.FileOptions.objc_class_prefix) - if (!_internal_has_objc_class_prefix()) { - return nullptr; - } - _impl_._has_bits_[0] &= ~0x00000008u; - auto* p = _impl_.objc_class_prefix_.Release(); -#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING - if (_impl_.objc_class_prefix_.IsDefault()) { - _impl_.objc_class_prefix_.Set("", GetArenaForAllocation()); - } -#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING - return p; -} -inline void FileOptions::set_allocated_objc_class_prefix(std::string* objc_class_prefix) { - if (objc_class_prefix != nullptr) { - _impl_._has_bits_[0] |= 0x00000008u; - } else { - _impl_._has_bits_[0] &= ~0x00000008u; - } - _impl_.objc_class_prefix_.SetAllocated(objc_class_prefix, GetArenaForAllocation()); -#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING - if (_impl_.objc_class_prefix_.IsDefault()) { - _impl_.objc_class_prefix_.Set("", GetArenaForAllocation()); - } -#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING - // @@protoc_insertion_point(field_set_allocated:google.protobuf.FileOptions.objc_class_prefix) -} - -// optional string csharp_namespace = 37; -inline bool FileOptions::_internal_has_csharp_namespace() const { - bool value = (_impl_._has_bits_[0] & 0x00000010u) != 0; - return value; -} -inline bool FileOptions::has_csharp_namespace() const { - return _internal_has_csharp_namespace(); -} -inline void FileOptions::clear_csharp_namespace() { - _impl_.csharp_namespace_.ClearToEmpty(); - _impl_._has_bits_[0] &= ~0x00000010u; -} -inline const std::string& FileOptions::csharp_namespace() const { - // @@protoc_insertion_point(field_get:google.protobuf.FileOptions.csharp_namespace) - return _internal_csharp_namespace(); -} -template <typename ArgT0, typename... ArgT> -inline PROTOBUF_ALWAYS_INLINE -void FileOptions::set_csharp_namespace(ArgT0&& arg0, ArgT... args) { - _impl_._has_bits_[0] |= 0x00000010u; - _impl_.csharp_namespace_.Set(static_cast<ArgT0 &&>(arg0), args..., GetArenaForAllocation()); - // @@protoc_insertion_point(field_set:google.protobuf.FileOptions.csharp_namespace) -} -inline std::string* FileOptions::mutable_csharp_namespace() { - std::string* _s = _internal_mutable_csharp_namespace(); - // @@protoc_insertion_point(field_mutable:google.protobuf.FileOptions.csharp_namespace) - return _s; -} -inline const std::string& FileOptions::_internal_csharp_namespace() const { - return _impl_.csharp_namespace_.Get(); -} -inline void FileOptions::_internal_set_csharp_namespace(const std::string& value) { - _impl_._has_bits_[0] |= 0x00000010u; - _impl_.csharp_namespace_.Set(value, GetArenaForAllocation()); -} -inline std::string* FileOptions::_internal_mutable_csharp_namespace() { - _impl_._has_bits_[0] |= 0x00000010u; - return _impl_.csharp_namespace_.Mutable(GetArenaForAllocation()); -} -inline std::string* FileOptions::release_csharp_namespace() { - // @@protoc_insertion_point(field_release:google.protobuf.FileOptions.csharp_namespace) - if (!_internal_has_csharp_namespace()) { - return nullptr; - } - _impl_._has_bits_[0] &= ~0x00000010u; - auto* p = _impl_.csharp_namespace_.Release(); -#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING - if (_impl_.csharp_namespace_.IsDefault()) { - _impl_.csharp_namespace_.Set("", GetArenaForAllocation()); - } -#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING - return p; -} -inline void FileOptions::set_allocated_csharp_namespace(std::string* csharp_namespace) { - if (csharp_namespace != nullptr) { - _impl_._has_bits_[0] |= 0x00000010u; - } else { - _impl_._has_bits_[0] &= ~0x00000010u; - } - _impl_.csharp_namespace_.SetAllocated(csharp_namespace, GetArenaForAllocation()); -#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING - if (_impl_.csharp_namespace_.IsDefault()) { - _impl_.csharp_namespace_.Set("", GetArenaForAllocation()); - } -#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING - // @@protoc_insertion_point(field_set_allocated:google.protobuf.FileOptions.csharp_namespace) -} - -// optional string swift_prefix = 39; -inline bool FileOptions::_internal_has_swift_prefix() const { - bool value = (_impl_._has_bits_[0] & 0x00000020u) != 0; - return value; -} -inline bool FileOptions::has_swift_prefix() const { - return _internal_has_swift_prefix(); -} -inline void FileOptions::clear_swift_prefix() { - _impl_.swift_prefix_.ClearToEmpty(); - _impl_._has_bits_[0] &= ~0x00000020u; -} -inline const std::string& FileOptions::swift_prefix() const { - // @@protoc_insertion_point(field_get:google.protobuf.FileOptions.swift_prefix) - return _internal_swift_prefix(); -} -template <typename ArgT0, typename... ArgT> -inline PROTOBUF_ALWAYS_INLINE -void FileOptions::set_swift_prefix(ArgT0&& arg0, ArgT... args) { - _impl_._has_bits_[0] |= 0x00000020u; - _impl_.swift_prefix_.Set(static_cast<ArgT0 &&>(arg0), args..., GetArenaForAllocation()); - // @@protoc_insertion_point(field_set:google.protobuf.FileOptions.swift_prefix) -} -inline std::string* FileOptions::mutable_swift_prefix() { - std::string* _s = _internal_mutable_swift_prefix(); - // @@protoc_insertion_point(field_mutable:google.protobuf.FileOptions.swift_prefix) - return _s; -} -inline const std::string& FileOptions::_internal_swift_prefix() const { - return _impl_.swift_prefix_.Get(); -} -inline void FileOptions::_internal_set_swift_prefix(const std::string& value) { - _impl_._has_bits_[0] |= 0x00000020u; - _impl_.swift_prefix_.Set(value, GetArenaForAllocation()); -} -inline std::string* FileOptions::_internal_mutable_swift_prefix() { - _impl_._has_bits_[0] |= 0x00000020u; - return _impl_.swift_prefix_.Mutable(GetArenaForAllocation()); -} -inline std::string* FileOptions::release_swift_prefix() { - // @@protoc_insertion_point(field_release:google.protobuf.FileOptions.swift_prefix) - if (!_internal_has_swift_prefix()) { - return nullptr; - } - _impl_._has_bits_[0] &= ~0x00000020u; - auto* p = _impl_.swift_prefix_.Release(); -#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING - if (_impl_.swift_prefix_.IsDefault()) { - _impl_.swift_prefix_.Set("", GetArenaForAllocation()); - } -#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING - return p; -} -inline void FileOptions::set_allocated_swift_prefix(std::string* swift_prefix) { - if (swift_prefix != nullptr) { - _impl_._has_bits_[0] |= 0x00000020u; - } else { - _impl_._has_bits_[0] &= ~0x00000020u; - } - _impl_.swift_prefix_.SetAllocated(swift_prefix, GetArenaForAllocation()); -#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING - if (_impl_.swift_prefix_.IsDefault()) { - _impl_.swift_prefix_.Set("", GetArenaForAllocation()); - } -#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING - // @@protoc_insertion_point(field_set_allocated:google.protobuf.FileOptions.swift_prefix) -} - -// optional string php_class_prefix = 40; -inline bool FileOptions::_internal_has_php_class_prefix() const { - bool value = (_impl_._has_bits_[0] & 0x00000040u) != 0; - return value; -} -inline bool FileOptions::has_php_class_prefix() const { - return _internal_has_php_class_prefix(); -} -inline void FileOptions::clear_php_class_prefix() { - _impl_.php_class_prefix_.ClearToEmpty(); - _impl_._has_bits_[0] &= ~0x00000040u; -} -inline const std::string& FileOptions::php_class_prefix() const { - // @@protoc_insertion_point(field_get:google.protobuf.FileOptions.php_class_prefix) - return _internal_php_class_prefix(); -} -template <typename ArgT0, typename... ArgT> -inline PROTOBUF_ALWAYS_INLINE -void FileOptions::set_php_class_prefix(ArgT0&& arg0, ArgT... args) { - _impl_._has_bits_[0] |= 0x00000040u; - _impl_.php_class_prefix_.Set(static_cast<ArgT0 &&>(arg0), args..., GetArenaForAllocation()); - // @@protoc_insertion_point(field_set:google.protobuf.FileOptions.php_class_prefix) -} -inline std::string* FileOptions::mutable_php_class_prefix() { - std::string* _s = _internal_mutable_php_class_prefix(); - // @@protoc_insertion_point(field_mutable:google.protobuf.FileOptions.php_class_prefix) - return _s; -} -inline const std::string& FileOptions::_internal_php_class_prefix() const { - return _impl_.php_class_prefix_.Get(); -} -inline void FileOptions::_internal_set_php_class_prefix(const std::string& value) { - _impl_._has_bits_[0] |= 0x00000040u; - _impl_.php_class_prefix_.Set(value, GetArenaForAllocation()); -} -inline std::string* FileOptions::_internal_mutable_php_class_prefix() { - _impl_._has_bits_[0] |= 0x00000040u; - return _impl_.php_class_prefix_.Mutable(GetArenaForAllocation()); -} -inline std::string* FileOptions::release_php_class_prefix() { - // @@protoc_insertion_point(field_release:google.protobuf.FileOptions.php_class_prefix) - if (!_internal_has_php_class_prefix()) { - return nullptr; - } - _impl_._has_bits_[0] &= ~0x00000040u; - auto* p = _impl_.php_class_prefix_.Release(); -#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING - if (_impl_.php_class_prefix_.IsDefault()) { - _impl_.php_class_prefix_.Set("", GetArenaForAllocation()); - } -#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING - return p; -} -inline void FileOptions::set_allocated_php_class_prefix(std::string* php_class_prefix) { - if (php_class_prefix != nullptr) { - _impl_._has_bits_[0] |= 0x00000040u; - } else { - _impl_._has_bits_[0] &= ~0x00000040u; - } - _impl_.php_class_prefix_.SetAllocated(php_class_prefix, GetArenaForAllocation()); -#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING - if (_impl_.php_class_prefix_.IsDefault()) { - _impl_.php_class_prefix_.Set("", GetArenaForAllocation()); - } -#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING - // @@protoc_insertion_point(field_set_allocated:google.protobuf.FileOptions.php_class_prefix) -} - -// optional string php_namespace = 41; -inline bool FileOptions::_internal_has_php_namespace() const { - bool value = (_impl_._has_bits_[0] & 0x00000080u) != 0; - return value; -} -inline bool FileOptions::has_php_namespace() const { - return _internal_has_php_namespace(); -} -inline void FileOptions::clear_php_namespace() { - _impl_.php_namespace_.ClearToEmpty(); - _impl_._has_bits_[0] &= ~0x00000080u; -} -inline const std::string& FileOptions::php_namespace() const { - // @@protoc_insertion_point(field_get:google.protobuf.FileOptions.php_namespace) - return _internal_php_namespace(); -} -template <typename ArgT0, typename... ArgT> -inline PROTOBUF_ALWAYS_INLINE -void FileOptions::set_php_namespace(ArgT0&& arg0, ArgT... args) { - _impl_._has_bits_[0] |= 0x00000080u; - _impl_.php_namespace_.Set(static_cast<ArgT0 &&>(arg0), args..., GetArenaForAllocation()); - // @@protoc_insertion_point(field_set:google.protobuf.FileOptions.php_namespace) -} -inline std::string* FileOptions::mutable_php_namespace() { - std::string* _s = _internal_mutable_php_namespace(); - // @@protoc_insertion_point(field_mutable:google.protobuf.FileOptions.php_namespace) - return _s; -} -inline const std::string& FileOptions::_internal_php_namespace() const { - return _impl_.php_namespace_.Get(); -} -inline void FileOptions::_internal_set_php_namespace(const std::string& value) { - _impl_._has_bits_[0] |= 0x00000080u; - _impl_.php_namespace_.Set(value, GetArenaForAllocation()); -} -inline std::string* FileOptions::_internal_mutable_php_namespace() { - _impl_._has_bits_[0] |= 0x00000080u; - return _impl_.php_namespace_.Mutable(GetArenaForAllocation()); -} -inline std::string* FileOptions::release_php_namespace() { - // @@protoc_insertion_point(field_release:google.protobuf.FileOptions.php_namespace) - if (!_internal_has_php_namespace()) { - return nullptr; - } - _impl_._has_bits_[0] &= ~0x00000080u; - auto* p = _impl_.php_namespace_.Release(); -#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING - if (_impl_.php_namespace_.IsDefault()) { - _impl_.php_namespace_.Set("", GetArenaForAllocation()); - } -#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING - return p; -} -inline void FileOptions::set_allocated_php_namespace(std::string* php_namespace) { - if (php_namespace != nullptr) { - _impl_._has_bits_[0] |= 0x00000080u; - } else { - _impl_._has_bits_[0] &= ~0x00000080u; - } - _impl_.php_namespace_.SetAllocated(php_namespace, GetArenaForAllocation()); -#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING - if (_impl_.php_namespace_.IsDefault()) { - _impl_.php_namespace_.Set("", GetArenaForAllocation()); - } -#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING - // @@protoc_insertion_point(field_set_allocated:google.protobuf.FileOptions.php_namespace) -} - -// optional string php_metadata_namespace = 44; -inline bool FileOptions::_internal_has_php_metadata_namespace() const { - bool value = (_impl_._has_bits_[0] & 0x00000100u) != 0; - return value; -} -inline bool FileOptions::has_php_metadata_namespace() const { - return _internal_has_php_metadata_namespace(); -} -inline void FileOptions::clear_php_metadata_namespace() { - _impl_.php_metadata_namespace_.ClearToEmpty(); - _impl_._has_bits_[0] &= ~0x00000100u; -} -inline const std::string& FileOptions::php_metadata_namespace() const { - // @@protoc_insertion_point(field_get:google.protobuf.FileOptions.php_metadata_namespace) - return _internal_php_metadata_namespace(); -} -template <typename ArgT0, typename... ArgT> -inline PROTOBUF_ALWAYS_INLINE -void FileOptions::set_php_metadata_namespace(ArgT0&& arg0, ArgT... args) { - _impl_._has_bits_[0] |= 0x00000100u; - _impl_.php_metadata_namespace_.Set(static_cast<ArgT0 &&>(arg0), args..., GetArenaForAllocation()); - // @@protoc_insertion_point(field_set:google.protobuf.FileOptions.php_metadata_namespace) -} -inline std::string* FileOptions::mutable_php_metadata_namespace() { - std::string* _s = _internal_mutable_php_metadata_namespace(); - // @@protoc_insertion_point(field_mutable:google.protobuf.FileOptions.php_metadata_namespace) - return _s; -} -inline const std::string& FileOptions::_internal_php_metadata_namespace() const { - return _impl_.php_metadata_namespace_.Get(); -} -inline void FileOptions::_internal_set_php_metadata_namespace(const std::string& value) { - _impl_._has_bits_[0] |= 0x00000100u; - _impl_.php_metadata_namespace_.Set(value, GetArenaForAllocation()); -} -inline std::string* FileOptions::_internal_mutable_php_metadata_namespace() { - _impl_._has_bits_[0] |= 0x00000100u; - return _impl_.php_metadata_namespace_.Mutable(GetArenaForAllocation()); -} -inline std::string* FileOptions::release_php_metadata_namespace() { - // @@protoc_insertion_point(field_release:google.protobuf.FileOptions.php_metadata_namespace) - if (!_internal_has_php_metadata_namespace()) { - return nullptr; - } - _impl_._has_bits_[0] &= ~0x00000100u; - auto* p = _impl_.php_metadata_namespace_.Release(); -#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING - if (_impl_.php_metadata_namespace_.IsDefault()) { - _impl_.php_metadata_namespace_.Set("", GetArenaForAllocation()); - } -#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING - return p; -} -inline void FileOptions::set_allocated_php_metadata_namespace(std::string* php_metadata_namespace) { - if (php_metadata_namespace != nullptr) { - _impl_._has_bits_[0] |= 0x00000100u; - } else { - _impl_._has_bits_[0] &= ~0x00000100u; - } - _impl_.php_metadata_namespace_.SetAllocated(php_metadata_namespace, GetArenaForAllocation()); -#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING - if (_impl_.php_metadata_namespace_.IsDefault()) { - _impl_.php_metadata_namespace_.Set("", GetArenaForAllocation()); - } -#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING - // @@protoc_insertion_point(field_set_allocated:google.protobuf.FileOptions.php_metadata_namespace) -} - -// optional string ruby_package = 45; -inline bool FileOptions::_internal_has_ruby_package() const { - bool value = (_impl_._has_bits_[0] & 0x00000200u) != 0; - return value; -} -inline bool FileOptions::has_ruby_package() const { - return _internal_has_ruby_package(); -} -inline void FileOptions::clear_ruby_package() { - _impl_.ruby_package_.ClearToEmpty(); - _impl_._has_bits_[0] &= ~0x00000200u; -} -inline const std::string& FileOptions::ruby_package() const { - // @@protoc_insertion_point(field_get:google.protobuf.FileOptions.ruby_package) - return _internal_ruby_package(); -} -template <typename ArgT0, typename... ArgT> -inline PROTOBUF_ALWAYS_INLINE -void FileOptions::set_ruby_package(ArgT0&& arg0, ArgT... args) { - _impl_._has_bits_[0] |= 0x00000200u; - _impl_.ruby_package_.Set(static_cast<ArgT0 &&>(arg0), args..., GetArenaForAllocation()); - // @@protoc_insertion_point(field_set:google.protobuf.FileOptions.ruby_package) -} -inline std::string* FileOptions::mutable_ruby_package() { - std::string* _s = _internal_mutable_ruby_package(); - // @@protoc_insertion_point(field_mutable:google.protobuf.FileOptions.ruby_package) - return _s; -} -inline const std::string& FileOptions::_internal_ruby_package() const { - return _impl_.ruby_package_.Get(); -} -inline void FileOptions::_internal_set_ruby_package(const std::string& value) { - _impl_._has_bits_[0] |= 0x00000200u; - _impl_.ruby_package_.Set(value, GetArenaForAllocation()); -} -inline std::string* FileOptions::_internal_mutable_ruby_package() { - _impl_._has_bits_[0] |= 0x00000200u; - return _impl_.ruby_package_.Mutable(GetArenaForAllocation()); -} -inline std::string* FileOptions::release_ruby_package() { - // @@protoc_insertion_point(field_release:google.protobuf.FileOptions.ruby_package) - if (!_internal_has_ruby_package()) { - return nullptr; - } - _impl_._has_bits_[0] &= ~0x00000200u; - auto* p = _impl_.ruby_package_.Release(); -#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING - if (_impl_.ruby_package_.IsDefault()) { - _impl_.ruby_package_.Set("", GetArenaForAllocation()); - } -#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING - return p; -} -inline void FileOptions::set_allocated_ruby_package(std::string* ruby_package) { - if (ruby_package != nullptr) { - _impl_._has_bits_[0] |= 0x00000200u; - } else { - _impl_._has_bits_[0] &= ~0x00000200u; - } - _impl_.ruby_package_.SetAllocated(ruby_package, GetArenaForAllocation()); -#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING - if (_impl_.ruby_package_.IsDefault()) { - _impl_.ruby_package_.Set("", GetArenaForAllocation()); - } -#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING - // @@protoc_insertion_point(field_set_allocated:google.protobuf.FileOptions.ruby_package) -} - -// repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999; -inline int FileOptions::_internal_uninterpreted_option_size() const { - return _impl_.uninterpreted_option_.size(); -} -inline int FileOptions::uninterpreted_option_size() const { - return _internal_uninterpreted_option_size(); -} -inline void FileOptions::clear_uninterpreted_option() { - _impl_.uninterpreted_option_.Clear(); -} -inline ::PROTOBUF_NAMESPACE_ID::UninterpretedOption* FileOptions::mutable_uninterpreted_option(int index) { - // @@protoc_insertion_point(field_mutable:google.protobuf.FileOptions.uninterpreted_option) - return _impl_.uninterpreted_option_.Mutable(index); -} -inline ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::UninterpretedOption >* -FileOptions::mutable_uninterpreted_option() { - // @@protoc_insertion_point(field_mutable_list:google.protobuf.FileOptions.uninterpreted_option) - return &_impl_.uninterpreted_option_; -} -inline const ::PROTOBUF_NAMESPACE_ID::UninterpretedOption& FileOptions::_internal_uninterpreted_option(int index) const { - return _impl_.uninterpreted_option_.Get(index); -} -inline const ::PROTOBUF_NAMESPACE_ID::UninterpretedOption& FileOptions::uninterpreted_option(int index) const { - // @@protoc_insertion_point(field_get:google.protobuf.FileOptions.uninterpreted_option) - return _internal_uninterpreted_option(index); -} -inline ::PROTOBUF_NAMESPACE_ID::UninterpretedOption* FileOptions::_internal_add_uninterpreted_option() { - return _impl_.uninterpreted_option_.Add(); -} -inline ::PROTOBUF_NAMESPACE_ID::UninterpretedOption* FileOptions::add_uninterpreted_option() { - ::PROTOBUF_NAMESPACE_ID::UninterpretedOption* _add = _internal_add_uninterpreted_option(); - // @@protoc_insertion_point(field_add:google.protobuf.FileOptions.uninterpreted_option) - return _add; -} -inline const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::UninterpretedOption >& -FileOptions::uninterpreted_option() const { - // @@protoc_insertion_point(field_list:google.protobuf.FileOptions.uninterpreted_option) - return _impl_.uninterpreted_option_; -} - -// ------------------------------------------------------------------- - -// MessageOptions - -// optional bool message_set_wire_format = 1 [default = false]; -inline bool MessageOptions::_internal_has_message_set_wire_format() const { - bool value = (_impl_._has_bits_[0] & 0x00000001u) != 0; - return value; -} -inline bool MessageOptions::has_message_set_wire_format() const { - return _internal_has_message_set_wire_format(); -} -inline void MessageOptions::clear_message_set_wire_format() { - _impl_.message_set_wire_format_ = false; - _impl_._has_bits_[0] &= ~0x00000001u; -} -inline bool MessageOptions::_internal_message_set_wire_format() const { - return _impl_.message_set_wire_format_; -} -inline bool MessageOptions::message_set_wire_format() const { - // @@protoc_insertion_point(field_get:google.protobuf.MessageOptions.message_set_wire_format) - return _internal_message_set_wire_format(); -} -inline void MessageOptions::_internal_set_message_set_wire_format(bool value) { - _impl_._has_bits_[0] |= 0x00000001u; - _impl_.message_set_wire_format_ = value; -} -inline void MessageOptions::set_message_set_wire_format(bool value) { - _internal_set_message_set_wire_format(value); - // @@protoc_insertion_point(field_set:google.protobuf.MessageOptions.message_set_wire_format) -} - -// optional bool no_standard_descriptor_accessor = 2 [default = false]; -inline bool MessageOptions::_internal_has_no_standard_descriptor_accessor() const { - bool value = (_impl_._has_bits_[0] & 0x00000002u) != 0; - return value; -} -inline bool MessageOptions::has_no_standard_descriptor_accessor() const { - return _internal_has_no_standard_descriptor_accessor(); -} -inline void MessageOptions::clear_no_standard_descriptor_accessor() { - _impl_.no_standard_descriptor_accessor_ = false; - _impl_._has_bits_[0] &= ~0x00000002u; -} -inline bool MessageOptions::_internal_no_standard_descriptor_accessor() const { - return _impl_.no_standard_descriptor_accessor_; -} -inline bool MessageOptions::no_standard_descriptor_accessor() const { - // @@protoc_insertion_point(field_get:google.protobuf.MessageOptions.no_standard_descriptor_accessor) - return _internal_no_standard_descriptor_accessor(); -} -inline void MessageOptions::_internal_set_no_standard_descriptor_accessor(bool value) { - _impl_._has_bits_[0] |= 0x00000002u; - _impl_.no_standard_descriptor_accessor_ = value; -} -inline void MessageOptions::set_no_standard_descriptor_accessor(bool value) { - _internal_set_no_standard_descriptor_accessor(value); - // @@protoc_insertion_point(field_set:google.protobuf.MessageOptions.no_standard_descriptor_accessor) -} - -// optional bool deprecated = 3 [default = false]; -inline bool MessageOptions::_internal_has_deprecated() const { - bool value = (_impl_._has_bits_[0] & 0x00000004u) != 0; - return value; -} -inline bool MessageOptions::has_deprecated() const { - return _internal_has_deprecated(); -} -inline void MessageOptions::clear_deprecated() { - _impl_.deprecated_ = false; - _impl_._has_bits_[0] &= ~0x00000004u; -} -inline bool MessageOptions::_internal_deprecated() const { - return _impl_.deprecated_; -} -inline bool MessageOptions::deprecated() const { - // @@protoc_insertion_point(field_get:google.protobuf.MessageOptions.deprecated) - return _internal_deprecated(); -} -inline void MessageOptions::_internal_set_deprecated(bool value) { - _impl_._has_bits_[0] |= 0x00000004u; - _impl_.deprecated_ = value; -} -inline void MessageOptions::set_deprecated(bool value) { - _internal_set_deprecated(value); - // @@protoc_insertion_point(field_set:google.protobuf.MessageOptions.deprecated) -} - -// optional bool map_entry = 7; -inline bool MessageOptions::_internal_has_map_entry() const { - bool value = (_impl_._has_bits_[0] & 0x00000008u) != 0; - return value; -} -inline bool MessageOptions::has_map_entry() const { - return _internal_has_map_entry(); -} -inline void MessageOptions::clear_map_entry() { - _impl_.map_entry_ = false; - _impl_._has_bits_[0] &= ~0x00000008u; -} -inline bool MessageOptions::_internal_map_entry() const { - return _impl_.map_entry_; -} -inline bool MessageOptions::map_entry() const { - // @@protoc_insertion_point(field_get:google.protobuf.MessageOptions.map_entry) - return _internal_map_entry(); -} -inline void MessageOptions::_internal_set_map_entry(bool value) { - _impl_._has_bits_[0] |= 0x00000008u; - _impl_.map_entry_ = value; -} -inline void MessageOptions::set_map_entry(bool value) { - _internal_set_map_entry(value); - // @@protoc_insertion_point(field_set:google.protobuf.MessageOptions.map_entry) -} - -// repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999; -inline int MessageOptions::_internal_uninterpreted_option_size() const { - return _impl_.uninterpreted_option_.size(); -} -inline int MessageOptions::uninterpreted_option_size() const { - return _internal_uninterpreted_option_size(); -} -inline void MessageOptions::clear_uninterpreted_option() { - _impl_.uninterpreted_option_.Clear(); -} -inline ::PROTOBUF_NAMESPACE_ID::UninterpretedOption* MessageOptions::mutable_uninterpreted_option(int index) { - // @@protoc_insertion_point(field_mutable:google.protobuf.MessageOptions.uninterpreted_option) - return _impl_.uninterpreted_option_.Mutable(index); -} -inline ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::UninterpretedOption >* -MessageOptions::mutable_uninterpreted_option() { - // @@protoc_insertion_point(field_mutable_list:google.protobuf.MessageOptions.uninterpreted_option) - return &_impl_.uninterpreted_option_; -} -inline const ::PROTOBUF_NAMESPACE_ID::UninterpretedOption& MessageOptions::_internal_uninterpreted_option(int index) const { - return _impl_.uninterpreted_option_.Get(index); -} -inline const ::PROTOBUF_NAMESPACE_ID::UninterpretedOption& MessageOptions::uninterpreted_option(int index) const { - // @@protoc_insertion_point(field_get:google.protobuf.MessageOptions.uninterpreted_option) - return _internal_uninterpreted_option(index); -} -inline ::PROTOBUF_NAMESPACE_ID::UninterpretedOption* MessageOptions::_internal_add_uninterpreted_option() { - return _impl_.uninterpreted_option_.Add(); -} -inline ::PROTOBUF_NAMESPACE_ID::UninterpretedOption* MessageOptions::add_uninterpreted_option() { - ::PROTOBUF_NAMESPACE_ID::UninterpretedOption* _add = _internal_add_uninterpreted_option(); - // @@protoc_insertion_point(field_add:google.protobuf.MessageOptions.uninterpreted_option) - return _add; -} -inline const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::UninterpretedOption >& -MessageOptions::uninterpreted_option() const { - // @@protoc_insertion_point(field_list:google.protobuf.MessageOptions.uninterpreted_option) - return _impl_.uninterpreted_option_; -} - -// ------------------------------------------------------------------- - -// FieldOptions - -// optional .google.protobuf.FieldOptions.CType ctype = 1 [default = STRING]; -inline bool FieldOptions::_internal_has_ctype() const { - bool value = (_impl_._has_bits_[0] & 0x00000001u) != 0; - return value; -} -inline bool FieldOptions::has_ctype() const { - return _internal_has_ctype(); -} -inline void FieldOptions::clear_ctype() { - _impl_.ctype_ = 0; - _impl_._has_bits_[0] &= ~0x00000001u; -} -inline ::PROTOBUF_NAMESPACE_ID::FieldOptions_CType FieldOptions::_internal_ctype() const { - return static_cast< ::PROTOBUF_NAMESPACE_ID::FieldOptions_CType >(_impl_.ctype_); -} -inline ::PROTOBUF_NAMESPACE_ID::FieldOptions_CType FieldOptions::ctype() const { - // @@protoc_insertion_point(field_get:google.protobuf.FieldOptions.ctype) - return _internal_ctype(); -} -inline void FieldOptions::_internal_set_ctype(::PROTOBUF_NAMESPACE_ID::FieldOptions_CType value) { - assert(::PROTOBUF_NAMESPACE_ID::FieldOptions_CType_IsValid(value)); - _impl_._has_bits_[0] |= 0x00000001u; - _impl_.ctype_ = value; -} -inline void FieldOptions::set_ctype(::PROTOBUF_NAMESPACE_ID::FieldOptions_CType value) { - _internal_set_ctype(value); - // @@protoc_insertion_point(field_set:google.protobuf.FieldOptions.ctype) -} - -// optional bool packed = 2; -inline bool FieldOptions::_internal_has_packed() const { - bool value = (_impl_._has_bits_[0] & 0x00000004u) != 0; - return value; -} -inline bool FieldOptions::has_packed() const { - return _internal_has_packed(); -} -inline void FieldOptions::clear_packed() { - _impl_.packed_ = false; - _impl_._has_bits_[0] &= ~0x00000004u; -} -inline bool FieldOptions::_internal_packed() const { - return _impl_.packed_; -} -inline bool FieldOptions::packed() const { - // @@protoc_insertion_point(field_get:google.protobuf.FieldOptions.packed) - return _internal_packed(); -} -inline void FieldOptions::_internal_set_packed(bool value) { - _impl_._has_bits_[0] |= 0x00000004u; - _impl_.packed_ = value; -} -inline void FieldOptions::set_packed(bool value) { - _internal_set_packed(value); - // @@protoc_insertion_point(field_set:google.protobuf.FieldOptions.packed) -} - -// optional .google.protobuf.FieldOptions.JSType jstype = 6 [default = JS_NORMAL]; -inline bool FieldOptions::_internal_has_jstype() const { - bool value = (_impl_._has_bits_[0] & 0x00000002u) != 0; - return value; -} -inline bool FieldOptions::has_jstype() const { - return _internal_has_jstype(); -} -inline void FieldOptions::clear_jstype() { - _impl_.jstype_ = 0; - _impl_._has_bits_[0] &= ~0x00000002u; -} -inline ::PROTOBUF_NAMESPACE_ID::FieldOptions_JSType FieldOptions::_internal_jstype() const { - return static_cast< ::PROTOBUF_NAMESPACE_ID::FieldOptions_JSType >(_impl_.jstype_); -} -inline ::PROTOBUF_NAMESPACE_ID::FieldOptions_JSType FieldOptions::jstype() const { - // @@protoc_insertion_point(field_get:google.protobuf.FieldOptions.jstype) - return _internal_jstype(); -} -inline void FieldOptions::_internal_set_jstype(::PROTOBUF_NAMESPACE_ID::FieldOptions_JSType value) { - assert(::PROTOBUF_NAMESPACE_ID::FieldOptions_JSType_IsValid(value)); - _impl_._has_bits_[0] |= 0x00000002u; - _impl_.jstype_ = value; -} -inline void FieldOptions::set_jstype(::PROTOBUF_NAMESPACE_ID::FieldOptions_JSType value) { - _internal_set_jstype(value); - // @@protoc_insertion_point(field_set:google.protobuf.FieldOptions.jstype) -} - -// optional bool lazy = 5 [default = false]; -inline bool FieldOptions::_internal_has_lazy() const { - bool value = (_impl_._has_bits_[0] & 0x00000008u) != 0; - return value; -} -inline bool FieldOptions::has_lazy() const { - return _internal_has_lazy(); -} -inline void FieldOptions::clear_lazy() { - _impl_.lazy_ = false; - _impl_._has_bits_[0] &= ~0x00000008u; -} -inline bool FieldOptions::_internal_lazy() const { - return _impl_.lazy_; -} -inline bool FieldOptions::lazy() const { - // @@protoc_insertion_point(field_get:google.protobuf.FieldOptions.lazy) - return _internal_lazy(); -} -inline void FieldOptions::_internal_set_lazy(bool value) { - _impl_._has_bits_[0] |= 0x00000008u; - _impl_.lazy_ = value; -} -inline void FieldOptions::set_lazy(bool value) { - _internal_set_lazy(value); - // @@protoc_insertion_point(field_set:google.protobuf.FieldOptions.lazy) -} - -// optional bool unverified_lazy = 15 [default = false]; -inline bool FieldOptions::_internal_has_unverified_lazy() const { - bool value = (_impl_._has_bits_[0] & 0x00000010u) != 0; - return value; -} -inline bool FieldOptions::has_unverified_lazy() const { - return _internal_has_unverified_lazy(); -} -inline void FieldOptions::clear_unverified_lazy() { - _impl_.unverified_lazy_ = false; - _impl_._has_bits_[0] &= ~0x00000010u; -} -inline bool FieldOptions::_internal_unverified_lazy() const { - return _impl_.unverified_lazy_; -} -inline bool FieldOptions::unverified_lazy() const { - // @@protoc_insertion_point(field_get:google.protobuf.FieldOptions.unverified_lazy) - return _internal_unverified_lazy(); -} -inline void FieldOptions::_internal_set_unverified_lazy(bool value) { - _impl_._has_bits_[0] |= 0x00000010u; - _impl_.unverified_lazy_ = value; -} -inline void FieldOptions::set_unverified_lazy(bool value) { - _internal_set_unverified_lazy(value); - // @@protoc_insertion_point(field_set:google.protobuf.FieldOptions.unverified_lazy) -} - -// optional bool deprecated = 3 [default = false]; -inline bool FieldOptions::_internal_has_deprecated() const { - bool value = (_impl_._has_bits_[0] & 0x00000020u) != 0; - return value; -} -inline bool FieldOptions::has_deprecated() const { - return _internal_has_deprecated(); -} -inline void FieldOptions::clear_deprecated() { - _impl_.deprecated_ = false; - _impl_._has_bits_[0] &= ~0x00000020u; -} -inline bool FieldOptions::_internal_deprecated() const { - return _impl_.deprecated_; -} -inline bool FieldOptions::deprecated() const { - // @@protoc_insertion_point(field_get:google.protobuf.FieldOptions.deprecated) - return _internal_deprecated(); -} -inline void FieldOptions::_internal_set_deprecated(bool value) { - _impl_._has_bits_[0] |= 0x00000020u; - _impl_.deprecated_ = value; -} -inline void FieldOptions::set_deprecated(bool value) { - _internal_set_deprecated(value); - // @@protoc_insertion_point(field_set:google.protobuf.FieldOptions.deprecated) -} - -// optional bool weak = 10 [default = false]; -inline bool FieldOptions::_internal_has_weak() const { - bool value = (_impl_._has_bits_[0] & 0x00000040u) != 0; - return value; -} -inline bool FieldOptions::has_weak() const { - return _internal_has_weak(); -} -inline void FieldOptions::clear_weak() { - _impl_.weak_ = false; - _impl_._has_bits_[0] &= ~0x00000040u; -} -inline bool FieldOptions::_internal_weak() const { - return _impl_.weak_; -} -inline bool FieldOptions::weak() const { - // @@protoc_insertion_point(field_get:google.protobuf.FieldOptions.weak) - return _internal_weak(); -} -inline void FieldOptions::_internal_set_weak(bool value) { - _impl_._has_bits_[0] |= 0x00000040u; - _impl_.weak_ = value; -} -inline void FieldOptions::set_weak(bool value) { - _internal_set_weak(value); - // @@protoc_insertion_point(field_set:google.protobuf.FieldOptions.weak) -} - -// repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999; -inline int FieldOptions::_internal_uninterpreted_option_size() const { - return _impl_.uninterpreted_option_.size(); -} -inline int FieldOptions::uninterpreted_option_size() const { - return _internal_uninterpreted_option_size(); -} -inline void FieldOptions::clear_uninterpreted_option() { - _impl_.uninterpreted_option_.Clear(); -} -inline ::PROTOBUF_NAMESPACE_ID::UninterpretedOption* FieldOptions::mutable_uninterpreted_option(int index) { - // @@protoc_insertion_point(field_mutable:google.protobuf.FieldOptions.uninterpreted_option) - return _impl_.uninterpreted_option_.Mutable(index); -} -inline ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::UninterpretedOption >* -FieldOptions::mutable_uninterpreted_option() { - // @@protoc_insertion_point(field_mutable_list:google.protobuf.FieldOptions.uninterpreted_option) - return &_impl_.uninterpreted_option_; -} -inline const ::PROTOBUF_NAMESPACE_ID::UninterpretedOption& FieldOptions::_internal_uninterpreted_option(int index) const { - return _impl_.uninterpreted_option_.Get(index); -} -inline const ::PROTOBUF_NAMESPACE_ID::UninterpretedOption& FieldOptions::uninterpreted_option(int index) const { - // @@protoc_insertion_point(field_get:google.protobuf.FieldOptions.uninterpreted_option) - return _internal_uninterpreted_option(index); -} -inline ::PROTOBUF_NAMESPACE_ID::UninterpretedOption* FieldOptions::_internal_add_uninterpreted_option() { - return _impl_.uninterpreted_option_.Add(); -} -inline ::PROTOBUF_NAMESPACE_ID::UninterpretedOption* FieldOptions::add_uninterpreted_option() { - ::PROTOBUF_NAMESPACE_ID::UninterpretedOption* _add = _internal_add_uninterpreted_option(); - // @@protoc_insertion_point(field_add:google.protobuf.FieldOptions.uninterpreted_option) - return _add; -} -inline const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::UninterpretedOption >& -FieldOptions::uninterpreted_option() const { - // @@protoc_insertion_point(field_list:google.protobuf.FieldOptions.uninterpreted_option) - return _impl_.uninterpreted_option_; -} - -// ------------------------------------------------------------------- - -// OneofOptions - -// repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999; -inline int OneofOptions::_internal_uninterpreted_option_size() const { - return _impl_.uninterpreted_option_.size(); -} -inline int OneofOptions::uninterpreted_option_size() const { - return _internal_uninterpreted_option_size(); -} -inline void OneofOptions::clear_uninterpreted_option() { - _impl_.uninterpreted_option_.Clear(); -} -inline ::PROTOBUF_NAMESPACE_ID::UninterpretedOption* OneofOptions::mutable_uninterpreted_option(int index) { - // @@protoc_insertion_point(field_mutable:google.protobuf.OneofOptions.uninterpreted_option) - return _impl_.uninterpreted_option_.Mutable(index); -} -inline ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::UninterpretedOption >* -OneofOptions::mutable_uninterpreted_option() { - // @@protoc_insertion_point(field_mutable_list:google.protobuf.OneofOptions.uninterpreted_option) - return &_impl_.uninterpreted_option_; -} -inline const ::PROTOBUF_NAMESPACE_ID::UninterpretedOption& OneofOptions::_internal_uninterpreted_option(int index) const { - return _impl_.uninterpreted_option_.Get(index); -} -inline const ::PROTOBUF_NAMESPACE_ID::UninterpretedOption& OneofOptions::uninterpreted_option(int index) const { - // @@protoc_insertion_point(field_get:google.protobuf.OneofOptions.uninterpreted_option) - return _internal_uninterpreted_option(index); -} -inline ::PROTOBUF_NAMESPACE_ID::UninterpretedOption* OneofOptions::_internal_add_uninterpreted_option() { - return _impl_.uninterpreted_option_.Add(); -} -inline ::PROTOBUF_NAMESPACE_ID::UninterpretedOption* OneofOptions::add_uninterpreted_option() { - ::PROTOBUF_NAMESPACE_ID::UninterpretedOption* _add = _internal_add_uninterpreted_option(); - // @@protoc_insertion_point(field_add:google.protobuf.OneofOptions.uninterpreted_option) - return _add; -} -inline const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::UninterpretedOption >& -OneofOptions::uninterpreted_option() const { - // @@protoc_insertion_point(field_list:google.protobuf.OneofOptions.uninterpreted_option) - return _impl_.uninterpreted_option_; -} - -// ------------------------------------------------------------------- - -// EnumOptions - -// optional bool allow_alias = 2; -inline bool EnumOptions::_internal_has_allow_alias() const { - bool value = (_impl_._has_bits_[0] & 0x00000001u) != 0; - return value; -} -inline bool EnumOptions::has_allow_alias() const { - return _internal_has_allow_alias(); -} -inline void EnumOptions::clear_allow_alias() { - _impl_.allow_alias_ = false; - _impl_._has_bits_[0] &= ~0x00000001u; -} -inline bool EnumOptions::_internal_allow_alias() const { - return _impl_.allow_alias_; -} -inline bool EnumOptions::allow_alias() const { - // @@protoc_insertion_point(field_get:google.protobuf.EnumOptions.allow_alias) - return _internal_allow_alias(); -} -inline void EnumOptions::_internal_set_allow_alias(bool value) { - _impl_._has_bits_[0] |= 0x00000001u; - _impl_.allow_alias_ = value; -} -inline void EnumOptions::set_allow_alias(bool value) { - _internal_set_allow_alias(value); - // @@protoc_insertion_point(field_set:google.protobuf.EnumOptions.allow_alias) -} - -// optional bool deprecated = 3 [default = false]; -inline bool EnumOptions::_internal_has_deprecated() const { - bool value = (_impl_._has_bits_[0] & 0x00000002u) != 0; - return value; -} -inline bool EnumOptions::has_deprecated() const { - return _internal_has_deprecated(); -} -inline void EnumOptions::clear_deprecated() { - _impl_.deprecated_ = false; - _impl_._has_bits_[0] &= ~0x00000002u; -} -inline bool EnumOptions::_internal_deprecated() const { - return _impl_.deprecated_; -} -inline bool EnumOptions::deprecated() const { - // @@protoc_insertion_point(field_get:google.protobuf.EnumOptions.deprecated) - return _internal_deprecated(); -} -inline void EnumOptions::_internal_set_deprecated(bool value) { - _impl_._has_bits_[0] |= 0x00000002u; - _impl_.deprecated_ = value; -} -inline void EnumOptions::set_deprecated(bool value) { - _internal_set_deprecated(value); - // @@protoc_insertion_point(field_set:google.protobuf.EnumOptions.deprecated) -} - -// repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999; -inline int EnumOptions::_internal_uninterpreted_option_size() const { - return _impl_.uninterpreted_option_.size(); -} -inline int EnumOptions::uninterpreted_option_size() const { - return _internal_uninterpreted_option_size(); -} -inline void EnumOptions::clear_uninterpreted_option() { - _impl_.uninterpreted_option_.Clear(); -} -inline ::PROTOBUF_NAMESPACE_ID::UninterpretedOption* EnumOptions::mutable_uninterpreted_option(int index) { - // @@protoc_insertion_point(field_mutable:google.protobuf.EnumOptions.uninterpreted_option) - return _impl_.uninterpreted_option_.Mutable(index); -} -inline ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::UninterpretedOption >* -EnumOptions::mutable_uninterpreted_option() { - // @@protoc_insertion_point(field_mutable_list:google.protobuf.EnumOptions.uninterpreted_option) - return &_impl_.uninterpreted_option_; -} -inline const ::PROTOBUF_NAMESPACE_ID::UninterpretedOption& EnumOptions::_internal_uninterpreted_option(int index) const { - return _impl_.uninterpreted_option_.Get(index); -} -inline const ::PROTOBUF_NAMESPACE_ID::UninterpretedOption& EnumOptions::uninterpreted_option(int index) const { - // @@protoc_insertion_point(field_get:google.protobuf.EnumOptions.uninterpreted_option) - return _internal_uninterpreted_option(index); -} -inline ::PROTOBUF_NAMESPACE_ID::UninterpretedOption* EnumOptions::_internal_add_uninterpreted_option() { - return _impl_.uninterpreted_option_.Add(); -} -inline ::PROTOBUF_NAMESPACE_ID::UninterpretedOption* EnumOptions::add_uninterpreted_option() { - ::PROTOBUF_NAMESPACE_ID::UninterpretedOption* _add = _internal_add_uninterpreted_option(); - // @@protoc_insertion_point(field_add:google.protobuf.EnumOptions.uninterpreted_option) - return _add; -} -inline const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::UninterpretedOption >& -EnumOptions::uninterpreted_option() const { - // @@protoc_insertion_point(field_list:google.protobuf.EnumOptions.uninterpreted_option) - return _impl_.uninterpreted_option_; -} - -// ------------------------------------------------------------------- - -// EnumValueOptions - -// optional bool deprecated = 1 [default = false]; -inline bool EnumValueOptions::_internal_has_deprecated() const { - bool value = (_impl_._has_bits_[0] & 0x00000001u) != 0; - return value; -} -inline bool EnumValueOptions::has_deprecated() const { - return _internal_has_deprecated(); -} -inline void EnumValueOptions::clear_deprecated() { - _impl_.deprecated_ = false; - _impl_._has_bits_[0] &= ~0x00000001u; -} -inline bool EnumValueOptions::_internal_deprecated() const { - return _impl_.deprecated_; -} -inline bool EnumValueOptions::deprecated() const { - // @@protoc_insertion_point(field_get:google.protobuf.EnumValueOptions.deprecated) - return _internal_deprecated(); -} -inline void EnumValueOptions::_internal_set_deprecated(bool value) { - _impl_._has_bits_[0] |= 0x00000001u; - _impl_.deprecated_ = value; -} -inline void EnumValueOptions::set_deprecated(bool value) { - _internal_set_deprecated(value); - // @@protoc_insertion_point(field_set:google.protobuf.EnumValueOptions.deprecated) -} - -// repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999; -inline int EnumValueOptions::_internal_uninterpreted_option_size() const { - return _impl_.uninterpreted_option_.size(); -} -inline int EnumValueOptions::uninterpreted_option_size() const { - return _internal_uninterpreted_option_size(); -} -inline void EnumValueOptions::clear_uninterpreted_option() { - _impl_.uninterpreted_option_.Clear(); -} -inline ::PROTOBUF_NAMESPACE_ID::UninterpretedOption* EnumValueOptions::mutable_uninterpreted_option(int index) { - // @@protoc_insertion_point(field_mutable:google.protobuf.EnumValueOptions.uninterpreted_option) - return _impl_.uninterpreted_option_.Mutable(index); -} -inline ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::UninterpretedOption >* -EnumValueOptions::mutable_uninterpreted_option() { - // @@protoc_insertion_point(field_mutable_list:google.protobuf.EnumValueOptions.uninterpreted_option) - return &_impl_.uninterpreted_option_; -} -inline const ::PROTOBUF_NAMESPACE_ID::UninterpretedOption& EnumValueOptions::_internal_uninterpreted_option(int index) const { - return _impl_.uninterpreted_option_.Get(index); -} -inline const ::PROTOBUF_NAMESPACE_ID::UninterpretedOption& EnumValueOptions::uninterpreted_option(int index) const { - // @@protoc_insertion_point(field_get:google.protobuf.EnumValueOptions.uninterpreted_option) - return _internal_uninterpreted_option(index); -} -inline ::PROTOBUF_NAMESPACE_ID::UninterpretedOption* EnumValueOptions::_internal_add_uninterpreted_option() { - return _impl_.uninterpreted_option_.Add(); -} -inline ::PROTOBUF_NAMESPACE_ID::UninterpretedOption* EnumValueOptions::add_uninterpreted_option() { - ::PROTOBUF_NAMESPACE_ID::UninterpretedOption* _add = _internal_add_uninterpreted_option(); - // @@protoc_insertion_point(field_add:google.protobuf.EnumValueOptions.uninterpreted_option) - return _add; -} -inline const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::UninterpretedOption >& -EnumValueOptions::uninterpreted_option() const { - // @@protoc_insertion_point(field_list:google.protobuf.EnumValueOptions.uninterpreted_option) - return _impl_.uninterpreted_option_; -} - -// ------------------------------------------------------------------- - -// ServiceOptions - -// optional bool deprecated = 33 [default = false]; -inline bool ServiceOptions::_internal_has_deprecated() const { - bool value = (_impl_._has_bits_[0] & 0x00000001u) != 0; - return value; -} -inline bool ServiceOptions::has_deprecated() const { - return _internal_has_deprecated(); -} -inline void ServiceOptions::clear_deprecated() { - _impl_.deprecated_ = false; - _impl_._has_bits_[0] &= ~0x00000001u; -} -inline bool ServiceOptions::_internal_deprecated() const { - return _impl_.deprecated_; -} -inline bool ServiceOptions::deprecated() const { - // @@protoc_insertion_point(field_get:google.protobuf.ServiceOptions.deprecated) - return _internal_deprecated(); -} -inline void ServiceOptions::_internal_set_deprecated(bool value) { - _impl_._has_bits_[0] |= 0x00000001u; - _impl_.deprecated_ = value; -} -inline void ServiceOptions::set_deprecated(bool value) { - _internal_set_deprecated(value); - // @@protoc_insertion_point(field_set:google.protobuf.ServiceOptions.deprecated) -} - -// repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999; -inline int ServiceOptions::_internal_uninterpreted_option_size() const { - return _impl_.uninterpreted_option_.size(); -} -inline int ServiceOptions::uninterpreted_option_size() const { - return _internal_uninterpreted_option_size(); -} -inline void ServiceOptions::clear_uninterpreted_option() { - _impl_.uninterpreted_option_.Clear(); -} -inline ::PROTOBUF_NAMESPACE_ID::UninterpretedOption* ServiceOptions::mutable_uninterpreted_option(int index) { - // @@protoc_insertion_point(field_mutable:google.protobuf.ServiceOptions.uninterpreted_option) - return _impl_.uninterpreted_option_.Mutable(index); -} -inline ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::UninterpretedOption >* -ServiceOptions::mutable_uninterpreted_option() { - // @@protoc_insertion_point(field_mutable_list:google.protobuf.ServiceOptions.uninterpreted_option) - return &_impl_.uninterpreted_option_; -} -inline const ::PROTOBUF_NAMESPACE_ID::UninterpretedOption& ServiceOptions::_internal_uninterpreted_option(int index) const { - return _impl_.uninterpreted_option_.Get(index); -} -inline const ::PROTOBUF_NAMESPACE_ID::UninterpretedOption& ServiceOptions::uninterpreted_option(int index) const { - // @@protoc_insertion_point(field_get:google.protobuf.ServiceOptions.uninterpreted_option) - return _internal_uninterpreted_option(index); -} -inline ::PROTOBUF_NAMESPACE_ID::UninterpretedOption* ServiceOptions::_internal_add_uninterpreted_option() { - return _impl_.uninterpreted_option_.Add(); -} -inline ::PROTOBUF_NAMESPACE_ID::UninterpretedOption* ServiceOptions::add_uninterpreted_option() { - ::PROTOBUF_NAMESPACE_ID::UninterpretedOption* _add = _internal_add_uninterpreted_option(); - // @@protoc_insertion_point(field_add:google.protobuf.ServiceOptions.uninterpreted_option) - return _add; -} -inline const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::UninterpretedOption >& -ServiceOptions::uninterpreted_option() const { - // @@protoc_insertion_point(field_list:google.protobuf.ServiceOptions.uninterpreted_option) - return _impl_.uninterpreted_option_; -} - -// ------------------------------------------------------------------- - -// MethodOptions - -// optional bool deprecated = 33 [default = false]; -inline bool MethodOptions::_internal_has_deprecated() const { - bool value = (_impl_._has_bits_[0] & 0x00000001u) != 0; - return value; -} -inline bool MethodOptions::has_deprecated() const { - return _internal_has_deprecated(); -} -inline void MethodOptions::clear_deprecated() { - _impl_.deprecated_ = false; - _impl_._has_bits_[0] &= ~0x00000001u; -} -inline bool MethodOptions::_internal_deprecated() const { - return _impl_.deprecated_; -} -inline bool MethodOptions::deprecated() const { - // @@protoc_insertion_point(field_get:google.protobuf.MethodOptions.deprecated) - return _internal_deprecated(); -} -inline void MethodOptions::_internal_set_deprecated(bool value) { - _impl_._has_bits_[0] |= 0x00000001u; - _impl_.deprecated_ = value; -} -inline void MethodOptions::set_deprecated(bool value) { - _internal_set_deprecated(value); - // @@protoc_insertion_point(field_set:google.protobuf.MethodOptions.deprecated) -} - -// optional .google.protobuf.MethodOptions.IdempotencyLevel idempotency_level = 34 [default = IDEMPOTENCY_UNKNOWN]; -inline bool MethodOptions::_internal_has_idempotency_level() const { - bool value = (_impl_._has_bits_[0] & 0x00000002u) != 0; - return value; -} -inline bool MethodOptions::has_idempotency_level() const { - return _internal_has_idempotency_level(); -} -inline void MethodOptions::clear_idempotency_level() { - _impl_.idempotency_level_ = 0; - _impl_._has_bits_[0] &= ~0x00000002u; -} -inline ::PROTOBUF_NAMESPACE_ID::MethodOptions_IdempotencyLevel MethodOptions::_internal_idempotency_level() const { - return static_cast< ::PROTOBUF_NAMESPACE_ID::MethodOptions_IdempotencyLevel >(_impl_.idempotency_level_); -} -inline ::PROTOBUF_NAMESPACE_ID::MethodOptions_IdempotencyLevel MethodOptions::idempotency_level() const { - // @@protoc_insertion_point(field_get:google.protobuf.MethodOptions.idempotency_level) - return _internal_idempotency_level(); -} -inline void MethodOptions::_internal_set_idempotency_level(::PROTOBUF_NAMESPACE_ID::MethodOptions_IdempotencyLevel value) { - assert(::PROTOBUF_NAMESPACE_ID::MethodOptions_IdempotencyLevel_IsValid(value)); - _impl_._has_bits_[0] |= 0x00000002u; - _impl_.idempotency_level_ = value; -} -inline void MethodOptions::set_idempotency_level(::PROTOBUF_NAMESPACE_ID::MethodOptions_IdempotencyLevel value) { - _internal_set_idempotency_level(value); - // @@protoc_insertion_point(field_set:google.protobuf.MethodOptions.idempotency_level) -} - -// repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999; -inline int MethodOptions::_internal_uninterpreted_option_size() const { - return _impl_.uninterpreted_option_.size(); -} -inline int MethodOptions::uninterpreted_option_size() const { - return _internal_uninterpreted_option_size(); -} -inline void MethodOptions::clear_uninterpreted_option() { - _impl_.uninterpreted_option_.Clear(); -} -inline ::PROTOBUF_NAMESPACE_ID::UninterpretedOption* MethodOptions::mutable_uninterpreted_option(int index) { - // @@protoc_insertion_point(field_mutable:google.protobuf.MethodOptions.uninterpreted_option) - return _impl_.uninterpreted_option_.Mutable(index); -} -inline ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::UninterpretedOption >* -MethodOptions::mutable_uninterpreted_option() { - // @@protoc_insertion_point(field_mutable_list:google.protobuf.MethodOptions.uninterpreted_option) - return &_impl_.uninterpreted_option_; -} -inline const ::PROTOBUF_NAMESPACE_ID::UninterpretedOption& MethodOptions::_internal_uninterpreted_option(int index) const { - return _impl_.uninterpreted_option_.Get(index); -} -inline const ::PROTOBUF_NAMESPACE_ID::UninterpretedOption& MethodOptions::uninterpreted_option(int index) const { - // @@protoc_insertion_point(field_get:google.protobuf.MethodOptions.uninterpreted_option) - return _internal_uninterpreted_option(index); -} -inline ::PROTOBUF_NAMESPACE_ID::UninterpretedOption* MethodOptions::_internal_add_uninterpreted_option() { - return _impl_.uninterpreted_option_.Add(); -} -inline ::PROTOBUF_NAMESPACE_ID::UninterpretedOption* MethodOptions::add_uninterpreted_option() { - ::PROTOBUF_NAMESPACE_ID::UninterpretedOption* _add = _internal_add_uninterpreted_option(); - // @@protoc_insertion_point(field_add:google.protobuf.MethodOptions.uninterpreted_option) - return _add; -} -inline const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::UninterpretedOption >& -MethodOptions::uninterpreted_option() const { - // @@protoc_insertion_point(field_list:google.protobuf.MethodOptions.uninterpreted_option) - return _impl_.uninterpreted_option_; -} - -// ------------------------------------------------------------------- - -// UninterpretedOption_NamePart - -// required string name_part = 1; -inline bool UninterpretedOption_NamePart::_internal_has_name_part() const { - bool value = (_impl_._has_bits_[0] & 0x00000001u) != 0; - return value; -} -inline bool UninterpretedOption_NamePart::has_name_part() const { - return _internal_has_name_part(); -} -inline void UninterpretedOption_NamePart::clear_name_part() { - _impl_.name_part_.ClearToEmpty(); - _impl_._has_bits_[0] &= ~0x00000001u; -} -inline const std::string& UninterpretedOption_NamePart::name_part() const { - // @@protoc_insertion_point(field_get:google.protobuf.UninterpretedOption.NamePart.name_part) - return _internal_name_part(); -} -template <typename ArgT0, typename... ArgT> -inline PROTOBUF_ALWAYS_INLINE -void UninterpretedOption_NamePart::set_name_part(ArgT0&& arg0, ArgT... args) { - _impl_._has_bits_[0] |= 0x00000001u; - _impl_.name_part_.Set(static_cast<ArgT0 &&>(arg0), args..., GetArenaForAllocation()); - // @@protoc_insertion_point(field_set:google.protobuf.UninterpretedOption.NamePart.name_part) -} -inline std::string* UninterpretedOption_NamePart::mutable_name_part() { - std::string* _s = _internal_mutable_name_part(); - // @@protoc_insertion_point(field_mutable:google.protobuf.UninterpretedOption.NamePart.name_part) - return _s; -} -inline const std::string& UninterpretedOption_NamePart::_internal_name_part() const { - return _impl_.name_part_.Get(); -} -inline void UninterpretedOption_NamePart::_internal_set_name_part(const std::string& value) { - _impl_._has_bits_[0] |= 0x00000001u; - _impl_.name_part_.Set(value, GetArenaForAllocation()); -} -inline std::string* UninterpretedOption_NamePart::_internal_mutable_name_part() { - _impl_._has_bits_[0] |= 0x00000001u; - return _impl_.name_part_.Mutable(GetArenaForAllocation()); -} -inline std::string* UninterpretedOption_NamePart::release_name_part() { - // @@protoc_insertion_point(field_release:google.protobuf.UninterpretedOption.NamePart.name_part) - if (!_internal_has_name_part()) { - return nullptr; - } - _impl_._has_bits_[0] &= ~0x00000001u; - auto* p = _impl_.name_part_.Release(); -#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING - if (_impl_.name_part_.IsDefault()) { - _impl_.name_part_.Set("", GetArenaForAllocation()); - } -#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING - return p; -} -inline void UninterpretedOption_NamePart::set_allocated_name_part(std::string* name_part) { - if (name_part != nullptr) { - _impl_._has_bits_[0] |= 0x00000001u; - } else { - _impl_._has_bits_[0] &= ~0x00000001u; - } - _impl_.name_part_.SetAllocated(name_part, GetArenaForAllocation()); -#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING - if (_impl_.name_part_.IsDefault()) { - _impl_.name_part_.Set("", GetArenaForAllocation()); - } -#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING - // @@protoc_insertion_point(field_set_allocated:google.protobuf.UninterpretedOption.NamePart.name_part) -} - -// required bool is_extension = 2; -inline bool UninterpretedOption_NamePart::_internal_has_is_extension() const { - bool value = (_impl_._has_bits_[0] & 0x00000002u) != 0; - return value; -} -inline bool UninterpretedOption_NamePart::has_is_extension() const { - return _internal_has_is_extension(); -} -inline void UninterpretedOption_NamePart::clear_is_extension() { - _impl_.is_extension_ = false; - _impl_._has_bits_[0] &= ~0x00000002u; -} -inline bool UninterpretedOption_NamePart::_internal_is_extension() const { - return _impl_.is_extension_; -} -inline bool UninterpretedOption_NamePart::is_extension() const { - // @@protoc_insertion_point(field_get:google.protobuf.UninterpretedOption.NamePart.is_extension) - return _internal_is_extension(); -} -inline void UninterpretedOption_NamePart::_internal_set_is_extension(bool value) { - _impl_._has_bits_[0] |= 0x00000002u; - _impl_.is_extension_ = value; -} -inline void UninterpretedOption_NamePart::set_is_extension(bool value) { - _internal_set_is_extension(value); - // @@protoc_insertion_point(field_set:google.protobuf.UninterpretedOption.NamePart.is_extension) -} - -// ------------------------------------------------------------------- - -// UninterpretedOption - -// repeated .google.protobuf.UninterpretedOption.NamePart name = 2; -inline int UninterpretedOption::_internal_name_size() const { - return _impl_.name_.size(); -} -inline int UninterpretedOption::name_size() const { - return _internal_name_size(); -} -inline void UninterpretedOption::clear_name() { - _impl_.name_.Clear(); -} -inline ::PROTOBUF_NAMESPACE_ID::UninterpretedOption_NamePart* UninterpretedOption::mutable_name(int index) { - // @@protoc_insertion_point(field_mutable:google.protobuf.UninterpretedOption.name) - return _impl_.name_.Mutable(index); -} -inline ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::UninterpretedOption_NamePart >* -UninterpretedOption::mutable_name() { - // @@protoc_insertion_point(field_mutable_list:google.protobuf.UninterpretedOption.name) - return &_impl_.name_; -} -inline const ::PROTOBUF_NAMESPACE_ID::UninterpretedOption_NamePart& UninterpretedOption::_internal_name(int index) const { - return _impl_.name_.Get(index); -} -inline const ::PROTOBUF_NAMESPACE_ID::UninterpretedOption_NamePart& UninterpretedOption::name(int index) const { - // @@protoc_insertion_point(field_get:google.protobuf.UninterpretedOption.name) - return _internal_name(index); -} -inline ::PROTOBUF_NAMESPACE_ID::UninterpretedOption_NamePart* UninterpretedOption::_internal_add_name() { - return _impl_.name_.Add(); -} -inline ::PROTOBUF_NAMESPACE_ID::UninterpretedOption_NamePart* UninterpretedOption::add_name() { - ::PROTOBUF_NAMESPACE_ID::UninterpretedOption_NamePart* _add = _internal_add_name(); - // @@protoc_insertion_point(field_add:google.protobuf.UninterpretedOption.name) - return _add; -} -inline const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::UninterpretedOption_NamePart >& -UninterpretedOption::name() const { - // @@protoc_insertion_point(field_list:google.protobuf.UninterpretedOption.name) - return _impl_.name_; -} - -// optional string identifier_value = 3; -inline bool UninterpretedOption::_internal_has_identifier_value() const { - bool value = (_impl_._has_bits_[0] & 0x00000001u) != 0; - return value; -} -inline bool UninterpretedOption::has_identifier_value() const { - return _internal_has_identifier_value(); -} -inline void UninterpretedOption::clear_identifier_value() { - _impl_.identifier_value_.ClearToEmpty(); - _impl_._has_bits_[0] &= ~0x00000001u; -} -inline const std::string& UninterpretedOption::identifier_value() const { - // @@protoc_insertion_point(field_get:google.protobuf.UninterpretedOption.identifier_value) - return _internal_identifier_value(); -} -template <typename ArgT0, typename... ArgT> -inline PROTOBUF_ALWAYS_INLINE -void UninterpretedOption::set_identifier_value(ArgT0&& arg0, ArgT... args) { - _impl_._has_bits_[0] |= 0x00000001u; - _impl_.identifier_value_.Set(static_cast<ArgT0 &&>(arg0), args..., GetArenaForAllocation()); - // @@protoc_insertion_point(field_set:google.protobuf.UninterpretedOption.identifier_value) -} -inline std::string* UninterpretedOption::mutable_identifier_value() { - std::string* _s = _internal_mutable_identifier_value(); - // @@protoc_insertion_point(field_mutable:google.protobuf.UninterpretedOption.identifier_value) - return _s; -} -inline const std::string& UninterpretedOption::_internal_identifier_value() const { - return _impl_.identifier_value_.Get(); -} -inline void UninterpretedOption::_internal_set_identifier_value(const std::string& value) { - _impl_._has_bits_[0] |= 0x00000001u; - _impl_.identifier_value_.Set(value, GetArenaForAllocation()); -} -inline std::string* UninterpretedOption::_internal_mutable_identifier_value() { - _impl_._has_bits_[0] |= 0x00000001u; - return _impl_.identifier_value_.Mutable(GetArenaForAllocation()); -} -inline std::string* UninterpretedOption::release_identifier_value() { - // @@protoc_insertion_point(field_release:google.protobuf.UninterpretedOption.identifier_value) - if (!_internal_has_identifier_value()) { - return nullptr; - } - _impl_._has_bits_[0] &= ~0x00000001u; - auto* p = _impl_.identifier_value_.Release(); -#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING - if (_impl_.identifier_value_.IsDefault()) { - _impl_.identifier_value_.Set("", GetArenaForAllocation()); - } -#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING - return p; -} -inline void UninterpretedOption::set_allocated_identifier_value(std::string* identifier_value) { - if (identifier_value != nullptr) { - _impl_._has_bits_[0] |= 0x00000001u; - } else { - _impl_._has_bits_[0] &= ~0x00000001u; - } - _impl_.identifier_value_.SetAllocated(identifier_value, GetArenaForAllocation()); -#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING - if (_impl_.identifier_value_.IsDefault()) { - _impl_.identifier_value_.Set("", GetArenaForAllocation()); - } -#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING - // @@protoc_insertion_point(field_set_allocated:google.protobuf.UninterpretedOption.identifier_value) -} - -// optional uint64 positive_int_value = 4; -inline bool UninterpretedOption::_internal_has_positive_int_value() const { - bool value = (_impl_._has_bits_[0] & 0x00000008u) != 0; - return value; -} -inline bool UninterpretedOption::has_positive_int_value() const { - return _internal_has_positive_int_value(); -} -inline void UninterpretedOption::clear_positive_int_value() { - _impl_.positive_int_value_ = uint64_t{0u}; - _impl_._has_bits_[0] &= ~0x00000008u; -} -inline uint64_t UninterpretedOption::_internal_positive_int_value() const { - return _impl_.positive_int_value_; -} -inline uint64_t UninterpretedOption::positive_int_value() const { - // @@protoc_insertion_point(field_get:google.protobuf.UninterpretedOption.positive_int_value) - return _internal_positive_int_value(); -} -inline void UninterpretedOption::_internal_set_positive_int_value(uint64_t value) { - _impl_._has_bits_[0] |= 0x00000008u; - _impl_.positive_int_value_ = value; -} -inline void UninterpretedOption::set_positive_int_value(uint64_t value) { - _internal_set_positive_int_value(value); - // @@protoc_insertion_point(field_set:google.protobuf.UninterpretedOption.positive_int_value) -} - -// optional int64 negative_int_value = 5; -inline bool UninterpretedOption::_internal_has_negative_int_value() const { - bool value = (_impl_._has_bits_[0] & 0x00000010u) != 0; - return value; -} -inline bool UninterpretedOption::has_negative_int_value() const { - return _internal_has_negative_int_value(); -} -inline void UninterpretedOption::clear_negative_int_value() { - _impl_.negative_int_value_ = int64_t{0}; - _impl_._has_bits_[0] &= ~0x00000010u; -} -inline int64_t UninterpretedOption::_internal_negative_int_value() const { - return _impl_.negative_int_value_; -} -inline int64_t UninterpretedOption::negative_int_value() const { - // @@protoc_insertion_point(field_get:google.protobuf.UninterpretedOption.negative_int_value) - return _internal_negative_int_value(); -} -inline void UninterpretedOption::_internal_set_negative_int_value(int64_t value) { - _impl_._has_bits_[0] |= 0x00000010u; - _impl_.negative_int_value_ = value; -} -inline void UninterpretedOption::set_negative_int_value(int64_t value) { - _internal_set_negative_int_value(value); - // @@protoc_insertion_point(field_set:google.protobuf.UninterpretedOption.negative_int_value) -} - -// optional double double_value = 6; -inline bool UninterpretedOption::_internal_has_double_value() const { - bool value = (_impl_._has_bits_[0] & 0x00000020u) != 0; - return value; -} -inline bool UninterpretedOption::has_double_value() const { - return _internal_has_double_value(); -} -inline void UninterpretedOption::clear_double_value() { - _impl_.double_value_ = 0; - _impl_._has_bits_[0] &= ~0x00000020u; -} -inline double UninterpretedOption::_internal_double_value() const { - return _impl_.double_value_; -} -inline double UninterpretedOption::double_value() const { - // @@protoc_insertion_point(field_get:google.protobuf.UninterpretedOption.double_value) - return _internal_double_value(); -} -inline void UninterpretedOption::_internal_set_double_value(double value) { - _impl_._has_bits_[0] |= 0x00000020u; - _impl_.double_value_ = value; -} -inline void UninterpretedOption::set_double_value(double value) { - _internal_set_double_value(value); - // @@protoc_insertion_point(field_set:google.protobuf.UninterpretedOption.double_value) -} - -// optional bytes string_value = 7; -inline bool UninterpretedOption::_internal_has_string_value() const { - bool value = (_impl_._has_bits_[0] & 0x00000002u) != 0; - return value; -} -inline bool UninterpretedOption::has_string_value() const { - return _internal_has_string_value(); -} -inline void UninterpretedOption::clear_string_value() { - _impl_.string_value_.ClearToEmpty(); - _impl_._has_bits_[0] &= ~0x00000002u; -} -inline const std::string& UninterpretedOption::string_value() const { - // @@protoc_insertion_point(field_get:google.protobuf.UninterpretedOption.string_value) - return _internal_string_value(); -} -template <typename ArgT0, typename... ArgT> -inline PROTOBUF_ALWAYS_INLINE -void UninterpretedOption::set_string_value(ArgT0&& arg0, ArgT... args) { - _impl_._has_bits_[0] |= 0x00000002u; - _impl_.string_value_.SetBytes(static_cast<ArgT0 &&>(arg0), args..., GetArenaForAllocation()); - // @@protoc_insertion_point(field_set:google.protobuf.UninterpretedOption.string_value) -} -inline std::string* UninterpretedOption::mutable_string_value() { - std::string* _s = _internal_mutable_string_value(); - // @@protoc_insertion_point(field_mutable:google.protobuf.UninterpretedOption.string_value) - return _s; -} -inline const std::string& UninterpretedOption::_internal_string_value() const { - return _impl_.string_value_.Get(); -} -inline void UninterpretedOption::_internal_set_string_value(const std::string& value) { - _impl_._has_bits_[0] |= 0x00000002u; - _impl_.string_value_.Set(value, GetArenaForAllocation()); -} -inline std::string* UninterpretedOption::_internal_mutable_string_value() { - _impl_._has_bits_[0] |= 0x00000002u; - return _impl_.string_value_.Mutable(GetArenaForAllocation()); -} -inline std::string* UninterpretedOption::release_string_value() { - // @@protoc_insertion_point(field_release:google.protobuf.UninterpretedOption.string_value) - if (!_internal_has_string_value()) { - return nullptr; - } - _impl_._has_bits_[0] &= ~0x00000002u; - auto* p = _impl_.string_value_.Release(); -#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING - if (_impl_.string_value_.IsDefault()) { - _impl_.string_value_.Set("", GetArenaForAllocation()); - } -#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING - return p; -} -inline void UninterpretedOption::set_allocated_string_value(std::string* string_value) { - if (string_value != nullptr) { - _impl_._has_bits_[0] |= 0x00000002u; - } else { - _impl_._has_bits_[0] &= ~0x00000002u; - } - _impl_.string_value_.SetAllocated(string_value, GetArenaForAllocation()); -#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING - if (_impl_.string_value_.IsDefault()) { - _impl_.string_value_.Set("", GetArenaForAllocation()); - } -#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING - // @@protoc_insertion_point(field_set_allocated:google.protobuf.UninterpretedOption.string_value) -} - -// optional string aggregate_value = 8; -inline bool UninterpretedOption::_internal_has_aggregate_value() const { - bool value = (_impl_._has_bits_[0] & 0x00000004u) != 0; - return value; -} -inline bool UninterpretedOption::has_aggregate_value() const { - return _internal_has_aggregate_value(); -} -inline void UninterpretedOption::clear_aggregate_value() { - _impl_.aggregate_value_.ClearToEmpty(); - _impl_._has_bits_[0] &= ~0x00000004u; -} -inline const std::string& UninterpretedOption::aggregate_value() const { - // @@protoc_insertion_point(field_get:google.protobuf.UninterpretedOption.aggregate_value) - return _internal_aggregate_value(); -} -template <typename ArgT0, typename... ArgT> -inline PROTOBUF_ALWAYS_INLINE -void UninterpretedOption::set_aggregate_value(ArgT0&& arg0, ArgT... args) { - _impl_._has_bits_[0] |= 0x00000004u; - _impl_.aggregate_value_.Set(static_cast<ArgT0 &&>(arg0), args..., GetArenaForAllocation()); - // @@protoc_insertion_point(field_set:google.protobuf.UninterpretedOption.aggregate_value) -} -inline std::string* UninterpretedOption::mutable_aggregate_value() { - std::string* _s = _internal_mutable_aggregate_value(); - // @@protoc_insertion_point(field_mutable:google.protobuf.UninterpretedOption.aggregate_value) - return _s; -} -inline const std::string& UninterpretedOption::_internal_aggregate_value() const { - return _impl_.aggregate_value_.Get(); -} -inline void UninterpretedOption::_internal_set_aggregate_value(const std::string& value) { - _impl_._has_bits_[0] |= 0x00000004u; - _impl_.aggregate_value_.Set(value, GetArenaForAllocation()); -} -inline std::string* UninterpretedOption::_internal_mutable_aggregate_value() { - _impl_._has_bits_[0] |= 0x00000004u; - return _impl_.aggregate_value_.Mutable(GetArenaForAllocation()); -} -inline std::string* UninterpretedOption::release_aggregate_value() { - // @@protoc_insertion_point(field_release:google.protobuf.UninterpretedOption.aggregate_value) - if (!_internal_has_aggregate_value()) { - return nullptr; - } - _impl_._has_bits_[0] &= ~0x00000004u; - auto* p = _impl_.aggregate_value_.Release(); -#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING - if (_impl_.aggregate_value_.IsDefault()) { - _impl_.aggregate_value_.Set("", GetArenaForAllocation()); - } -#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING - return p; -} -inline void UninterpretedOption::set_allocated_aggregate_value(std::string* aggregate_value) { - if (aggregate_value != nullptr) { - _impl_._has_bits_[0] |= 0x00000004u; - } else { - _impl_._has_bits_[0] &= ~0x00000004u; - } - _impl_.aggregate_value_.SetAllocated(aggregate_value, GetArenaForAllocation()); -#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING - if (_impl_.aggregate_value_.IsDefault()) { - _impl_.aggregate_value_.Set("", GetArenaForAllocation()); - } -#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING - // @@protoc_insertion_point(field_set_allocated:google.protobuf.UninterpretedOption.aggregate_value) -} - -// ------------------------------------------------------------------- - -// SourceCodeInfo_Location - -// repeated int32 path = 1 [packed = true]; -inline int SourceCodeInfo_Location::_internal_path_size() const { - return _impl_.path_.size(); -} -inline int SourceCodeInfo_Location::path_size() const { - return _internal_path_size(); -} -inline void SourceCodeInfo_Location::clear_path() { - _impl_.path_.Clear(); -} -inline int32_t SourceCodeInfo_Location::_internal_path(int index) const { - return _impl_.path_.Get(index); -} -inline int32_t SourceCodeInfo_Location::path(int index) const { - // @@protoc_insertion_point(field_get:google.protobuf.SourceCodeInfo.Location.path) - return _internal_path(index); -} -inline void SourceCodeInfo_Location::set_path(int index, int32_t value) { - _impl_.path_.Set(index, value); - // @@protoc_insertion_point(field_set:google.protobuf.SourceCodeInfo.Location.path) -} -inline void SourceCodeInfo_Location::_internal_add_path(int32_t value) { - _impl_.path_.Add(value); -} -inline void SourceCodeInfo_Location::add_path(int32_t value) { - _internal_add_path(value); - // @@protoc_insertion_point(field_add:google.protobuf.SourceCodeInfo.Location.path) -} -inline const ::PROTOBUF_NAMESPACE_ID::RepeatedField< int32_t >& -SourceCodeInfo_Location::_internal_path() const { - return _impl_.path_; -} -inline const ::PROTOBUF_NAMESPACE_ID::RepeatedField< int32_t >& -SourceCodeInfo_Location::path() const { - // @@protoc_insertion_point(field_list:google.protobuf.SourceCodeInfo.Location.path) - return _internal_path(); -} -inline ::PROTOBUF_NAMESPACE_ID::RepeatedField< int32_t >* -SourceCodeInfo_Location::_internal_mutable_path() { - return &_impl_.path_; -} -inline ::PROTOBUF_NAMESPACE_ID::RepeatedField< int32_t >* -SourceCodeInfo_Location::mutable_path() { - // @@protoc_insertion_point(field_mutable_list:google.protobuf.SourceCodeInfo.Location.path) - return _internal_mutable_path(); -} - -// repeated int32 span = 2 [packed = true]; -inline int SourceCodeInfo_Location::_internal_span_size() const { - return _impl_.span_.size(); -} -inline int SourceCodeInfo_Location::span_size() const { - return _internal_span_size(); -} -inline void SourceCodeInfo_Location::clear_span() { - _impl_.span_.Clear(); -} -inline int32_t SourceCodeInfo_Location::_internal_span(int index) const { - return _impl_.span_.Get(index); -} -inline int32_t SourceCodeInfo_Location::span(int index) const { - // @@protoc_insertion_point(field_get:google.protobuf.SourceCodeInfo.Location.span) - return _internal_span(index); -} -inline void SourceCodeInfo_Location::set_span(int index, int32_t value) { - _impl_.span_.Set(index, value); - // @@protoc_insertion_point(field_set:google.protobuf.SourceCodeInfo.Location.span) -} -inline void SourceCodeInfo_Location::_internal_add_span(int32_t value) { - _impl_.span_.Add(value); -} -inline void SourceCodeInfo_Location::add_span(int32_t value) { - _internal_add_span(value); - // @@protoc_insertion_point(field_add:google.protobuf.SourceCodeInfo.Location.span) -} -inline const ::PROTOBUF_NAMESPACE_ID::RepeatedField< int32_t >& -SourceCodeInfo_Location::_internal_span() const { - return _impl_.span_; -} -inline const ::PROTOBUF_NAMESPACE_ID::RepeatedField< int32_t >& -SourceCodeInfo_Location::span() const { - // @@protoc_insertion_point(field_list:google.protobuf.SourceCodeInfo.Location.span) - return _internal_span(); -} -inline ::PROTOBUF_NAMESPACE_ID::RepeatedField< int32_t >* -SourceCodeInfo_Location::_internal_mutable_span() { - return &_impl_.span_; -} -inline ::PROTOBUF_NAMESPACE_ID::RepeatedField< int32_t >* -SourceCodeInfo_Location::mutable_span() { - // @@protoc_insertion_point(field_mutable_list:google.protobuf.SourceCodeInfo.Location.span) - return _internal_mutable_span(); -} - -// optional string leading_comments = 3; -inline bool SourceCodeInfo_Location::_internal_has_leading_comments() const { - bool value = (_impl_._has_bits_[0] & 0x00000001u) != 0; - return value; -} -inline bool SourceCodeInfo_Location::has_leading_comments() const { - return _internal_has_leading_comments(); -} -inline void SourceCodeInfo_Location::clear_leading_comments() { - _impl_.leading_comments_.ClearToEmpty(); - _impl_._has_bits_[0] &= ~0x00000001u; -} -inline const std::string& SourceCodeInfo_Location::leading_comments() const { - // @@protoc_insertion_point(field_get:google.protobuf.SourceCodeInfo.Location.leading_comments) - return _internal_leading_comments(); -} -template <typename ArgT0, typename... ArgT> -inline PROTOBUF_ALWAYS_INLINE -void SourceCodeInfo_Location::set_leading_comments(ArgT0&& arg0, ArgT... args) { - _impl_._has_bits_[0] |= 0x00000001u; - _impl_.leading_comments_.Set(static_cast<ArgT0 &&>(arg0), args..., GetArenaForAllocation()); - // @@protoc_insertion_point(field_set:google.protobuf.SourceCodeInfo.Location.leading_comments) -} -inline std::string* SourceCodeInfo_Location::mutable_leading_comments() { - std::string* _s = _internal_mutable_leading_comments(); - // @@protoc_insertion_point(field_mutable:google.protobuf.SourceCodeInfo.Location.leading_comments) - return _s; -} -inline const std::string& SourceCodeInfo_Location::_internal_leading_comments() const { - return _impl_.leading_comments_.Get(); -} -inline void SourceCodeInfo_Location::_internal_set_leading_comments(const std::string& value) { - _impl_._has_bits_[0] |= 0x00000001u; - _impl_.leading_comments_.Set(value, GetArenaForAllocation()); -} -inline std::string* SourceCodeInfo_Location::_internal_mutable_leading_comments() { - _impl_._has_bits_[0] |= 0x00000001u; - return _impl_.leading_comments_.Mutable(GetArenaForAllocation()); -} -inline std::string* SourceCodeInfo_Location::release_leading_comments() { - // @@protoc_insertion_point(field_release:google.protobuf.SourceCodeInfo.Location.leading_comments) - if (!_internal_has_leading_comments()) { - return nullptr; - } - _impl_._has_bits_[0] &= ~0x00000001u; - auto* p = _impl_.leading_comments_.Release(); -#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING - if (_impl_.leading_comments_.IsDefault()) { - _impl_.leading_comments_.Set("", GetArenaForAllocation()); - } -#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING - return p; -} -inline void SourceCodeInfo_Location::set_allocated_leading_comments(std::string* leading_comments) { - if (leading_comments != nullptr) { - _impl_._has_bits_[0] |= 0x00000001u; - } else { - _impl_._has_bits_[0] &= ~0x00000001u; - } - _impl_.leading_comments_.SetAllocated(leading_comments, GetArenaForAllocation()); -#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING - if (_impl_.leading_comments_.IsDefault()) { - _impl_.leading_comments_.Set("", GetArenaForAllocation()); - } -#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING - // @@protoc_insertion_point(field_set_allocated:google.protobuf.SourceCodeInfo.Location.leading_comments) -} - -// optional string trailing_comments = 4; -inline bool SourceCodeInfo_Location::_internal_has_trailing_comments() const { - bool value = (_impl_._has_bits_[0] & 0x00000002u) != 0; - return value; -} -inline bool SourceCodeInfo_Location::has_trailing_comments() const { - return _internal_has_trailing_comments(); -} -inline void SourceCodeInfo_Location::clear_trailing_comments() { - _impl_.trailing_comments_.ClearToEmpty(); - _impl_._has_bits_[0] &= ~0x00000002u; -} -inline const std::string& SourceCodeInfo_Location::trailing_comments() const { - // @@protoc_insertion_point(field_get:google.protobuf.SourceCodeInfo.Location.trailing_comments) - return _internal_trailing_comments(); -} -template <typename ArgT0, typename... ArgT> -inline PROTOBUF_ALWAYS_INLINE -void SourceCodeInfo_Location::set_trailing_comments(ArgT0&& arg0, ArgT... args) { - _impl_._has_bits_[0] |= 0x00000002u; - _impl_.trailing_comments_.Set(static_cast<ArgT0 &&>(arg0), args..., GetArenaForAllocation()); - // @@protoc_insertion_point(field_set:google.protobuf.SourceCodeInfo.Location.trailing_comments) -} -inline std::string* SourceCodeInfo_Location::mutable_trailing_comments() { - std::string* _s = _internal_mutable_trailing_comments(); - // @@protoc_insertion_point(field_mutable:google.protobuf.SourceCodeInfo.Location.trailing_comments) - return _s; -} -inline const std::string& SourceCodeInfo_Location::_internal_trailing_comments() const { - return _impl_.trailing_comments_.Get(); -} -inline void SourceCodeInfo_Location::_internal_set_trailing_comments(const std::string& value) { - _impl_._has_bits_[0] |= 0x00000002u; - _impl_.trailing_comments_.Set(value, GetArenaForAllocation()); -} -inline std::string* SourceCodeInfo_Location::_internal_mutable_trailing_comments() { - _impl_._has_bits_[0] |= 0x00000002u; - return _impl_.trailing_comments_.Mutable(GetArenaForAllocation()); -} -inline std::string* SourceCodeInfo_Location::release_trailing_comments() { - // @@protoc_insertion_point(field_release:google.protobuf.SourceCodeInfo.Location.trailing_comments) - if (!_internal_has_trailing_comments()) { - return nullptr; - } - _impl_._has_bits_[0] &= ~0x00000002u; - auto* p = _impl_.trailing_comments_.Release(); -#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING - if (_impl_.trailing_comments_.IsDefault()) { - _impl_.trailing_comments_.Set("", GetArenaForAllocation()); - } -#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING - return p; -} -inline void SourceCodeInfo_Location::set_allocated_trailing_comments(std::string* trailing_comments) { - if (trailing_comments != nullptr) { - _impl_._has_bits_[0] |= 0x00000002u; - } else { - _impl_._has_bits_[0] &= ~0x00000002u; - } - _impl_.trailing_comments_.SetAllocated(trailing_comments, GetArenaForAllocation()); -#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING - if (_impl_.trailing_comments_.IsDefault()) { - _impl_.trailing_comments_.Set("", GetArenaForAllocation()); - } -#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING - // @@protoc_insertion_point(field_set_allocated:google.protobuf.SourceCodeInfo.Location.trailing_comments) -} - -// repeated string leading_detached_comments = 6; -inline int SourceCodeInfo_Location::_internal_leading_detached_comments_size() const { - return _impl_.leading_detached_comments_.size(); -} -inline int SourceCodeInfo_Location::leading_detached_comments_size() const { - return _internal_leading_detached_comments_size(); -} -inline void SourceCodeInfo_Location::clear_leading_detached_comments() { - _impl_.leading_detached_comments_.Clear(); -} -inline std::string* SourceCodeInfo_Location::add_leading_detached_comments() { - std::string* _s = _internal_add_leading_detached_comments(); - // @@protoc_insertion_point(field_add_mutable:google.protobuf.SourceCodeInfo.Location.leading_detached_comments) - return _s; -} -inline const std::string& SourceCodeInfo_Location::_internal_leading_detached_comments(int index) const { - return _impl_.leading_detached_comments_.Get(index); -} -inline const std::string& SourceCodeInfo_Location::leading_detached_comments(int index) const { - // @@protoc_insertion_point(field_get:google.protobuf.SourceCodeInfo.Location.leading_detached_comments) - return _internal_leading_detached_comments(index); -} -inline std::string* SourceCodeInfo_Location::mutable_leading_detached_comments(int index) { - // @@protoc_insertion_point(field_mutable:google.protobuf.SourceCodeInfo.Location.leading_detached_comments) - return _impl_.leading_detached_comments_.Mutable(index); -} -inline void SourceCodeInfo_Location::set_leading_detached_comments(int index, const std::string& value) { - _impl_.leading_detached_comments_.Mutable(index)->assign(value); - // @@protoc_insertion_point(field_set:google.protobuf.SourceCodeInfo.Location.leading_detached_comments) -} -inline void SourceCodeInfo_Location::set_leading_detached_comments(int index, std::string&& value) { - _impl_.leading_detached_comments_.Mutable(index)->assign(std::move(value)); - // @@protoc_insertion_point(field_set:google.protobuf.SourceCodeInfo.Location.leading_detached_comments) -} -inline void SourceCodeInfo_Location::set_leading_detached_comments(int index, const char* value) { - GOOGLE_DCHECK(value != nullptr); - _impl_.leading_detached_comments_.Mutable(index)->assign(value); - // @@protoc_insertion_point(field_set_char:google.protobuf.SourceCodeInfo.Location.leading_detached_comments) -} -inline void SourceCodeInfo_Location::set_leading_detached_comments(int index, const char* value, size_t size) { - _impl_.leading_detached_comments_.Mutable(index)->assign( - reinterpret_cast<const char*>(value), size); - // @@protoc_insertion_point(field_set_pointer:google.protobuf.SourceCodeInfo.Location.leading_detached_comments) -} -inline std::string* SourceCodeInfo_Location::_internal_add_leading_detached_comments() { - return _impl_.leading_detached_comments_.Add(); -} -inline void SourceCodeInfo_Location::add_leading_detached_comments(const std::string& value) { - _impl_.leading_detached_comments_.Add()->assign(value); - // @@protoc_insertion_point(field_add:google.protobuf.SourceCodeInfo.Location.leading_detached_comments) -} -inline void SourceCodeInfo_Location::add_leading_detached_comments(std::string&& value) { - _impl_.leading_detached_comments_.Add(std::move(value)); - // @@protoc_insertion_point(field_add:google.protobuf.SourceCodeInfo.Location.leading_detached_comments) -} -inline void SourceCodeInfo_Location::add_leading_detached_comments(const char* value) { - GOOGLE_DCHECK(value != nullptr); - _impl_.leading_detached_comments_.Add()->assign(value); - // @@protoc_insertion_point(field_add_char:google.protobuf.SourceCodeInfo.Location.leading_detached_comments) -} -inline void SourceCodeInfo_Location::add_leading_detached_comments(const char* value, size_t size) { - _impl_.leading_detached_comments_.Add()->assign(reinterpret_cast<const char*>(value), size); - // @@protoc_insertion_point(field_add_pointer:google.protobuf.SourceCodeInfo.Location.leading_detached_comments) -} -inline const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField<std::string>& -SourceCodeInfo_Location::leading_detached_comments() const { - // @@protoc_insertion_point(field_list:google.protobuf.SourceCodeInfo.Location.leading_detached_comments) - return _impl_.leading_detached_comments_; -} -inline ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField<std::string>* -SourceCodeInfo_Location::mutable_leading_detached_comments() { - // @@protoc_insertion_point(field_mutable_list:google.protobuf.SourceCodeInfo.Location.leading_detached_comments) - return &_impl_.leading_detached_comments_; -} - -// ------------------------------------------------------------------- - -// SourceCodeInfo - -// repeated .google.protobuf.SourceCodeInfo.Location location = 1; -inline int SourceCodeInfo::_internal_location_size() const { - return _impl_.location_.size(); -} -inline int SourceCodeInfo::location_size() const { - return _internal_location_size(); -} -inline void SourceCodeInfo::clear_location() { - _impl_.location_.Clear(); -} -inline ::PROTOBUF_NAMESPACE_ID::SourceCodeInfo_Location* SourceCodeInfo::mutable_location(int index) { - // @@protoc_insertion_point(field_mutable:google.protobuf.SourceCodeInfo.location) - return _impl_.location_.Mutable(index); -} -inline ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::SourceCodeInfo_Location >* -SourceCodeInfo::mutable_location() { - // @@protoc_insertion_point(field_mutable_list:google.protobuf.SourceCodeInfo.location) - return &_impl_.location_; -} -inline const ::PROTOBUF_NAMESPACE_ID::SourceCodeInfo_Location& SourceCodeInfo::_internal_location(int index) const { - return _impl_.location_.Get(index); -} -inline const ::PROTOBUF_NAMESPACE_ID::SourceCodeInfo_Location& SourceCodeInfo::location(int index) const { - // @@protoc_insertion_point(field_get:google.protobuf.SourceCodeInfo.location) - return _internal_location(index); -} -inline ::PROTOBUF_NAMESPACE_ID::SourceCodeInfo_Location* SourceCodeInfo::_internal_add_location() { - return _impl_.location_.Add(); -} -inline ::PROTOBUF_NAMESPACE_ID::SourceCodeInfo_Location* SourceCodeInfo::add_location() { - ::PROTOBUF_NAMESPACE_ID::SourceCodeInfo_Location* _add = _internal_add_location(); - // @@protoc_insertion_point(field_add:google.protobuf.SourceCodeInfo.location) - return _add; -} -inline const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::SourceCodeInfo_Location >& -SourceCodeInfo::location() const { - // @@protoc_insertion_point(field_list:google.protobuf.SourceCodeInfo.location) - return _impl_.location_; -} - -// ------------------------------------------------------------------- - -// GeneratedCodeInfo_Annotation - -// repeated int32 path = 1 [packed = true]; -inline int GeneratedCodeInfo_Annotation::_internal_path_size() const { - return _impl_.path_.size(); -} -inline int GeneratedCodeInfo_Annotation::path_size() const { - return _internal_path_size(); -} -inline void GeneratedCodeInfo_Annotation::clear_path() { - _impl_.path_.Clear(); -} -inline int32_t GeneratedCodeInfo_Annotation::_internal_path(int index) const { - return _impl_.path_.Get(index); -} -inline int32_t GeneratedCodeInfo_Annotation::path(int index) const { - // @@protoc_insertion_point(field_get:google.protobuf.GeneratedCodeInfo.Annotation.path) - return _internal_path(index); -} -inline void GeneratedCodeInfo_Annotation::set_path(int index, int32_t value) { - _impl_.path_.Set(index, value); - // @@protoc_insertion_point(field_set:google.protobuf.GeneratedCodeInfo.Annotation.path) -} -inline void GeneratedCodeInfo_Annotation::_internal_add_path(int32_t value) { - _impl_.path_.Add(value); -} -inline void GeneratedCodeInfo_Annotation::add_path(int32_t value) { - _internal_add_path(value); - // @@protoc_insertion_point(field_add:google.protobuf.GeneratedCodeInfo.Annotation.path) -} -inline const ::PROTOBUF_NAMESPACE_ID::RepeatedField< int32_t >& -GeneratedCodeInfo_Annotation::_internal_path() const { - return _impl_.path_; -} -inline const ::PROTOBUF_NAMESPACE_ID::RepeatedField< int32_t >& -GeneratedCodeInfo_Annotation::path() const { - // @@protoc_insertion_point(field_list:google.protobuf.GeneratedCodeInfo.Annotation.path) - return _internal_path(); -} -inline ::PROTOBUF_NAMESPACE_ID::RepeatedField< int32_t >* -GeneratedCodeInfo_Annotation::_internal_mutable_path() { - return &_impl_.path_; -} -inline ::PROTOBUF_NAMESPACE_ID::RepeatedField< int32_t >* -GeneratedCodeInfo_Annotation::mutable_path() { - // @@protoc_insertion_point(field_mutable_list:google.protobuf.GeneratedCodeInfo.Annotation.path) - return _internal_mutable_path(); -} - -// optional string source_file = 2; -inline bool GeneratedCodeInfo_Annotation::_internal_has_source_file() const { - bool value = (_impl_._has_bits_[0] & 0x00000001u) != 0; - return value; -} -inline bool GeneratedCodeInfo_Annotation::has_source_file() const { - return _internal_has_source_file(); -} -inline void GeneratedCodeInfo_Annotation::clear_source_file() { - _impl_.source_file_.ClearToEmpty(); - _impl_._has_bits_[0] &= ~0x00000001u; -} -inline const std::string& GeneratedCodeInfo_Annotation::source_file() const { - // @@protoc_insertion_point(field_get:google.protobuf.GeneratedCodeInfo.Annotation.source_file) - return _internal_source_file(); -} -template <typename ArgT0, typename... ArgT> -inline PROTOBUF_ALWAYS_INLINE -void GeneratedCodeInfo_Annotation::set_source_file(ArgT0&& arg0, ArgT... args) { - _impl_._has_bits_[0] |= 0x00000001u; - _impl_.source_file_.Set(static_cast<ArgT0 &&>(arg0), args..., GetArenaForAllocation()); - // @@protoc_insertion_point(field_set:google.protobuf.GeneratedCodeInfo.Annotation.source_file) -} -inline std::string* GeneratedCodeInfo_Annotation::mutable_source_file() { - std::string* _s = _internal_mutable_source_file(); - // @@protoc_insertion_point(field_mutable:google.protobuf.GeneratedCodeInfo.Annotation.source_file) - return _s; -} -inline const std::string& GeneratedCodeInfo_Annotation::_internal_source_file() const { - return _impl_.source_file_.Get(); -} -inline void GeneratedCodeInfo_Annotation::_internal_set_source_file(const std::string& value) { - _impl_._has_bits_[0] |= 0x00000001u; - _impl_.source_file_.Set(value, GetArenaForAllocation()); -} -inline std::string* GeneratedCodeInfo_Annotation::_internal_mutable_source_file() { - _impl_._has_bits_[0] |= 0x00000001u; - return _impl_.source_file_.Mutable(GetArenaForAllocation()); -} -inline std::string* GeneratedCodeInfo_Annotation::release_source_file() { - // @@protoc_insertion_point(field_release:google.protobuf.GeneratedCodeInfo.Annotation.source_file) - if (!_internal_has_source_file()) { - return nullptr; - } - _impl_._has_bits_[0] &= ~0x00000001u; - auto* p = _impl_.source_file_.Release(); -#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING - if (_impl_.source_file_.IsDefault()) { - _impl_.source_file_.Set("", GetArenaForAllocation()); - } -#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING - return p; -} -inline void GeneratedCodeInfo_Annotation::set_allocated_source_file(std::string* source_file) { - if (source_file != nullptr) { - _impl_._has_bits_[0] |= 0x00000001u; - } else { - _impl_._has_bits_[0] &= ~0x00000001u; - } - _impl_.source_file_.SetAllocated(source_file, GetArenaForAllocation()); -#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING - if (_impl_.source_file_.IsDefault()) { - _impl_.source_file_.Set("", GetArenaForAllocation()); - } -#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING - // @@protoc_insertion_point(field_set_allocated:google.protobuf.GeneratedCodeInfo.Annotation.source_file) -} - -// optional int32 begin = 3; -inline bool GeneratedCodeInfo_Annotation::_internal_has_begin() const { - bool value = (_impl_._has_bits_[0] & 0x00000002u) != 0; - return value; -} -inline bool GeneratedCodeInfo_Annotation::has_begin() const { - return _internal_has_begin(); -} -inline void GeneratedCodeInfo_Annotation::clear_begin() { - _impl_.begin_ = 0; - _impl_._has_bits_[0] &= ~0x00000002u; -} -inline int32_t GeneratedCodeInfo_Annotation::_internal_begin() const { - return _impl_.begin_; -} -inline int32_t GeneratedCodeInfo_Annotation::begin() const { - // @@protoc_insertion_point(field_get:google.protobuf.GeneratedCodeInfo.Annotation.begin) - return _internal_begin(); -} -inline void GeneratedCodeInfo_Annotation::_internal_set_begin(int32_t value) { - _impl_._has_bits_[0] |= 0x00000002u; - _impl_.begin_ = value; -} -inline void GeneratedCodeInfo_Annotation::set_begin(int32_t value) { - _internal_set_begin(value); - // @@protoc_insertion_point(field_set:google.protobuf.GeneratedCodeInfo.Annotation.begin) -} - -// optional int32 end = 4; -inline bool GeneratedCodeInfo_Annotation::_internal_has_end() const { - bool value = (_impl_._has_bits_[0] & 0x00000004u) != 0; - return value; -} -inline bool GeneratedCodeInfo_Annotation::has_end() const { - return _internal_has_end(); -} -inline void GeneratedCodeInfo_Annotation::clear_end() { - _impl_.end_ = 0; - _impl_._has_bits_[0] &= ~0x00000004u; -} -inline int32_t GeneratedCodeInfo_Annotation::_internal_end() const { - return _impl_.end_; -} -inline int32_t GeneratedCodeInfo_Annotation::end() const { - // @@protoc_insertion_point(field_get:google.protobuf.GeneratedCodeInfo.Annotation.end) - return _internal_end(); -} -inline void GeneratedCodeInfo_Annotation::_internal_set_end(int32_t value) { - _impl_._has_bits_[0] |= 0x00000004u; - _impl_.end_ = value; -} -inline void GeneratedCodeInfo_Annotation::set_end(int32_t value) { - _internal_set_end(value); - // @@protoc_insertion_point(field_set:google.protobuf.GeneratedCodeInfo.Annotation.end) -} - -// ------------------------------------------------------------------- - -// GeneratedCodeInfo - -// repeated .google.protobuf.GeneratedCodeInfo.Annotation annotation = 1; -inline int GeneratedCodeInfo::_internal_annotation_size() const { - return _impl_.annotation_.size(); -} -inline int GeneratedCodeInfo::annotation_size() const { - return _internal_annotation_size(); -} -inline void GeneratedCodeInfo::clear_annotation() { - _impl_.annotation_.Clear(); -} -inline ::PROTOBUF_NAMESPACE_ID::GeneratedCodeInfo_Annotation* GeneratedCodeInfo::mutable_annotation(int index) { - // @@protoc_insertion_point(field_mutable:google.protobuf.GeneratedCodeInfo.annotation) - return _impl_.annotation_.Mutable(index); -} -inline ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::GeneratedCodeInfo_Annotation >* -GeneratedCodeInfo::mutable_annotation() { - // @@protoc_insertion_point(field_mutable_list:google.protobuf.GeneratedCodeInfo.annotation) - return &_impl_.annotation_; -} -inline const ::PROTOBUF_NAMESPACE_ID::GeneratedCodeInfo_Annotation& GeneratedCodeInfo::_internal_annotation(int index) const { - return _impl_.annotation_.Get(index); -} -inline const ::PROTOBUF_NAMESPACE_ID::GeneratedCodeInfo_Annotation& GeneratedCodeInfo::annotation(int index) const { - // @@protoc_insertion_point(field_get:google.protobuf.GeneratedCodeInfo.annotation) - return _internal_annotation(index); -} -inline ::PROTOBUF_NAMESPACE_ID::GeneratedCodeInfo_Annotation* GeneratedCodeInfo::_internal_add_annotation() { - return _impl_.annotation_.Add(); -} -inline ::PROTOBUF_NAMESPACE_ID::GeneratedCodeInfo_Annotation* GeneratedCodeInfo::add_annotation() { - ::PROTOBUF_NAMESPACE_ID::GeneratedCodeInfo_Annotation* _add = _internal_add_annotation(); - // @@protoc_insertion_point(field_add:google.protobuf.GeneratedCodeInfo.annotation) - return _add; -} -inline const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::GeneratedCodeInfo_Annotation >& -GeneratedCodeInfo::annotation() const { - // @@protoc_insertion_point(field_list:google.protobuf.GeneratedCodeInfo.annotation) - return _impl_.annotation_; -} - -#ifdef __GNUC__ - #pragma GCC diagnostic pop -#endif // __GNUC__ -// ------------------------------------------------------------------- - -// ------------------------------------------------------------------- - -// ------------------------------------------------------------------- - -// ------------------------------------------------------------------- - -// ------------------------------------------------------------------- - -// ------------------------------------------------------------------- - -// ------------------------------------------------------------------- - -// ------------------------------------------------------------------- - -// ------------------------------------------------------------------- - -// ------------------------------------------------------------------- - -// ------------------------------------------------------------------- - -// ------------------------------------------------------------------- - -// ------------------------------------------------------------------- - -// ------------------------------------------------------------------- - -// ------------------------------------------------------------------- - -// ------------------------------------------------------------------- - -// ------------------------------------------------------------------- - -// ------------------------------------------------------------------- - -// ------------------------------------------------------------------- - -// ------------------------------------------------------------------- - -// ------------------------------------------------------------------- - -// ------------------------------------------------------------------- - -// ------------------------------------------------------------------- - -// ------------------------------------------------------------------- - -// ------------------------------------------------------------------- - -// ------------------------------------------------------------------- - - -// @@protoc_insertion_point(namespace_scope) - -PROTOBUF_NAMESPACE_CLOSE - -PROTOBUF_NAMESPACE_OPEN - -template <> struct is_proto_enum< ::PROTOBUF_NAMESPACE_ID::FieldDescriptorProto_Type> : ::std::true_type {}; -template <> -inline const EnumDescriptor* GetEnumDescriptor< ::PROTOBUF_NAMESPACE_ID::FieldDescriptorProto_Type>() { - return ::PROTOBUF_NAMESPACE_ID::FieldDescriptorProto_Type_descriptor(); -} -template <> struct is_proto_enum< ::PROTOBUF_NAMESPACE_ID::FieldDescriptorProto_Label> : ::std::true_type {}; -template <> -inline const EnumDescriptor* GetEnumDescriptor< ::PROTOBUF_NAMESPACE_ID::FieldDescriptorProto_Label>() { - return ::PROTOBUF_NAMESPACE_ID::FieldDescriptorProto_Label_descriptor(); -} -template <> struct is_proto_enum< ::PROTOBUF_NAMESPACE_ID::FileOptions_OptimizeMode> : ::std::true_type {}; -template <> -inline const EnumDescriptor* GetEnumDescriptor< ::PROTOBUF_NAMESPACE_ID::FileOptions_OptimizeMode>() { - return ::PROTOBUF_NAMESPACE_ID::FileOptions_OptimizeMode_descriptor(); -} -template <> struct is_proto_enum< ::PROTOBUF_NAMESPACE_ID::FieldOptions_CType> : ::std::true_type {}; -template <> -inline const EnumDescriptor* GetEnumDescriptor< ::PROTOBUF_NAMESPACE_ID::FieldOptions_CType>() { - return ::PROTOBUF_NAMESPACE_ID::FieldOptions_CType_descriptor(); -} -template <> struct is_proto_enum< ::PROTOBUF_NAMESPACE_ID::FieldOptions_JSType> : ::std::true_type {}; -template <> -inline const EnumDescriptor* GetEnumDescriptor< ::PROTOBUF_NAMESPACE_ID::FieldOptions_JSType>() { - return ::PROTOBUF_NAMESPACE_ID::FieldOptions_JSType_descriptor(); -} -template <> struct is_proto_enum< ::PROTOBUF_NAMESPACE_ID::MethodOptions_IdempotencyLevel> : ::std::true_type {}; -template <> -inline const EnumDescriptor* GetEnumDescriptor< ::PROTOBUF_NAMESPACE_ID::MethodOptions_IdempotencyLevel>() { - return ::PROTOBUF_NAMESPACE_ID::MethodOptions_IdempotencyLevel_descriptor(); -} - -PROTOBUF_NAMESPACE_CLOSE - -// @@protoc_insertion_point(global_scope) - -#include <google/protobuf/port_undef.inc> -#endif // GOOGLE_PROTOBUF_INCLUDED_GOOGLE_PROTOBUF_INCLUDED_google_2fprotobuf_2fdescriptor_2eproto diff --git a/include/google/protobuf/descriptor.proto b/include/google/protobuf/descriptor.proto deleted file mode 100644 index f8eb216cdc..0000000000 --- a/include/google/protobuf/descriptor.proto +++ /dev/null @@ -1,921 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// 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 -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -// Author: kenton@google.com (Kenton Varda) -// Based on original Protocol Buffers design by -// Sanjay Ghemawat, Jeff Dean, and others. -// -// The messages in this file describe the definitions found in .proto files. -// A valid .proto file can be translated directly to a FileDescriptorProto -// without any other information (e.g. without reading its imports). - - -syntax = "proto2"; - -package google.protobuf; - -option go_package = "google.golang.org/protobuf/types/descriptorpb"; -option java_package = "com.google.protobuf"; -option java_outer_classname = "DescriptorProtos"; -option csharp_namespace = "Google.Protobuf.Reflection"; -option objc_class_prefix = "GPB"; -option cc_enable_arenas = true; - -// descriptor.proto must be optimized for speed because reflection-based -// algorithms don't work during bootstrapping. -option optimize_for = SPEED; - -// The protocol compiler can output a FileDescriptorSet containing the .proto -// files it parses. -message FileDescriptorSet { - repeated FileDescriptorProto file = 1; -} - -// Describes a complete .proto file. -message FileDescriptorProto { - optional string name = 1; // file name, relative to root of source tree - optional string package = 2; // e.g. "foo", "foo.bar", etc. - - // Names of files imported by this file. - repeated string dependency = 3; - // Indexes of the public imported files in the dependency list above. - repeated int32 public_dependency = 10; - // Indexes of the weak imported files in the dependency list. - // For Google-internal migration only. Do not use. - repeated int32 weak_dependency = 11; - - // All top-level definitions in this file. - repeated DescriptorProto message_type = 4; - repeated EnumDescriptorProto enum_type = 5; - repeated ServiceDescriptorProto service = 6; - repeated FieldDescriptorProto extension = 7; - - optional FileOptions options = 8; - - // This field contains optional information about the original source code. - // You may safely remove this entire field without harming runtime - // functionality of the descriptors -- the information is needed only by - // development tools. - optional SourceCodeInfo source_code_info = 9; - - // The syntax of the proto file. - // The supported values are "proto2" and "proto3". - optional string syntax = 12; -} - -// Describes a message type. -message DescriptorProto { - optional string name = 1; - - repeated FieldDescriptorProto field = 2; - repeated FieldDescriptorProto extension = 6; - - repeated DescriptorProto nested_type = 3; - repeated EnumDescriptorProto enum_type = 4; - - message ExtensionRange { - optional int32 start = 1; // Inclusive. - optional int32 end = 2; // Exclusive. - - optional ExtensionRangeOptions options = 3; - } - repeated ExtensionRange extension_range = 5; - - repeated OneofDescriptorProto oneof_decl = 8; - - optional MessageOptions options = 7; - - // Range of reserved tag numbers. Reserved tag numbers may not be used by - // fields or extension ranges in the same message. Reserved ranges may - // not overlap. - message ReservedRange { - optional int32 start = 1; // Inclusive. - optional int32 end = 2; // Exclusive. - } - repeated ReservedRange reserved_range = 9; - // Reserved field names, which may not be used by fields in the same message. - // A given name may only be reserved once. - repeated string reserved_name = 10; -} - -message ExtensionRangeOptions { - // The parser stores options it doesn't recognize here. See above. - repeated UninterpretedOption uninterpreted_option = 999; - - - // Clients can define custom options in extensions of this message. See above. - extensions 1000 to max; -} - -// Describes a field within a message. -message FieldDescriptorProto { - enum Type { - // 0 is reserved for errors. - // Order is weird for historical reasons. - TYPE_DOUBLE = 1; - TYPE_FLOAT = 2; - // Not ZigZag encoded. Negative numbers take 10 bytes. Use TYPE_SINT64 if - // negative values are likely. - TYPE_INT64 = 3; - TYPE_UINT64 = 4; - // Not ZigZag encoded. Negative numbers take 10 bytes. Use TYPE_SINT32 if - // negative values are likely. - TYPE_INT32 = 5; - TYPE_FIXED64 = 6; - TYPE_FIXED32 = 7; - TYPE_BOOL = 8; - TYPE_STRING = 9; - // Tag-delimited aggregate. - // Group type is deprecated and not supported in proto3. However, Proto3 - // implementations should still be able to parse the group wire format and - // treat group fields as unknown fields. - TYPE_GROUP = 10; - TYPE_MESSAGE = 11; // Length-delimited aggregate. - - // New in version 2. - TYPE_BYTES = 12; - TYPE_UINT32 = 13; - TYPE_ENUM = 14; - TYPE_SFIXED32 = 15; - TYPE_SFIXED64 = 16; - TYPE_SINT32 = 17; // Uses ZigZag encoding. - TYPE_SINT64 = 18; // Uses ZigZag encoding. - } - - enum Label { - // 0 is reserved for errors - LABEL_OPTIONAL = 1; - LABEL_REQUIRED = 2; - LABEL_REPEATED = 3; - } - - optional string name = 1; - optional int32 number = 3; - optional Label label = 4; - - // If type_name is set, this need not be set. If both this and type_name - // are set, this must be one of TYPE_ENUM, TYPE_MESSAGE or TYPE_GROUP. - optional Type type = 5; - - // For message and enum types, this is the name of the type. If the name - // starts with a '.', it is fully-qualified. Otherwise, C++-like scoping - // rules are used to find the type (i.e. first the nested types within this - // message are searched, then within the parent, on up to the root - // namespace). - optional string type_name = 6; - - // For extensions, this is the name of the type being extended. It is - // resolved in the same manner as type_name. - optional string extendee = 2; - - // For numeric types, contains the original text representation of the value. - // For booleans, "true" or "false". - // For strings, contains the default text contents (not escaped in any way). - // For bytes, contains the C escaped value. All bytes >= 128 are escaped. - optional string default_value = 7; - - // If set, gives the index of a oneof in the containing type's oneof_decl - // list. This field is a member of that oneof. - optional int32 oneof_index = 9; - - // JSON name of this field. The value is set by protocol compiler. If the - // user has set a "json_name" option on this field, that option's value - // will be used. Otherwise, it's deduced from the field's name by converting - // it to camelCase. - optional string json_name = 10; - - optional FieldOptions options = 8; - - // If true, this is a proto3 "optional". When a proto3 field is optional, it - // tracks presence regardless of field type. - // - // When proto3_optional is true, this field must be belong to a oneof to - // signal to old proto3 clients that presence is tracked for this field. This - // oneof is known as a "synthetic" oneof, and this field must be its sole - // member (each proto3 optional field gets its own synthetic oneof). Synthetic - // oneofs exist in the descriptor only, and do not generate any API. Synthetic - // oneofs must be ordered after all "real" oneofs. - // - // For message fields, proto3_optional doesn't create any semantic change, - // since non-repeated message fields always track presence. However it still - // indicates the semantic detail of whether the user wrote "optional" or not. - // This can be useful for round-tripping the .proto file. For consistency we - // give message fields a synthetic oneof also, even though it is not required - // to track presence. This is especially important because the parser can't - // tell if a field is a message or an enum, so it must always create a - // synthetic oneof. - // - // Proto2 optional fields do not set this flag, because they already indicate - // optional with `LABEL_OPTIONAL`. - optional bool proto3_optional = 17; -} - -// Describes a oneof. -message OneofDescriptorProto { - optional string name = 1; - optional OneofOptions options = 2; -} - -// Describes an enum type. -message EnumDescriptorProto { - optional string name = 1; - - repeated EnumValueDescriptorProto value = 2; - - optional EnumOptions options = 3; - - // Range of reserved numeric values. Reserved values may not be used by - // entries in the same enum. Reserved ranges may not overlap. - // - // Note that this is distinct from DescriptorProto.ReservedRange in that it - // is inclusive such that it can appropriately represent the entire int32 - // domain. - message EnumReservedRange { - optional int32 start = 1; // Inclusive. - optional int32 end = 2; // Inclusive. - } - - // Range of reserved numeric values. Reserved numeric values may not be used - // by enum values in the same enum declaration. Reserved ranges may not - // overlap. - repeated EnumReservedRange reserved_range = 4; - - // Reserved enum value names, which may not be reused. A given name may only - // be reserved once. - repeated string reserved_name = 5; -} - -// Describes a value within an enum. -message EnumValueDescriptorProto { - optional string name = 1; - optional int32 number = 2; - - optional EnumValueOptions options = 3; -} - -// Describes a service. -message ServiceDescriptorProto { - optional string name = 1; - repeated MethodDescriptorProto method = 2; - - optional ServiceOptions options = 3; -} - -// Describes a method of a service. -message MethodDescriptorProto { - optional string name = 1; - - // Input and output type names. These are resolved in the same way as - // FieldDescriptorProto.type_name, but must refer to a message type. - optional string input_type = 2; - optional string output_type = 3; - - optional MethodOptions options = 4; - - // Identifies if client streams multiple client messages - optional bool client_streaming = 5 [default = false]; - // Identifies if server streams multiple server messages - optional bool server_streaming = 6 [default = false]; -} - - -// =================================================================== -// Options - -// Each of the definitions above may have "options" attached. These are -// just annotations which may cause code to be generated slightly differently -// or may contain hints for code that manipulates protocol messages. -// -// Clients may define custom options as extensions of the *Options messages. -// These extensions may not yet be known at parsing time, so the parser cannot -// store the values in them. Instead it stores them in a field in the *Options -// message called uninterpreted_option. This field must have the same name -// across all *Options messages. We then use this field to populate the -// extensions when we build a descriptor, at which point all protos have been -// parsed and so all extensions are known. -// -// Extension numbers for custom options may be chosen as follows: -// * For options which will only be used within a single application or -// organization, or for experimental options, use field numbers 50000 -// through 99999. It is up to you to ensure that you do not use the -// same number for multiple options. -// * For options which will be published and used publicly by multiple -// independent entities, e-mail protobuf-global-extension-registry@google.com -// to reserve extension numbers. Simply provide your project name (e.g. -// Objective-C plugin) and your project website (if available) -- there's no -// need to explain how you intend to use them. Usually you only need one -// extension number. You can declare multiple options with only one extension -// number by putting them in a sub-message. See the Custom Options section of -// the docs for examples: -// https://developers.google.com/protocol-buffers/docs/proto#options -// If this turns out to be popular, a web service will be set up -// to automatically assign option numbers. - -message FileOptions { - - // Sets the Java package where classes generated from this .proto will be - // placed. By default, the proto package is used, but this is often - // inappropriate because proto packages do not normally start with backwards - // domain names. - optional string java_package = 1; - - - // Controls the name of the wrapper Java class generated for the .proto file. - // That class will always contain the .proto file's getDescriptor() method as - // well as any top-level extensions defined in the .proto file. - // If java_multiple_files is disabled, then all the other classes from the - // .proto file will be nested inside the single wrapper outer class. - optional string java_outer_classname = 8; - - // If enabled, then the Java code generator will generate a separate .java - // file for each top-level message, enum, and service defined in the .proto - // file. Thus, these types will *not* be nested inside the wrapper class - // named by java_outer_classname. However, the wrapper class will still be - // generated to contain the file's getDescriptor() method as well as any - // top-level extensions defined in the file. - optional bool java_multiple_files = 10 [default = false]; - - // This option does nothing. - optional bool java_generate_equals_and_hash = 20 [deprecated=true]; - - // If set true, then the Java2 code generator will generate code that - // throws an exception whenever an attempt is made to assign a non-UTF-8 - // byte sequence to a string field. - // Message reflection will do the same. - // However, an extension field still accepts non-UTF-8 byte sequences. - // This option has no effect on when used with the lite runtime. - optional bool java_string_check_utf8 = 27 [default = false]; - - - // Generated classes can be optimized for speed or code size. - enum OptimizeMode { - SPEED = 1; // Generate complete code for parsing, serialization, - // etc. - CODE_SIZE = 2; // Use ReflectionOps to implement these methods. - LITE_RUNTIME = 3; // Generate code using MessageLite and the lite runtime. - } - optional OptimizeMode optimize_for = 9 [default = SPEED]; - - // Sets the Go package where structs generated from this .proto will be - // placed. If omitted, the Go package will be derived from the following: - // - The basename of the package import path, if provided. - // - Otherwise, the package statement in the .proto file, if present. - // - Otherwise, the basename of the .proto file, without extension. - optional string go_package = 11; - - - - - // Should generic services be generated in each language? "Generic" services - // are not specific to any particular RPC system. They are generated by the - // main code generators in each language (without additional plugins). - // Generic services were the only kind of service generation supported by - // early versions of google.protobuf. - // - // Generic services are now considered deprecated in favor of using plugins - // that generate code specific to your particular RPC system. Therefore, - // these default to false. Old code which depends on generic services should - // explicitly set them to true. - optional bool cc_generic_services = 16 [default = false]; - optional bool java_generic_services = 17 [default = false]; - optional bool py_generic_services = 18 [default = false]; - optional bool php_generic_services = 42 [default = false]; - - // Is this file deprecated? - // Depending on the target platform, this can emit Deprecated annotations - // for everything in the file, or it will be completely ignored; in the very - // least, this is a formalization for deprecating files. - optional bool deprecated = 23 [default = false]; - - // Enables the use of arenas for the proto messages in this file. This applies - // only to generated classes for C++. - optional bool cc_enable_arenas = 31 [default = true]; - - - // Sets the objective c class prefix which is prepended to all objective c - // generated classes from this .proto. There is no default. - optional string objc_class_prefix = 36; - - // Namespace for generated classes; defaults to the package. - optional string csharp_namespace = 37; - - // By default Swift generators will take the proto package and CamelCase it - // replacing '.' with underscore and use that to prefix the types/symbols - // defined. When this options is provided, they will use this value instead - // to prefix the types/symbols defined. - optional string swift_prefix = 39; - - // Sets the php class prefix which is prepended to all php generated classes - // from this .proto. Default is empty. - optional string php_class_prefix = 40; - - // Use this option to change the namespace of php generated classes. Default - // is empty. When this option is empty, the package name will be used for - // determining the namespace. - optional string php_namespace = 41; - - // Use this option to change the namespace of php generated metadata classes. - // Default is empty. When this option is empty, the proto file name will be - // used for determining the namespace. - optional string php_metadata_namespace = 44; - - // Use this option to change the package of ruby generated classes. Default - // is empty. When this option is not set, the package name will be used for - // determining the ruby package. - optional string ruby_package = 45; - - - // The parser stores options it doesn't recognize here. - // See the documentation for the "Options" section above. - repeated UninterpretedOption uninterpreted_option = 999; - - // Clients can define custom options in extensions of this message. - // See the documentation for the "Options" section above. - extensions 1000 to max; - - reserved 38; -} - -message MessageOptions { - // Set true to use the old proto1 MessageSet wire format for extensions. - // This is provided for backwards-compatibility with the MessageSet wire - // format. You should not use this for any other reason: It's less - // efficient, has fewer features, and is more complicated. - // - // The message must be defined exactly as follows: - // message Foo { - // option message_set_wire_format = true; - // extensions 4 to max; - // } - // Note that the message cannot have any defined fields; MessageSets only - // have extensions. - // - // All extensions of your type must be singular messages; e.g. they cannot - // be int32s, enums, or repeated messages. - // - // Because this is an option, the above two restrictions are not enforced by - // the protocol compiler. - optional bool message_set_wire_format = 1 [default = false]; - - // Disables the generation of the standard "descriptor()" accessor, which can - // conflict with a field of the same name. This is meant to make migration - // from proto1 easier; new code should avoid fields named "descriptor". - optional bool no_standard_descriptor_accessor = 2 [default = false]; - - // Is this message deprecated? - // Depending on the target platform, this can emit Deprecated annotations - // for the message, or it will be completely ignored; in the very least, - // this is a formalization for deprecating messages. - optional bool deprecated = 3 [default = false]; - - reserved 4, 5, 6; - - // Whether the message is an automatically generated map entry type for the - // maps field. - // - // For maps fields: - // map<KeyType, ValueType> map_field = 1; - // The parsed descriptor looks like: - // message MapFieldEntry { - // option map_entry = true; - // optional KeyType key = 1; - // optional ValueType value = 2; - // } - // repeated MapFieldEntry map_field = 1; - // - // Implementations may choose not to generate the map_entry=true message, but - // use a native map in the target language to hold the keys and values. - // The reflection APIs in such implementations still need to work as - // if the field is a repeated message field. - // - // NOTE: Do not set the option in .proto files. Always use the maps syntax - // instead. The option should only be implicitly set by the proto compiler - // parser. - optional bool map_entry = 7; - - reserved 8; // javalite_serializable - reserved 9; // javanano_as_lite - - - // The parser stores options it doesn't recognize here. See above. - repeated UninterpretedOption uninterpreted_option = 999; - - // Clients can define custom options in extensions of this message. See above. - extensions 1000 to max; -} - -message FieldOptions { - // The ctype option instructs the C++ code generator to use a different - // representation of the field than it normally would. See the specific - // options below. This option is not yet implemented in the open source - // release -- sorry, we'll try to include it in a future version! - optional CType ctype = 1 [default = STRING]; - enum CType { - // Default mode. - STRING = 0; - - CORD = 1; - - STRING_PIECE = 2; - } - // The packed option can be enabled for repeated primitive fields to enable - // a more efficient representation on the wire. Rather than repeatedly - // writing the tag and type for each element, the entire array is encoded as - // a single length-delimited blob. In proto3, only explicit setting it to - // false will avoid using packed encoding. - optional bool packed = 2; - - // The jstype option determines the JavaScript type used for values of the - // field. The option is permitted only for 64 bit integral and fixed types - // (int64, uint64, sint64, fixed64, sfixed64). A field with jstype JS_STRING - // is represented as JavaScript string, which avoids loss of precision that - // can happen when a large value is converted to a floating point JavaScript. - // Specifying JS_NUMBER for the jstype causes the generated JavaScript code to - // use the JavaScript "number" type. The behavior of the default option - // JS_NORMAL is implementation dependent. - // - // This option is an enum to permit additional types to be added, e.g. - // goog.math.Integer. - optional JSType jstype = 6 [default = JS_NORMAL]; - enum JSType { - // Use the default type. - JS_NORMAL = 0; - - // Use JavaScript strings. - JS_STRING = 1; - - // Use JavaScript numbers. - JS_NUMBER = 2; - } - - // Should this field be parsed lazily? Lazy applies only to message-type - // fields. It means that when the outer message is initially parsed, the - // inner message's contents will not be parsed but instead stored in encoded - // form. The inner message will actually be parsed when it is first accessed. - // - // This is only a hint. Implementations are free to choose whether to use - // eager or lazy parsing regardless of the value of this option. However, - // setting this option true suggests that the protocol author believes that - // using lazy parsing on this field is worth the additional bookkeeping - // overhead typically needed to implement it. - // - // This option does not affect the public interface of any generated code; - // all method signatures remain the same. Furthermore, thread-safety of the - // interface is not affected by this option; const methods remain safe to - // call from multiple threads concurrently, while non-const methods continue - // to require exclusive access. - // - // - // Note that implementations may choose not to check required fields within - // a lazy sub-message. That is, calling IsInitialized() on the outer message - // may return true even if the inner message has missing required fields. - // This is necessary because otherwise the inner message would have to be - // parsed in order to perform the check, defeating the purpose of lazy - // parsing. An implementation which chooses not to check required fields - // must be consistent about it. That is, for any particular sub-message, the - // implementation must either *always* check its required fields, or *never* - // check its required fields, regardless of whether or not the message has - // been parsed. - // - // As of 2021, lazy does no correctness checks on the byte stream during - // parsing. This may lead to crashes if and when an invalid byte stream is - // finally parsed upon access. - // - // TODO(b/211906113): Enable validation on lazy fields. - optional bool lazy = 5 [default = false]; - - // unverified_lazy does no correctness checks on the byte stream. This should - // only be used where lazy with verification is prohibitive for performance - // reasons. - optional bool unverified_lazy = 15 [default = false]; - - // Is this field deprecated? - // Depending on the target platform, this can emit Deprecated annotations - // for accessors, or it will be completely ignored; in the very least, this - // is a formalization for deprecating fields. - optional bool deprecated = 3 [default = false]; - - // For Google-internal migration only. Do not use. - optional bool weak = 10 [default = false]; - - - // The parser stores options it doesn't recognize here. See above. - repeated UninterpretedOption uninterpreted_option = 999; - - // Clients can define custom options in extensions of this message. See above. - extensions 1000 to max; - - reserved 4; // removed jtype -} - -message OneofOptions { - // The parser stores options it doesn't recognize here. See above. - repeated UninterpretedOption uninterpreted_option = 999; - - // Clients can define custom options in extensions of this message. See above. - extensions 1000 to max; -} - -message EnumOptions { - - // Set this option to true to allow mapping different tag names to the same - // value. - optional bool allow_alias = 2; - - // Is this enum deprecated? - // Depending on the target platform, this can emit Deprecated annotations - // for the enum, or it will be completely ignored; in the very least, this - // is a formalization for deprecating enums. - optional bool deprecated = 3 [default = false]; - - reserved 5; // javanano_as_lite - - // The parser stores options it doesn't recognize here. See above. - repeated UninterpretedOption uninterpreted_option = 999; - - // Clients can define custom options in extensions of this message. See above. - extensions 1000 to max; -} - -message EnumValueOptions { - // Is this enum value deprecated? - // Depending on the target platform, this can emit Deprecated annotations - // for the enum value, or it will be completely ignored; in the very least, - // this is a formalization for deprecating enum values. - optional bool deprecated = 1 [default = false]; - - // The parser stores options it doesn't recognize here. See above. - repeated UninterpretedOption uninterpreted_option = 999; - - // Clients can define custom options in extensions of this message. See above. - extensions 1000 to max; -} - -message ServiceOptions { - - // Note: Field numbers 1 through 32 are reserved for Google's internal RPC - // framework. We apologize for hoarding these numbers to ourselves, but - // we were already using them long before we decided to release Protocol - // Buffers. - - // Is this service deprecated? - // Depending on the target platform, this can emit Deprecated annotations - // for the service, or it will be completely ignored; in the very least, - // this is a formalization for deprecating services. - optional bool deprecated = 33 [default = false]; - - // The parser stores options it doesn't recognize here. See above. - repeated UninterpretedOption uninterpreted_option = 999; - - // Clients can define custom options in extensions of this message. See above. - extensions 1000 to max; -} - -message MethodOptions { - - // Note: Field numbers 1 through 32 are reserved for Google's internal RPC - // framework. We apologize for hoarding these numbers to ourselves, but - // we were already using them long before we decided to release Protocol - // Buffers. - - // Is this method deprecated? - // Depending on the target platform, this can emit Deprecated annotations - // for the method, or it will be completely ignored; in the very least, - // this is a formalization for deprecating methods. - optional bool deprecated = 33 [default = false]; - - // Is this method side-effect-free (or safe in HTTP parlance), or idempotent, - // or neither? HTTP based RPC implementation may choose GET verb for safe - // methods, and PUT verb for idempotent methods instead of the default POST. - enum IdempotencyLevel { - IDEMPOTENCY_UNKNOWN = 0; - NO_SIDE_EFFECTS = 1; // implies idempotent - IDEMPOTENT = 2; // idempotent, but may have side effects - } - optional IdempotencyLevel idempotency_level = 34 - [default = IDEMPOTENCY_UNKNOWN]; - - // The parser stores options it doesn't recognize here. See above. - repeated UninterpretedOption uninterpreted_option = 999; - - // Clients can define custom options in extensions of this message. See above. - extensions 1000 to max; -} - - -// A message representing a option the parser does not recognize. This only -// appears in options protos created by the compiler::Parser class. -// DescriptorPool resolves these when building Descriptor objects. Therefore, -// options protos in descriptor objects (e.g. returned by Descriptor::options(), -// or produced by Descriptor::CopyTo()) will never have UninterpretedOptions -// in them. -message UninterpretedOption { - // The name of the uninterpreted option. Each string represents a segment in - // a dot-separated name. is_extension is true iff a segment represents an - // extension (denoted with parentheses in options specs in .proto files). - // E.g.,{ ["foo", false], ["bar.baz", true], ["moo", false] } represents - // "foo.(bar.baz).moo". - message NamePart { - required string name_part = 1; - required bool is_extension = 2; - } - repeated NamePart name = 2; - - // The value of the uninterpreted option, in whatever type the tokenizer - // identified it as during parsing. Exactly one of these should be set. - optional string identifier_value = 3; - optional uint64 positive_int_value = 4; - optional int64 negative_int_value = 5; - optional double double_value = 6; - optional bytes string_value = 7; - optional string aggregate_value = 8; -} - -// =================================================================== -// Optional source code info - -// Encapsulates information about the original source file from which a -// FileDescriptorProto was generated. -message SourceCodeInfo { - // A Location identifies a piece of source code in a .proto file which - // corresponds to a particular definition. This information is intended - // to be useful to IDEs, code indexers, documentation generators, and similar - // tools. - // - // For example, say we have a file like: - // message Foo { - // optional string foo = 1; - // } - // Let's look at just the field definition: - // optional string foo = 1; - // ^ ^^ ^^ ^ ^^^ - // a bc de f ghi - // We have the following locations: - // span path represents - // [a,i) [ 4, 0, 2, 0 ] The whole field definition. - // [a,b) [ 4, 0, 2, 0, 4 ] The label (optional). - // [c,d) [ 4, 0, 2, 0, 5 ] The type (string). - // [e,f) [ 4, 0, 2, 0, 1 ] The name (foo). - // [g,h) [ 4, 0, 2, 0, 3 ] The number (1). - // - // Notes: - // - A location may refer to a repeated field itself (i.e. not to any - // particular index within it). This is used whenever a set of elements are - // logically enclosed in a single code segment. For example, an entire - // extend block (possibly containing multiple extension definitions) will - // have an outer location whose path refers to the "extensions" repeated - // field without an index. - // - Multiple locations may have the same path. This happens when a single - // logical declaration is spread out across multiple places. The most - // obvious example is the "extend" block again -- there may be multiple - // extend blocks in the same scope, each of which will have the same path. - // - A location's span is not always a subset of its parent's span. For - // example, the "extendee" of an extension declaration appears at the - // beginning of the "extend" block and is shared by all extensions within - // the block. - // - Just because a location's span is a subset of some other location's span - // does not mean that it is a descendant. For example, a "group" defines - // both a type and a field in a single declaration. Thus, the locations - // corresponding to the type and field and their components will overlap. - // - Code which tries to interpret locations should probably be designed to - // ignore those that it doesn't understand, as more types of locations could - // be recorded in the future. - repeated Location location = 1; - message Location { - // Identifies which part of the FileDescriptorProto was defined at this - // location. - // - // Each element is a field number or an index. They form a path from - // the root FileDescriptorProto to the place where the definition occurs. - // For example, this path: - // [ 4, 3, 2, 7, 1 ] - // refers to: - // file.message_type(3) // 4, 3 - // .field(7) // 2, 7 - // .name() // 1 - // This is because FileDescriptorProto.message_type has field number 4: - // repeated DescriptorProto message_type = 4; - // and DescriptorProto.field has field number 2: - // repeated FieldDescriptorProto field = 2; - // and FieldDescriptorProto.name has field number 1: - // optional string name = 1; - // - // Thus, the above path gives the location of a field name. If we removed - // the last element: - // [ 4, 3, 2, 7 ] - // this path refers to the whole field declaration (from the beginning - // of the label to the terminating semicolon). - repeated int32 path = 1 [packed = true]; - - // Always has exactly three or four elements: start line, start column, - // end line (optional, otherwise assumed same as start line), end column. - // These are packed into a single field for efficiency. Note that line - // and column numbers are zero-based -- typically you will want to add - // 1 to each before displaying to a user. - repeated int32 span = 2 [packed = true]; - - // If this SourceCodeInfo represents a complete declaration, these are any - // comments appearing before and after the declaration which appear to be - // attached to the declaration. - // - // A series of line comments appearing on consecutive lines, with no other - // tokens appearing on those lines, will be treated as a single comment. - // - // leading_detached_comments will keep paragraphs of comments that appear - // before (but not connected to) the current element. Each paragraph, - // separated by empty lines, will be one comment element in the repeated - // field. - // - // Only the comment content is provided; comment markers (e.g. //) are - // stripped out. For block comments, leading whitespace and an asterisk - // will be stripped from the beginning of each line other than the first. - // Newlines are included in the output. - // - // Examples: - // - // optional int32 foo = 1; // Comment attached to foo. - // // Comment attached to bar. - // optional int32 bar = 2; - // - // optional string baz = 3; - // // Comment attached to baz. - // // Another line attached to baz. - // - // // Comment attached to moo. - // // - // // Another line attached to moo. - // optional double moo = 4; - // - // // Detached comment for corge. This is not leading or trailing comments - // // to moo or corge because there are blank lines separating it from - // // both. - // - // // Detached comment for corge paragraph 2. - // - // optional string corge = 5; - // /* Block comment attached - // * to corge. Leading asterisks - // * will be removed. */ - // /* Block comment attached to - // * grault. */ - // optional int32 grault = 6; - // - // // ignored detached comments. - optional string leading_comments = 3; - optional string trailing_comments = 4; - repeated string leading_detached_comments = 6; - } -} - -// Describes the relationship between generated code and its original source -// file. A GeneratedCodeInfo message is associated with only one generated -// source file, but may contain references to different source .proto files. -message GeneratedCodeInfo { - // An Annotation connects some span of text in generated code to an element - // of its generating .proto file. - repeated Annotation annotation = 1; - message Annotation { - // Identifies the element in the original source .proto file. This field - // is formatted the same as SourceCodeInfo.Location.path. - repeated int32 path = 1 [packed = true]; - - // Identifies the filesystem path to the original source .proto. - optional string source_file = 2; - - // Identifies the starting offset in bytes in the generated code - // that relates to the identified object. - optional int32 begin = 3; - - // Identifies the ending offset in bytes in the generated code that - // relates to the identified offset. The end offset should be one past - // the last relevant byte (so the length of the text = end - begin). - optional int32 end = 4; - } -} diff --git a/include/google/protobuf/descriptor_database.h b/include/google/protobuf/descriptor_database.h deleted file mode 100644 index f4f06bbfa6..0000000000 --- a/include/google/protobuf/descriptor_database.h +++ /dev/null @@ -1,398 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// 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 -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -// Author: kenton@google.com (Kenton Varda) -// Based on original Protocol Buffers design by -// Sanjay Ghemawat, Jeff Dean, and others. -// -// Interface for manipulating databases of descriptors. - -#ifndef GOOGLE_PROTOBUF_DESCRIPTOR_DATABASE_H__ -#define GOOGLE_PROTOBUF_DESCRIPTOR_DATABASE_H__ - - -#include <map> -#include <string> -#include <utility> -#include <vector> - -#include <google/protobuf/stubs/common.h> -#include <google/protobuf/descriptor.h> - -// Must be included last. -#include <google/protobuf/port_def.inc> - -#ifdef SWIG -#error "You cannot SWIG proto headers" -#endif - -namespace google { -namespace protobuf { - -// Defined in this file. -class DescriptorDatabase; -class SimpleDescriptorDatabase; -class EncodedDescriptorDatabase; -class DescriptorPoolDatabase; -class MergedDescriptorDatabase; - -// Abstract interface for a database of descriptors. -// -// This is useful if you want to create a DescriptorPool which loads -// descriptors on-demand from some sort of large database. If the database -// is large, it may be inefficient to enumerate every .proto file inside it -// calling DescriptorPool::BuildFile() for each one. Instead, a DescriptorPool -// can be created which wraps a DescriptorDatabase and only builds particular -// descriptors when they are needed. -class PROTOBUF_EXPORT DescriptorDatabase { - public: - inline DescriptorDatabase() {} - virtual ~DescriptorDatabase(); - - // Find a file by file name. Fills in in *output and returns true if found. - // Otherwise, returns false, leaving the contents of *output undefined. - virtual bool FindFileByName(const std::string& filename, - FileDescriptorProto* output) = 0; - - // Find the file that declares the given fully-qualified symbol name. - // If found, fills in *output and returns true, otherwise returns false - // and leaves *output undefined. - virtual bool FindFileContainingSymbol(const std::string& symbol_name, - FileDescriptorProto* output) = 0; - - // Find the file which defines an extension extending the given message type - // with the given field number. If found, fills in *output and returns true, - // otherwise returns false and leaves *output undefined. containing_type - // must be a fully-qualified type name. - virtual bool FindFileContainingExtension(const std::string& containing_type, - int field_number, - FileDescriptorProto* output) = 0; - - // Finds the tag numbers used by all known extensions of - // extendee_type, and appends them to output in an undefined - // order. This method is best-effort: it's not guaranteed that the - // database will find all extensions, and it's not guaranteed that - // FindFileContainingExtension will return true on all of the found - // numbers. Returns true if the search was successful, otherwise - // returns false and leaves output unchanged. - // - // This method has a default implementation that always returns - // false. - virtual bool FindAllExtensionNumbers(const std::string& /* extendee_type */, - std::vector<int>* /* output */) { - return false; - } - - - // Finds the file names and appends them to the output in an - // undefined order. This method is best-effort: it's not guaranteed that the - // database will find all files. Returns true if the database supports - // searching all file names, otherwise returns false and leaves output - // unchanged. - // - // This method has a default implementation that always returns - // false. - virtual bool FindAllFileNames(std::vector<std::string>* /*output*/) { - return false; - } - - // Finds the package names and appends them to the output in an - // undefined order. This method is best-effort: it's not guaranteed that the - // database will find all packages. Returns true if the database supports - // searching all package names, otherwise returns false and leaves output - // unchanged. - bool FindAllPackageNames(std::vector<std::string>* output); - - // Finds the message names and appends them to the output in an - // undefined order. This method is best-effort: it's not guaranteed that the - // database will find all messages. Returns true if the database supports - // searching all message names, otherwise returns false and leaves output - // unchanged. - bool FindAllMessageNames(std::vector<std::string>* output); - - private: - GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(DescriptorDatabase); -}; - -// A DescriptorDatabase into which you can insert files manually. -// -// FindFileContainingSymbol() is fully-implemented. When you add a file, its -// symbols will be indexed for this purpose. Note that the implementation -// may return false positives, but only if it isn't possible for the symbol -// to be defined in any other file. In particular, if a file defines a symbol -// "Foo", then searching for "Foo.[anything]" will match that file. This way, -// the database does not need to aggressively index all children of a symbol. -// -// FindFileContainingExtension() is mostly-implemented. It works if and only -// if the original FieldDescriptorProto defining the extension has a -// fully-qualified type name in its "extendee" field (i.e. starts with a '.'). -// If the extendee is a relative name, SimpleDescriptorDatabase will not -// attempt to resolve the type, so it will not know what type the extension is -// extending. Therefore, calling FindFileContainingExtension() with the -// extension's containing type will never actually find that extension. Note -// that this is an unlikely problem, as all FileDescriptorProtos created by the -// protocol compiler (as well as ones created by calling -// FileDescriptor::CopyTo()) will always use fully-qualified names for all -// types. You only need to worry if you are constructing FileDescriptorProtos -// yourself, or are calling compiler::Parser directly. -class PROTOBUF_EXPORT SimpleDescriptorDatabase : public DescriptorDatabase { - public: - SimpleDescriptorDatabase(); - ~SimpleDescriptorDatabase() override; - - // Adds the FileDescriptorProto to the database, making a copy. The object - // can be deleted after Add() returns. Returns false if the file conflicted - // with a file already in the database, in which case an error will have - // been written to GOOGLE_LOG(ERROR). - bool Add(const FileDescriptorProto& file); - - // Adds the FileDescriptorProto to the database and takes ownership of it. - bool AddAndOwn(const FileDescriptorProto* file); - - // implements DescriptorDatabase ----------------------------------- - bool FindFileByName(const std::string& filename, - FileDescriptorProto* output) override; - bool FindFileContainingSymbol(const std::string& symbol_name, - FileDescriptorProto* output) override; - bool FindFileContainingExtension(const std::string& containing_type, - int field_number, - FileDescriptorProto* output) override; - bool FindAllExtensionNumbers(const std::string& extendee_type, - std::vector<int>* output) override; - - bool FindAllFileNames(std::vector<std::string>* output) override; - - private: - // An index mapping file names, symbol names, and extension numbers to - // some sort of values. - template <typename Value> - class DescriptorIndex { - public: - // Helpers to recursively add particular descriptors and all their contents - // to the index. - bool AddFile(const FileDescriptorProto& file, Value value); - bool AddSymbol(const std::string& name, Value value); - bool AddNestedExtensions(const std::string& filename, - const DescriptorProto& message_type, Value value); - bool AddExtension(const std::string& filename, - const FieldDescriptorProto& field, Value value); - - Value FindFile(const std::string& filename); - Value FindSymbol(const std::string& name); - Value FindExtension(const std::string& containing_type, int field_number); - bool FindAllExtensionNumbers(const std::string& containing_type, - std::vector<int>* output); - void FindAllFileNames(std::vector<std::string>* output); - - private: - std::map<std::string, Value> by_name_; - std::map<std::string, Value> by_symbol_; - std::map<std::pair<std::string, int>, Value> by_extension_; - - // Invariant: The by_symbol_ map does not contain any symbols which are - // prefixes of other symbols in the map. For example, "foo.bar" is a - // prefix of "foo.bar.baz" (but is not a prefix of "foo.barbaz"). - // - // This invariant is important because it means that given a symbol name, - // we can find a key in the map which is a prefix of the symbol in O(lg n) - // time, and we know that there is at most one such key. - // - // The prefix lookup algorithm works like so: - // 1) Find the last key in the map which is less than or equal to the - // search key. - // 2) If the found key is a prefix of the search key, then return it. - // Otherwise, there is no match. - // - // I am sure this algorithm has been described elsewhere, but since I - // wasn't able to find it quickly I will instead prove that it works - // myself. The key to the algorithm is that if a match exists, step (1) - // will find it. Proof: - // 1) Define the "search key" to be the key we are looking for, the "found - // key" to be the key found in step (1), and the "match key" to be the - // key which actually matches the search key (i.e. the key we're trying - // to find). - // 2) The found key must be less than or equal to the search key by - // definition. - // 3) The match key must also be less than or equal to the search key - // (because it is a prefix). - // 4) The match key cannot be greater than the found key, because if it - // were, then step (1) of the algorithm would have returned the match - // key instead (since it finds the *greatest* key which is less than or - // equal to the search key). - // 5) Therefore, the found key must be between the match key and the search - // key, inclusive. - // 6) Since the search key must be a sub-symbol of the match key, if it is - // not equal to the match key, then search_key[match_key.size()] must - // be '.'. - // 7) Since '.' sorts before any other character that is valid in a symbol - // name, then if the found key is not equal to the match key, then - // found_key[match_key.size()] must also be '.', because any other value - // would make it sort after the search key. - // 8) Therefore, if the found key is not equal to the match key, then the - // found key must be a sub-symbol of the match key. However, this would - // contradict our map invariant which says that no symbol in the map is - // a sub-symbol of any other. - // 9) Therefore, the found key must match the match key. - // - // The above proof assumes the match key exists. In the case that the - // match key does not exist, then step (1) will return some other symbol. - // That symbol cannot be a super-symbol of the search key since if it were, - // then it would be a match, and we're assuming the match key doesn't exist. - // Therefore, step 2 will correctly return no match. - }; - - DescriptorIndex<const FileDescriptorProto*> index_; - std::vector<std::unique_ptr<const FileDescriptorProto>> files_to_delete_; - - // If file is non-nullptr, copy it into *output and return true, otherwise - // return false. - bool MaybeCopy(const FileDescriptorProto* file, FileDescriptorProto* output); - - GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(SimpleDescriptorDatabase); -}; - -// Very similar to SimpleDescriptorDatabase, but stores all the descriptors -// as raw bytes and generally tries to use as little memory as possible. -// -// The same caveats regarding FindFileContainingExtension() apply as with -// SimpleDescriptorDatabase. -class PROTOBUF_EXPORT EncodedDescriptorDatabase : public DescriptorDatabase { - public: - EncodedDescriptorDatabase(); - ~EncodedDescriptorDatabase() override; - - // Adds the FileDescriptorProto to the database. The descriptor is provided - // in encoded form. The database does not make a copy of the bytes, nor - // does it take ownership; it's up to the caller to make sure the bytes - // remain valid for the life of the database. Returns false and logs an error - // if the bytes are not a valid FileDescriptorProto or if the file conflicted - // with a file already in the database. - bool Add(const void* encoded_file_descriptor, int size); - - // Like Add(), but makes a copy of the data, so that the caller does not - // need to keep it around. - bool AddCopy(const void* encoded_file_descriptor, int size); - - // Like FindFileContainingSymbol but returns only the name of the file. - bool FindNameOfFileContainingSymbol(const std::string& symbol_name, - std::string* output); - - // implements DescriptorDatabase ----------------------------------- - bool FindFileByName(const std::string& filename, - FileDescriptorProto* output) override; - bool FindFileContainingSymbol(const std::string& symbol_name, - FileDescriptorProto* output) override; - bool FindFileContainingExtension(const std::string& containing_type, - int field_number, - FileDescriptorProto* output) override; - bool FindAllExtensionNumbers(const std::string& extendee_type, - std::vector<int>* output) override; - bool FindAllFileNames(std::vector<std::string>* output) override; - - private: - class DescriptorIndex; - // Keep DescriptorIndex by pointer to hide the implementation to keep a - // cleaner header. - std::unique_ptr<DescriptorIndex> index_; - std::vector<void*> files_to_delete_; - - // If encoded_file.first is non-nullptr, parse the data into *output and - // return true, otherwise return false. - bool MaybeParse(std::pair<const void*, int> encoded_file, - FileDescriptorProto* output); - - GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(EncodedDescriptorDatabase); -}; - -// A DescriptorDatabase that fetches files from a given pool. -class PROTOBUF_EXPORT DescriptorPoolDatabase : public DescriptorDatabase { - public: - explicit DescriptorPoolDatabase(const DescriptorPool& pool); - ~DescriptorPoolDatabase() override; - - // implements DescriptorDatabase ----------------------------------- - bool FindFileByName(const std::string& filename, - FileDescriptorProto* output) override; - bool FindFileContainingSymbol(const std::string& symbol_name, - FileDescriptorProto* output) override; - bool FindFileContainingExtension(const std::string& containing_type, - int field_number, - FileDescriptorProto* output) override; - bool FindAllExtensionNumbers(const std::string& extendee_type, - std::vector<int>* output) override; - - private: - const DescriptorPool& pool_; - GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(DescriptorPoolDatabase); -}; - -// A DescriptorDatabase that wraps two or more others. It first searches the -// first database and, if that fails, tries the second, and so on. -class PROTOBUF_EXPORT MergedDescriptorDatabase : public DescriptorDatabase { - public: - // Merge just two databases. The sources remain property of the caller. - MergedDescriptorDatabase(DescriptorDatabase* source1, - DescriptorDatabase* source2); - // Merge more than two databases. The sources remain property of the caller. - // The vector may be deleted after the constructor returns but the - // DescriptorDatabases need to stick around. - explicit MergedDescriptorDatabase( - const std::vector<DescriptorDatabase*>& sources); - ~MergedDescriptorDatabase() override; - - // implements DescriptorDatabase ----------------------------------- - bool FindFileByName(const std::string& filename, - FileDescriptorProto* output) override; - bool FindFileContainingSymbol(const std::string& symbol_name, - FileDescriptorProto* output) override; - bool FindFileContainingExtension(const std::string& containing_type, - int field_number, - FileDescriptorProto* output) override; - // Merges the results of calling all databases. Returns true iff any - // of the databases returned true. - bool FindAllExtensionNumbers(const std::string& extendee_type, - std::vector<int>* output) override; - - - // This function is best-effort. Returns true if at least one underlying - // DescriptorDatabase returns true. - bool FindAllFileNames(std::vector<std::string>* output) override; - - private: - std::vector<DescriptorDatabase*> sources_; - GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(MergedDescriptorDatabase); -}; - -} // namespace protobuf -} // namespace google - -#include <google/protobuf/port_undef.inc> - -#endif // GOOGLE_PROTOBUF_DESCRIPTOR_DATABASE_H__ diff --git a/include/google/protobuf/duration.pb.h b/include/google/protobuf/duration.pb.h deleted file mode 100644 index 1e4a3e18f8..0000000000 --- a/include/google/protobuf/duration.pb.h +++ /dev/null @@ -1,278 +0,0 @@ -// Generated by the protocol buffer compiler. DO NOT EDIT! -// source: google/protobuf/duration.proto - -#ifndef GOOGLE_PROTOBUF_INCLUDED_google_2fprotobuf_2fduration_2eproto -#define GOOGLE_PROTOBUF_INCLUDED_google_2fprotobuf_2fduration_2eproto - -#include <limits> -#include <string> - -#include <google/protobuf/port_def.inc> -#if PROTOBUF_VERSION < 3021000 -#error This file was generated by a newer version of protoc which is -#error incompatible with your Protocol Buffer headers. Please update -#error your headers. -#endif -#if 3021004 < PROTOBUF_MIN_PROTOC_VERSION -#error This file was generated by an older version of protoc which is -#error incompatible with your Protocol Buffer headers. Please -#error regenerate this file with a newer version of protoc. -#endif - -#include <google/protobuf/port_undef.inc> -#include <google/protobuf/io/coded_stream.h> -#include <google/protobuf/arena.h> -#include <google/protobuf/arenastring.h> -#include <google/protobuf/generated_message_util.h> -#include <google/protobuf/metadata_lite.h> -#include <google/protobuf/generated_message_reflection.h> -#include <google/protobuf/message.h> -#include <google/protobuf/repeated_field.h> // IWYU pragma: export -#include <google/protobuf/extension_set.h> // IWYU pragma: export -#include <google/protobuf/unknown_field_set.h> -// @@protoc_insertion_point(includes) -#include <google/protobuf/port_def.inc> -#define PROTOBUF_INTERNAL_EXPORT_google_2fprotobuf_2fduration_2eproto PROTOBUF_EXPORT -PROTOBUF_NAMESPACE_OPEN -namespace internal { -class AnyMetadata; -} // namespace internal -PROTOBUF_NAMESPACE_CLOSE - -// Internal implementation detail -- do not use these members. -struct PROTOBUF_EXPORT TableStruct_google_2fprotobuf_2fduration_2eproto { - static const uint32_t offsets[]; -}; -PROTOBUF_EXPORT extern const ::PROTOBUF_NAMESPACE_ID::internal::DescriptorTable descriptor_table_google_2fprotobuf_2fduration_2eproto; -PROTOBUF_NAMESPACE_OPEN -class Duration; -struct DurationDefaultTypeInternal; -PROTOBUF_EXPORT extern DurationDefaultTypeInternal _Duration_default_instance_; -PROTOBUF_NAMESPACE_CLOSE -PROTOBUF_NAMESPACE_OPEN -template<> PROTOBUF_EXPORT ::PROTOBUF_NAMESPACE_ID::Duration* Arena::CreateMaybeMessage<::PROTOBUF_NAMESPACE_ID::Duration>(Arena*); -PROTOBUF_NAMESPACE_CLOSE -PROTOBUF_NAMESPACE_OPEN - -// =================================================================== - -class PROTOBUF_EXPORT Duration final : - public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:google.protobuf.Duration) */ { - public: - inline Duration() : Duration(nullptr) {} - ~Duration() override; - explicit PROTOBUF_CONSTEXPR Duration(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized); - - Duration(const Duration& from); - Duration(Duration&& from) noexcept - : Duration() { - *this = ::std::move(from); - } - - inline Duration& operator=(const Duration& from) { - CopyFrom(from); - return *this; - } - inline Duration& operator=(Duration&& from) noexcept { - if (this == &from) return *this; - if (GetOwningArena() == from.GetOwningArena() - #ifdef PROTOBUF_FORCE_COPY_IN_MOVE - && GetOwningArena() != nullptr - #endif // !PROTOBUF_FORCE_COPY_IN_MOVE - ) { - InternalSwap(&from); - } else { - CopyFrom(from); - } - return *this; - } - - static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() { - return GetDescriptor(); - } - static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() { - return default_instance().GetMetadata().descriptor; - } - static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() { - return default_instance().GetMetadata().reflection; - } - static const Duration& default_instance() { - return *internal_default_instance(); - } - static inline const Duration* internal_default_instance() { - return reinterpret_cast<const Duration*>( - &_Duration_default_instance_); - } - static constexpr int kIndexInFileMessages = - 0; - - friend void swap(Duration& a, Duration& b) { - a.Swap(&b); - } - inline void Swap(Duration* other) { - if (other == this) return; - #ifdef PROTOBUF_FORCE_COPY_IN_SWAP - if (GetOwningArena() != nullptr && - GetOwningArena() == other->GetOwningArena()) { - #else // PROTOBUF_FORCE_COPY_IN_SWAP - if (GetOwningArena() == other->GetOwningArena()) { - #endif // !PROTOBUF_FORCE_COPY_IN_SWAP - InternalSwap(other); - } else { - ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other); - } - } - void UnsafeArenaSwap(Duration* other) { - if (other == this) return; - GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena()); - InternalSwap(other); - } - - // implements Message ---------------------------------------------- - - Duration* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final { - return CreateMaybeMessage<Duration>(arena); - } - using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom; - void CopyFrom(const Duration& from); - using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom; - void MergeFrom( const Duration& from) { - Duration::MergeImpl(*this, from); - } - private: - static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message& to_msg, const ::PROTOBUF_NAMESPACE_ID::Message& from_msg); - public: - PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final; - bool IsInitialized() const final; - - size_t ByteSizeLong() const final; - const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final; - uint8_t* _InternalSerialize( - uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final; - int GetCachedSize() const final { return _impl_._cached_size_.Get(); } - - private: - void SharedCtor(::PROTOBUF_NAMESPACE_ID::Arena* arena, bool is_message_owned); - void SharedDtor(); - void SetCachedSize(int size) const final; - void InternalSwap(Duration* other); - - private: - friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata; - static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() { - return "google.protobuf.Duration"; - } - protected: - explicit Duration(::PROTOBUF_NAMESPACE_ID::Arena* arena, - bool is_message_owned = false); - public: - - static const ClassData _class_data_; - const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final; - - ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final; - - // nested types ---------------------------------------------------- - - // accessors ------------------------------------------------------- - - enum : int { - kSecondsFieldNumber = 1, - kNanosFieldNumber = 2, - }; - // int64 seconds = 1; - void clear_seconds(); - int64_t seconds() const; - void set_seconds(int64_t value); - private: - int64_t _internal_seconds() const; - void _internal_set_seconds(int64_t value); - public: - - // int32 nanos = 2; - void clear_nanos(); - int32_t nanos() const; - void set_nanos(int32_t value); - private: - int32_t _internal_nanos() const; - void _internal_set_nanos(int32_t value); - public: - - // @@protoc_insertion_point(class_scope:google.protobuf.Duration) - private: - class _Internal; - - template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper; - typedef void InternalArenaConstructable_; - typedef void DestructorSkippable_; - struct Impl_ { - int64_t seconds_; - int32_t nanos_; - mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_; - }; - union { Impl_ _impl_; }; - friend struct ::TableStruct_google_2fprotobuf_2fduration_2eproto; -}; -// =================================================================== - - -// =================================================================== - -#ifdef __GNUC__ - #pragma GCC diagnostic push - #pragma GCC diagnostic ignored "-Wstrict-aliasing" -#endif // __GNUC__ -// Duration - -// int64 seconds = 1; -inline void Duration::clear_seconds() { - _impl_.seconds_ = int64_t{0}; -} -inline int64_t Duration::_internal_seconds() const { - return _impl_.seconds_; -} -inline int64_t Duration::seconds() const { - // @@protoc_insertion_point(field_get:google.protobuf.Duration.seconds) - return _internal_seconds(); -} -inline void Duration::_internal_set_seconds(int64_t value) { - - _impl_.seconds_ = value; -} -inline void Duration::set_seconds(int64_t value) { - _internal_set_seconds(value); - // @@protoc_insertion_point(field_set:google.protobuf.Duration.seconds) -} - -// int32 nanos = 2; -inline void Duration::clear_nanos() { - _impl_.nanos_ = 0; -} -inline int32_t Duration::_internal_nanos() const { - return _impl_.nanos_; -} -inline int32_t Duration::nanos() const { - // @@protoc_insertion_point(field_get:google.protobuf.Duration.nanos) - return _internal_nanos(); -} -inline void Duration::_internal_set_nanos(int32_t value) { - - _impl_.nanos_ = value; -} -inline void Duration::set_nanos(int32_t value) { - _internal_set_nanos(value); - // @@protoc_insertion_point(field_set:google.protobuf.Duration.nanos) -} - -#ifdef __GNUC__ - #pragma GCC diagnostic pop -#endif // __GNUC__ - -// @@protoc_insertion_point(namespace_scope) - -PROTOBUF_NAMESPACE_CLOSE - -// @@protoc_insertion_point(global_scope) - -#include <google/protobuf/port_undef.inc> -#endif // GOOGLE_PROTOBUF_INCLUDED_GOOGLE_PROTOBUF_INCLUDED_google_2fprotobuf_2fduration_2eproto diff --git a/include/google/protobuf/duration.proto b/include/google/protobuf/duration.proto deleted file mode 100644 index 81c3e369fd..0000000000 --- a/include/google/protobuf/duration.proto +++ /dev/null @@ -1,116 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// 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 -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -syntax = "proto3"; - -package google.protobuf; - -option csharp_namespace = "Google.Protobuf.WellKnownTypes"; -option cc_enable_arenas = true; -option go_package = "google.golang.org/protobuf/types/known/durationpb"; -option java_package = "com.google.protobuf"; -option java_outer_classname = "DurationProto"; -option java_multiple_files = true; -option objc_class_prefix = "GPB"; - -// A Duration represents a signed, fixed-length span of time represented -// as a count of seconds and fractions of seconds at nanosecond -// resolution. It is independent of any calendar and concepts like "day" -// or "month". It is related to Timestamp in that the difference between -// two Timestamp values is a Duration and it can be added or subtracted -// from a Timestamp. Range is approximately +-10,000 years. -// -// # Examples -// -// Example 1: Compute Duration from two Timestamps in pseudo code. -// -// Timestamp start = ...; -// Timestamp end = ...; -// Duration duration = ...; -// -// duration.seconds = end.seconds - start.seconds; -// duration.nanos = end.nanos - start.nanos; -// -// if (duration.seconds < 0 && duration.nanos > 0) { -// duration.seconds += 1; -// duration.nanos -= 1000000000; -// } else if (duration.seconds > 0 && duration.nanos < 0) { -// duration.seconds -= 1; -// duration.nanos += 1000000000; -// } -// -// Example 2: Compute Timestamp from Timestamp + Duration in pseudo code. -// -// Timestamp start = ...; -// Duration duration = ...; -// Timestamp end = ...; -// -// end.seconds = start.seconds + duration.seconds; -// end.nanos = start.nanos + duration.nanos; -// -// if (end.nanos < 0) { -// end.seconds -= 1; -// end.nanos += 1000000000; -// } else if (end.nanos >= 1000000000) { -// end.seconds += 1; -// end.nanos -= 1000000000; -// } -// -// Example 3: Compute Duration from datetime.timedelta in Python. -// -// td = datetime.timedelta(days=3, minutes=10) -// duration = Duration() -// duration.FromTimedelta(td) -// -// # JSON Mapping -// -// In JSON format, the Duration type is encoded as a string rather than an -// object, where the string ends in the suffix "s" (indicating seconds) and -// is preceded by the number of seconds, with nanoseconds expressed as -// fractional seconds. For example, 3 seconds with 0 nanoseconds should be -// encoded in JSON format as "3s", while 3 seconds and 1 nanosecond should -// be expressed in JSON format as "3.000000001s", and 3 seconds and 1 -// microsecond should be expressed in JSON format as "3.000001s". -// -// -message Duration { - // Signed seconds of the span of time. Must be from -315,576,000,000 - // to +315,576,000,000 inclusive. Note: these bounds are computed from: - // 60 sec/min * 60 min/hr * 24 hr/day * 365.25 days/year * 10000 years - int64 seconds = 1; - - // Signed fractions of a second at nanosecond resolution of the span - // of time. Durations less than one second are represented with a 0 - // `seconds` field and a positive or negative `nanos` field. For durations - // of one second or more, a non-zero value for the `nanos` field must be - // of the same sign as the `seconds` field. Must be from -999,999,999 - // to +999,999,999 inclusive. - int32 nanos = 2; -} diff --git a/include/google/protobuf/dynamic_message.h b/include/google/protobuf/dynamic_message.h deleted file mode 100644 index 6fa64259ee..0000000000 --- a/include/google/protobuf/dynamic_message.h +++ /dev/null @@ -1,227 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// 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 -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -// Author: kenton@google.com (Kenton Varda) -// Based on original Protocol Buffers design by -// Sanjay Ghemawat, Jeff Dean, and others. -// -// Defines an implementation of Message which can emulate types which are not -// known at compile-time. - -#ifndef GOOGLE_PROTOBUF_DYNAMIC_MESSAGE_H__ -#define GOOGLE_PROTOBUF_DYNAMIC_MESSAGE_H__ - - -#include <algorithm> -#include <memory> -#include <unordered_map> -#include <vector> - -#include <google/protobuf/stubs/common.h> -#include <google/protobuf/stubs/mutex.h> -#include <google/protobuf/message.h> -#include <google/protobuf/reflection.h> -#include <google/protobuf/repeated_field.h> - -#ifdef SWIG -#error "You cannot SWIG proto headers" -#endif - -// Must be included last. -#include <google/protobuf/port_def.inc> - -namespace google { -namespace protobuf { - -// Defined in other files. -class Descriptor; // descriptor.h -class DescriptorPool; // descriptor.h - -// Constructs implementations of Message which can emulate types which are not -// known at compile-time. -// -// Sometimes you want to be able to manipulate protocol types that you don't -// know about at compile time. It would be nice to be able to construct -// a Message object which implements the message type given by any arbitrary -// Descriptor. DynamicMessage provides this. -// -// As it turns out, a DynamicMessage needs to construct extra -// information about its type in order to operate. Most of this information -// can be shared between all DynamicMessages of the same type. But, caching -// this information in some sort of global map would be a bad idea, since -// the cached information for a particular descriptor could outlive the -// descriptor itself. To avoid this problem, DynamicMessageFactory -// encapsulates this "cache". All DynamicMessages of the same type created -// from the same factory will share the same support data. Any Descriptors -// used with a particular factory must outlive the factory. -class PROTOBUF_EXPORT DynamicMessageFactory : public MessageFactory { - public: - // Construct a DynamicMessageFactory that will search for extensions in - // the DescriptorPool in which the extendee is defined. - DynamicMessageFactory(); - - // Construct a DynamicMessageFactory that will search for extensions in - // the given DescriptorPool. - // - // DEPRECATED: Use CodedInputStream::SetExtensionRegistry() to tell the - // parser to look for extensions in an alternate pool. However, note that - // this is almost never what you want to do. Almost all users should use - // the zero-arg constructor. - DynamicMessageFactory(const DescriptorPool* pool); - - ~DynamicMessageFactory() override; - - // Call this to tell the DynamicMessageFactory that if it is given a - // Descriptor d for which: - // d->file()->pool() == DescriptorPool::generated_pool(), - // then it should delegate to MessageFactory::generated_factory() instead - // of constructing a dynamic implementation of the message. In theory there - // is no down side to doing this, so it may become the default in the future. - void SetDelegateToGeneratedFactory(bool enable) { - delegate_to_generated_factory_ = enable; - } - - // implements MessageFactory --------------------------------------- - - // Given a Descriptor, constructs the default (prototype) Message of that - // type. You can then call that message's New() method to construct a - // mutable message of that type. - // - // Calling this method twice with the same Descriptor returns the same - // object. The returned object remains property of the factory and will - // be destroyed when the factory is destroyed. Also, any objects created - // by calling the prototype's New() method share some data with the - // prototype, so these must be destroyed before the DynamicMessageFactory - // is destroyed. - // - // The given descriptor must outlive the returned message, and hence must - // outlive the DynamicMessageFactory. - // - // The method is thread-safe. - const Message* GetPrototype(const Descriptor* type) override; - - private: - const DescriptorPool* pool_; - bool delegate_to_generated_factory_; - - struct TypeInfo; - std::unordered_map<const Descriptor*, const TypeInfo*> prototypes_; - mutable internal::WrappedMutex prototypes_mutex_; - - friend class DynamicMessage; - const Message* GetPrototypeNoLock(const Descriptor* type); - - GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(DynamicMessageFactory); -}; - -// Helper for computing a sorted list of map entries via reflection. -class PROTOBUF_EXPORT DynamicMapSorter { - public: - static std::vector<const Message*> Sort(const Message& message, int map_size, - const Reflection* reflection, - const FieldDescriptor* field) { - std::vector<const Message*> result; - result.reserve(map_size); - RepeatedFieldRef<Message> map_field = - reflection->GetRepeatedFieldRef<Message>(message, field); - for (auto it = map_field.begin(); it != map_field.end(); ++it) { - result.push_back(&*it); - } - MapEntryMessageComparator comparator(field->message_type()); - std::stable_sort(result.begin(), result.end(), comparator); - // Complain if the keys aren't in ascending order. -#ifndef NDEBUG - for (size_t j = 1; j < static_cast<size_t>(map_size); j++) { - if (!comparator(result[j - 1], result[j])) { - GOOGLE_LOG(ERROR) << (comparator(result[j], result[j - 1]) - ? "internal error in map key sorting" - : "map keys are not unique"); - } - } -#endif - return result; - } - - private: - class PROTOBUF_EXPORT MapEntryMessageComparator { - public: - explicit MapEntryMessageComparator(const Descriptor* descriptor) - : field_(descriptor->field(0)) {} - - bool operator()(const Message* a, const Message* b) { - const Reflection* reflection = a->GetReflection(); - switch (field_->cpp_type()) { - case FieldDescriptor::CPPTYPE_BOOL: { - bool first = reflection->GetBool(*a, field_); - bool second = reflection->GetBool(*b, field_); - return first < second; - } - case FieldDescriptor::CPPTYPE_INT32: { - int32_t first = reflection->GetInt32(*a, field_); - int32_t second = reflection->GetInt32(*b, field_); - return first < second; - } - case FieldDescriptor::CPPTYPE_INT64: { - int64_t first = reflection->GetInt64(*a, field_); - int64_t second = reflection->GetInt64(*b, field_); - return first < second; - } - case FieldDescriptor::CPPTYPE_UINT32: { - uint32_t first = reflection->GetUInt32(*a, field_); - uint32_t second = reflection->GetUInt32(*b, field_); - return first < second; - } - case FieldDescriptor::CPPTYPE_UINT64: { - uint64_t first = reflection->GetUInt64(*a, field_); - uint64_t second = reflection->GetUInt64(*b, field_); - return first < second; - } - case FieldDescriptor::CPPTYPE_STRING: { - std::string first = reflection->GetString(*a, field_); - std::string second = reflection->GetString(*b, field_); - return first < second; - } - default: - GOOGLE_LOG(DFATAL) << "Invalid key for map field."; - return true; - } - } - - private: - const FieldDescriptor* field_; - }; -}; - -} // namespace protobuf -} // namespace google - -#include <google/protobuf/port_undef.inc> - -#endif // GOOGLE_PROTOBUF_DYNAMIC_MESSAGE_H__ diff --git a/include/google/protobuf/empty.pb.h b/include/google/protobuf/empty.pb.h deleted file mode 100644 index c5f528b9e8..0000000000 --- a/include/google/protobuf/empty.pb.h +++ /dev/null @@ -1,198 +0,0 @@ -// Generated by the protocol buffer compiler. DO NOT EDIT! -// source: google/protobuf/empty.proto - -#ifndef GOOGLE_PROTOBUF_INCLUDED_google_2fprotobuf_2fempty_2eproto -#define GOOGLE_PROTOBUF_INCLUDED_google_2fprotobuf_2fempty_2eproto - -#include <limits> -#include <string> - -#include <google/protobuf/port_def.inc> -#if PROTOBUF_VERSION < 3021000 -#error This file was generated by a newer version of protoc which is -#error incompatible with your Protocol Buffer headers. Please update -#error your headers. -#endif -#if 3021004 < PROTOBUF_MIN_PROTOC_VERSION -#error This file was generated by an older version of protoc which is -#error incompatible with your Protocol Buffer headers. Please -#error regenerate this file with a newer version of protoc. -#endif - -#include <google/protobuf/port_undef.inc> -#include <google/protobuf/io/coded_stream.h> -#include <google/protobuf/arena.h> -#include <google/protobuf/arenastring.h> -#include <google/protobuf/generated_message_bases.h> -#include <google/protobuf/generated_message_util.h> -#include <google/protobuf/metadata_lite.h> -#include <google/protobuf/generated_message_reflection.h> -#include <google/protobuf/message.h> -#include <google/protobuf/repeated_field.h> // IWYU pragma: export -#include <google/protobuf/extension_set.h> // IWYU pragma: export -#include <google/protobuf/unknown_field_set.h> -// @@protoc_insertion_point(includes) -#include <google/protobuf/port_def.inc> -#define PROTOBUF_INTERNAL_EXPORT_google_2fprotobuf_2fempty_2eproto PROTOBUF_EXPORT -PROTOBUF_NAMESPACE_OPEN -namespace internal { -class AnyMetadata; -} // namespace internal -PROTOBUF_NAMESPACE_CLOSE - -// Internal implementation detail -- do not use these members. -struct PROTOBUF_EXPORT TableStruct_google_2fprotobuf_2fempty_2eproto { - static const uint32_t offsets[]; -}; -PROTOBUF_EXPORT extern const ::PROTOBUF_NAMESPACE_ID::internal::DescriptorTable descriptor_table_google_2fprotobuf_2fempty_2eproto; -PROTOBUF_NAMESPACE_OPEN -class Empty; -struct EmptyDefaultTypeInternal; -PROTOBUF_EXPORT extern EmptyDefaultTypeInternal _Empty_default_instance_; -PROTOBUF_NAMESPACE_CLOSE -PROTOBUF_NAMESPACE_OPEN -template<> PROTOBUF_EXPORT ::PROTOBUF_NAMESPACE_ID::Empty* Arena::CreateMaybeMessage<::PROTOBUF_NAMESPACE_ID::Empty>(Arena*); -PROTOBUF_NAMESPACE_CLOSE -PROTOBUF_NAMESPACE_OPEN - -// =================================================================== - -class PROTOBUF_EXPORT Empty final : - public ::PROTOBUF_NAMESPACE_ID::internal::ZeroFieldsBase /* @@protoc_insertion_point(class_definition:google.protobuf.Empty) */ { - public: - inline Empty() : Empty(nullptr) {} - explicit PROTOBUF_CONSTEXPR Empty(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized); - - Empty(const Empty& from); - Empty(Empty&& from) noexcept - : Empty() { - *this = ::std::move(from); - } - - inline Empty& operator=(const Empty& from) { - CopyFrom(from); - return *this; - } - inline Empty& operator=(Empty&& from) noexcept { - if (this == &from) return *this; - if (GetOwningArena() == from.GetOwningArena() - #ifdef PROTOBUF_FORCE_COPY_IN_MOVE - && GetOwningArena() != nullptr - #endif // !PROTOBUF_FORCE_COPY_IN_MOVE - ) { - InternalSwap(&from); - } else { - CopyFrom(from); - } - return *this; - } - - static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() { - return GetDescriptor(); - } - static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() { - return default_instance().GetMetadata().descriptor; - } - static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() { - return default_instance().GetMetadata().reflection; - } - static const Empty& default_instance() { - return *internal_default_instance(); - } - static inline const Empty* internal_default_instance() { - return reinterpret_cast<const Empty*>( - &_Empty_default_instance_); - } - static constexpr int kIndexInFileMessages = - 0; - - friend void swap(Empty& a, Empty& b) { - a.Swap(&b); - } - inline void Swap(Empty* other) { - if (other == this) return; - #ifdef PROTOBUF_FORCE_COPY_IN_SWAP - if (GetOwningArena() != nullptr && - GetOwningArena() == other->GetOwningArena()) { - #else // PROTOBUF_FORCE_COPY_IN_SWAP - if (GetOwningArena() == other->GetOwningArena()) { - #endif // !PROTOBUF_FORCE_COPY_IN_SWAP - InternalSwap(other); - } else { - ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other); - } - } - void UnsafeArenaSwap(Empty* other) { - if (other == this) return; - GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena()); - InternalSwap(other); - } - - // implements Message ---------------------------------------------- - - Empty* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final { - return CreateMaybeMessage<Empty>(arena); - } - using ::PROTOBUF_NAMESPACE_ID::internal::ZeroFieldsBase::CopyFrom; - inline void CopyFrom(const Empty& from) { - ::PROTOBUF_NAMESPACE_ID::internal::ZeroFieldsBase::CopyImpl(*this, from); - } - using ::PROTOBUF_NAMESPACE_ID::internal::ZeroFieldsBase::MergeFrom; - void MergeFrom(const Empty& from) { - ::PROTOBUF_NAMESPACE_ID::internal::ZeroFieldsBase::MergeImpl(*this, from); - } - public: - - private: - friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata; - static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() { - return "google.protobuf.Empty"; - } - protected: - explicit Empty(::PROTOBUF_NAMESPACE_ID::Arena* arena, - bool is_message_owned = false); - public: - - static const ClassData _class_data_; - const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final; - - ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final; - - // nested types ---------------------------------------------------- - - // accessors ------------------------------------------------------- - - // @@protoc_insertion_point(class_scope:google.protobuf.Empty) - private: - class _Internal; - - template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper; - typedef void InternalArenaConstructable_; - typedef void DestructorSkippable_; - struct Impl_ { - }; - friend struct ::TableStruct_google_2fprotobuf_2fempty_2eproto; -}; -// =================================================================== - - -// =================================================================== - -#ifdef __GNUC__ - #pragma GCC diagnostic push - #pragma GCC diagnostic ignored "-Wstrict-aliasing" -#endif // __GNUC__ -// Empty - -#ifdef __GNUC__ - #pragma GCC diagnostic pop -#endif // __GNUC__ - -// @@protoc_insertion_point(namespace_scope) - -PROTOBUF_NAMESPACE_CLOSE - -// @@protoc_insertion_point(global_scope) - -#include <google/protobuf/port_undef.inc> -#endif // GOOGLE_PROTOBUF_INCLUDED_GOOGLE_PROTOBUF_INCLUDED_google_2fprotobuf_2fempty_2eproto diff --git a/include/google/protobuf/empty.proto b/include/google/protobuf/empty.proto deleted file mode 100644 index 2227462198..0000000000 --- a/include/google/protobuf/empty.proto +++ /dev/null @@ -1,51 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// 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 -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -syntax = "proto3"; - -package google.protobuf; - -option csharp_namespace = "Google.Protobuf.WellKnownTypes"; -option go_package = "google.golang.org/protobuf/types/known/emptypb"; -option java_package = "com.google.protobuf"; -option java_outer_classname = "EmptyProto"; -option java_multiple_files = true; -option objc_class_prefix = "GPB"; -option cc_enable_arenas = true; - -// A generic empty message that you can re-use to avoid defining duplicated -// empty messages in your APIs. A typical example is to use it as the request -// or the response type of an API method. For instance: -// -// service Foo { -// rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty); -// } -// -message Empty {} diff --git a/include/google/protobuf/endian.h b/include/google/protobuf/endian.h deleted file mode 100644 index e0ee6cdf28..0000000000 --- a/include/google/protobuf/endian.h +++ /dev/null @@ -1,198 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// 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 -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -#ifndef GOOGLE_PROTOBUF_ENDIAN_H__ -#define GOOGLE_PROTOBUF_ENDIAN_H__ - -#if defined(_MSC_VER) -#include <stdlib.h> -#endif - -#include <cstdint> - -// Must be included last. -#include <google/protobuf/port_def.inc> - -namespace google { -namespace protobuf { -namespace internal { - -inline uint64_t BSwap64(uint64_t host_int) { -#if defined(PROTOBUF_BUILTIN_BSWAP64) - return PROTOBUF_BUILTIN_BSWAP64(host_int); -#elif defined(_MSC_VER) - return _byteswap_uint64(host_int); -#else - return (((host_int & uint64_t{0xFF}) << 56) | - ((host_int & uint64_t{0xFF00}) << 40) | - ((host_int & uint64_t{0xFF0000}) << 24) | - ((host_int & uint64_t{0xFF000000}) << 8) | - ((host_int & uint64_t{0xFF00000000}) >> 8) | - ((host_int & uint64_t{0xFF0000000000}) >> 24) | - ((host_int & uint64_t{0xFF000000000000}) >> 40) | - ((host_int & uint64_t{0xFF00000000000000}) >> 56)); -#endif -} - -inline uint32_t BSwap32(uint32_t host_int) { -#if defined(PROTOBUF_BUILTIN_BSWAP32) - return PROTOBUF_BUILTIN_BSWAP32(host_int); -#elif defined(_MSC_VER) - return _byteswap_ulong(host_int); -#else - return (((host_int & uint32_t{0xFF}) << 24) | - ((host_int & uint32_t{0xFF00}) << 8) | - ((host_int & uint32_t{0xFF0000}) >> 8) | - ((host_int & uint32_t{0xFF000000}) >> 24)); -#endif -} - -inline uint16_t BSwap16(uint16_t host_int) { -#if defined(PROTOBUF_BUILTIN_BSWAP16) - return PROTOBUF_BUILTIN_BSWAP16(host_int); -#elif defined(_MSC_VER) - return _byteswap_ushort(host_int); -#else - return (((host_int & uint16_t{0xFF}) << 8) | - ((host_int & uint16_t{0xFF00}) >> 8)); -#endif -} - -namespace little_endian { - -inline uint16_t FromHost(uint16_t value) { -#if defined(PROTOBUF_BIG_ENDIAN) - return BSwap16(value); -#else - return value; -#endif -} - -inline uint32_t FromHost(uint32_t value) { -#if defined(PROTOBUF_BIG_ENDIAN) - return BSwap32(value); -#else - return value; -#endif -} - -inline uint64_t FromHost(uint64_t value) { -#if defined(PROTOBUF_BIG_ENDIAN) - return BSwap64(value); -#else - return value; -#endif -} - -inline uint16_t ToHost(uint16_t value) { -#if defined(PROTOBUF_BIG_ENDIAN) - return BSwap16(value); -#else - return value; -#endif -} - -inline uint32_t ToHost(uint32_t value) { -#if defined(PROTOBUF_BIG_ENDIAN) - return BSwap32(value); -#else - return value; -#endif -} - -inline uint64_t ToHost(uint64_t value) { -#if defined(PROTOBUF_BIG_ENDIAN) - return BSwap64(value); -#else - return value; -#endif -} - -} // namespace little_endian - -namespace big_endian { - -inline uint16_t FromHost(uint16_t value) { -#if defined(PROTOBUF_BIG_ENDIAN) - return value; -#else - return BSwap16(value); -#endif -} - -inline uint32_t FromHost(uint32_t value) { -#if defined(PROTOBUF_BIG_ENDIAN) - return value; -#else - return BSwap32(value); -#endif -} - -inline uint64_t FromHost(uint64_t value) { -#if defined(PROTOBUF_BIG_ENDIAN) - return value; -#else - return BSwap64(value); -#endif -} - -inline uint16_t ToHost(uint16_t value) { -#if defined(PROTOBUF_BIG_ENDIAN) - return value; -#else - return BSwap16(value); -#endif -} - -inline uint32_t ToHost(uint32_t value) { -#if defined(PROTOBUF_BIG_ENDIAN) - return value; -#else - return BSwap32(value); -#endif -} - -inline uint64_t ToHost(uint64_t value) { -#if defined(PROTOBUF_BIG_ENDIAN) - return value; -#else - return BSwap64(value); -#endif -} - -} // namespace big_endian - -} // namespace internal -} // namespace protobuf -} // namespace google - -#include <google/protobuf/port_undef.inc> - -#endif // GOOGLE_PROTOBUF_ENDIAN_H__ diff --git a/include/google/protobuf/explicitly_constructed.h b/include/google/protobuf/explicitly_constructed.h deleted file mode 100644 index 174c59ab4b..0000000000 --- a/include/google/protobuf/explicitly_constructed.h +++ /dev/null @@ -1,97 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// 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 -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -#ifndef GOOGLE_PROTOBUF_EXPLICITLY_CONSTRUCTED_H__ -#define GOOGLE_PROTOBUF_EXPLICITLY_CONSTRUCTED_H__ - -#include <stdint.h> - -#include <utility> - -#include <google/protobuf/stubs/logging.h> -#include <google/protobuf/stubs/common.h> - -// clang-format off -#include <google/protobuf/port_def.inc> -// clang-format on - -namespace google { -namespace protobuf { -namespace internal { - -// Wraps a variable whose constructor and destructor are explicitly -// called. It is particularly useful for a global variable, without its -// constructor and destructor run on start and end of the program lifetime. -// This circumvents the initial construction order fiasco, while keeping -// the address of the empty string a compile time constant. -// -// Pay special attention to the initialization state of the object. -// 1. The object is "uninitialized" to begin with. -// 2. Call Construct() or DefaultConstruct() only if the object is -// uninitialized. After the call, the object becomes "initialized". -// 3. Call get() and get_mutable() only if the object is initialized. -// 4. Call Destruct() only if the object is initialized. -// After the call, the object becomes uninitialized. -template <typename T, size_t min_align = 1> -class ExplicitlyConstructed { - public: - void DefaultConstruct() { new (&union_) T(); } - - template <typename... Args> - void Construct(Args&&... args) { - new (&union_) T(std::forward<Args>(args)...); - } - - void Destruct() { get_mutable()->~T(); } - - constexpr const T& get() const { return reinterpret_cast<const T&>(union_); } - T* get_mutable() { return reinterpret_cast<T*>(&union_); } - - private: - union AlignedUnion { - alignas(min_align > alignof(T) ? min_align - : alignof(T)) char space[sizeof(T)]; - int64_t align_to_int64; - void* align_to_ptr; - } union_; -}; - -// ArenaStringPtr compatible explicitly constructed string type. -// This empty string type is aligned with a minimum alignment of 8 bytes -// which is the minimum requirement of ArenaStringPtr -using ExplicitlyConstructedArenaString = ExplicitlyConstructed<std::string, 8>; - -} // namespace internal -} // namespace protobuf -} // namespace google - -#include <google/protobuf/port_undef.inc> - -#endif // GOOGLE_PROTOBUF_EXPLICITLY_CONSTRUCTED_H__ diff --git a/include/google/protobuf/extension_set.h b/include/google/protobuf/extension_set.h deleted file mode 100644 index 0e6d052110..0000000000 --- a/include/google/protobuf/extension_set.h +++ /dev/null @@ -1,1561 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// 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 -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -// Author: kenton@google.com (Kenton Varda) -// Based on original Protocol Buffers design by -// Sanjay Ghemawat, Jeff Dean, and others. -// -// This header is logically internal, but is made public because it is used -// from protocol-compiler-generated code, which may reside in other components. - -#ifndef GOOGLE_PROTOBUF_EXTENSION_SET_H__ -#define GOOGLE_PROTOBUF_EXTENSION_SET_H__ - - -#include <algorithm> -#include <cassert> -#include <map> -#include <string> -#include <utility> -#include <vector> - -#include <google/protobuf/stubs/common.h> -#include <google/protobuf/stubs/logging.h> -#include <google/protobuf/io/coded_stream.h> -#include <google/protobuf/port.h> -#include <google/protobuf/parse_context.h> -#include <google/protobuf/repeated_field.h> -#include <google/protobuf/wire_format_lite.h> - -// clang-format off -#include <google/protobuf/port_def.inc> // Must be last -// clang-format on - -#ifdef SWIG -#error "You cannot SWIG proto headers" -#endif - -namespace google { -namespace protobuf { -class Arena; -class Descriptor; // descriptor.h -class FieldDescriptor; // descriptor.h -class DescriptorPool; // descriptor.h -class MessageLite; // message_lite.h -class Message; // message.h -class MessageFactory; // message.h -class Reflection; // message.h -class UnknownFieldSet; // unknown_field_set.h -namespace internal { -class FieldSkipper; // wire_format_lite.h -enum class LazyVerifyOption; -} // namespace internal -} // namespace protobuf -} // namespace google - -namespace google { -namespace protobuf { -namespace internal { - -class InternalMetadata; - -// Used to store values of type WireFormatLite::FieldType without having to -// #include wire_format_lite.h. Also, ensures that we use only one byte to -// store these values, which is important to keep the layout of -// ExtensionSet::Extension small. -typedef uint8_t FieldType; - -// A function which, given an integer value, returns true if the number -// matches one of the defined values for the corresponding enum type. This -// is used with RegisterEnumExtension, below. -typedef bool EnumValidityFunc(int number); - -// Version of the above which takes an argument. This is needed to deal with -// extensions that are not compiled in. -typedef bool EnumValidityFuncWithArg(const void* arg, int number); - -// Information about a registered extension. -struct ExtensionInfo { - constexpr ExtensionInfo() : enum_validity_check() {} - constexpr ExtensionInfo(const MessageLite* extendee, int param_number, - FieldType type_param, bool isrepeated, bool ispacked, - LazyEagerVerifyFnType verify_func) - : message(extendee), - number(param_number), - type(type_param), - is_repeated(isrepeated), - is_packed(ispacked), - enum_validity_check(), - lazy_eager_verify_func(verify_func) {} - - const MessageLite* message = nullptr; - int number = 0; - - FieldType type = 0; - bool is_repeated = false; - bool is_packed = false; - - struct EnumValidityCheck { - EnumValidityFuncWithArg* func; - const void* arg; - }; - - struct MessageInfo { - const MessageLite* prototype; - }; - - union { - EnumValidityCheck enum_validity_check; - MessageInfo message_info; - }; - - // The descriptor for this extension, if one exists and is known. May be - // nullptr. Must not be nullptr if the descriptor for the extension does not - // live in the same pool as the descriptor for the containing type. - const FieldDescriptor* descriptor = nullptr; - - // If this field is potentially lazy this function can be used as a cheap - // verification of the raw bytes. - // If nullptr then no verification is performed. - LazyEagerVerifyFnType lazy_eager_verify_func = nullptr; -}; - -// An ExtensionFinder is an object which looks up extension definitions. It -// must implement this method: -// -// bool Find(int number, ExtensionInfo* output); - -// GeneratedExtensionFinder is an ExtensionFinder which finds extensions -// defined in .proto files which have been compiled into the binary. -class PROTOBUF_EXPORT GeneratedExtensionFinder { - public: - explicit GeneratedExtensionFinder(const MessageLite* extendee) - : extendee_(extendee) {} - - // Returns true and fills in *output if found, otherwise returns false. - bool Find(int number, ExtensionInfo* output); - - private: - const MessageLite* extendee_; -}; - -// Note: extension_set_heavy.cc defines DescriptorPoolExtensionFinder for -// finding extensions from a DescriptorPool. - -// This is an internal helper class intended for use within the protocol buffer -// library and generated classes. Clients should not use it directly. Instead, -// use the generated accessors such as GetExtension() of the class being -// extended. -// -// This class manages extensions for a protocol message object. The -// message's HasExtension(), GetExtension(), MutableExtension(), and -// ClearExtension() methods are just thin wrappers around the embedded -// ExtensionSet. When parsing, if a tag number is encountered which is -// inside one of the message type's extension ranges, the tag is passed -// off to the ExtensionSet for parsing. Etc. -class PROTOBUF_EXPORT ExtensionSet { - public: - constexpr ExtensionSet(); - explicit ExtensionSet(Arena* arena); - ExtensionSet(ArenaInitialized, Arena* arena) : ExtensionSet(arena) {} - ~ExtensionSet(); - - // These are called at startup by protocol-compiler-generated code to - // register known extensions. The registrations are used by ParseField() - // to look up extensions for parsed field numbers. Note that dynamic parsing - // does not use ParseField(); only protocol-compiler-generated parsing - // methods do. - static void RegisterExtension(const MessageLite* extendee, int number, - FieldType type, bool is_repeated, - bool is_packed, - LazyEagerVerifyFnType verify_func); - static void RegisterEnumExtension(const MessageLite* extendee, int number, - FieldType type, bool is_repeated, - bool is_packed, EnumValidityFunc* is_valid); - static void RegisterMessageExtension(const MessageLite* extendee, int number, - FieldType type, bool is_repeated, - bool is_packed, - const MessageLite* prototype, - LazyEagerVerifyFnType verify_func); - - // ================================================================= - - // Add all fields which are currently present to the given vector. This - // is useful to implement Reflection::ListFields(). - void AppendToList(const Descriptor* extendee, const DescriptorPool* pool, - std::vector<const FieldDescriptor*>* output) const; - - // ================================================================= - // Accessors - // - // Generated message classes include type-safe templated wrappers around - // these methods. Generally you should use those rather than call these - // directly, unless you are doing low-level memory management. - // - // When calling any of these accessors, the extension number requested - // MUST exist in the DescriptorPool provided to the constructor. Otherwise, - // the method will fail an assert. Normally, though, you would not call - // these directly; you would either call the generated accessors of your - // message class (e.g. GetExtension()) or you would call the accessors - // of the reflection interface. In both cases, it is impossible to - // trigger this assert failure: the generated accessors only accept - // linked-in extension types as parameters, while the Reflection interface - // requires you to provide the FieldDescriptor describing the extension. - // - // When calling any of these accessors, a protocol-compiler-generated - // implementation of the extension corresponding to the number MUST - // be linked in, and the FieldDescriptor used to refer to it MUST be - // the one generated by that linked-in code. Otherwise, the method will - // die on an assert failure. The message objects returned by the message - // accessors are guaranteed to be of the correct linked-in type. - // - // These methods pretty much match Reflection except that: - // - They're not virtual. - // - They identify fields by number rather than FieldDescriptors. - // - They identify enum values using integers rather than descriptors. - // - Strings provide Mutable() in addition to Set() accessors. - - bool Has(int number) const; - int ExtensionSize(int number) const; // Size of a repeated extension. - int NumExtensions() const; // The number of extensions - FieldType ExtensionType(int number) const; - void ClearExtension(int number); - - // singular fields ------------------------------------------------- - - int32_t GetInt32(int number, int32_t default_value) const; - int64_t GetInt64(int number, int64_t default_value) const; - uint32_t GetUInt32(int number, uint32_t default_value) const; - uint64_t GetUInt64(int number, uint64_t default_value) const; - float GetFloat(int number, float default_value) const; - double GetDouble(int number, double default_value) const; - bool GetBool(int number, bool default_value) const; - int GetEnum(int number, int default_value) const; - const std::string& GetString(int number, - const std::string& default_value) const; - const MessageLite& GetMessage(int number, - const MessageLite& default_value) const; - const MessageLite& GetMessage(int number, const Descriptor* message_type, - MessageFactory* factory) const; - - // |descriptor| may be nullptr so long as it is known that the descriptor for - // the extension lives in the same pool as the descriptor for the containing - // type. -#define desc const FieldDescriptor* descriptor // avoid line wrapping - void SetInt32(int number, FieldType type, int32_t value, desc); - void SetInt64(int number, FieldType type, int64_t value, desc); - void SetUInt32(int number, FieldType type, uint32_t value, desc); - void SetUInt64(int number, FieldType type, uint64_t value, desc); - void SetFloat(int number, FieldType type, float value, desc); - void SetDouble(int number, FieldType type, double value, desc); - void SetBool(int number, FieldType type, bool value, desc); - void SetEnum(int number, FieldType type, int value, desc); - void SetString(int number, FieldType type, std::string value, desc); - std::string* MutableString(int number, FieldType type, desc); - MessageLite* MutableMessage(int number, FieldType type, - const MessageLite& prototype, desc); - MessageLite* MutableMessage(const FieldDescriptor* descriptor, - MessageFactory* factory); - // Adds the given message to the ExtensionSet, taking ownership of the - // message object. Existing message with the same number will be deleted. - // If "message" is nullptr, this is equivalent to "ClearExtension(number)". - void SetAllocatedMessage(int number, FieldType type, - const FieldDescriptor* descriptor, - MessageLite* message); - void UnsafeArenaSetAllocatedMessage(int number, FieldType type, - const FieldDescriptor* descriptor, - MessageLite* message); - PROTOBUF_NODISCARD MessageLite* ReleaseMessage(int number, - const MessageLite& prototype); - MessageLite* UnsafeArenaReleaseMessage(int number, - const MessageLite& prototype); - - PROTOBUF_NODISCARD MessageLite* ReleaseMessage( - const FieldDescriptor* descriptor, MessageFactory* factory); - MessageLite* UnsafeArenaReleaseMessage(const FieldDescriptor* descriptor, - MessageFactory* factory); -#undef desc - Arena* GetArena() const { return arena_; } - - // repeated fields ------------------------------------------------- - - // Fetches a RepeatedField extension by number; returns |default_value| - // if no such extension exists. User should not touch this directly; it is - // used by the GetRepeatedExtension() method. - const void* GetRawRepeatedField(int number, const void* default_value) const; - // Fetches a mutable version of a RepeatedField extension by number, - // instantiating one if none exists. Similar to above, user should not use - // this directly; it underlies MutableRepeatedExtension(). - void* MutableRawRepeatedField(int number, FieldType field_type, bool packed, - const FieldDescriptor* desc); - - // This is an overload of MutableRawRepeatedField to maintain compatibility - // with old code using a previous API. This version of - // MutableRawRepeatedField() will GOOGLE_CHECK-fail on a missing extension. - // (E.g.: borg/clients/internal/proto1/proto2_reflection.cc.) - void* MutableRawRepeatedField(int number); - - int32_t GetRepeatedInt32(int number, int index) const; - int64_t GetRepeatedInt64(int number, int index) const; - uint32_t GetRepeatedUInt32(int number, int index) const; - uint64_t GetRepeatedUInt64(int number, int index) const; - float GetRepeatedFloat(int number, int index) const; - double GetRepeatedDouble(int number, int index) const; - bool GetRepeatedBool(int number, int index) const; - int GetRepeatedEnum(int number, int index) const; - const std::string& GetRepeatedString(int number, int index) const; - const MessageLite& GetRepeatedMessage(int number, int index) const; - - void SetRepeatedInt32(int number, int index, int32_t value); - void SetRepeatedInt64(int number, int index, int64_t value); - void SetRepeatedUInt32(int number, int index, uint32_t value); - void SetRepeatedUInt64(int number, int index, uint64_t value); - void SetRepeatedFloat(int number, int index, float value); - void SetRepeatedDouble(int number, int index, double value); - void SetRepeatedBool(int number, int index, bool value); - void SetRepeatedEnum(int number, int index, int value); - void SetRepeatedString(int number, int index, std::string value); - std::string* MutableRepeatedString(int number, int index); - MessageLite* MutableRepeatedMessage(int number, int index); - -#define desc const FieldDescriptor* descriptor // avoid line wrapping - void AddInt32(int number, FieldType type, bool packed, int32_t value, desc); - void AddInt64(int number, FieldType type, bool packed, int64_t value, desc); - void AddUInt32(int number, FieldType type, bool packed, uint32_t value, desc); - void AddUInt64(int number, FieldType type, bool packed, uint64_t value, desc); - void AddFloat(int number, FieldType type, bool packed, float value, desc); - void AddDouble(int number, FieldType type, bool packed, double value, desc); - void AddBool(int number, FieldType type, bool packed, bool value, desc); - void AddEnum(int number, FieldType type, bool packed, int value, desc); - void AddString(int number, FieldType type, std::string value, desc); - std::string* AddString(int number, FieldType type, desc); - MessageLite* AddMessage(int number, FieldType type, - const MessageLite& prototype, desc); - MessageLite* AddMessage(const FieldDescriptor* descriptor, - MessageFactory* factory); - void AddAllocatedMessage(const FieldDescriptor* descriptor, - MessageLite* new_entry); - void UnsafeArenaAddAllocatedMessage(const FieldDescriptor* descriptor, - MessageLite* new_entry); -#undef desc - - void RemoveLast(int number); - PROTOBUF_NODISCARD MessageLite* ReleaseLast(int number); - MessageLite* UnsafeArenaReleaseLast(int number); - void SwapElements(int number, int index1, int index2); - - // ================================================================= - // convenience methods for implementing methods of Message - // - // These could all be implemented in terms of the other methods of this - // class, but providing them here helps keep the generated code size down. - - void Clear(); - void MergeFrom(const MessageLite* extendee, const ExtensionSet& other); - void Swap(const MessageLite* extendee, ExtensionSet* other); - void InternalSwap(ExtensionSet* other); - void SwapExtension(const MessageLite* extendee, ExtensionSet* other, - int number); - void UnsafeShallowSwapExtension(ExtensionSet* other, int number); - bool IsInitialized() const; - - // Lite parser - const char* ParseField(uint64_t tag, const char* ptr, - const MessageLite* extendee, - internal::InternalMetadata* metadata, - internal::ParseContext* ctx); - // Full parser - const char* ParseField(uint64_t tag, const char* ptr, const Message* extendee, - internal::InternalMetadata* metadata, - internal::ParseContext* ctx); - template <typename Msg> - const char* ParseMessageSet(const char* ptr, const Msg* extendee, - InternalMetadata* metadata, - internal::ParseContext* ctx) { - struct MessageSetItem { - const char* _InternalParse(const char* ptr, ParseContext* ctx) { - return me->ParseMessageSetItem(ptr, extendee, metadata, ctx); - } - ExtensionSet* me; - const Msg* extendee; - InternalMetadata* metadata; - } item{this, extendee, metadata}; - while (!ctx->Done(&ptr)) { - uint32_t tag; - ptr = ReadTag(ptr, &tag); - GOOGLE_PROTOBUF_PARSER_ASSERT(ptr); - if (tag == WireFormatLite::kMessageSetItemStartTag) { - ptr = ctx->ParseGroup(&item, ptr, tag); - GOOGLE_PROTOBUF_PARSER_ASSERT(ptr); - } else { - if (tag == 0 || (tag & 7) == 4) { - ctx->SetLastTag(tag); - return ptr; - } - ptr = ParseField(tag, ptr, extendee, metadata, ctx); - GOOGLE_PROTOBUF_PARSER_ASSERT(ptr); - } - } - return ptr; - } - - // Write all extension fields with field numbers in the range - // [start_field_number, end_field_number) - // to the output stream, using the cached sizes computed when ByteSize() was - // last called. Note that the range bounds are inclusive-exclusive. - void SerializeWithCachedSizes(const MessageLite* extendee, - int start_field_number, int end_field_number, - io::CodedOutputStream* output) const { - output->SetCur(_InternalSerialize(extendee, start_field_number, - end_field_number, output->Cur(), - output->EpsCopy())); - } - - // Same as SerializeWithCachedSizes, but without any bounds checking. - // The caller must ensure that target has sufficient capacity for the - // serialized extensions. - // - // Returns a pointer past the last written byte. - - uint8_t* _InternalSerialize(const MessageLite* extendee, - int start_field_number, int end_field_number, - uint8_t* target, - io::EpsCopyOutputStream* stream) const { - if (flat_size_ == 0) { - assert(!is_large()); - return target; - } - return _InternalSerializeImpl(extendee, start_field_number, - end_field_number, target, stream); - } - - // Like above but serializes in MessageSet format. - void SerializeMessageSetWithCachedSizes(const MessageLite* extendee, - io::CodedOutputStream* output) const { - output->SetCur(InternalSerializeMessageSetWithCachedSizesToArray( - extendee, output->Cur(), output->EpsCopy())); - } - uint8_t* InternalSerializeMessageSetWithCachedSizesToArray( - const MessageLite* extendee, uint8_t* target, - io::EpsCopyOutputStream* stream) const; - - // For backward-compatibility, versions of two of the above methods that - // serialize deterministically iff SetDefaultSerializationDeterministic() - // has been called. - uint8_t* SerializeWithCachedSizesToArray(int start_field_number, - int end_field_number, - uint8_t* target) const; - uint8_t* SerializeMessageSetWithCachedSizesToArray( - const MessageLite* extendee, uint8_t* target) const; - - // Returns the total serialized size of all the extensions. - size_t ByteSize() const; - - // Like ByteSize() but uses MessageSet format. - size_t MessageSetByteSize() const; - - // Returns (an estimate of) the total number of bytes used for storing the - // extensions in memory, excluding sizeof(*this). If the ExtensionSet is - // for a lite message (and thus possibly contains lite messages), the results - // are undefined (might work, might crash, might corrupt data, might not even - // be linked in). It's up to the protocol compiler to avoid calling this on - // such ExtensionSets (easy enough since lite messages don't implement - // SpaceUsed()). - size_t SpaceUsedExcludingSelfLong() const; - - // This method just calls SpaceUsedExcludingSelfLong() but it can not be - // inlined because the definition of SpaceUsedExcludingSelfLong() is not - // included in lite runtime and when an inline method refers to it MSVC - // will complain about unresolved symbols when building the lite runtime - // as .dll. - int SpaceUsedExcludingSelf() const; - - private: - template <typename Type> - friend class PrimitiveTypeTraits; - - template <typename Type> - friend class RepeatedPrimitiveTypeTraits; - - template <typename Type, bool IsValid(int)> - friend class EnumTypeTraits; - - template <typename Type, bool IsValid(int)> - friend class RepeatedEnumTypeTraits; - - friend class google::protobuf::Reflection; - - const int32_t& GetRefInt32(int number, const int32_t& default_value) const; - const int64_t& GetRefInt64(int number, const int64_t& default_value) const; - const uint32_t& GetRefUInt32(int number, const uint32_t& default_value) const; - const uint64_t& GetRefUInt64(int number, const uint64_t& default_value) const; - const float& GetRefFloat(int number, const float& default_value) const; - const double& GetRefDouble(int number, const double& default_value) const; - const bool& GetRefBool(int number, const bool& default_value) const; - const int& GetRefEnum(int number, const int& default_value) const; - const int32_t& GetRefRepeatedInt32(int number, int index) const; - const int64_t& GetRefRepeatedInt64(int number, int index) const; - const uint32_t& GetRefRepeatedUInt32(int number, int index) const; - const uint64_t& GetRefRepeatedUInt64(int number, int index) const; - const float& GetRefRepeatedFloat(int number, int index) const; - const double& GetRefRepeatedDouble(int number, int index) const; - const bool& GetRefRepeatedBool(int number, int index) const; - const int& GetRefRepeatedEnum(int number, int index) const; - - // Implementation of _InternalSerialize for non-empty map_. - uint8_t* _InternalSerializeImpl(const MessageLite* extendee, - int start_field_number, int end_field_number, - uint8_t* target, - io::EpsCopyOutputStream* stream) const; - // Interface of a lazily parsed singular message extension. - class PROTOBUF_EXPORT LazyMessageExtension { - public: - LazyMessageExtension() {} - virtual ~LazyMessageExtension() {} - - virtual LazyMessageExtension* New(Arena* arena) const = 0; - virtual const MessageLite& GetMessage(const MessageLite& prototype, - Arena* arena) const = 0; - virtual MessageLite* MutableMessage(const MessageLite& prototype, - Arena* arena) = 0; - virtual void SetAllocatedMessage(MessageLite* message, Arena* arena) = 0; - virtual void UnsafeArenaSetAllocatedMessage(MessageLite* message, - Arena* arena) = 0; - PROTOBUF_NODISCARD virtual MessageLite* ReleaseMessage( - const MessageLite& prototype, Arena* arena) = 0; - virtual MessageLite* UnsafeArenaReleaseMessage(const MessageLite& prototype, - Arena* arena) = 0; - - virtual bool IsInitialized() const = 0; - - PROTOBUF_DEPRECATED_MSG("Please use ByteSizeLong() instead") - virtual int ByteSize() const { return internal::ToIntSize(ByteSizeLong()); } - virtual size_t ByteSizeLong() const = 0; - virtual size_t SpaceUsedLong() const = 0; - - virtual void MergeFrom(const MessageLite* prototype, - const LazyMessageExtension& other, Arena* arena) = 0; - virtual void MergeFromMessage(const MessageLite& msg, Arena* arena) = 0; - virtual void Clear() = 0; - - virtual const char* _InternalParse(const Message& prototype, Arena* arena, - LazyVerifyOption option, const char* ptr, - ParseContext* ctx) = 0; - virtual uint8_t* WriteMessageToArray( - const MessageLite* prototype, int number, uint8_t* target, - io::EpsCopyOutputStream* stream) const = 0; - - private: - virtual void UnusedKeyMethod(); // Dummy key method to avoid weak vtable. - - GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(LazyMessageExtension); - }; - // Give access to function defined below to see LazyMessageExtension. - friend LazyMessageExtension* MaybeCreateLazyExtension(Arena* arena); - struct Extension { - // The order of these fields packs Extension into 24 bytes when using 8 - // byte alignment. Consider this when adding or removing fields here. - union { - int32_t int32_t_value; - int64_t int64_t_value; - uint32_t uint32_t_value; - uint64_t uint64_t_value; - float float_value; - double double_value; - bool bool_value; - int enum_value; - std::string* string_value; - MessageLite* message_value; - LazyMessageExtension* lazymessage_value; - - RepeatedField<int32_t>* repeated_int32_t_value; - RepeatedField<int64_t>* repeated_int64_t_value; - RepeatedField<uint32_t>* repeated_uint32_t_value; - RepeatedField<uint64_t>* repeated_uint64_t_value; - RepeatedField<float>* repeated_float_value; - RepeatedField<double>* repeated_double_value; - RepeatedField<bool>* repeated_bool_value; - RepeatedField<int>* repeated_enum_value; - RepeatedPtrField<std::string>* repeated_string_value; - RepeatedPtrField<MessageLite>* repeated_message_value; - }; - - FieldType type; - bool is_repeated; - - // For singular types, indicates if the extension is "cleared". This - // happens when an extension is set and then later cleared by the caller. - // We want to keep the Extension object around for reuse, so instead of - // removing it from the map, we just set is_cleared = true. This has no - // meaning for repeated types; for those, the size of the RepeatedField - // simply becomes zero when cleared. - bool is_cleared : 4; - - // For singular message types, indicates whether lazy parsing is enabled - // for this extension. This field is only valid when type == TYPE_MESSAGE - // and !is_repeated because we only support lazy parsing for singular - // message types currently. If is_lazy = true, the extension is stored in - // lazymessage_value. Otherwise, the extension will be message_value. - bool is_lazy : 4; - - // For repeated types, this indicates if the [packed=true] option is set. - bool is_packed; - - // For packed fields, the size of the packed data is recorded here when - // ByteSize() is called then used during serialization. - // TODO(kenton): Use atomic<int> when C++ supports it. - mutable int cached_size; - - // The descriptor for this extension, if one exists and is known. May be - // nullptr. Must not be nullptr if the descriptor for the extension does - // not live in the same pool as the descriptor for the containing type. - const FieldDescriptor* descriptor; - - // Some helper methods for operations on a single Extension. - uint8_t* InternalSerializeFieldWithCachedSizesToArray( - const MessageLite* extendee, const ExtensionSet* extension_set, - int number, uint8_t* target, io::EpsCopyOutputStream* stream) const; - uint8_t* InternalSerializeMessageSetItemWithCachedSizesToArray( - const MessageLite* extendee, const ExtensionSet* extension_set, - int number, uint8_t* target, io::EpsCopyOutputStream* stream) const; - size_t ByteSize(int number) const; - size_t MessageSetItemByteSize(int number) const; - void Clear(); - int GetSize() const; - void Free(); - size_t SpaceUsedExcludingSelfLong() const; - bool IsInitialized() const; - }; - - // The Extension struct is small enough to be passed by value, so we use it - // directly as the value type in mappings rather than use pointers. We use - // sorted maps rather than hash-maps because we expect most ExtensionSets will - // only contain a small number of extension. Also, we want AppendToList and - // deterministic serialization to order fields by field number. - - struct KeyValue { - int first; - Extension second; - - struct FirstComparator { - bool operator()(const KeyValue& lhs, const KeyValue& rhs) const { - return lhs.first < rhs.first; - } - bool operator()(const KeyValue& lhs, int key) const { - return lhs.first < key; - } - bool operator()(int key, const KeyValue& rhs) const { - return key < rhs.first; - } - }; - }; - - typedef std::map<int, Extension> LargeMap; - - // Wrapper API that switches between flat-map and LargeMap. - - // Finds a key (if present) in the ExtensionSet. - const Extension* FindOrNull(int key) const; - Extension* FindOrNull(int key); - - // Helper-functions that only inspect the LargeMap. - const Extension* FindOrNullInLargeMap(int key) const; - Extension* FindOrNullInLargeMap(int key); - - // Inserts a new (key, Extension) into the ExtensionSet (and returns true), or - // finds the already-existing Extension for that key (returns false). - // The Extension* will point to the new-or-found Extension. - std::pair<Extension*, bool> Insert(int key); - - // Grows the flat_capacity_. - // If flat_capacity_ > kMaximumFlatCapacity, converts to LargeMap. - void GrowCapacity(size_t minimum_new_capacity); - static constexpr uint16_t kMaximumFlatCapacity = 256; - bool is_large() const { return static_cast<int16_t>(flat_size_) < 0; } - - // Removes a key from the ExtensionSet. - void Erase(int key); - - size_t Size() const { - return PROTOBUF_PREDICT_FALSE(is_large()) ? map_.large->size() : flat_size_; - } - - // Similar to std::for_each. - // Each Iterator is decomposed into ->first and ->second fields, so - // that the KeyValueFunctor can be agnostic vis-a-vis KeyValue-vs-std::pair. - template <typename Iterator, typename KeyValueFunctor> - static KeyValueFunctor ForEach(Iterator begin, Iterator end, - KeyValueFunctor func) { - for (Iterator it = begin; it != end; ++it) func(it->first, it->second); - return std::move(func); - } - - // Applies a functor to the <int, Extension&> pairs in sorted order. - template <typename KeyValueFunctor> - KeyValueFunctor ForEach(KeyValueFunctor func) { - if (PROTOBUF_PREDICT_FALSE(is_large())) { - return ForEach(map_.large->begin(), map_.large->end(), std::move(func)); - } - return ForEach(flat_begin(), flat_end(), std::move(func)); - } - - // Applies a functor to the <int, const Extension&> pairs in sorted order. - template <typename KeyValueFunctor> - KeyValueFunctor ForEach(KeyValueFunctor func) const { - if (PROTOBUF_PREDICT_FALSE(is_large())) { - return ForEach(map_.large->begin(), map_.large->end(), std::move(func)); - } - return ForEach(flat_begin(), flat_end(), std::move(func)); - } - - // Merges existing Extension from other_extension - void InternalExtensionMergeFrom(const MessageLite* extendee, int number, - const Extension& other_extension, - Arena* other_arena); - - inline static bool is_packable(WireFormatLite::WireType type) { - switch (type) { - case WireFormatLite::WIRETYPE_VARINT: - case WireFormatLite::WIRETYPE_FIXED64: - case WireFormatLite::WIRETYPE_FIXED32: - return true; - case WireFormatLite::WIRETYPE_LENGTH_DELIMITED: - case WireFormatLite::WIRETYPE_START_GROUP: - case WireFormatLite::WIRETYPE_END_GROUP: - return false; - - // Do not add a default statement. Let the compiler complain when - // someone - // adds a new wire type. - } - PROTOBUF_ASSUME(false); // switch handles all possible enum values - return false; - } - - // Returns true and fills field_number and extension if extension is found. - // Note to support packed repeated field compatibility, it also fills whether - // the tag on wire is packed, which can be different from - // extension->is_packed (whether packed=true is specified). - template <typename ExtensionFinder> - bool FindExtensionInfoFromTag(uint32_t tag, ExtensionFinder* extension_finder, - int* field_number, ExtensionInfo* extension, - bool* was_packed_on_wire) { - *field_number = WireFormatLite::GetTagFieldNumber(tag); - WireFormatLite::WireType wire_type = WireFormatLite::GetTagWireType(tag); - return FindExtensionInfoFromFieldNumber(wire_type, *field_number, - extension_finder, extension, - was_packed_on_wire); - } - - // Returns true and fills extension if extension is found. - // Note to support packed repeated field compatibility, it also fills whether - // the tag on wire is packed, which can be different from - // extension->is_packed (whether packed=true is specified). - template <typename ExtensionFinder> - bool FindExtensionInfoFromFieldNumber(int wire_type, int field_number, - ExtensionFinder* extension_finder, - ExtensionInfo* extension, - bool* was_packed_on_wire) const { - if (!extension_finder->Find(field_number, extension)) { - return false; - } - - GOOGLE_DCHECK(extension->type > 0 && - extension->type <= WireFormatLite::MAX_FIELD_TYPE); - auto real_type = static_cast<WireFormatLite::FieldType>(extension->type); - - WireFormatLite::WireType expected_wire_type = - WireFormatLite::WireTypeForFieldType(real_type); - - // Check if this is a packed field. - *was_packed_on_wire = false; - if (extension->is_repeated && - wire_type == WireFormatLite::WIRETYPE_LENGTH_DELIMITED && - is_packable(expected_wire_type)) { - *was_packed_on_wire = true; - return true; - } - // Otherwise the wire type must match. - return expected_wire_type == wire_type; - } - - // Find the prototype for a LazyMessage from the extension registry. Returns - // null if the extension is not found. - const MessageLite* GetPrototypeForLazyMessage(const MessageLite* extendee, - int number) const; - - // Returns true if extension is present and lazy. - bool HasLazy(int number) const; - - // Gets the extension with the given number, creating it if it does not - // already exist. Returns true if the extension did not already exist. - bool MaybeNewExtension(int number, const FieldDescriptor* descriptor, - Extension** result); - - // Gets the repeated extension for the given descriptor, creating it if - // it does not exist. - Extension* MaybeNewRepeatedExtension(const FieldDescriptor* descriptor); - - bool FindExtension(int wire_type, uint32_t field, const MessageLite* extendee, - const internal::ParseContext* /*ctx*/, - ExtensionInfo* extension, bool* was_packed_on_wire) { - GeneratedExtensionFinder finder(extendee); - return FindExtensionInfoFromFieldNumber(wire_type, field, &finder, - extension, was_packed_on_wire); - } - inline bool FindExtension(int wire_type, uint32_t field, - const Message* extendee, - const internal::ParseContext* ctx, - ExtensionInfo* extension, bool* was_packed_on_wire); - // Used for MessageSet only - const char* ParseFieldMaybeLazily(uint64_t tag, const char* ptr, - const MessageLite* extendee, - internal::InternalMetadata* metadata, - internal::ParseContext* ctx) { - // Lite MessageSet doesn't implement lazy. - return ParseField(tag, ptr, extendee, metadata, ctx); - } - const char* ParseFieldMaybeLazily(uint64_t tag, const char* ptr, - const Message* extendee, - internal::InternalMetadata* metadata, - internal::ParseContext* ctx); - const char* ParseMessageSetItem(const char* ptr, const MessageLite* extendee, - internal::InternalMetadata* metadata, - internal::ParseContext* ctx); - const char* ParseMessageSetItem(const char* ptr, const Message* extendee, - internal::InternalMetadata* metadata, - internal::ParseContext* ctx); - - // Implemented in extension_set_inl.h to keep code out of the header file. - template <typename T> - const char* ParseFieldWithExtensionInfo(int number, bool was_packed_on_wire, - const ExtensionInfo& info, - internal::InternalMetadata* metadata, - const char* ptr, - internal::ParseContext* ctx); - template <typename Msg, typename T> - const char* ParseMessageSetItemTmpl(const char* ptr, const Msg* extendee, - internal::InternalMetadata* metadata, - internal::ParseContext* ctx); - - // Hack: RepeatedPtrFieldBase declares ExtensionSet as a friend. This - // friendship should automatically extend to ExtensionSet::Extension, but - // unfortunately some older compilers (e.g. GCC 3.4.4) do not implement this - // correctly. So, we must provide helpers for calling methods of that - // class. - - // Defined in extension_set_heavy.cc. - static inline size_t RepeatedMessage_SpaceUsedExcludingSelfLong( - RepeatedPtrFieldBase* field); - - KeyValue* flat_begin() { - assert(!is_large()); - return map_.flat; - } - const KeyValue* flat_begin() const { - assert(!is_large()); - return map_.flat; - } - KeyValue* flat_end() { - assert(!is_large()); - return map_.flat + flat_size_; - } - const KeyValue* flat_end() const { - assert(!is_large()); - return map_.flat + flat_size_; - } - - Arena* arena_; - - // Manual memory-management: - // map_.flat is an allocated array of flat_capacity_ elements. - // [map_.flat, map_.flat + flat_size_) is the currently-in-use prefix. - uint16_t flat_capacity_; - uint16_t flat_size_; // negative int16_t(flat_size_) indicates is_large() - union AllocatedData { - KeyValue* flat; - - // If flat_capacity_ > kMaximumFlatCapacity, switch to LargeMap, - // which guarantees O(n lg n) CPU but larger constant factors. - LargeMap* large; - } map_; - - static void DeleteFlatMap(const KeyValue* flat, uint16_t flat_capacity); - - GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(ExtensionSet); -}; - -constexpr ExtensionSet::ExtensionSet() - : arena_(nullptr), flat_capacity_(0), flat_size_(0), map_{nullptr} {} - -// These are just for convenience... -inline void ExtensionSet::SetString(int number, FieldType type, - std::string value, - const FieldDescriptor* descriptor) { - MutableString(number, type, descriptor)->assign(std::move(value)); -} -inline void ExtensionSet::SetRepeatedString(int number, int index, - std::string value) { - MutableRepeatedString(number, index)->assign(std::move(value)); -} -inline void ExtensionSet::AddString(int number, FieldType type, - std::string value, - const FieldDescriptor* descriptor) { - AddString(number, type, descriptor)->assign(std::move(value)); -} -// =================================================================== -// Glue for generated extension accessors - -// ------------------------------------------------------------------- -// Template magic - -// First we have a set of classes representing "type traits" for different -// field types. A type traits class knows how to implement basic accessors -// for extensions of a particular type given an ExtensionSet. The signature -// for a type traits class looks like this: -// -// class TypeTraits { -// public: -// typedef ? ConstType; -// typedef ? MutableType; -// // TypeTraits for singular fields and repeated fields will define the -// // symbol "Singular" or "Repeated" respectively. These two symbols will -// // be used in extension accessors to distinguish between singular -// // extensions and repeated extensions. If the TypeTraits for the passed -// // in extension doesn't have the expected symbol defined, it means the -// // user is passing a repeated extension to a singular accessor, or the -// // opposite. In that case the C++ compiler will generate an error -// // message "no matching member function" to inform the user. -// typedef ? Singular -// typedef ? Repeated -// -// static inline ConstType Get(int number, const ExtensionSet& set); -// static inline void Set(int number, ConstType value, ExtensionSet* set); -// static inline MutableType Mutable(int number, ExtensionSet* set); -// -// // Variants for repeated fields. -// static inline ConstType Get(int number, const ExtensionSet& set, -// int index); -// static inline void Set(int number, int index, -// ConstType value, ExtensionSet* set); -// static inline MutableType Mutable(int number, int index, -// ExtensionSet* set); -// static inline void Add(int number, ConstType value, ExtensionSet* set); -// static inline MutableType Add(int number, ExtensionSet* set); -// This is used by the ExtensionIdentifier constructor to register -// the extension at dynamic initialization. -// template <typename ExtendeeT> -// static void Register(int number, FieldType type, bool is_packed); -// }; -// -// Not all of these methods make sense for all field types. For example, the -// "Mutable" methods only make sense for strings and messages, and the -// repeated methods only make sense for repeated types. So, each type -// traits class implements only the set of methods from this signature that it -// actually supports. This will cause a compiler error if the user tries to -// access an extension using a method that doesn't make sense for its type. -// For example, if "foo" is an extension of type "optional int32", then if you -// try to write code like: -// my_message.MutableExtension(foo) -// you will get a compile error because PrimitiveTypeTraits<int32_t> does not -// have a "Mutable()" method. - -// ------------------------------------------------------------------- -// PrimitiveTypeTraits - -// Since the ExtensionSet has different methods for each primitive type, -// we must explicitly define the methods of the type traits class for each -// known type. -template <typename Type> -class PrimitiveTypeTraits { - public: - typedef Type ConstType; - typedef Type MutableType; - typedef PrimitiveTypeTraits<Type> Singular; - - static inline ConstType Get(int number, const ExtensionSet& set, - ConstType default_value); - - static inline const ConstType* GetPtr(int number, const ExtensionSet& set, - const ConstType& default_value); - static inline void Set(int number, FieldType field_type, ConstType value, - ExtensionSet* set); - template <typename ExtendeeT> - static void Register(int number, FieldType type, bool is_packed, - LazyEagerVerifyFnType verify_func) { - ExtensionSet::RegisterExtension(&ExtendeeT::default_instance(), number, - type, false, is_packed, verify_func); - } -}; - -template <typename Type> -class RepeatedPrimitiveTypeTraits { - public: - typedef Type ConstType; - typedef Type MutableType; - typedef RepeatedPrimitiveTypeTraits<Type> Repeated; - - typedef RepeatedField<Type> RepeatedFieldType; - - static inline Type Get(int number, const ExtensionSet& set, int index); - static inline const Type* GetPtr(int number, const ExtensionSet& set, - int index); - static inline const RepeatedField<ConstType>* GetRepeatedPtr( - int number, const ExtensionSet& set); - static inline void Set(int number, int index, Type value, ExtensionSet* set); - static inline void Add(int number, FieldType field_type, bool is_packed, - Type value, ExtensionSet* set); - - static inline const RepeatedField<ConstType>& GetRepeated( - int number, const ExtensionSet& set); - static inline RepeatedField<Type>* MutableRepeated(int number, - FieldType field_type, - bool is_packed, - ExtensionSet* set); - - static const RepeatedFieldType* GetDefaultRepeatedField(); - template <typename ExtendeeT> - static void Register(int number, FieldType type, bool is_packed, - LazyEagerVerifyFnType verify_func) { - ExtensionSet::RegisterExtension(&ExtendeeT::default_instance(), number, - type, true, is_packed, verify_func); - } -}; - -class PROTOBUF_EXPORT RepeatedPrimitiveDefaults { - private: - template <typename Type> - friend class RepeatedPrimitiveTypeTraits; - static const RepeatedPrimitiveDefaults* default_instance(); - RepeatedField<int32_t> default_repeated_field_int32_t_; - RepeatedField<int64_t> default_repeated_field_int64_t_; - RepeatedField<uint32_t> default_repeated_field_uint32_t_; - RepeatedField<uint64_t> default_repeated_field_uint64_t_; - RepeatedField<double> default_repeated_field_double_; - RepeatedField<float> default_repeated_field_float_; - RepeatedField<bool> default_repeated_field_bool_; -}; - -#define PROTOBUF_DEFINE_PRIMITIVE_TYPE(TYPE, METHOD) \ - template <> \ - inline TYPE PrimitiveTypeTraits<TYPE>::Get( \ - int number, const ExtensionSet& set, TYPE default_value) { \ - return set.Get##METHOD(number, default_value); \ - } \ - template <> \ - inline const TYPE* PrimitiveTypeTraits<TYPE>::GetPtr( \ - int number, const ExtensionSet& set, const TYPE& default_value) { \ - return &set.GetRef##METHOD(number, default_value); \ - } \ - template <> \ - inline void PrimitiveTypeTraits<TYPE>::Set(int number, FieldType field_type, \ - TYPE value, ExtensionSet* set) { \ - set->Set##METHOD(number, field_type, value, nullptr); \ - } \ - \ - template <> \ - inline TYPE RepeatedPrimitiveTypeTraits<TYPE>::Get( \ - int number, const ExtensionSet& set, int index) { \ - return set.GetRepeated##METHOD(number, index); \ - } \ - template <> \ - inline const TYPE* RepeatedPrimitiveTypeTraits<TYPE>::GetPtr( \ - int number, const ExtensionSet& set, int index) { \ - return &set.GetRefRepeated##METHOD(number, index); \ - } \ - template <> \ - inline void RepeatedPrimitiveTypeTraits<TYPE>::Set( \ - int number, int index, TYPE value, ExtensionSet* set) { \ - set->SetRepeated##METHOD(number, index, value); \ - } \ - template <> \ - inline void RepeatedPrimitiveTypeTraits<TYPE>::Add( \ - int number, FieldType field_type, bool is_packed, TYPE value, \ - ExtensionSet* set) { \ - set->Add##METHOD(number, field_type, is_packed, value, nullptr); \ - } \ - template <> \ - inline const RepeatedField<TYPE>* \ - RepeatedPrimitiveTypeTraits<TYPE>::GetDefaultRepeatedField() { \ - return &RepeatedPrimitiveDefaults::default_instance() \ - ->default_repeated_field_##TYPE##_; \ - } \ - template <> \ - inline const RepeatedField<TYPE>& \ - RepeatedPrimitiveTypeTraits<TYPE>::GetRepeated(int number, \ - const ExtensionSet& set) { \ - return *reinterpret_cast<const RepeatedField<TYPE>*>( \ - set.GetRawRepeatedField(number, GetDefaultRepeatedField())); \ - } \ - template <> \ - inline const RepeatedField<TYPE>* \ - RepeatedPrimitiveTypeTraits<TYPE>::GetRepeatedPtr(int number, \ - const ExtensionSet& set) { \ - return &GetRepeated(number, set); \ - } \ - template <> \ - inline RepeatedField<TYPE>* \ - RepeatedPrimitiveTypeTraits<TYPE>::MutableRepeated( \ - int number, FieldType field_type, bool is_packed, ExtensionSet* set) { \ - return reinterpret_cast<RepeatedField<TYPE>*>( \ - set->MutableRawRepeatedField(number, field_type, is_packed, nullptr)); \ - } - -PROTOBUF_DEFINE_PRIMITIVE_TYPE(int32_t, Int32) -PROTOBUF_DEFINE_PRIMITIVE_TYPE(int64_t, Int64) -PROTOBUF_DEFINE_PRIMITIVE_TYPE(uint32_t, UInt32) -PROTOBUF_DEFINE_PRIMITIVE_TYPE(uint64_t, UInt64) -PROTOBUF_DEFINE_PRIMITIVE_TYPE(float, Float) -PROTOBUF_DEFINE_PRIMITIVE_TYPE(double, Double) -PROTOBUF_DEFINE_PRIMITIVE_TYPE(bool, Bool) - -#undef PROTOBUF_DEFINE_PRIMITIVE_TYPE - -// ------------------------------------------------------------------- -// StringTypeTraits - -// Strings support both Set() and Mutable(). -class PROTOBUF_EXPORT StringTypeTraits { - public: - typedef const std::string& ConstType; - typedef std::string* MutableType; - typedef StringTypeTraits Singular; - - static inline const std::string& Get(int number, const ExtensionSet& set, - ConstType default_value) { - return set.GetString(number, default_value); - } - static inline const std::string* GetPtr(int number, const ExtensionSet& set, - ConstType default_value) { - return &Get(number, set, default_value); - } - static inline void Set(int number, FieldType field_type, - const std::string& value, ExtensionSet* set) { - set->SetString(number, field_type, value, nullptr); - } - static inline std::string* Mutable(int number, FieldType field_type, - ExtensionSet* set) { - return set->MutableString(number, field_type, nullptr); - } - template <typename ExtendeeT> - static void Register(int number, FieldType type, bool is_packed, - LazyEagerVerifyFnType verify_func) { - ExtensionSet::RegisterExtension(&ExtendeeT::default_instance(), number, - type, false, is_packed, verify_func); - } -}; - -class PROTOBUF_EXPORT RepeatedStringTypeTraits { - public: - typedef const std::string& ConstType; - typedef std::string* MutableType; - typedef RepeatedStringTypeTraits Repeated; - - typedef RepeatedPtrField<std::string> RepeatedFieldType; - - static inline const std::string& Get(int number, const ExtensionSet& set, - int index) { - return set.GetRepeatedString(number, index); - } - static inline const std::string* GetPtr(int number, const ExtensionSet& set, - int index) { - return &Get(number, set, index); - } - static inline const RepeatedPtrField<std::string>* GetRepeatedPtr( - int number, const ExtensionSet& set) { - return &GetRepeated(number, set); - } - static inline void Set(int number, int index, const std::string& value, - ExtensionSet* set) { - set->SetRepeatedString(number, index, value); - } - static inline std::string* Mutable(int number, int index, ExtensionSet* set) { - return set->MutableRepeatedString(number, index); - } - static inline void Add(int number, FieldType field_type, bool /*is_packed*/, - const std::string& value, ExtensionSet* set) { - set->AddString(number, field_type, value, nullptr); - } - static inline std::string* Add(int number, FieldType field_type, - ExtensionSet* set) { - return set->AddString(number, field_type, nullptr); - } - static inline const RepeatedPtrField<std::string>& GetRepeated( - int number, const ExtensionSet& set) { - return *reinterpret_cast<const RepeatedPtrField<std::string>*>( - set.GetRawRepeatedField(number, GetDefaultRepeatedField())); - } - - static inline RepeatedPtrField<std::string>* MutableRepeated( - int number, FieldType field_type, bool is_packed, ExtensionSet* set) { - return reinterpret_cast<RepeatedPtrField<std::string>*>( - set->MutableRawRepeatedField(number, field_type, is_packed, nullptr)); - } - - static const RepeatedFieldType* GetDefaultRepeatedField(); - - template <typename ExtendeeT> - static void Register(int number, FieldType type, bool is_packed, - LazyEagerVerifyFnType fn) { - ExtensionSet::RegisterExtension(&ExtendeeT::default_instance(), number, - type, true, is_packed, fn); - } - - private: - static void InitializeDefaultRepeatedFields(); - static void DestroyDefaultRepeatedFields(); -}; - -// ------------------------------------------------------------------- -// EnumTypeTraits - -// ExtensionSet represents enums using integers internally, so we have to -// static_cast around. -template <typename Type, bool IsValid(int)> -class EnumTypeTraits { - public: - typedef Type ConstType; - typedef Type MutableType; - typedef EnumTypeTraits<Type, IsValid> Singular; - - static inline ConstType Get(int number, const ExtensionSet& set, - ConstType default_value) { - return static_cast<Type>(set.GetEnum(number, default_value)); - } - static inline const ConstType* GetPtr(int number, const ExtensionSet& set, - const ConstType& default_value) { - return reinterpret_cast<const Type*>( - &set.GetRefEnum(number, default_value)); - } - static inline void Set(int number, FieldType field_type, ConstType value, - ExtensionSet* set) { - GOOGLE_DCHECK(IsValid(value)); - set->SetEnum(number, field_type, value, nullptr); - } - template <typename ExtendeeT> - static void Register(int number, FieldType type, bool is_packed, - LazyEagerVerifyFnType fn) { - ExtensionSet::RegisterEnumExtension(&ExtendeeT::default_instance(), number, - type, false, is_packed, IsValid); - } -}; - -template <typename Type, bool IsValid(int)> -class RepeatedEnumTypeTraits { - public: - typedef Type ConstType; - typedef Type MutableType; - typedef RepeatedEnumTypeTraits<Type, IsValid> Repeated; - - typedef RepeatedField<Type> RepeatedFieldType; - - static inline ConstType Get(int number, const ExtensionSet& set, int index) { - return static_cast<Type>(set.GetRepeatedEnum(number, index)); - } - static inline const ConstType* GetPtr(int number, const ExtensionSet& set, - int index) { - return reinterpret_cast<const Type*>( - &set.GetRefRepeatedEnum(number, index)); - } - static inline void Set(int number, int index, ConstType value, - ExtensionSet* set) { - GOOGLE_DCHECK(IsValid(value)); - set->SetRepeatedEnum(number, index, value); - } - static inline void Add(int number, FieldType field_type, bool is_packed, - ConstType value, ExtensionSet* set) { - GOOGLE_DCHECK(IsValid(value)); - set->AddEnum(number, field_type, is_packed, value, nullptr); - } - static inline const RepeatedField<Type>& GetRepeated( - int number, const ExtensionSet& set) { - // Hack: the `Extension` struct stores a RepeatedField<int> for enums. - // RepeatedField<int> cannot implicitly convert to RepeatedField<EnumType> - // so we need to do some casting magic. See message.h for similar - // contortions for non-extension fields. - return *reinterpret_cast<const RepeatedField<Type>*>( - set.GetRawRepeatedField(number, GetDefaultRepeatedField())); - } - static inline const RepeatedField<Type>* GetRepeatedPtr( - int number, const ExtensionSet& set) { - return &GetRepeated(number, set); - } - static inline RepeatedField<Type>* MutableRepeated(int number, - FieldType field_type, - bool is_packed, - ExtensionSet* set) { - return reinterpret_cast<RepeatedField<Type>*>( - set->MutableRawRepeatedField(number, field_type, is_packed, nullptr)); - } - - static const RepeatedFieldType* GetDefaultRepeatedField() { - // Hack: as noted above, repeated enum fields are internally stored as a - // RepeatedField<int>. We need to be able to instantiate global static - // objects to return as default (empty) repeated fields on non-existent - // extensions. We would not be able to know a-priori all of the enum types - // (values of |Type|) to instantiate all of these, so we just re-use - // int32_t's default repeated field object. - return reinterpret_cast<const RepeatedField<Type>*>( - RepeatedPrimitiveTypeTraits<int32_t>::GetDefaultRepeatedField()); - } - template <typename ExtendeeT> - static void Register(int number, FieldType type, bool is_packed, - LazyEagerVerifyFnType fn) { - ExtensionSet::RegisterEnumExtension(&ExtendeeT::default_instance(), number, - type, true, is_packed, IsValid); - } -}; - -// ------------------------------------------------------------------- -// MessageTypeTraits - -// ExtensionSet guarantees that when manipulating extensions with message -// types, the implementation used will be the compiled-in class representing -// that type. So, we can static_cast down to the exact type we expect. -template <typename Type> -class MessageTypeTraits { - public: - typedef const Type& ConstType; - typedef Type* MutableType; - typedef MessageTypeTraits<Type> Singular; - - static inline ConstType Get(int number, const ExtensionSet& set, - ConstType default_value) { - return static_cast<const Type&>(set.GetMessage(number, default_value)); - } - static inline std::nullptr_t GetPtr(int /* number */, - const ExtensionSet& /* set */, - ConstType /* default_value */) { - // Cannot be implemented because of forward declared messages? - return nullptr; - } - static inline MutableType Mutable(int number, FieldType field_type, - ExtensionSet* set) { - return static_cast<Type*>(set->MutableMessage( - number, field_type, Type::default_instance(), nullptr)); - } - static inline void SetAllocated(int number, FieldType field_type, - MutableType message, ExtensionSet* set) { - set->SetAllocatedMessage(number, field_type, nullptr, message); - } - static inline void UnsafeArenaSetAllocated(int number, FieldType field_type, - MutableType message, - ExtensionSet* set) { - set->UnsafeArenaSetAllocatedMessage(number, field_type, nullptr, message); - } - PROTOBUF_NODISCARD static inline MutableType Release( - int number, FieldType /* field_type */, ExtensionSet* set) { - return static_cast<Type*>( - set->ReleaseMessage(number, Type::default_instance())); - } - static inline MutableType UnsafeArenaRelease(int number, - FieldType /* field_type */, - ExtensionSet* set) { - return static_cast<Type*>( - set->UnsafeArenaReleaseMessage(number, Type::default_instance())); - } - template <typename ExtendeeT> - static void Register(int number, FieldType type, bool is_packed, - LazyEagerVerifyFnType fn) { - ExtensionSet::RegisterMessageExtension(&ExtendeeT::default_instance(), - number, type, false, is_packed, - &Type::default_instance(), fn); - } -}; - -// Used by WireFormatVerify to extract the verify function from the registry. -LazyEagerVerifyFnType FindExtensionLazyEagerVerifyFn( - const MessageLite* extendee, int number); - -// forward declaration. -class RepeatedMessageGenericTypeTraits; - -template <typename Type> -class RepeatedMessageTypeTraits { - public: - typedef const Type& ConstType; - typedef Type* MutableType; - typedef RepeatedMessageTypeTraits<Type> Repeated; - - typedef RepeatedPtrField<Type> RepeatedFieldType; - - static inline ConstType Get(int number, const ExtensionSet& set, int index) { - return static_cast<const Type&>(set.GetRepeatedMessage(number, index)); - } - static inline std::nullptr_t GetPtr(int /* number */, - const ExtensionSet& /* set */, - int /* index */) { - // Cannot be implemented because of forward declared messages? - return nullptr; - } - static inline std::nullptr_t GetRepeatedPtr(int /* number */, - const ExtensionSet& /* set */) { - // Cannot be implemented because of forward declared messages? - return nullptr; - } - static inline MutableType Mutable(int number, int index, ExtensionSet* set) { - return static_cast<Type*>(set->MutableRepeatedMessage(number, index)); - } - static inline MutableType Add(int number, FieldType field_type, - ExtensionSet* set) { - return static_cast<Type*>( - set->AddMessage(number, field_type, Type::default_instance(), nullptr)); - } - static inline const RepeatedPtrField<Type>& GetRepeated( - int number, const ExtensionSet& set) { - // See notes above in RepeatedEnumTypeTraits::GetRepeated(): same - // casting hack applies here, because a RepeatedPtrField<MessageLite> - // cannot naturally become a RepeatedPtrType<Type> even though Type is - // presumably a message. google::protobuf::Message goes through similar contortions - // with a reinterpret_cast<>. - return *reinterpret_cast<const RepeatedPtrField<Type>*>( - set.GetRawRepeatedField(number, GetDefaultRepeatedField())); - } - static inline RepeatedPtrField<Type>* MutableRepeated(int number, - FieldType field_type, - bool is_packed, - ExtensionSet* set) { - return reinterpret_cast<RepeatedPtrField<Type>*>( - set->MutableRawRepeatedField(number, field_type, is_packed, nullptr)); - } - - static const RepeatedFieldType* GetDefaultRepeatedField(); - template <typename ExtendeeT> - static void Register(int number, FieldType type, bool is_packed, - LazyEagerVerifyFnType fn) { - ExtensionSet::RegisterMessageExtension(&ExtendeeT::default_instance(), - number, type, true, is_packed, - &Type::default_instance(), fn); - } -}; - -template <typename Type> -inline const typename RepeatedMessageTypeTraits<Type>::RepeatedFieldType* -RepeatedMessageTypeTraits<Type>::GetDefaultRepeatedField() { - static auto instance = OnShutdownDelete(new RepeatedFieldType); - return instance; -} - -// ------------------------------------------------------------------- -// ExtensionIdentifier - -// This is the type of actual extension objects. E.g. if you have: -// extend Foo { -// optional int32 bar = 1234; -// } -// then "bar" will be defined in C++ as: -// ExtensionIdentifier<Foo, PrimitiveTypeTraits<int32_t>, 5, false> bar(1234); -// -// Note that we could, in theory, supply the field number as a template -// parameter, and thus make an instance of ExtensionIdentifier have no -// actual contents. However, if we did that, then using an extension -// identifier would not necessarily cause the compiler to output any sort -// of reference to any symbol defined in the extension's .pb.o file. Some -// linkers will actually drop object files that are not explicitly referenced, -// but that would be bad because it would cause this extension to not be -// registered at static initialization, and therefore using it would crash. - -template <typename ExtendeeType, typename TypeTraitsType, FieldType field_type, - bool is_packed> -class ExtensionIdentifier { - public: - typedef TypeTraitsType TypeTraits; - typedef ExtendeeType Extendee; - - ExtensionIdentifier(int number, typename TypeTraits::ConstType default_value, - LazyEagerVerifyFnType verify_func = nullptr) - : number_(number), default_value_(default_value) { - Register(number, verify_func); - } - inline int number() const { return number_; } - typename TypeTraits::ConstType default_value() const { - return default_value_; - } - - static void Register(int number, LazyEagerVerifyFnType verify_func) { - TypeTraits::template Register<ExtendeeType>(number, field_type, is_packed, - verify_func); - } - - typename TypeTraits::ConstType const& default_value_ref() const { - return default_value_; - } - - private: - const int number_; - typename TypeTraits::ConstType default_value_; -}; - -// ------------------------------------------------------------------- -// Generated accessors - - -// Used to retrieve a lazy extension, may return nullptr in some environments. -extern PROTOBUF_ATTRIBUTE_WEAK ExtensionSet::LazyMessageExtension* -MaybeCreateLazyExtension(Arena* arena); - -} // namespace internal - -// Call this function to ensure that this extensions's reflection is linked into -// the binary: -// -// google::protobuf::LinkExtensionReflection(Foo::my_extension); -// -// This will ensure that the following lookup will succeed: -// -// DescriptorPool::generated_pool()->FindExtensionByName("Foo.my_extension"); -// -// This is often relevant for parsing extensions in text mode. -// -// As a side-effect, it will also guarantee that anything else from the same -// .proto file will also be available for lookup in the generated pool. -// -// This function does not actually register the extension, so it does not need -// to be called before the lookup. However it does need to occur in a function -// that cannot be stripped from the binary (ie. it must be reachable from main). -// -// Best practice is to call this function as close as possible to where the -// reflection is actually needed. This function is very cheap to call, so you -// should not need to worry about its runtime overhead except in tight loops (on -// x86-64 it compiles into two "mov" instructions). -template <typename ExtendeeType, typename TypeTraitsType, - internal::FieldType field_type, bool is_packed> -void LinkExtensionReflection( - const google::protobuf::internal::ExtensionIdentifier< - ExtendeeType, TypeTraitsType, field_type, is_packed>& extension) { - internal::StrongReference(extension); -} - -} // namespace protobuf -} // namespace google - -#include <google/protobuf/port_undef.inc> - -#endif // GOOGLE_PROTOBUF_EXTENSION_SET_H__ diff --git a/include/google/protobuf/extension_set_inl.h b/include/google/protobuf/extension_set_inl.h deleted file mode 100644 index 95936cc243..0000000000 --- a/include/google/protobuf/extension_set_inl.h +++ /dev/null @@ -1,276 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// 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 -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -#ifndef GOOGLE_PROTOBUF_EXTENSION_SET_INL_H__ -#define GOOGLE_PROTOBUF_EXTENSION_SET_INL_H__ - -#include <google/protobuf/extension_set.h> -#include <google/protobuf/metadata_lite.h> -#include <google/protobuf/parse_context.h> - -namespace google { -namespace protobuf { -namespace internal { - -template <typename T> -const char* ExtensionSet::ParseFieldWithExtensionInfo( - int number, bool was_packed_on_wire, const ExtensionInfo& extension, - InternalMetadata* metadata, const char* ptr, internal::ParseContext* ctx) { - if (was_packed_on_wire) { - switch (extension.type) { -#define HANDLE_TYPE(UPPERCASE, CPP_CAMELCASE) \ - case WireFormatLite::TYPE_##UPPERCASE: \ - return internal::Packed##CPP_CAMELCASE##Parser( \ - MutableRawRepeatedField(number, extension.type, extension.is_packed, \ - extension.descriptor), \ - ptr, ctx); - HANDLE_TYPE(INT32, Int32); - HANDLE_TYPE(INT64, Int64); - HANDLE_TYPE(UINT32, UInt32); - HANDLE_TYPE(UINT64, UInt64); - HANDLE_TYPE(SINT32, SInt32); - HANDLE_TYPE(SINT64, SInt64); - HANDLE_TYPE(FIXED32, Fixed32); - HANDLE_TYPE(FIXED64, Fixed64); - HANDLE_TYPE(SFIXED32, SFixed32); - HANDLE_TYPE(SFIXED64, SFixed64); - HANDLE_TYPE(FLOAT, Float); - HANDLE_TYPE(DOUBLE, Double); - HANDLE_TYPE(BOOL, Bool); -#undef HANDLE_TYPE - - case WireFormatLite::TYPE_ENUM: - return internal::PackedEnumParserArg<T>( - MutableRawRepeatedField(number, extension.type, extension.is_packed, - extension.descriptor), - ptr, ctx, extension.enum_validity_check.func, - extension.enum_validity_check.arg, metadata, number); - case WireFormatLite::TYPE_STRING: - case WireFormatLite::TYPE_BYTES: - case WireFormatLite::TYPE_GROUP: - case WireFormatLite::TYPE_MESSAGE: - GOOGLE_LOG(FATAL) << "Non-primitive types can't be packed."; - break; - } - } else { - switch (extension.type) { -#define HANDLE_VARINT_TYPE(UPPERCASE, CPP_CAMELCASE) \ - case WireFormatLite::TYPE_##UPPERCASE: { \ - uint64_t value; \ - ptr = VarintParse(ptr, &value); \ - GOOGLE_PROTOBUF_PARSER_ASSERT(ptr); \ - if (extension.is_repeated) { \ - Add##CPP_CAMELCASE(number, WireFormatLite::TYPE_##UPPERCASE, \ - extension.is_packed, value, extension.descriptor); \ - } else { \ - Set##CPP_CAMELCASE(number, WireFormatLite::TYPE_##UPPERCASE, value, \ - extension.descriptor); \ - } \ - } break - - HANDLE_VARINT_TYPE(INT32, Int32); - HANDLE_VARINT_TYPE(INT64, Int64); - HANDLE_VARINT_TYPE(UINT32, UInt32); - HANDLE_VARINT_TYPE(UINT64, UInt64); - HANDLE_VARINT_TYPE(BOOL, Bool); -#undef HANDLE_VARINT_TYPE -#define HANDLE_SVARINT_TYPE(UPPERCASE, CPP_CAMELCASE, SIZE) \ - case WireFormatLite::TYPE_##UPPERCASE: { \ - uint64_t val; \ - ptr = VarintParse(ptr, &val); \ - GOOGLE_PROTOBUF_PARSER_ASSERT(ptr); \ - auto value = WireFormatLite::ZigZagDecode##SIZE(val); \ - if (extension.is_repeated) { \ - Add##CPP_CAMELCASE(number, WireFormatLite::TYPE_##UPPERCASE, \ - extension.is_packed, value, extension.descriptor); \ - } else { \ - Set##CPP_CAMELCASE(number, WireFormatLite::TYPE_##UPPERCASE, value, \ - extension.descriptor); \ - } \ - } break - - HANDLE_SVARINT_TYPE(SINT32, Int32, 32); - HANDLE_SVARINT_TYPE(SINT64, Int64, 64); -#undef HANDLE_SVARINT_TYPE -#define HANDLE_FIXED_TYPE(UPPERCASE, CPP_CAMELCASE, CPPTYPE) \ - case WireFormatLite::TYPE_##UPPERCASE: { \ - auto value = UnalignedLoad<CPPTYPE>(ptr); \ - ptr += sizeof(CPPTYPE); \ - if (extension.is_repeated) { \ - Add##CPP_CAMELCASE(number, WireFormatLite::TYPE_##UPPERCASE, \ - extension.is_packed, value, extension.descriptor); \ - } else { \ - Set##CPP_CAMELCASE(number, WireFormatLite::TYPE_##UPPERCASE, value, \ - extension.descriptor); \ - } \ - } break - - HANDLE_FIXED_TYPE(FIXED32, UInt32, uint32_t); - HANDLE_FIXED_TYPE(FIXED64, UInt64, uint64_t); - HANDLE_FIXED_TYPE(SFIXED32, Int32, int32_t); - HANDLE_FIXED_TYPE(SFIXED64, Int64, int64_t); - HANDLE_FIXED_TYPE(FLOAT, Float, float); - HANDLE_FIXED_TYPE(DOUBLE, Double, double); -#undef HANDLE_FIXED_TYPE - - case WireFormatLite::TYPE_ENUM: { - uint64_t val; - ptr = VarintParse(ptr, &val); - GOOGLE_PROTOBUF_PARSER_ASSERT(ptr); - int value = val; - - if (!extension.enum_validity_check.func( - extension.enum_validity_check.arg, value)) { - WriteVarint(number, val, metadata->mutable_unknown_fields<T>()); - } else if (extension.is_repeated) { - AddEnum(number, WireFormatLite::TYPE_ENUM, extension.is_packed, value, - extension.descriptor); - } else { - SetEnum(number, WireFormatLite::TYPE_ENUM, value, - extension.descriptor); - } - break; - } - - case WireFormatLite::TYPE_BYTES: - case WireFormatLite::TYPE_STRING: { - std::string* value = - extension.is_repeated - ? AddString(number, WireFormatLite::TYPE_STRING, - extension.descriptor) - : MutableString(number, WireFormatLite::TYPE_STRING, - extension.descriptor); - int size = ReadSize(&ptr); - GOOGLE_PROTOBUF_PARSER_ASSERT(ptr); - return ctx->ReadString(ptr, size, value); - } - - case WireFormatLite::TYPE_GROUP: { - MessageLite* value = - extension.is_repeated - ? AddMessage(number, WireFormatLite::TYPE_GROUP, - *extension.message_info.prototype, - extension.descriptor) - : MutableMessage(number, WireFormatLite::TYPE_GROUP, - *extension.message_info.prototype, - extension.descriptor); - uint32_t tag = (number << 3) + WireFormatLite::WIRETYPE_START_GROUP; - return ctx->ParseGroup(value, ptr, tag); - } - - case WireFormatLite::TYPE_MESSAGE: { - MessageLite* value = - extension.is_repeated - ? AddMessage(number, WireFormatLite::TYPE_MESSAGE, - *extension.message_info.prototype, - extension.descriptor) - : MutableMessage(number, WireFormatLite::TYPE_MESSAGE, - *extension.message_info.prototype, - extension.descriptor); - return ctx->ParseMessage(value, ptr); - } - } - } - return ptr; -} - -template <typename Msg, typename T> -const char* ExtensionSet::ParseMessageSetItemTmpl( - const char* ptr, const Msg* extendee, internal::InternalMetadata* metadata, - internal::ParseContext* ctx) { - std::string payload; - uint32_t type_id = 0; - bool payload_read = false; - while (!ctx->Done(&ptr)) { - uint32_t tag = static_cast<uint8_t>(*ptr++); - if (tag == WireFormatLite::kMessageSetTypeIdTag) { - uint64_t tmp; - ptr = ParseBigVarint(ptr, &tmp); - GOOGLE_PROTOBUF_PARSER_ASSERT(ptr); - type_id = tmp; - if (payload_read) { - ExtensionInfo extension; - bool was_packed_on_wire; - if (!FindExtension(2, type_id, extendee, ctx, &extension, - &was_packed_on_wire)) { - WriteLengthDelimited(type_id, payload, - metadata->mutable_unknown_fields<T>()); - } else { - MessageLite* value = - extension.is_repeated - ? AddMessage(type_id, WireFormatLite::TYPE_MESSAGE, - *extension.message_info.prototype, - extension.descriptor) - : MutableMessage(type_id, WireFormatLite::TYPE_MESSAGE, - *extension.message_info.prototype, - extension.descriptor); - - const char* p; - // We can't use regular parse from string as we have to track - // proper recursion depth and descriptor pools. - ParseContext tmp_ctx(ctx->depth(), false, &p, payload); - tmp_ctx.data().pool = ctx->data().pool; - tmp_ctx.data().factory = ctx->data().factory; - GOOGLE_PROTOBUF_PARSER_ASSERT(value->_InternalParse(p, &tmp_ctx) && - tmp_ctx.EndedAtLimit()); - } - type_id = 0; - } - } else if (tag == WireFormatLite::kMessageSetMessageTag) { - if (type_id != 0) { - ptr = ParseFieldMaybeLazily(static_cast<uint64_t>(type_id) * 8 + 2, ptr, - extendee, metadata, ctx); - GOOGLE_PROTOBUF_PARSER_ASSERT(ptr != nullptr); - type_id = 0; - } else { - int32_t size = ReadSize(&ptr); - GOOGLE_PROTOBUF_PARSER_ASSERT(ptr); - ptr = ctx->ReadString(ptr, size, &payload); - GOOGLE_PROTOBUF_PARSER_ASSERT(ptr); - payload_read = true; - } - } else { - ptr = ReadTag(ptr - 1, &tag); - if (tag == 0 || (tag & 7) == 4) { - ctx->SetLastTag(tag); - return ptr; - } - ptr = ParseField(tag, ptr, extendee, metadata, ctx); - GOOGLE_PROTOBUF_PARSER_ASSERT(ptr); - } - } - return ptr; -} - -} // namespace internal -} // namespace protobuf -} // namespace google - -#endif // GOOGLE_PROTOBUF_EXTENSION_SET_INL_H__ diff --git a/include/google/protobuf/field_access_listener.h b/include/google/protobuf/field_access_listener.h deleted file mode 100644 index 47422e63c1..0000000000 --- a/include/google/protobuf/field_access_listener.h +++ /dev/null @@ -1,172 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// 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 -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -#ifndef GOOGLE_PROTOBUF_FIELD_ACCESS_LISTENER_H__ -#define GOOGLE_PROTOBUF_FIELD_ACCESS_LISTENER_H__ - -#include <cstddef> - -#include <google/protobuf/stubs/common.h> -#include <google/protobuf/message_lite.h> - - -namespace google { -namespace protobuf { - -// A default/no-op implementation of message hooks. -// -// See go/statically-dispatched-message-hooks for details. -template <typename Proto> -struct NoOpAccessListener { - // Number of fields are provided at compile time for the trackers to be able - // to have stack allocated bitmaps for the fields. This is useful for - // performance critical trackers. This is also to avoid cyclic dependencies - // if the number of fields is needed. - static constexpr int kFields = Proto::_kInternalFieldNumber; - // Default constructor is called during the static global initialization of - // the program. - // We provide a pointer to extract the name of the proto not to get cyclic - // dependencies on GetDescriptor() and OnGetMetadata() calls. If you want - // to differentiate the protos during the runtime before the start of the - // program, use this functor to get its name. We either way need it for - // LITE_RUNTIME protos as they don't have descriptors at all. - explicit NoOpAccessListener(StringPiece (*name_extractor)()) {} - // called repeatedly during serialization/deserialization/ByteSize of - // Reflection as: - // AccessListener<MessageT>::OnSerialize(this); - static void OnSerialize(const MessageLite* msg) {} - static void OnDeserialize(const MessageLite* msg) {} - static void OnByteSize(const MessageLite* msg) {} - static void OnMergeFrom(const MessageLite* to, const MessageLite* from) {} - - // NOTE: This function can be called pre-main. Make sure it does not make - // the state of the listener invalid. - static void OnGetMetadata() {} - - // called from accessors as: - // AccessListener<MessageT>::On$operation(this, &field_storage_); - // If you need to override this with type, in your hook implementation - // introduce - // template <int kFieldNum, typename T> - // static void On$operation(const MessageLite* msg, - // const T* field) {} - // And overloads for std::nullptr_t for incomplete types such as Messages, - // Maps. Extract them using reflection if you need. Consequently, second - // argument can be null pointer. - // For an example, see proto_hooks/testing/memory_test_field_listener.h - // And argument template deduction will deduce the type itself without - // changing the generated code. - - // add_<field>(f) - template <int kFieldNum> - static void OnAdd(const MessageLite* msg, const void* field) {} - - // add_<field>() - template <int kFieldNum> - static void OnAddMutable(const MessageLite* msg, const void* field) {} - - // <field>() and <repeated_field>(i) - template <int kFieldNum> - static void OnGet(const MessageLite* msg, const void* field) {} - - // clear_<field>() - template <int kFieldNum> - static void OnClear(const MessageLite* msg, const void* field) {} - - // has_<field>() - template <int kFieldNum> - static void OnHas(const MessageLite* msg, const void* field) {} - - // <repeated_field>() - template <int kFieldNum> - static void OnList(const MessageLite* msg, const void* field) {} - - // mutable_<field>() - template <int kFieldNum> - static void OnMutable(const MessageLite* msg, const void* field) {} - - // mutable_<repeated_field>() - template <int kFieldNum> - static void OnMutableList(const MessageLite* msg, const void* field) {} - - // release_<field>() - template <int kFieldNum> - static void OnRelease(const MessageLite* msg, const void* field) {} - - // set_<field>() and set_<repeated_field>(i) - template <int kFieldNum> - static void OnSet(const MessageLite* msg, const void* field) {} - - // <repeated_field>_size() - template <int kFieldNum> - static void OnSize(const MessageLite* msg, const void* field) {} - - static void OnHasExtension(const MessageLite* msg, int extension_tag, - const void* field) {} - // TODO(b/190614678): Support clear in the proto compiler. - static void OnClearExtension(const MessageLite* msg, int extension_tag, - const void* field) {} - static void OnExtensionSize(const MessageLite* msg, int extension_tag, - const void* field) {} - static void OnGetExtension(const MessageLite* msg, int extension_tag, - const void* field) {} - static void OnMutableExtension(const MessageLite* msg, int extension_tag, - const void* field) {} - static void OnSetExtension(const MessageLite* msg, int extension_tag, - const void* field) {} - static void OnReleaseExtension(const MessageLite* msg, int extension_tag, - const void* field) {} - static void OnAddExtension(const MessageLite* msg, int extension_tag, - const void* field) {} - static void OnAddMutableExtension(const MessageLite* msg, int extension_tag, - const void* field) {} - static void OnListExtension(const MessageLite* msg, int extension_tag, - const void* field) {} - static void OnMutableListExtension(const MessageLite* msg, int extension_tag, - const void* field) {} -}; - -} // namespace protobuf -} // namespace google - -#ifndef REPLACE_PROTO_LISTENER_IMPL -namespace google { -namespace protobuf { -template <class T> -using AccessListener = NoOpAccessListener<T>; -} // namespace protobuf -} // namespace google -#else -// You can put your implementations of hooks/listeners here. -// All hooks are subject to approval by protobuf-team@. - -#endif // !REPLACE_PROTO_LISTENER_IMPL - -#endif // GOOGLE_PROTOBUF_FIELD_ACCESS_LISTENER_H__ diff --git a/include/google/protobuf/field_mask.pb.h b/include/google/protobuf/field_mask.pb.h deleted file mode 100644 index 01ecfacb1a..0000000000 --- a/include/google/protobuf/field_mask.pb.h +++ /dev/null @@ -1,317 +0,0 @@ -// Generated by the protocol buffer compiler. DO NOT EDIT! -// source: google/protobuf/field_mask.proto - -#ifndef GOOGLE_PROTOBUF_INCLUDED_google_2fprotobuf_2ffield_5fmask_2eproto -#define GOOGLE_PROTOBUF_INCLUDED_google_2fprotobuf_2ffield_5fmask_2eproto - -#include <limits> -#include <string> - -#include <google/protobuf/port_def.inc> -#if PROTOBUF_VERSION < 3021000 -#error This file was generated by a newer version of protoc which is -#error incompatible with your Protocol Buffer headers. Please update -#error your headers. -#endif -#if 3021004 < PROTOBUF_MIN_PROTOC_VERSION -#error This file was generated by an older version of protoc which is -#error incompatible with your Protocol Buffer headers. Please -#error regenerate this file with a newer version of protoc. -#endif - -#include <google/protobuf/port_undef.inc> -#include <google/protobuf/io/coded_stream.h> -#include <google/protobuf/arena.h> -#include <google/protobuf/arenastring.h> -#include <google/protobuf/generated_message_util.h> -#include <google/protobuf/metadata_lite.h> -#include <google/protobuf/generated_message_reflection.h> -#include <google/protobuf/message.h> -#include <google/protobuf/repeated_field.h> // IWYU pragma: export -#include <google/protobuf/extension_set.h> // IWYU pragma: export -#include <google/protobuf/unknown_field_set.h> -// @@protoc_insertion_point(includes) -#include <google/protobuf/port_def.inc> -#define PROTOBUF_INTERNAL_EXPORT_google_2fprotobuf_2ffield_5fmask_2eproto PROTOBUF_EXPORT -PROTOBUF_NAMESPACE_OPEN -namespace internal { -class AnyMetadata; -} // namespace internal -PROTOBUF_NAMESPACE_CLOSE - -// Internal implementation detail -- do not use these members. -struct PROTOBUF_EXPORT TableStruct_google_2fprotobuf_2ffield_5fmask_2eproto { - static const uint32_t offsets[]; -}; -PROTOBUF_EXPORT extern const ::PROTOBUF_NAMESPACE_ID::internal::DescriptorTable descriptor_table_google_2fprotobuf_2ffield_5fmask_2eproto; -PROTOBUF_NAMESPACE_OPEN -class FieldMask; -struct FieldMaskDefaultTypeInternal; -PROTOBUF_EXPORT extern FieldMaskDefaultTypeInternal _FieldMask_default_instance_; -PROTOBUF_NAMESPACE_CLOSE -PROTOBUF_NAMESPACE_OPEN -template<> PROTOBUF_EXPORT ::PROTOBUF_NAMESPACE_ID::FieldMask* Arena::CreateMaybeMessage<::PROTOBUF_NAMESPACE_ID::FieldMask>(Arena*); -PROTOBUF_NAMESPACE_CLOSE -PROTOBUF_NAMESPACE_OPEN - -// =================================================================== - -class PROTOBUF_EXPORT FieldMask final : - public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:google.protobuf.FieldMask) */ { - public: - inline FieldMask() : FieldMask(nullptr) {} - ~FieldMask() override; - explicit PROTOBUF_CONSTEXPR FieldMask(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized); - - FieldMask(const FieldMask& from); - FieldMask(FieldMask&& from) noexcept - : FieldMask() { - *this = ::std::move(from); - } - - inline FieldMask& operator=(const FieldMask& from) { - CopyFrom(from); - return *this; - } - inline FieldMask& operator=(FieldMask&& from) noexcept { - if (this == &from) return *this; - if (GetOwningArena() == from.GetOwningArena() - #ifdef PROTOBUF_FORCE_COPY_IN_MOVE - && GetOwningArena() != nullptr - #endif // !PROTOBUF_FORCE_COPY_IN_MOVE - ) { - InternalSwap(&from); - } else { - CopyFrom(from); - } - return *this; - } - - static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() { - return GetDescriptor(); - } - static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() { - return default_instance().GetMetadata().descriptor; - } - static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() { - return default_instance().GetMetadata().reflection; - } - static const FieldMask& default_instance() { - return *internal_default_instance(); - } - static inline const FieldMask* internal_default_instance() { - return reinterpret_cast<const FieldMask*>( - &_FieldMask_default_instance_); - } - static constexpr int kIndexInFileMessages = - 0; - - friend void swap(FieldMask& a, FieldMask& b) { - a.Swap(&b); - } - inline void Swap(FieldMask* other) { - if (other == this) return; - #ifdef PROTOBUF_FORCE_COPY_IN_SWAP - if (GetOwningArena() != nullptr && - GetOwningArena() == other->GetOwningArena()) { - #else // PROTOBUF_FORCE_COPY_IN_SWAP - if (GetOwningArena() == other->GetOwningArena()) { - #endif // !PROTOBUF_FORCE_COPY_IN_SWAP - InternalSwap(other); - } else { - ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other); - } - } - void UnsafeArenaSwap(FieldMask* other) { - if (other == this) return; - GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena()); - InternalSwap(other); - } - - // implements Message ---------------------------------------------- - - FieldMask* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final { - return CreateMaybeMessage<FieldMask>(arena); - } - using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom; - void CopyFrom(const FieldMask& from); - using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom; - void MergeFrom( const FieldMask& from) { - FieldMask::MergeImpl(*this, from); - } - private: - static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message& to_msg, const ::PROTOBUF_NAMESPACE_ID::Message& from_msg); - public: - PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final; - bool IsInitialized() const final; - - size_t ByteSizeLong() const final; - const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final; - uint8_t* _InternalSerialize( - uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final; - int GetCachedSize() const final { return _impl_._cached_size_.Get(); } - - private: - void SharedCtor(::PROTOBUF_NAMESPACE_ID::Arena* arena, bool is_message_owned); - void SharedDtor(); - void SetCachedSize(int size) const final; - void InternalSwap(FieldMask* other); - - private: - friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata; - static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() { - return "google.protobuf.FieldMask"; - } - protected: - explicit FieldMask(::PROTOBUF_NAMESPACE_ID::Arena* arena, - bool is_message_owned = false); - public: - - static const ClassData _class_data_; - const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final; - - ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final; - - // nested types ---------------------------------------------------- - - // accessors ------------------------------------------------------- - - enum : int { - kPathsFieldNumber = 1, - }; - // repeated string paths = 1; - int paths_size() const; - private: - int _internal_paths_size() const; - public: - void clear_paths(); - const std::string& paths(int index) const; - std::string* mutable_paths(int index); - void set_paths(int index, const std::string& value); - void set_paths(int index, std::string&& value); - void set_paths(int index, const char* value); - void set_paths(int index, const char* value, size_t size); - std::string* add_paths(); - void add_paths(const std::string& value); - void add_paths(std::string&& value); - void add_paths(const char* value); - void add_paths(const char* value, size_t size); - const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField<std::string>& paths() const; - ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField<std::string>* mutable_paths(); - private: - const std::string& _internal_paths(int index) const; - std::string* _internal_add_paths(); - public: - - // @@protoc_insertion_point(class_scope:google.protobuf.FieldMask) - private: - class _Internal; - - template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper; - typedef void InternalArenaConstructable_; - typedef void DestructorSkippable_; - struct Impl_ { - ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField<std::string> paths_; - mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_; - }; - union { Impl_ _impl_; }; - friend struct ::TableStruct_google_2fprotobuf_2ffield_5fmask_2eproto; -}; -// =================================================================== - - -// =================================================================== - -#ifdef __GNUC__ - #pragma GCC diagnostic push - #pragma GCC diagnostic ignored "-Wstrict-aliasing" -#endif // __GNUC__ -// FieldMask - -// repeated string paths = 1; -inline int FieldMask::_internal_paths_size() const { - return _impl_.paths_.size(); -} -inline int FieldMask::paths_size() const { - return _internal_paths_size(); -} -inline void FieldMask::clear_paths() { - _impl_.paths_.Clear(); -} -inline std::string* FieldMask::add_paths() { - std::string* _s = _internal_add_paths(); - // @@protoc_insertion_point(field_add_mutable:google.protobuf.FieldMask.paths) - return _s; -} -inline const std::string& FieldMask::_internal_paths(int index) const { - return _impl_.paths_.Get(index); -} -inline const std::string& FieldMask::paths(int index) const { - // @@protoc_insertion_point(field_get:google.protobuf.FieldMask.paths) - return _internal_paths(index); -} -inline std::string* FieldMask::mutable_paths(int index) { - // @@protoc_insertion_point(field_mutable:google.protobuf.FieldMask.paths) - return _impl_.paths_.Mutable(index); -} -inline void FieldMask::set_paths(int index, const std::string& value) { - _impl_.paths_.Mutable(index)->assign(value); - // @@protoc_insertion_point(field_set:google.protobuf.FieldMask.paths) -} -inline void FieldMask::set_paths(int index, std::string&& value) { - _impl_.paths_.Mutable(index)->assign(std::move(value)); - // @@protoc_insertion_point(field_set:google.protobuf.FieldMask.paths) -} -inline void FieldMask::set_paths(int index, const char* value) { - GOOGLE_DCHECK(value != nullptr); - _impl_.paths_.Mutable(index)->assign(value); - // @@protoc_insertion_point(field_set_char:google.protobuf.FieldMask.paths) -} -inline void FieldMask::set_paths(int index, const char* value, size_t size) { - _impl_.paths_.Mutable(index)->assign( - reinterpret_cast<const char*>(value), size); - // @@protoc_insertion_point(field_set_pointer:google.protobuf.FieldMask.paths) -} -inline std::string* FieldMask::_internal_add_paths() { - return _impl_.paths_.Add(); -} -inline void FieldMask::add_paths(const std::string& value) { - _impl_.paths_.Add()->assign(value); - // @@protoc_insertion_point(field_add:google.protobuf.FieldMask.paths) -} -inline void FieldMask::add_paths(std::string&& value) { - _impl_.paths_.Add(std::move(value)); - // @@protoc_insertion_point(field_add:google.protobuf.FieldMask.paths) -} -inline void FieldMask::add_paths(const char* value) { - GOOGLE_DCHECK(value != nullptr); - _impl_.paths_.Add()->assign(value); - // @@protoc_insertion_point(field_add_char:google.protobuf.FieldMask.paths) -} -inline void FieldMask::add_paths(const char* value, size_t size) { - _impl_.paths_.Add()->assign(reinterpret_cast<const char*>(value), size); - // @@protoc_insertion_point(field_add_pointer:google.protobuf.FieldMask.paths) -} -inline const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField<std::string>& -FieldMask::paths() const { - // @@protoc_insertion_point(field_list:google.protobuf.FieldMask.paths) - return _impl_.paths_; -} -inline ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField<std::string>* -FieldMask::mutable_paths() { - // @@protoc_insertion_point(field_mutable_list:google.protobuf.FieldMask.paths) - return &_impl_.paths_; -} - -#ifdef __GNUC__ - #pragma GCC diagnostic pop -#endif // __GNUC__ - -// @@protoc_insertion_point(namespace_scope) - -PROTOBUF_NAMESPACE_CLOSE - -// @@protoc_insertion_point(global_scope) - -#include <google/protobuf/port_undef.inc> -#endif // GOOGLE_PROTOBUF_INCLUDED_GOOGLE_PROTOBUF_INCLUDED_google_2fprotobuf_2ffield_5fmask_2eproto diff --git a/include/google/protobuf/field_mask.proto b/include/google/protobuf/field_mask.proto deleted file mode 100644 index 6b5104f188..0000000000 --- a/include/google/protobuf/field_mask.proto +++ /dev/null @@ -1,245 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// 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 -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -syntax = "proto3"; - -package google.protobuf; - -option csharp_namespace = "Google.Protobuf.WellKnownTypes"; -option java_package = "com.google.protobuf"; -option java_outer_classname = "FieldMaskProto"; -option java_multiple_files = true; -option objc_class_prefix = "GPB"; -option go_package = "google.golang.org/protobuf/types/known/fieldmaskpb"; -option cc_enable_arenas = true; - -// `FieldMask` represents a set of symbolic field paths, for example: -// -// paths: "f.a" -// paths: "f.b.d" -// -// Here `f` represents a field in some root message, `a` and `b` -// fields in the message found in `f`, and `d` a field found in the -// message in `f.b`. -// -// Field masks are used to specify a subset of fields that should be -// returned by a get operation or modified by an update operation. -// Field masks also have a custom JSON encoding (see below). -// -// # Field Masks in Projections -// -// When used in the context of a projection, a response message or -// sub-message is filtered by the API to only contain those fields as -// specified in the mask. For example, if the mask in the previous -// example is applied to a response message as follows: -// -// f { -// a : 22 -// b { -// d : 1 -// x : 2 -// } -// y : 13 -// } -// z: 8 -// -// The result will not contain specific values for fields x,y and z -// (their value will be set to the default, and omitted in proto text -// output): -// -// -// f { -// a : 22 -// b { -// d : 1 -// } -// } -// -// A repeated field is not allowed except at the last position of a -// paths string. -// -// If a FieldMask object is not present in a get operation, the -// operation applies to all fields (as if a FieldMask of all fields -// had been specified). -// -// Note that a field mask does not necessarily apply to the -// top-level response message. In case of a REST get operation, the -// field mask applies directly to the response, but in case of a REST -// list operation, the mask instead applies to each individual message -// in the returned resource list. In case of a REST custom method, -// other definitions may be used. Where the mask applies will be -// clearly documented together with its declaration in the API. In -// any case, the effect on the returned resource/resources is required -// behavior for APIs. -// -// # Field Masks in Update Operations -// -// A field mask in update operations specifies which fields of the -// targeted resource are going to be updated. The API is required -// to only change the values of the fields as specified in the mask -// and leave the others untouched. If a resource is passed in to -// describe the updated values, the API ignores the values of all -// fields not covered by the mask. -// -// If a repeated field is specified for an update operation, new values will -// be appended to the existing repeated field in the target resource. Note that -// a repeated field is only allowed in the last position of a `paths` string. -// -// If a sub-message is specified in the last position of the field mask for an -// update operation, then new value will be merged into the existing sub-message -// in the target resource. -// -// For example, given the target message: -// -// f { -// b { -// d: 1 -// x: 2 -// } -// c: [1] -// } -// -// And an update message: -// -// f { -// b { -// d: 10 -// } -// c: [2] -// } -// -// then if the field mask is: -// -// paths: ["f.b", "f.c"] -// -// then the result will be: -// -// f { -// b { -// d: 10 -// x: 2 -// } -// c: [1, 2] -// } -// -// An implementation may provide options to override this default behavior for -// repeated and message fields. -// -// In order to reset a field's value to the default, the field must -// be in the mask and set to the default value in the provided resource. -// Hence, in order to reset all fields of a resource, provide a default -// instance of the resource and set all fields in the mask, or do -// not provide a mask as described below. -// -// If a field mask is not present on update, the operation applies to -// all fields (as if a field mask of all fields has been specified). -// Note that in the presence of schema evolution, this may mean that -// fields the client does not know and has therefore not filled into -// the request will be reset to their default. If this is unwanted -// behavior, a specific service may require a client to always specify -// a field mask, producing an error if not. -// -// As with get operations, the location of the resource which -// describes the updated values in the request message depends on the -// operation kind. In any case, the effect of the field mask is -// required to be honored by the API. -// -// ## Considerations for HTTP REST -// -// The HTTP kind of an update operation which uses a field mask must -// be set to PATCH instead of PUT in order to satisfy HTTP semantics -// (PUT must only be used for full updates). -// -// # JSON Encoding of Field Masks -// -// In JSON, a field mask is encoded as a single string where paths are -// separated by a comma. Fields name in each path are converted -// to/from lower-camel naming conventions. -// -// As an example, consider the following message declarations: -// -// message Profile { -// User user = 1; -// Photo photo = 2; -// } -// message User { -// string display_name = 1; -// string address = 2; -// } -// -// In proto a field mask for `Profile` may look as such: -// -// mask { -// paths: "user.display_name" -// paths: "photo" -// } -// -// In JSON, the same mask is represented as below: -// -// { -// mask: "user.displayName,photo" -// } -// -// # Field Masks and Oneof Fields -// -// Field masks treat fields in oneofs just as regular fields. Consider the -// following message: -// -// message SampleMessage { -// oneof test_oneof { -// string name = 4; -// SubMessage sub_message = 9; -// } -// } -// -// The field mask can be: -// -// mask { -// paths: "name" -// } -// -// Or: -// -// mask { -// paths: "sub_message" -// } -// -// Note that oneof type names ("test_oneof" in this case) cannot be used in -// paths. -// -// ## Field Mask Verification -// -// The implementation of any API method which has a FieldMask type field in the -// request should verify the included field paths, and return an -// `INVALID_ARGUMENT` error if any path is unmappable. -message FieldMask { - // The set of field mask paths. - repeated string paths = 1; -} diff --git a/include/google/protobuf/generated_enum_reflection.h b/include/google/protobuf/generated_enum_reflection.h deleted file mode 100644 index b96a9c61f9..0000000000 --- a/include/google/protobuf/generated_enum_reflection.h +++ /dev/null @@ -1,100 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// 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 -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -// Author: jasonh@google.com (Jason Hsueh) -// -// This header is logically internal, but is made public because it is used -// from protocol-compiler-generated code, which may reside in other components. -// It provides reflection support for generated enums, and is included in -// generated .pb.h files and should have minimal dependencies. The methods are -// implemented in generated_message_reflection.cc. - -#ifndef GOOGLE_PROTOBUF_GENERATED_ENUM_REFLECTION_H__ -#define GOOGLE_PROTOBUF_GENERATED_ENUM_REFLECTION_H__ - - -#include <string> - -#include <google/protobuf/port.h> -#include <google/protobuf/stubs/strutil.h> -#include <google/protobuf/generated_enum_util.h> - -#ifdef SWIG -#error "You cannot SWIG proto headers" -#endif - -// Must be included last. -#include <google/protobuf/port_def.inc> - -namespace google { -namespace protobuf { -class EnumDescriptor; -} // namespace protobuf -} // namespace google - -namespace google { -namespace protobuf { - -// Returns the EnumDescriptor for enum type E, which must be a -// proto-declared enum type. Code generated by the protocol compiler -// will include specializations of this template for each enum type declared. -template <typename E> -const EnumDescriptor* GetEnumDescriptor(); - -namespace internal { - -// Helper for EnumType_Parse functions: try to parse the string 'name' as -// an enum name of the given type, returning true and filling in value on -// success, or returning false and leaving value unchanged on failure. -PROTOBUF_EXPORT bool ParseNamedEnum(const EnumDescriptor* descriptor, - ConstStringParam name, int* value); - -template <typename EnumType> -bool ParseNamedEnum(const EnumDescriptor* descriptor, ConstStringParam name, - EnumType* value) { - int tmp; - if (!ParseNamedEnum(descriptor, name, &tmp)) return false; - *value = static_cast<EnumType>(tmp); - return true; -} - -// Just a wrapper around printing the name of a value. The main point of this -// function is not to be inlined, so that you can do this without including -// descriptor.h. -PROTOBUF_EXPORT const std::string& NameOfEnum(const EnumDescriptor* descriptor, - int value); - -} // namespace internal -} // namespace protobuf -} // namespace google - -#include <google/protobuf/port_undef.inc> - -#endif // GOOGLE_PROTOBUF_GENERATED_ENUM_REFLECTION_H__ diff --git a/include/google/protobuf/generated_enum_util.h b/include/google/protobuf/generated_enum_util.h deleted file mode 100644 index 5d10ac010e..0000000000 --- a/include/google/protobuf/generated_enum_util.h +++ /dev/null @@ -1,85 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// 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 -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -#ifndef GOOGLE_PROTOBUF_GENERATED_ENUM_UTIL_H__ -#define GOOGLE_PROTOBUF_GENERATED_ENUM_UTIL_H__ - - -#include <type_traits> - -#include <google/protobuf/stubs/strutil.h> -#include <google/protobuf/message_lite.h> - -// Must be included last. -#include <google/protobuf/port_def.inc> - -#ifdef SWIG -#error "You cannot SWIG proto headers" -#endif - -namespace google { -namespace protobuf { - -// This type trait can be used to cause templates to only match proto2 enum -// types. -template <typename T> -struct is_proto_enum : ::std::false_type {}; - -namespace internal { - -// The table entry format for storing enum name-to-value mapping used with lite -// protos. This struct and the following related functions should only be used -// by protobuf generated code. -struct EnumEntry { - StringPiece name; - int value; -}; - -// Looks up a numeric enum value given the string name. -PROTOBUF_EXPORT bool LookUpEnumValue(const EnumEntry* enums, size_t size, - StringPiece name, int* value); - -// Looks up an enum name given the numeric value. -PROTOBUF_EXPORT int LookUpEnumName(const EnumEntry* enums, - const int* sorted_indices, size_t size, - int value); - -// Initializes the list of enum names in std::string form. -PROTOBUF_EXPORT bool InitializeEnumStrings( - const EnumEntry* enums, const int* sorted_indices, size_t size, - internal::ExplicitlyConstructed<std::string>* enum_strings); - -} // namespace internal -} // namespace protobuf -} // namespace google - -#include <google/protobuf/port_undef.inc> - -#endif // GOOGLE_PROTOBUF_GENERATED_ENUM_UTIL_H__ diff --git a/include/google/protobuf/generated_message_bases.h b/include/google/protobuf/generated_message_bases.h deleted file mode 100644 index b295218a70..0000000000 --- a/include/google/protobuf/generated_message_bases.h +++ /dev/null @@ -1,87 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// 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 -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (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 file contains helpers for generated code. -// -// Nothing in this file should be directly referenced by users of protobufs. - -#ifndef GOOGLE_PROTOBUF_GENERATED_MESSAGE_BASES_H__ -#define GOOGLE_PROTOBUF_GENERATED_MESSAGE_BASES_H__ - -#include <google/protobuf/io/zero_copy_stream_impl.h> -#include <google/protobuf/arena.h> -#include <google/protobuf/generated_message_util.h> -#include <google/protobuf/message.h> -#include <google/protobuf/parse_context.h> - -// Must come last: -#include <google/protobuf/port_def.inc> - -namespace google { -namespace protobuf { -namespace internal { - -// To save code size, protos without any fields are derived from ZeroFieldsBase -// rather than Message. -class PROTOBUF_EXPORT ZeroFieldsBase : public Message { - public: - PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final; - bool IsInitialized() const final { return true; } - size_t ByteSizeLong() const final; - int GetCachedSize() const final { return _cached_size_.Get(); } - const char* _InternalParse(const char* ptr, - internal::ParseContext* ctx) final; - ::uint8_t* _InternalSerialize(::uint8_t* target, - io::EpsCopyOutputStream* stream) const final; - - protected: - constexpr ZeroFieldsBase() {} - explicit ZeroFieldsBase(Arena* arena, bool is_message_owned) - : Message(arena, is_message_owned) {} - ZeroFieldsBase(const ZeroFieldsBase&) = delete; - ZeroFieldsBase& operator=(const ZeroFieldsBase&) = delete; - ~ZeroFieldsBase() override; - - void SetCachedSize(int size) const final { _cached_size_.Set(size); } - - static void MergeImpl(Message& to, const Message& from); - static void CopyImpl(Message& to, const Message& from); - void InternalSwap(ZeroFieldsBase* other); - - mutable internal::CachedSize _cached_size_; -}; - -} // namespace internal -} // namespace protobuf -} // namespace google - -#include <google/protobuf/port_undef.inc> - -#endif // GOOGLE_PROTOBUF_GENERATED_MESSAGE_BASES_H__ diff --git a/include/google/protobuf/generated_message_reflection.h b/include/google/protobuf/generated_message_reflection.h deleted file mode 100644 index 334b2ccf1d..0000000000 --- a/include/google/protobuf/generated_message_reflection.h +++ /dev/null @@ -1,354 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// 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 -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -// Author: kenton@google.com (Kenton Varda) -// Based on original Protocol Buffers design by -// Sanjay Ghemawat, Jeff Dean, and others. -// -// This header is logically internal, but is made public because it is used -// from protocol-compiler-generated code, which may reside in other components. - -#ifndef GOOGLE_PROTOBUF_GENERATED_MESSAGE_REFLECTION_H__ -#define GOOGLE_PROTOBUF_GENERATED_MESSAGE_REFLECTION_H__ - -#include <google/protobuf/stubs/casts.h> -#include <google/protobuf/stubs/common.h> -#include <google/protobuf/stubs/once.h> -#include <google/protobuf/port.h> -#include <google/protobuf/descriptor.h> -#include <google/protobuf/generated_enum_reflection.h> -#include <google/protobuf/unknown_field_set.h> - - -// Must be included last. -#include <google/protobuf/port_def.inc> - -#ifdef SWIG -#error "You cannot SWIG proto headers" -#endif - -namespace google { -namespace protobuf { -class MapKey; -class MapValueRef; -class MessageLayoutInspector; -class Message; -struct Metadata; -} // namespace protobuf -} // namespace google - -namespace google { -namespace protobuf { -namespace internal { -class DefaultEmptyOneof; -// Defined in other files. -class ExtensionSet; // extension_set.h -class WeakFieldMap; // weak_field_map.h - -// This struct describes the internal layout of the message, hence this is -// used to act on the message reflectively. -// default_instance: The default instance of the message. This is only -// used to obtain pointers to default instances of embedded -// messages, which GetMessage() will return if the particular -// sub-message has not been initialized yet. (Thus, all -// embedded message fields *must* have non-null pointers -// in the default instance.) -// offsets: An array of ints giving the byte offsets. -// For each oneof or weak field, the offset is relative to the -// default_instance. These can be computed at compile time -// using the -// PROTO2_GENERATED_DEFAULT_ONEOF_FIELD_OFFSET() -// macro. For each none oneof field, the offset is related to -// the start of the message object. These can be computed at -// compile time using the -// PROTO2_GENERATED_MESSAGE_FIELD_OFFSET() macro. -// Besides offsets for all fields, this array also contains -// offsets for oneof unions. The offset of the i-th oneof union -// is offsets[descriptor->field_count() + i]. -// has_bit_indices: Mapping from field indexes to their index in the has -// bit array. -// has_bits_offset: Offset in the message of an array of uint32s of size -// descriptor->field_count()/32, rounded up. This is a -// bitfield where each bit indicates whether or not the -// corresponding field of the message has been initialized. -// The bit for field index i is obtained by the expression: -// has_bits[i / 32] & (1 << (i % 32)) -// unknown_fields_offset: Offset in the message of the UnknownFieldSet for -// the message. -// extensions_offset: Offset in the message of the ExtensionSet for the -// message, or -1 if the message type has no extension -// ranges. -// oneof_case_offset: Offset in the message of an array of uint32s of -// size descriptor->oneof_decl_count(). Each uint32_t -// indicates what field is set for each oneof. -// object_size: The size of a message object of this type, as measured -// by sizeof(). -// arena_offset: If a message doesn't have a unknown_field_set that stores -// the arena, it must have a direct pointer to the arena. -// weak_field_map_offset: If the message proto has weak fields, this is the -// offset of _weak_field_map_ in the generated proto. Otherwise -// -1. -struct ReflectionSchema { - public: - // Size of a google::protobuf::Message object of this type. - uint32_t GetObjectSize() const { return static_cast<uint32_t>(object_size_); } - - bool InRealOneof(const FieldDescriptor* field) const { - return field->containing_oneof() && - !field->containing_oneof()->is_synthetic(); - } - - // Offset of a non-oneof field. Getting a field offset is slightly more - // efficient when we know statically that it is not a oneof field. - uint32_t GetFieldOffsetNonOneof(const FieldDescriptor* field) const { - GOOGLE_DCHECK(!InRealOneof(field)); - return OffsetValue(offsets_[field->index()], field->type()); - } - - // Offset of any field. - uint32_t GetFieldOffset(const FieldDescriptor* field) const { - if (InRealOneof(field)) { - size_t offset = - static_cast<size_t>(field->containing_type()->field_count()) + - field->containing_oneof()->index(); - return OffsetValue(offsets_[offset], field->type()); - } else { - return GetFieldOffsetNonOneof(field); - } - } - - bool IsFieldInlined(const FieldDescriptor* field) const { - return Inlined(offsets_[field->index()], field->type()); - } - - uint32_t GetOneofCaseOffset(const OneofDescriptor* oneof_descriptor) const { - return static_cast<uint32_t>(oneof_case_offset_) + - static_cast<uint32_t>( - static_cast<size_t>(oneof_descriptor->index()) * - sizeof(uint32_t)); - } - - bool HasHasbits() const { return has_bits_offset_ != -1; } - - // Bit index within the bit array of hasbits. Bit order is low-to-high. - uint32_t HasBitIndex(const FieldDescriptor* field) const { - if (has_bits_offset_ == -1) return static_cast<uint32_t>(-1); - GOOGLE_DCHECK(HasHasbits()); - return has_bit_indices_[field->index()]; - } - - // Byte offset of the hasbits array. - uint32_t HasBitsOffset() const { - GOOGLE_DCHECK(HasHasbits()); - return static_cast<uint32_t>(has_bits_offset_); - } - - bool HasInlinedString() const { return inlined_string_donated_offset_ != -1; } - - // Bit index within the bit array of _inlined_string_donated_. Bit order is - // low-to-high. - uint32_t InlinedStringIndex(const FieldDescriptor* field) const { - GOOGLE_DCHECK(HasInlinedString()); - return inlined_string_indices_[field->index()]; - } - - // Byte offset of the _inlined_string_donated_ array. - uint32_t InlinedStringDonatedOffset() const { - GOOGLE_DCHECK(HasInlinedString()); - return static_cast<uint32_t>(inlined_string_donated_offset_); - } - - // The offset of the InternalMetadataWithArena member. - // For Lite this will actually be an InternalMetadataWithArenaLite. - // The schema doesn't contain enough information to distinguish between - // these two cases. - uint32_t GetMetadataOffset() const { - return static_cast<uint32_t>(metadata_offset_); - } - - // Whether this message has an ExtensionSet. - bool HasExtensionSet() const { return extensions_offset_ != -1; } - - // The offset of the ExtensionSet in this message. - uint32_t GetExtensionSetOffset() const { - GOOGLE_DCHECK(HasExtensionSet()); - return static_cast<uint32_t>(extensions_offset_); - } - - // The off set of WeakFieldMap when the message contains weak fields. - // The default is 0 for now. - int GetWeakFieldMapOffset() const { return weak_field_map_offset_; } - - bool IsDefaultInstance(const Message& message) const { - return &message == default_instance_; - } - - // Returns a pointer to the default value for this field. The size and type - // of the underlying data depends on the field's type. - const void* GetFieldDefault(const FieldDescriptor* field) const { - return reinterpret_cast<const uint8_t*>(default_instance_) + - OffsetValue(offsets_[field->index()], field->type()); - } - - // Returns true if the field is implicitly backed by LazyField. - bool IsEagerlyVerifiedLazyField(const FieldDescriptor* field) const { - GOOGLE_DCHECK_EQ(field->type(), FieldDescriptor::TYPE_MESSAGE); - (void)field; - return false; - } - - bool IsFieldStripped(const FieldDescriptor* field) const { - (void)field; - return false; - } - - bool IsMessageStripped(const Descriptor* descriptor) const { - (void)descriptor; - return false; - } - - - bool HasWeakFields() const { return weak_field_map_offset_ > 0; } - - // These members are intended to be private, but we cannot actually make them - // private because this prevents us from using aggregate initialization of - // them, ie. - // - // ReflectionSchema schema = {a, b, c, d, e, ...}; - // private: - const Message* default_instance_; - const uint32_t* offsets_; - const uint32_t* has_bit_indices_; - int has_bits_offset_; - int metadata_offset_; - int extensions_offset_; - int oneof_case_offset_; - int object_size_; - int weak_field_map_offset_; - const uint32_t* inlined_string_indices_; - int inlined_string_donated_offset_; - - // We tag offset values to provide additional data about fields (such as - // "unused" or "lazy" or "inlined"). - static uint32_t OffsetValue(uint32_t v, FieldDescriptor::Type type) { - if (type == FieldDescriptor::TYPE_MESSAGE || - type == FieldDescriptor::TYPE_STRING || - type == FieldDescriptor::TYPE_BYTES) { - return v & 0xFFFFFFFEu; - } - return v; - } - - static bool Inlined(uint32_t v, FieldDescriptor::Type type) { - if (type == FieldDescriptor::TYPE_STRING || - type == FieldDescriptor::TYPE_BYTES) { - return (v & 1u) != 0u; - } else { - // Non string/byte fields are not inlined. - return false; - } - } -}; - -// Structs that the code generator emits directly to describe a message. -// These should never used directly except to build a ReflectionSchema -// object. -// -// EXPERIMENTAL: these are changing rapidly, and may completely disappear -// or merge with ReflectionSchema. -struct MigrationSchema { - int32_t offsets_index; - int32_t has_bit_indices_index; - int32_t inlined_string_indices_index; - int object_size; -}; - -// This struct tries to reduce unnecessary padding. -// The num_xxx might not be close to their respective pointer, but this saves -// padding. -struct PROTOBUF_EXPORT DescriptorTable { - mutable bool is_initialized; - bool is_eager; - int size; // of serialized descriptor - const char* descriptor; - const char* filename; - once_flag* once; - const DescriptorTable* const* deps; - int num_deps; - int num_messages; - const MigrationSchema* schemas; - const Message* const* default_instances; - const uint32_t* offsets; - // update the following descriptor arrays. - Metadata* file_level_metadata; - const EnumDescriptor** file_level_enum_descriptors; - const ServiceDescriptor** file_level_service_descriptors; -}; - -enum { - // Tag used on offsets for fields that don't have a real offset. - // For example, weak message fields go into the WeakFieldMap and not in an - // actual field. - kInvalidFieldOffsetTag = 0x40000000u, -}; - -// AssignDescriptors() pulls the compiled FileDescriptor from the DescriptorPool -// and uses it to populate all of the global variables which store pointers to -// the descriptor objects. It also constructs the reflection objects. It is -// called the first time anyone calls descriptor() or GetReflection() on one of -// the types defined in the file. AssignDescriptors() is thread-safe. -void PROTOBUF_EXPORT AssignDescriptors(const DescriptorTable* table, - bool eager = false); - -// Overload used to implement GetMetadataStatic in the generated code. -// See comments in compiler/cpp/internal/file.cc as to why. -// It takes a `Metadata` and returns it to allow for tail calls and reduce -// binary size. -Metadata PROTOBUF_EXPORT AssignDescriptors(const DescriptorTable* (*table)(), - internal::once_flag* once, - const Metadata& metadata); - -// These cannot be in lite so we put them in the reflection. -PROTOBUF_EXPORT void UnknownFieldSetSerializer(const uint8_t* base, - uint32_t offset, uint32_t tag, - uint32_t has_offset, - io::CodedOutputStream* output); - -struct PROTOBUF_EXPORT AddDescriptorsRunner { - explicit AddDescriptorsRunner(const DescriptorTable* table); -}; - -} // namespace internal -} // namespace protobuf -} // namespace google - -#include <google/protobuf/port_undef.inc> - -#endif // GOOGLE_PROTOBUF_GENERATED_MESSAGE_REFLECTION_H__ diff --git a/include/google/protobuf/generated_message_tctable_decl.h b/include/google/protobuf/generated_message_tctable_decl.h deleted file mode 100644 index b1bb1def70..0000000000 --- a/include/google/protobuf/generated_message_tctable_decl.h +++ /dev/null @@ -1,312 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// 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 -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (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 file contains declarations needed in generated headers for messages -// that use tail-call table parsing. Everything in this file is for internal -// use only. - -#ifndef GOOGLE_PROTOBUF_GENERATED_MESSAGE_TCTABLE_DECL_H__ -#define GOOGLE_PROTOBUF_GENERATED_MESSAGE_TCTABLE_DECL_H__ - -#include <array> -#include <cstddef> -#include <cstdint> -#include <type_traits> - -#include <google/protobuf/message_lite.h> -#include <google/protobuf/parse_context.h> - -// Must come last: -#include <google/protobuf/port_def.inc> - -namespace google { -namespace protobuf { -namespace internal { - -// Additional information about this field: -struct TcFieldData { - constexpr TcFieldData() : data(0) {} - - // Fast table entry constructor: - constexpr TcFieldData(uint16_t coded_tag, uint8_t hasbit_idx, uint8_t aux_idx, - uint16_t offset) - : data(uint64_t{offset} << 48 | // - uint64_t{aux_idx} << 24 | // - uint64_t{hasbit_idx} << 16 | // - uint64_t{coded_tag}) {} - - // Fields used in fast table parsing: - // - // Bit: - // +-----------+-------------------+ - // |63 .. 32|31 .. 0| - // +---------------+---------------+ - // : . : . : . 16|=======| [16] coded_tag() - // : . : . : 24|===| . : [ 8] hasbit_idx() - // : . : . 32|===| : . : [ 8] aux_idx() - // : . 48:---.---: . : . : [16] (unused) - // |=======| . : . : . : [16] offset() - // +-----------+-------------------+ - // |63 .. 32|31 .. 0| - // +---------------+---------------+ - - template <typename TagType = uint16_t> - TagType coded_tag() const { - return static_cast<TagType>(data); - } - uint8_t hasbit_idx() const { return static_cast<uint8_t>(data >> 16); } - uint8_t aux_idx() const { return static_cast<uint8_t>(data >> 24); } - uint16_t offset() const { return static_cast<uint16_t>(data >> 48); } - - // Fields used in mini table parsing: - // - // Bit: - // +-----------+-------------------+ - // |63 .. 32|31 .. 0| - // +---------------+---------------+ - // : . : . |===============| [32] tag() (decoded) - // |===============| . : . : [32] entry_offset() - // +-----------+-------------------+ - // |63 .. 32|31 .. 0| - // +---------------+---------------+ - - uint32_t tag() const { return static_cast<uint32_t>(data); } - uint32_t entry_offset() const { return static_cast<uint32_t>(data >> 32); } - - uint64_t data; -}; - -struct TcParseTableBase; - -// TailCallParseFunc is the function pointer type used in the tailcall table. -typedef const char* (*TailCallParseFunc)(PROTOBUF_TC_PARAM_DECL); - -namespace field_layout { -struct Offset { - uint32_t off; -}; -} // namespace field_layout - -#if defined(_MSC_VER) && !defined(_WIN64) -#pragma warning(push) -// TcParseTableBase is intentionally overaligned on 32 bit targets. -#pragma warning(disable : 4324) -#endif - -// Base class for message-level table with info for the tail-call parser. -struct alignas(uint64_t) TcParseTableBase { - // Common attributes for message layout: - uint16_t has_bits_offset; - uint16_t extension_offset; - uint32_t extension_range_low; - uint32_t extension_range_high; - uint32_t max_field_number; - uint8_t fast_idx_mask; - uint16_t lookup_table_offset; - uint32_t skipmap32; - uint32_t field_entries_offset; - uint16_t num_field_entries; - - uint16_t num_aux_entries; - uint32_t aux_offset; - - const MessageLite* default_instance; - - // Handler for fields which are not handled by table dispatch. - TailCallParseFunc fallback; - - // This constructor exactly follows the field layout, so it's technically - // not necessary. However, it makes it much much easier to add or re-arrange - // fields, because it can be overloaded with an additional constructor, - // temporarily allowing both old and new protocol buffer headers to be - // compiled. - constexpr TcParseTableBase( - uint16_t has_bits_offset, uint16_t extension_offset, - uint32_t extension_range_low, uint32_t extension_range_high, - uint32_t max_field_number, uint8_t fast_idx_mask, - uint16_t lookup_table_offset, uint32_t skipmap32, - uint32_t field_entries_offset, uint16_t num_field_entries, - uint16_t num_aux_entries, uint32_t aux_offset, - const MessageLite* default_instance, TailCallParseFunc fallback) - : has_bits_offset(has_bits_offset), - extension_offset(extension_offset), - extension_range_low(extension_range_low), - extension_range_high(extension_range_high), - max_field_number(max_field_number), - fast_idx_mask(fast_idx_mask), - lookup_table_offset(lookup_table_offset), - skipmap32(skipmap32), - field_entries_offset(field_entries_offset), - num_field_entries(num_field_entries), - num_aux_entries(num_aux_entries), - aux_offset(aux_offset), - default_instance(default_instance), - fallback(fallback) {} - - // Table entry for fast-path tailcall dispatch handling. - struct FastFieldEntry { - // Target function for dispatch: - TailCallParseFunc target; - // Field data used during parse: - TcFieldData bits; - }; - // There is always at least one table entry. - const FastFieldEntry* fast_entry(size_t idx) const { - return reinterpret_cast<const FastFieldEntry*>(this + 1) + idx; - } - - // Returns a begin iterator (pointer) to the start of the field lookup table. - const uint16_t* field_lookup_begin() const { - return reinterpret_cast<const uint16_t*>(reinterpret_cast<uintptr_t>(this) + - lookup_table_offset); - } - - // Field entry for all fields. - struct FieldEntry { - uint32_t offset; // offset in the message object - int32_t has_idx; // has-bit index - uint16_t aux_idx; // index for `field_aux`. - uint16_t type_card; // `FieldType` and `Cardinality` (see _impl.h) - }; - - // Returns a begin iterator (pointer) to the start of the field entries array. - const FieldEntry* field_entries_begin() const { - return reinterpret_cast<const FieldEntry*>( - reinterpret_cast<uintptr_t>(this) + field_entries_offset); - } - - // Auxiliary entries for field types that need extra information. - union FieldAux { - constexpr FieldAux() : message_default(nullptr) {} - constexpr FieldAux(bool (*enum_validator)(int)) - : enum_validator(enum_validator) {} - constexpr FieldAux(field_layout::Offset off) : offset(off.off) {} - constexpr FieldAux(int16_t range_start, uint16_t range_length) - : enum_range{range_start, range_length} {} - constexpr FieldAux(const MessageLite* msg) : message_default(msg) {} - bool (*enum_validator)(int); - struct { - int16_t start; // minimum enum number (if it fits) - uint16_t length; // length of range (i.e., max = start + length - 1) - } enum_range; - uint32_t offset; - const MessageLite* message_default; - }; - const FieldAux* field_aux(uint32_t idx) const { - return reinterpret_cast<const FieldAux*>(reinterpret_cast<uintptr_t>(this) + - aux_offset) + - idx; - } - const FieldAux* field_aux(const FieldEntry* entry) const { - return field_aux(entry->aux_idx); - } - - // Field name data - const char* name_data() const { - return reinterpret_cast<const char*>(reinterpret_cast<uintptr_t>(this) + - aux_offset + - num_aux_entries * sizeof(FieldAux)); - } -}; - -#if defined(_MSC_VER) && !defined(_WIN64) -#pragma warning(pop) -#endif - -static_assert(sizeof(TcParseTableBase::FastFieldEntry) <= 16, - "Fast field entry is too big."); -static_assert(sizeof(TcParseTableBase::FieldEntry) <= 16, - "Field entry is too big."); - -template <size_t kFastTableSizeLog2, size_t kNumFieldEntries = 0, - size_t kNumFieldAux = 0, size_t kNameTableSize = 0, - size_t kFieldLookupSize = 2> -struct TcParseTable { - TcParseTableBase header; - - // Entries for each field. - // - // Fields are indexed by the lowest bits of their field number. The field - // number is masked to fit inside the table. Note that the parsing logic - // generally calls `TailCallParseTableBase::fast_entry()` instead of accessing - // this field directly. - std::array<TcParseTableBase::FastFieldEntry, (1 << kFastTableSizeLog2)> - fast_entries; - - // Just big enough to find all the field entries. - std::array<uint16_t, kFieldLookupSize> field_lookup_table; - // Entries for all fields: - std::array<TcParseTableBase::FieldEntry, kNumFieldEntries> field_entries; - std::array<TcParseTableBase::FieldAux, kNumFieldAux> aux_entries; - std::array<char, kNameTableSize> field_names; -}; - -// Partial specialization: if there are no aux entries, there will be no array. -// In C++, arrays cannot have length 0, but (C++11) std::array<T, 0> is valid. -// However, different implementations have different sizeof(std::array<T, 0>). -// Skipping the member makes offset computations portable. -template <size_t kFastTableSizeLog2, size_t kNumFieldEntries, - size_t kNameTableSize, size_t kFieldLookupSize> -struct TcParseTable<kFastTableSizeLog2, kNumFieldEntries, 0, kNameTableSize, - kFieldLookupSize> { - TcParseTableBase header; - std::array<TcParseTableBase::FastFieldEntry, (1 << kFastTableSizeLog2)> - fast_entries; - std::array<uint16_t, kFieldLookupSize> field_lookup_table; - std::array<TcParseTableBase::FieldEntry, kNumFieldEntries> field_entries; - std::array<char, kNameTableSize> field_names; -}; - -// Partial specialization: if there are no fields at all, then we can save space -// by skipping the field numbers and entries. -template <size_t kNameTableSize, size_t kFieldLookupSize> -struct TcParseTable<0, 0, 0, kNameTableSize, kFieldLookupSize> { - TcParseTableBase header; - // N.B.: the fast entries are sized by log2, so 2**0 fields = 1 entry. - // The fast parsing loop will always use this entry, so it must be present. - std::array<TcParseTableBase::FastFieldEntry, 1> fast_entries; - std::array<uint16_t, kFieldLookupSize> field_lookup_table; - std::array<char, kNameTableSize> field_names; -}; - -static_assert(std::is_standard_layout<TcParseTable<1>>::value, - "TcParseTable must be standard layout."); - -static_assert(offsetof(TcParseTable<1>, fast_entries) == - sizeof(TcParseTableBase), - "Table entries must be laid out after TcParseTableBase."); - -} // namespace internal -} // namespace protobuf -} // namespace google - -#include <google/protobuf/port_undef.inc> - -#endif // GOOGLE_PROTOBUF_GENERATED_MESSAGE_TCTABLE_DECL_H__ diff --git a/include/google/protobuf/generated_message_tctable_impl.h b/include/google/protobuf/generated_message_tctable_impl.h deleted file mode 100644 index 21fa5332d3..0000000000 --- a/include/google/protobuf/generated_message_tctable_impl.h +++ /dev/null @@ -1,553 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// 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 -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -#ifndef GOOGLE_PROTOBUF_GENERATED_MESSAGE_TCTABLE_IMPL_H__ -#define GOOGLE_PROTOBUF_GENERATED_MESSAGE_TCTABLE_IMPL_H__ - -#include <cstdint> -#include <type_traits> - -#include <google/protobuf/port.h> -#include <google/protobuf/extension_set.h> -#include <google/protobuf/generated_message_tctable_decl.h> -#include <google/protobuf/message_lite.h> -#include <google/protobuf/metadata_lite.h> -#include <google/protobuf/parse_context.h> -#include <google/protobuf/wire_format_lite.h> - -// Must come last: -#include <google/protobuf/port_def.inc> - -namespace google { -namespace protobuf { - -class Message; -class UnknownFieldSet; - -namespace internal { - -// Field layout enums. -// -// Structural information about fields is packed into a 16-bit value. The enum -// types below represent bitwise fields, along with their respective widths, -// shifts, and masks. -// -// Bit: -// +-----------------------+-----------------------+ -// |15 .. 8|7 .. 0| -// +-----------------------+-----------------------+ -// : . : . : . : . : . : . : 3|========| [3] FieldType -// : : : : : : 5|=====| : : [2] FieldCardinality -// : . : . : . : . 8|========| : . : . : [3] FieldRep -// : : : 10|=====| : : : : [2] TransformValidation -// : . : .12|=====| . : . : . : . : . : [2] FormatDiscriminator -// +-----------------------+-----------------------+ -// |15 .. 8|7 .. 0| -// +-----------------------+-----------------------+ -// -namespace field_layout { -// clang-format off - -// Field kind (3 bits): -// These values broadly represent a wire type and an in-memory storage class. -enum FieldKind : uint16_t { - kFkShift = 0, - kFkBits = 3, - kFkMask = ((1 << kFkBits) - 1) << kFkShift, - - kFkNone = 0, - kFkVarint, // WT=0 rep=8,32,64 bits - kFkPackedVarint, // WT=2 rep=8,32,64 bits - kFkFixed, // WT=1,5 rep=32,64 bits - kFkPackedFixed, // WT=2 rep=32,64 bits - kFkString, // WT=2 rep=various - kFkMessage, // WT=2,3,4 rep=MessageLite* - // Maps are a special case of Message, but use different parsing logic. - kFkMap, // WT=2 rep=Map(Lite)<various, various> -}; - -static_assert(kFkMap < (1 << kFkBits), "too many types"); - -// Cardinality (2 bits): -// These values determine how many values a field can have and its presence. -// Packed fields are represented in FieldType. -enum Cardinality : uint16_t { - kFcShift = kFkShift + kFkBits, - kFcBits = 2, - kFcMask = ((1 << kFcBits) - 1) << kFcShift, - - kFcSingular = 0, - kFcOptional = 1 << kFcShift, - kFcRepeated = 2 << kFcShift, - kFcOneof = 3 << kFcShift, -}; - -// Field representation (3 bits): -// These values are the specific refinements of storage classes in FieldType. -enum FieldRep : uint16_t { - kRepShift = kFcShift + kFcBits, - kRepBits = 3, - kRepMask = ((1 << kRepBits) - 1) << kRepShift, - - // Numeric types (used for optional and repeated fields): - kRep8Bits = 0, - kRep32Bits = 2 << kRepShift, - kRep64Bits = 3 << kRepShift, - // String types: - kRepAString = 0, // ArenaStringPtr - kRepIString = 1 << kRepShift, // InlinedString - kRepCord = 2 << kRepShift, // absl::Cord - kRepSPiece = 3 << kRepShift, // StringPieceField - kRepSString = 4 << kRepShift, // std::string* - // Message types (WT=2 unless otherwise noted): - kRepMessage = 0, // MessageLite* - kRepGroup = 1 << kRepShift, // MessageLite* (WT=3,4) - kRepLazy = 2 << kRepShift, // LazyField* - kRepIWeak = 3 << kRepShift, // ImplicitWeak -}; - -// Transform/validation (2 bits): -// These values determine transforms or validation to/from wire format. -enum TransformValidation : uint16_t { - kTvShift = kRepShift + kRepBits, - kTvBits = 2, - kTvMask = ((1 << kTvBits) - 1) << kTvShift, - - // Varint fields: - kTvZigZag = 1 << kTvShift, - kTvEnum = 2 << kTvShift, // validate using generated _IsValid() - kTvRange = 3 << kTvShift, // validate using FieldAux::enum_range - // String fields: - kTvUtf8Debug = 1 << kTvShift, // proto2 - kTvUtf8 = 2 << kTvShift, // proto3 -}; - -static_assert((kTvEnum & kTvRange) != 0, - "enum validation types must share a bit"); -static_assert((kTvEnum & kTvRange & kTvZigZag) == 0, - "zigzag encoding is not enum validation"); - -// Format discriminators (2 bits): -enum FormatDiscriminator : uint16_t { - kFmtShift = kTvShift + kTvBits, - kFmtBits = 2, - kFmtMask = ((1 << kFmtBits) - 1) << kFmtShift, - - // Numeric: - kFmtUnsigned = 1 << kFmtShift, // fixed, varint - kFmtSigned = 2 << kFmtShift, // fixed, varint - kFmtFloating = 3 << kFmtShift, // fixed - kFmtEnum = 3 << kFmtShift, // varint - // Strings: - kFmtUtf8 = 1 << kFmtShift, // string (proto3, enforce_utf8=true) - kFmtUtf8Escape = 2 << kFmtShift, // string (proto2, enforce_utf8=false) - // Bytes: - kFmtArray = 1 << kFmtShift, // bytes - // Messages: - kFmtShow = 1 << kFmtShift, // message, map -}; - -// Update this assertion (and comments above) when adding or removing bits: -static_assert(kFmtShift + kFmtBits == 12, "number of bits changed"); - -// This assertion should not change unless the storage width changes: -static_assert(kFmtShift + kFmtBits <= 16, "too many bits"); - -// Convenience aliases (16 bits, with format): -enum FieldType : uint16_t { - // Numeric types: - kBool = kFkVarint | kRep8Bits, - - kFixed32 = kFkFixed | kRep32Bits | kFmtUnsigned, - kUInt32 = kFkVarint | kRep32Bits | kFmtUnsigned, - kSFixed32 = kFkFixed | kRep32Bits | kFmtSigned, - kInt32 = kFkVarint | kRep32Bits | kFmtSigned, - kSInt32 = kFkVarint | kRep32Bits | kFmtSigned | kTvZigZag, - kFloat = kFkFixed | kRep32Bits | kFmtFloating, - kEnum = kFkVarint | kRep32Bits | kFmtEnum | kTvEnum, - kEnumRange = kFkVarint | kRep32Bits | kFmtEnum | kTvRange, - kOpenEnum = kFkVarint | kRep32Bits | kFmtEnum, - - kFixed64 = kFkFixed | kRep64Bits | kFmtUnsigned, - kUInt64 = kFkVarint | kRep64Bits | kFmtUnsigned, - kSFixed64 = kFkFixed | kRep64Bits | kFmtSigned, - kInt64 = kFkVarint | kRep64Bits | kFmtSigned, - kSInt64 = kFkVarint | kRep64Bits | kFmtSigned | kTvZigZag, - kDouble = kFkFixed | kRep64Bits | kFmtFloating, - - kPackedBool = kFkPackedVarint | kRep8Bits, - - kPackedFixed32 = kFkPackedFixed | kRep32Bits | kFmtUnsigned, - kPackedUInt32 = kFkPackedVarint | kRep32Bits | kFmtUnsigned, - kPackedSFixed32 = kFkPackedFixed | kRep32Bits | kFmtSigned, - kPackedInt32 = kFkPackedVarint | kRep32Bits | kFmtSigned, - kPackedSInt32 = kFkPackedVarint | kRep32Bits | kFmtSigned | kTvZigZag, - kPackedFloat = kFkPackedFixed | kRep32Bits | kFmtFloating, - kPackedEnum = kFkPackedVarint | kRep32Bits | kFmtEnum | kTvEnum, - kPackedEnumRange = kFkPackedVarint | kRep32Bits | kFmtEnum | kTvRange, - kPackedOpenEnum = kFkPackedVarint | kRep32Bits | kFmtEnum, - - kPackedFixed64 = kFkPackedFixed | kRep64Bits | kFmtUnsigned, - kPackedUInt64 = kFkPackedVarint | kRep64Bits | kFmtUnsigned, - kPackedSFixed64 = kFkPackedFixed | kRep64Bits | kFmtSigned, - kPackedInt64 = kFkPackedVarint | kRep64Bits | kFmtSigned, - kPackedSInt64 = kFkPackedVarint | kRep64Bits | kFmtSigned | kTvZigZag, - kPackedDouble = kFkPackedFixed | kRep64Bits | kFmtFloating, - - // String types: - kBytes = kFkString | kFmtArray, - kRawString = kFkString | kFmtUtf8 | kTvUtf8Debug, - kUtf8String = kFkString | kFmtUtf8 | kTvUtf8, - - // Message types: - kMessage = kFkMessage, - - // Map types: - kMap = kFkMap, -}; - -// clang-format on -} // namespace field_layout - -// PROTOBUF_TC_PARAM_DECL are the parameters for tailcall functions, it is -// defined in port_def.inc. -// -// Note that this is performance sensitive: changing the parameters will change -// the registers used by the ABI calling convention, which subsequently affects -// register selection logic inside the function. - -// PROTOBUF_TC_PARAM_PASS passes values to match PROTOBUF_TC_PARAM_DECL. -#define PROTOBUF_TC_PARAM_PASS msg, ptr, ctx, table, hasbits, data - -#ifndef NDEBUG -template <size_t align> -#ifndef _MSC_VER -[[noreturn]] -#endif -void AlignFail(uintptr_t address) { - GOOGLE_LOG(FATAL) << "Unaligned (" << align << ") access at " << address; -} - -extern template void AlignFail<4>(uintptr_t); -extern template void AlignFail<8>(uintptr_t); -#endif - -// TcParser implements most of the parsing logic for tailcall tables. -class PROTOBUF_EXPORT TcParser final { - public: - static const char* GenericFallback(PROTOBUF_TC_PARAM_DECL); - static const char* GenericFallbackLite(PROTOBUF_TC_PARAM_DECL); - - static const char* ParseLoop(MessageLite* msg, const char* ptr, - ParseContext* ctx, - const TcParseTableBase* table); - - // Functions referenced by generated fast tables (numeric types): - // F: fixed V: varint Z: zigzag - // 8/32/64: storage type width (bits) - // S: singular R: repeated P: packed - // 1/2: tag length (bytes) - - // Fixed: - static const char* FastF32S1(PROTOBUF_TC_PARAM_DECL); - static const char* FastF32S2(PROTOBUF_TC_PARAM_DECL); - static const char* FastF32R1(PROTOBUF_TC_PARAM_DECL); - static const char* FastF32R2(PROTOBUF_TC_PARAM_DECL); - static const char* FastF32P1(PROTOBUF_TC_PARAM_DECL); - static const char* FastF32P2(PROTOBUF_TC_PARAM_DECL); - static const char* FastF64S1(PROTOBUF_TC_PARAM_DECL); - static const char* FastF64S2(PROTOBUF_TC_PARAM_DECL); - static const char* FastF64R1(PROTOBUF_TC_PARAM_DECL); - static const char* FastF64R2(PROTOBUF_TC_PARAM_DECL); - static const char* FastF64P1(PROTOBUF_TC_PARAM_DECL); - static const char* FastF64P2(PROTOBUF_TC_PARAM_DECL); - - // Varint: - static const char* FastV8S1(PROTOBUF_TC_PARAM_DECL); - static const char* FastV8S2(PROTOBUF_TC_PARAM_DECL); - static const char* FastV8R1(PROTOBUF_TC_PARAM_DECL); - static const char* FastV8R2(PROTOBUF_TC_PARAM_DECL); - static const char* FastV8P1(PROTOBUF_TC_PARAM_DECL); - static const char* FastV8P2(PROTOBUF_TC_PARAM_DECL); - static const char* FastV32S1(PROTOBUF_TC_PARAM_DECL); - static const char* FastV32S2(PROTOBUF_TC_PARAM_DECL); - static const char* FastV32R1(PROTOBUF_TC_PARAM_DECL); - static const char* FastV32R2(PROTOBUF_TC_PARAM_DECL); - static const char* FastV32P1(PROTOBUF_TC_PARAM_DECL); - static const char* FastV32P2(PROTOBUF_TC_PARAM_DECL); - static const char* FastV64S1(PROTOBUF_TC_PARAM_DECL); - static const char* FastV64S2(PROTOBUF_TC_PARAM_DECL); - static const char* FastV64R1(PROTOBUF_TC_PARAM_DECL); - static const char* FastV64R2(PROTOBUF_TC_PARAM_DECL); - static const char* FastV64P1(PROTOBUF_TC_PARAM_DECL); - static const char* FastV64P2(PROTOBUF_TC_PARAM_DECL); - - // Varint (with zigzag): - static const char* FastZ32S1(PROTOBUF_TC_PARAM_DECL); - static const char* FastZ32S2(PROTOBUF_TC_PARAM_DECL); - static const char* FastZ32R1(PROTOBUF_TC_PARAM_DECL); - static const char* FastZ32R2(PROTOBUF_TC_PARAM_DECL); - static const char* FastZ32P1(PROTOBUF_TC_PARAM_DECL); - static const char* FastZ32P2(PROTOBUF_TC_PARAM_DECL); - static const char* FastZ64S1(PROTOBUF_TC_PARAM_DECL); - static const char* FastZ64S2(PROTOBUF_TC_PARAM_DECL); - static const char* FastZ64R1(PROTOBUF_TC_PARAM_DECL); - static const char* FastZ64R2(PROTOBUF_TC_PARAM_DECL); - static const char* FastZ64P1(PROTOBUF_TC_PARAM_DECL); - static const char* FastZ64P2(PROTOBUF_TC_PARAM_DECL); - - // Functions referenced by generated fast tables (closed enum): - // E: closed enum (N.B.: open enums use V32, above) - // r: enum range v: enum validator (_IsValid function) - // S: singular R: repeated - // 1/2: tag length (bytes) - static const char* FastErS1(PROTOBUF_TC_PARAM_DECL); - static const char* FastErS2(PROTOBUF_TC_PARAM_DECL); - static const char* FastErR1(PROTOBUF_TC_PARAM_DECL); - static const char* FastErR2(PROTOBUF_TC_PARAM_DECL); - static const char* FastEvS1(PROTOBUF_TC_PARAM_DECL); - static const char* FastEvS2(PROTOBUF_TC_PARAM_DECL); - static const char* FastEvR1(PROTOBUF_TC_PARAM_DECL); - static const char* FastEvR2(PROTOBUF_TC_PARAM_DECL); - - // Functions referenced by generated fast tables (string types): - // B: bytes S: string U: UTF-8 string - // (empty): ArenaStringPtr i: InlinedString - // S: singular R: repeated - // 1/2: tag length (bytes) - static const char* FastBS1(PROTOBUF_TC_PARAM_DECL); - static const char* FastBS2(PROTOBUF_TC_PARAM_DECL); - static const char* FastBR1(PROTOBUF_TC_PARAM_DECL); - static const char* FastBR2(PROTOBUF_TC_PARAM_DECL); - static const char* FastSS1(PROTOBUF_TC_PARAM_DECL); - static const char* FastSS2(PROTOBUF_TC_PARAM_DECL); - static const char* FastSR1(PROTOBUF_TC_PARAM_DECL); - static const char* FastSR2(PROTOBUF_TC_PARAM_DECL); - static const char* FastUS1(PROTOBUF_TC_PARAM_DECL); - static const char* FastUS2(PROTOBUF_TC_PARAM_DECL); - static const char* FastUR1(PROTOBUF_TC_PARAM_DECL); - static const char* FastUR2(PROTOBUF_TC_PARAM_DECL); - - static const char* FastBiS1(PROTOBUF_TC_PARAM_DECL); - static const char* FastBiS2(PROTOBUF_TC_PARAM_DECL); - static const char* FastSiS1(PROTOBUF_TC_PARAM_DECL); - static const char* FastSiS2(PROTOBUF_TC_PARAM_DECL); - static const char* FastUiS1(PROTOBUF_TC_PARAM_DECL); - static const char* FastUiS2(PROTOBUF_TC_PARAM_DECL); - - // Functions referenced by generated fast tables (message types): - // M: message G: group - // S: singular R: repeated - // 1/2: tag length (bytes) - static const char* FastMS1(PROTOBUF_TC_PARAM_DECL); - static const char* FastMS2(PROTOBUF_TC_PARAM_DECL); - static const char* FastMR1(PROTOBUF_TC_PARAM_DECL); - static const char* FastMR2(PROTOBUF_TC_PARAM_DECL); - static const char* FastGS1(PROTOBUF_TC_PARAM_DECL); - static const char* FastGS2(PROTOBUF_TC_PARAM_DECL); - static const char* FastGR1(PROTOBUF_TC_PARAM_DECL); - static const char* FastGR2(PROTOBUF_TC_PARAM_DECL); - - template <typename T> - static inline T& RefAt(void* x, size_t offset) { - T* target = reinterpret_cast<T*>(static_cast<char*>(x) + offset); -#ifndef NDEBUG - if (PROTOBUF_PREDICT_FALSE( - reinterpret_cast<uintptr_t>(target) % alignof(T) != 0)) { - AlignFail<alignof(T)>(reinterpret_cast<uintptr_t>(target)); - } -#endif - return *target; - } - - template <typename T> - static inline const T& RefAt(const void* x, size_t offset) { - const T* target = - reinterpret_cast<const T*>(static_cast<const char*>(x) + offset); -#ifndef NDEBUG - if (PROTOBUF_PREDICT_FALSE( - reinterpret_cast<uintptr_t>(target) % alignof(T) != 0)) { - AlignFail<alignof(T)>(reinterpret_cast<uintptr_t>(target)); - } -#endif - return *target; - } - - template <typename T> - static inline T ReadAt(const void* x, size_t offset) { - T out; - memcpy(&out, static_cast<const char*>(x) + offset, sizeof(T)); - return out; - } - - // Mini parsing: - // - // This function parses a field from incoming data based on metadata stored in - // the message definition. If the field is not defined in the message, it is - // stored in either the ExtensionSet (if applicable) or the UnknownFieldSet. - // - // NOTE: Currently, this function only calls the table-level fallback - // function, so it should only be called as the fallback from fast table - // parsing. - static const char* MiniParse(PROTOBUF_TC_PARAM_DECL); - - private: - friend class GeneratedTcTableLiteTest; - - template <typename TagType, bool group_coding> - static inline const char* SingularParseMessageAuxImpl(PROTOBUF_TC_PARAM_DECL); - template <typename TagType, bool group_coding> - static inline const char* RepeatedParseMessageAuxImpl(PROTOBUF_TC_PARAM_DECL); - - static inline PROTOBUF_ALWAYS_INLINE void SyncHasbits( - MessageLite* msg, uint64_t hasbits, const TcParseTableBase* table) { - const uint32_t has_bits_offset = table->has_bits_offset; - if (has_bits_offset) { - // Only the first 32 has-bits are updated. Nothing above those is stored, - // but e.g. messages without has-bits update the upper bits. - RefAt<uint32_t>(msg, has_bits_offset) = static_cast<uint32_t>(hasbits); - } - } - - static const char* TagDispatch(PROTOBUF_TC_PARAM_DECL); - static const char* ToTagDispatch(PROTOBUF_TC_PARAM_DECL); - static const char* ToParseLoop(PROTOBUF_TC_PARAM_DECL); - static const char* Error(PROTOBUF_TC_PARAM_DECL); - - static const char* FastUnknownEnumFallback(PROTOBUF_TC_PARAM_DECL); - - class ScopedArenaSwap; - - template <class MessageBaseT, class UnknownFieldsT> - static const char* GenericFallbackImpl(PROTOBUF_TC_PARAM_DECL) { -#define CHK_(x) \ - if (PROTOBUF_PREDICT_FALSE(!(x))) return nullptr /* NOLINT */ - - SyncHasbits(msg, hasbits, table); - CHK_(ptr); - uint32_t tag = data.tag(); - if ((tag & 7) == WireFormatLite::WIRETYPE_END_GROUP || tag == 0) { - ctx->SetLastTag(tag); - return ptr; - } - uint32_t num = tag >> 3; - if (table->extension_range_low <= num && - num <= table->extension_range_high) { - return RefAt<ExtensionSet>(msg, table->extension_offset) - .ParseField(tag, ptr, - static_cast<const MessageBaseT*>(table->default_instance), - &msg->_internal_metadata_, ctx); - } - return UnknownFieldParse( - tag, msg->_internal_metadata_.mutable_unknown_fields<UnknownFieldsT>(), - ptr, ctx); -#undef CHK_ - } - - // Note: `inline` is needed on template function declarations below to avoid - // -Wattributes diagnostic in GCC. - - // Implementations for fast fixed field parsing functions: - template <typename LayoutType, typename TagType> - static inline const char* SingularFixed(PROTOBUF_TC_PARAM_DECL); - template <typename LayoutType, typename TagType> - static inline const char* RepeatedFixed(PROTOBUF_TC_PARAM_DECL); - template <typename LayoutType, typename TagType> - static inline const char* PackedFixed(PROTOBUF_TC_PARAM_DECL); - - // Implementations for fast varint field parsing functions: - template <typename FieldType, typename TagType, bool zigzag = false> - static inline const char* SingularVarint(PROTOBUF_TC_PARAM_DECL); - template <typename FieldType, typename TagType, bool zigzag = false> - static inline const char* RepeatedVarint(PROTOBUF_TC_PARAM_DECL); - template <typename FieldType, typename TagType, bool zigzag = false> - static inline const char* PackedVarint(PROTOBUF_TC_PARAM_DECL); - - // Helper for ints > 127: - template <typename FieldType, typename TagType, bool zigzag = false> - static const char* SingularVarBigint(PROTOBUF_TC_PARAM_DECL); - - // Implementations for fast enum field parsing functions: - template <typename TagType, uint16_t xform_val> - static inline const char* SingularEnum(PROTOBUF_TC_PARAM_DECL); - template <typename TagType, uint16_t xform_val> - static inline const char* RepeatedEnum(PROTOBUF_TC_PARAM_DECL); - - // Implementations for fast string field parsing functions: - enum Utf8Type { kNoUtf8 = 0, kUtf8 = 1, kUtf8ValidateOnly = 2 }; - template <typename TagType, Utf8Type utf8> - static inline const char* SingularString(PROTOBUF_TC_PARAM_DECL); - template <typename TagType, Utf8Type utf8> - static inline const char* RepeatedString(PROTOBUF_TC_PARAM_DECL); - - // Mini field lookup: - static const TcParseTableBase::FieldEntry* FindFieldEntry( - const TcParseTableBase* table, uint32_t field_num); - static StringPiece MessageName(const TcParseTableBase* table); - static StringPiece FieldName(const TcParseTableBase* table, - const TcParseTableBase::FieldEntry*); - static bool ChangeOneof(const TcParseTableBase* table, - const TcParseTableBase::FieldEntry& entry, - uint32_t field_num, ParseContext* ctx, - MessageLite* msg); - - // UTF-8 validation: - static void ReportFastUtf8Error(uint32_t decoded_tag, - const TcParseTableBase* table); - static bool MpVerifyUtf8(StringPiece wire_bytes, - const TcParseTableBase* table, - const TcParseTableBase::FieldEntry& entry, - uint16_t xform_val); - - // For FindFieldEntry tests: - friend class FindFieldEntryTest; - static constexpr const uint32_t kMtSmallScanSize = 4; - - // Mini parsing: - static const char* MpVarint(PROTOBUF_TC_PARAM_DECL); - static const char* MpRepeatedVarint(PROTOBUF_TC_PARAM_DECL); - static const char* MpPackedVarint(PROTOBUF_TC_PARAM_DECL); - static const char* MpFixed(PROTOBUF_TC_PARAM_DECL); - static const char* MpRepeatedFixed(PROTOBUF_TC_PARAM_DECL); - static const char* MpPackedFixed(PROTOBUF_TC_PARAM_DECL); - static const char* MpString(PROTOBUF_TC_PARAM_DECL); - static const char* MpRepeatedString(PROTOBUF_TC_PARAM_DECL); - static const char* MpMessage(PROTOBUF_TC_PARAM_DECL); - static const char* MpRepeatedMessage(PROTOBUF_TC_PARAM_DECL); - static const char* MpMap(PROTOBUF_TC_PARAM_DECL); -}; - -} // namespace internal -} // namespace protobuf -} // namespace google - -#include <google/protobuf/port_undef.inc> - -#endif // GOOGLE_PROTOBUF_GENERATED_MESSAGE_TCTABLE_IMPL_H__ diff --git a/include/google/protobuf/generated_message_util.h b/include/google/protobuf/generated_message_util.h deleted file mode 100644 index 71d15cdebc..0000000000 --- a/include/google/protobuf/generated_message_util.h +++ /dev/null @@ -1,214 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// 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 -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -// Author: kenton@google.com (Kenton Varda) -// Based on original Protocol Buffers design by -// Sanjay Ghemawat, Jeff Dean, and others. -// -// This file contains miscellaneous helper code used by generated code -- -// including lite types -- but which should not be used directly by users. - -#ifndef GOOGLE_PROTOBUF_GENERATED_MESSAGE_UTIL_H__ -#define GOOGLE_PROTOBUF_GENERATED_MESSAGE_UTIL_H__ - -#include <assert.h> - -#include <atomic> -#include <climits> -#include <string> -#include <vector> - -#include <google/protobuf/stubs/common.h> -#include <google/protobuf/stubs/once.h> // Add direct dep on port for pb.cc -#include <google/protobuf/port.h> -#include <google/protobuf/stubs/strutil.h> -#include <google/protobuf/any.h> -#include <google/protobuf/has_bits.h> -#include <google/protobuf/implicit_weak_message.h> -#include <google/protobuf/message_lite.h> -#include <google/protobuf/repeated_field.h> -#include <google/protobuf/wire_format_lite.h> -#include <google/protobuf/stubs/casts.h> - -// Must be included last. -#include <google/protobuf/port_def.inc> - -#ifdef SWIG -#error "You cannot SWIG proto headers" -#endif - -namespace google { -namespace protobuf { - -class Arena; -class Message; - -namespace io { -class CodedInputStream; -} - -namespace internal { - -template <typename To, typename From> -inline To DownCast(From* f) { - return PROTOBUF_NAMESPACE_ID::internal::down_cast<To>(f); -} -template <typename To, typename From> -inline To DownCast(From& f) { - return PROTOBUF_NAMESPACE_ID::internal::down_cast<To>(f); -} - - -// This fastpath inlines a single branch instead of having to make the -// InitProtobufDefaults function call. -// It also generates less inlined code than a function-scope static initializer. -PROTOBUF_EXPORT extern std::atomic<bool> init_protobuf_defaults_state; -PROTOBUF_EXPORT void InitProtobufDefaultsSlow(); -PROTOBUF_EXPORT inline void InitProtobufDefaults() { - if (PROTOBUF_PREDICT_FALSE( - !init_protobuf_defaults_state.load(std::memory_order_acquire))) { - InitProtobufDefaultsSlow(); - } -} - -// This used by proto1 -PROTOBUF_EXPORT inline const std::string& GetEmptyString() { - InitProtobufDefaults(); - return GetEmptyStringAlreadyInited(); -} - - -// True if IsInitialized() is true for all elements of t. Type is expected -// to be a RepeatedPtrField<some message type>. It's useful to have this -// helper here to keep the protobuf compiler from ever having to emit loops in -// IsInitialized() methods. We want the C++ compiler to inline this or not -// as it sees fit. -template <typename Msg> -bool AllAreInitialized(const RepeatedPtrField<Msg>& t) { - for (int i = t.size(); --i >= 0;) { - if (!t.Get(i).IsInitialized()) return false; - } - return true; -} - -// "Weak" variant of AllAreInitialized, used to implement implicit weak fields. -// This version operates on MessageLite to avoid introducing a dependency on the -// concrete message type. -template <class T> -bool AllAreInitializedWeak(const RepeatedPtrField<T>& t) { - for (int i = t.size(); --i >= 0;) { - if (!reinterpret_cast<const RepeatedPtrFieldBase&>(t) - .Get<ImplicitWeakTypeHandler<T> >(i) - .IsInitialized()) { - return false; - } - } - return true; -} - -inline bool IsPresent(const void* base, uint32_t hasbit) { - const uint32_t* has_bits_array = static_cast<const uint32_t*>(base); - return (has_bits_array[hasbit / 32] & (1u << (hasbit & 31))) != 0; -} - -inline bool IsOneofPresent(const void* base, uint32_t offset, uint32_t tag) { - const uint32_t* oneof = reinterpret_cast<const uint32_t*>( - static_cast<const uint8_t*>(base) + offset); - return *oneof == tag >> 3; -} - -typedef void (*SpecialSerializer)(const uint8_t* base, uint32_t offset, - uint32_t tag, uint32_t has_offset, - io::CodedOutputStream* output); - -PROTOBUF_EXPORT void ExtensionSerializer(const MessageLite* extendee, - const uint8_t* ptr, uint32_t offset, - uint32_t tag, uint32_t has_offset, - io::CodedOutputStream* output); -PROTOBUF_EXPORT void UnknownFieldSerializerLite(const uint8_t* base, - uint32_t offset, uint32_t tag, - uint32_t has_offset, - io::CodedOutputStream* output); - -PROTOBUF_EXPORT MessageLite* DuplicateIfNonNullInternal(MessageLite* message); -PROTOBUF_EXPORT MessageLite* GetOwnedMessageInternal(Arena* message_arena, - MessageLite* submessage, - Arena* submessage_arena); -PROTOBUF_EXPORT void GenericSwap(MessageLite* m1, MessageLite* m2); -// We specialize GenericSwap for non-lite messages to benefit from reflection. -PROTOBUF_EXPORT void GenericSwap(Message* m1, Message* m2); - -template <typename T> -T* DuplicateIfNonNull(T* message) { - // The casts must be reinterpret_cast<> because T might be a forward-declared - // type that the compiler doesn't know is related to MessageLite. - return reinterpret_cast<T*>( - DuplicateIfNonNullInternal(reinterpret_cast<MessageLite*>(message))); -} - -template <typename T> -T* GetOwnedMessage(Arena* message_arena, T* submessage, - Arena* submessage_arena) { - // The casts must be reinterpret_cast<> because T might be a forward-declared - // type that the compiler doesn't know is related to MessageLite. - return reinterpret_cast<T*>(GetOwnedMessageInternal( - message_arena, reinterpret_cast<MessageLite*>(submessage), - submessage_arena)); -} - -// Hide atomic from the public header and allow easy change to regular int -// on platforms where the atomic might have a perf impact. -class PROTOBUF_EXPORT CachedSize { - public: - int Get() const { return size_.load(std::memory_order_relaxed); } - void Set(int size) { size_.store(size, std::memory_order_relaxed); } - - private: - std::atomic<int> size_{0}; -}; - -PROTOBUF_EXPORT void DestroyMessage(const void* message); -PROTOBUF_EXPORT void DestroyString(const void* s); -// Destroy (not delete) the message -inline void OnShutdownDestroyMessage(const void* ptr) { - OnShutdownRun(DestroyMessage, ptr); -} -// Destroy the string (call std::string destructor) -inline void OnShutdownDestroyString(const std::string* ptr) { - OnShutdownRun(DestroyString, ptr); -} - -} // namespace internal -} // namespace protobuf -} // namespace google - -#include <google/protobuf/port_undef.inc> - -#endif // GOOGLE_PROTOBUF_GENERATED_MESSAGE_UTIL_H__ diff --git a/include/google/protobuf/has_bits.h b/include/google/protobuf/has_bits.h deleted file mode 100644 index f8a45879f1..0000000000 --- a/include/google/protobuf/has_bits.h +++ /dev/null @@ -1,117 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// 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 -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -#ifndef GOOGLE_PROTOBUF_HAS_BITS_H__ -#define GOOGLE_PROTOBUF_HAS_BITS_H__ - -#include <google/protobuf/stubs/common.h> -#include <google/protobuf/port.h> - -// Must be included last. -#include <google/protobuf/port_def.inc> - -#ifdef SWIG -#error "You cannot SWIG proto headers" -#endif - -namespace google { -namespace protobuf { -namespace internal { - -template <size_t doublewords> -class HasBits { - public: - PROTOBUF_NDEBUG_INLINE constexpr HasBits() : has_bits_{} {} - - PROTOBUF_NDEBUG_INLINE void Clear() { - memset(has_bits_, 0, sizeof(has_bits_)); - } - - PROTOBUF_NDEBUG_INLINE uint32_t& operator[](int index) { - return has_bits_[index]; - } - - PROTOBUF_NDEBUG_INLINE const uint32_t& operator[](int index) const { - return has_bits_[index]; - } - - bool operator==(const HasBits<doublewords>& rhs) const { - return memcmp(has_bits_, rhs.has_bits_, sizeof(has_bits_)) == 0; - } - - bool operator!=(const HasBits<doublewords>& rhs) const { - return !(*this == rhs); - } - - void Or(const HasBits<doublewords>& rhs) { - for (size_t i = 0; i < doublewords; i++) has_bits_[i] |= rhs[i]; - } - - bool empty() const; - - private: - uint32_t has_bits_[doublewords]; -}; - -template <> -inline bool HasBits<1>::empty() const { - return !has_bits_[0]; -} - -template <> -inline bool HasBits<2>::empty() const { - return !(has_bits_[0] | has_bits_[1]); -} - -template <> -inline bool HasBits<3>::empty() const { - return !(has_bits_[0] | has_bits_[1] | has_bits_[2]); -} - -template <> -inline bool HasBits<4>::empty() const { - return !(has_bits_[0] | has_bits_[1] | has_bits_[2] | has_bits_[3]); -} - -template <size_t doublewords> -inline bool HasBits<doublewords>::empty() const { - for (size_t i = 0; i < doublewords; ++i) { - if (has_bits_[i]) return false; - } - return true; -} - -} // namespace internal -} // namespace protobuf -} // namespace google - -#include <google/protobuf/port_undef.inc> - -#endif // GOOGLE_PROTOBUF_HAS_BITS_H__ diff --git a/include/google/protobuf/implicit_weak_message.h b/include/google/protobuf/implicit_weak_message.h deleted file mode 100644 index b894ab4809..0000000000 --- a/include/google/protobuf/implicit_weak_message.h +++ /dev/null @@ -1,213 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// 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 -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -#ifndef GOOGLE_PROTOBUF_IMPLICIT_WEAK_MESSAGE_H__ -#define GOOGLE_PROTOBUF_IMPLICIT_WEAK_MESSAGE_H__ - -#include <string> - -#include <google/protobuf/io/coded_stream.h> -#include <google/protobuf/arena.h> -#include <google/protobuf/message_lite.h> -#include <google/protobuf/repeated_field.h> - -#ifdef SWIG -#error "You cannot SWIG proto headers" -#endif - -// Must be included last. -#include <google/protobuf/port_def.inc> - -// This file is logically internal-only and should only be used by protobuf -// generated code. - -namespace google { -namespace protobuf { -namespace internal { - -// An implementation of MessageLite that treats all data as unknown. This type -// acts as a placeholder for an implicit weak field in the case where the true -// message type does not get linked into the binary. -class PROTOBUF_EXPORT ImplicitWeakMessage : public MessageLite { - public: - ImplicitWeakMessage() : data_(new std::string) {} - explicit constexpr ImplicitWeakMessage(ConstantInitialized) - : data_(nullptr) {} - explicit ImplicitWeakMessage(Arena* arena) - : MessageLite(arena), data_(new std::string) {} - - ~ImplicitWeakMessage() override { - // data_ will be null in the default instance, but we can safely call delete - // here because the default instance will never be destroyed. - delete data_; - } - - static const ImplicitWeakMessage* default_instance(); - - std::string GetTypeName() const override { return ""; } - - MessageLite* New(Arena* arena) const override { - return Arena::CreateMessage<ImplicitWeakMessage>(arena); - } - - void Clear() override { data_->clear(); } - - bool IsInitialized() const override { return true; } - - void CheckTypeAndMergeFrom(const MessageLite& other) override { - const std::string* other_data = - static_cast<const ImplicitWeakMessage&>(other).data_; - if (other_data != nullptr) { - data_->append(*other_data); - } - } - - const char* _InternalParse(const char* ptr, ParseContext* ctx) final; - - size_t ByteSizeLong() const override { - return data_ == nullptr ? 0 : data_->size(); - } - - uint8_t* _InternalSerialize(uint8_t* target, - io::EpsCopyOutputStream* stream) const final { - if (data_ == nullptr) { - return target; - } - return stream->WriteRaw(data_->data(), static_cast<int>(data_->size()), - target); - } - - int GetCachedSize() const override { - return data_ == nullptr ? 0 : static_cast<int>(data_->size()); - } - - typedef void InternalArenaConstructable_; - - private: - // This std::string is allocated on the heap, but we use a raw pointer so that - // the default instance can be constant-initialized. In the const methods, we - // have to handle the possibility of data_ being null. - std::string* data_; - GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(ImplicitWeakMessage); -}; - -struct ImplicitWeakMessageDefaultType; -extern ImplicitWeakMessageDefaultType implicit_weak_message_default_instance; - -// A type handler for use with implicit weak repeated message fields. -template <typename ImplicitWeakType> -class ImplicitWeakTypeHandler { - public: - typedef MessageLite Type; - static constexpr bool Moveable = false; - - static inline MessageLite* NewFromPrototype(const MessageLite* prototype, - Arena* arena = nullptr) { - return prototype->New(arena); - } - - static inline void Delete(MessageLite* value, Arena* arena) { - if (arena == nullptr) { - delete value; - } - } - static inline Arena* GetArena(MessageLite* value) { - return value->GetArena(); - } - static inline void Clear(MessageLite* value) { value->Clear(); } - static void Merge(const MessageLite& from, MessageLite* to) { - to->CheckTypeAndMergeFrom(from); - } -}; - -} // namespace internal - -template <typename T> -struct WeakRepeatedPtrField { - using TypeHandler = internal::ImplicitWeakTypeHandler<T>; - constexpr WeakRepeatedPtrField() : weak() {} - explicit WeakRepeatedPtrField(Arena* arena) : weak(arena) {} - ~WeakRepeatedPtrField() { weak.template Destroy<TypeHandler>(); } - - typedef internal::RepeatedPtrIterator<MessageLite> iterator; - typedef internal::RepeatedPtrIterator<const MessageLite> const_iterator; - typedef internal::RepeatedPtrOverPtrsIterator<MessageLite*, void*> - pointer_iterator; - typedef internal::RepeatedPtrOverPtrsIterator<const MessageLite* const, - const void* const> - const_pointer_iterator; - - iterator begin() { return iterator(base().raw_data()); } - const_iterator begin() const { return iterator(base().raw_data()); } - const_iterator cbegin() const { return begin(); } - iterator end() { return begin() + base().size(); } - const_iterator end() const { return begin() + base().size(); } - const_iterator cend() const { return end(); } - pointer_iterator pointer_begin() { - return pointer_iterator(base().raw_mutable_data()); - } - const_pointer_iterator pointer_begin() const { - return const_pointer_iterator(base().raw_mutable_data()); - } - pointer_iterator pointer_end() { - return pointer_iterator(base().raw_mutable_data() + base().size()); - } - const_pointer_iterator pointer_end() const { - return const_pointer_iterator(base().raw_mutable_data() + base().size()); - } - - MessageLite* AddWeak(const MessageLite* prototype) { - return base().AddWeak(prototype); - } - T* Add() { return weak.Add(); } - void Clear() { base().template Clear<TypeHandler>(); } - void MergeFrom(const WeakRepeatedPtrField& other) { - base().template MergeFrom<TypeHandler>(other.base()); - } - void InternalSwap(WeakRepeatedPtrField* other) { - base().InternalSwap(&other->base()); - } - - const internal::RepeatedPtrFieldBase& base() const { return weak; } - internal::RepeatedPtrFieldBase& base() { return weak; } - // Union disables running the destructor. Which would create a strong link. - // Instead we explicitly destroy the underlying base through the virtual - // destructor. - union { - RepeatedPtrField<T> weak; - }; -}; - -} // namespace protobuf -} // namespace google - -#include <google/protobuf/port_undef.inc> - -#endif // GOOGLE_PROTOBUF_IMPLICIT_WEAK_MESSAGE_H__ diff --git a/include/google/protobuf/inlined_string_field.h b/include/google/protobuf/inlined_string_field.h deleted file mode 100644 index 79e37d414b..0000000000 --- a/include/google/protobuf/inlined_string_field.h +++ /dev/null @@ -1,532 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// 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 -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -#ifndef GOOGLE_PROTOBUF_INLINED_STRING_FIELD_H__ -#define GOOGLE_PROTOBUF_INLINED_STRING_FIELD_H__ - -#include <string> -#include <utility> - -#include <google/protobuf/stubs/logging.h> -#include <google/protobuf/stubs/common.h> -#include <google/protobuf/port.h> -#include <google/protobuf/stubs/strutil.h> -#include <google/protobuf/arenastring.h> -#include <google/protobuf/message_lite.h> - -// Must be included last. -#include <google/protobuf/port_def.inc> - -#ifdef SWIG -#error "You cannot SWIG proto headers" -#endif - -namespace google { -namespace protobuf { - -class Arena; - -namespace internal { - -// InlinedStringField wraps a std::string instance and exposes an API similar to -// ArenaStringPtr's wrapping of a std::string* instance. -// -// default_value parameters are taken for consistency with ArenaStringPtr, but -// are not used for most methods. With inlining, these should be removed from -// the generated binary. -// -// InlinedStringField has a donating mechanism that allows string buffer -// allocated on arena. A string is donated means both the string container and -// the data buffer are on arena. The donating mechanism here is similar to the -// one in ArenaStringPtr with some differences: -// -// When an InlinedStringField is constructed, the donating state is true. This -// is because the string container is directly stored in the message on the -// arena: -// -// Construction: donated=true -// Arena: -// +-----------------------+ -// |Message foo: | -// | +-------------------+ | -// | |InlinedStringField:| | -// | | +-----+ | | -// | | | | | | | | -// | | +-----+ | | -// | +-------------------+ | -// +-----------------------+ -// -// When lvalue Set is called, the donating state is still true. String data will -// be allocated on the arena: -// -// Lvalue Set: donated=true -// Arena: -// +-----------------------+ -// |Message foo: | -// | +-------------------+ | -// | |InlinedStringField:| | -// | | +-----+ | | -// | | | | | | | | -// | | +|----+ | | -// | +--|----------------+ | -// | V | -// | +----------------+ | -// | |'f','o','o',... | | -// | +----------------+ | -// +-----------------------+ -// -// Some operations will undonate a donated string, including: Mutable, -// SetAllocated, Rvalue Set, and Swap with a non-donated string. -// -// For more details of the donating states transitions, go/pd-inlined-string. -class PROTOBUF_EXPORT InlinedStringField { - public: - InlinedStringField() { Init(); } - inline void Init() { new (get_mutable()) std::string(); } - // Add the dummy parameter just to make InlinedStringField(nullptr) - // unambiguous. - constexpr InlinedStringField( - const ExplicitlyConstructed<std::string>* /*default_value*/, - bool /*dummy*/) - : value_{} {} - explicit InlinedStringField(const std::string& default_value); - explicit InlinedStringField(Arena* arena); - ~InlinedStringField() { Destruct(); } - - // Lvalue Set. To save space, we pack the donating states of multiple - // InlinedStringFields into an uint32_t `donating_states`. The `mask` - // indicates the position of the bit for this InlinedStringField. `donated` is - // whether this field is donated. - // - // The caller should guarantee that: - // - // `donated == ((donating_states & ~mask) != 0)` - // - // This method never changes the `donating_states`. - void Set(ConstStringParam value, Arena* arena, bool donated, - uint32_t* donating_states, uint32_t mask, MessageLite* msg); - - // Rvalue Set. If this field is donated, this method will undonate this field - // by mutating the `donating_states` according to `mask`. - void Set(std::string&& value, Arena* arena, bool donated, - uint32_t* donating_states, uint32_t mask, MessageLite* msg); - - void Set(const char* str, ::google::protobuf::Arena* arena, bool donated, - uint32_t* donating_states, uint32_t mask, MessageLite* msg); - - void Set(const char* str, size_t size, ::google::protobuf::Arena* arena, bool donated, - uint32_t* donating_states, uint32_t mask, MessageLite* msg); - - template <typename RefWrappedType> - void Set(std::reference_wrapper<RefWrappedType> const_string_ref, - ::google::protobuf::Arena* arena, bool donated, uint32_t* donating_states, - uint32_t mask, MessageLite* msg); - - void SetBytes(ConstStringParam value, Arena* arena, bool donated, - uint32_t* donating_states, uint32_t mask, MessageLite* msg); - - void SetBytes(std::string&& value, Arena* arena, bool donated, - uint32_t* donating_states, uint32_t mask, MessageLite* msg); - - void SetBytes(const char* str, ::google::protobuf::Arena* arena, bool donated, - uint32_t* donating_states, uint32_t mask, MessageLite* msg); - - void SetBytes(const void* p, size_t size, ::google::protobuf::Arena* arena, - bool donated, uint32_t* donating_states, uint32_t mask, - MessageLite* msg); - - template <typename RefWrappedType> - void SetBytes(std::reference_wrapper<RefWrappedType> const_string_ref, - ::google::protobuf::Arena* arena, bool donated, uint32_t* donating_states, - uint32_t mask, MessageLite* msg); - - PROTOBUF_NDEBUG_INLINE void SetNoArena(StringPiece value); - PROTOBUF_NDEBUG_INLINE void SetNoArena(std::string&& value); - - // Basic accessors. - PROTOBUF_NDEBUG_INLINE const std::string& Get() const { return GetNoArena(); } - PROTOBUF_NDEBUG_INLINE const std::string& GetNoArena() const; - - // Mutable returns a std::string* instance that is heap-allocated. If this - // field is donated, this method undonates this field by mutating the - // `donating_states` according to `mask`, and copies the content of the - // original string to the returning string. - std::string* Mutable(Arena* arena, bool donated, uint32_t* donating_states, - uint32_t mask, MessageLite* msg); - std::string* Mutable(const LazyString& default_value, Arena* arena, - bool donated, uint32_t* donating_states, uint32_t mask, - MessageLite* msg); - - // Mutable(nullptr_t) is an overload to explicitly support Mutable(nullptr) - // calls used by the internal parser logic. This provides API equivalence with - // ArenaStringPtr, while still protecting against calls with arena pointers. - std::string* Mutable(std::nullptr_t); - std::string* MutableNoCopy(std::nullptr_t); - - // Takes a std::string that is heap-allocated, and takes ownership. The - // std::string's destructor is registered with the arena. Used to implement - // set_allocated_<field> in generated classes. - // - // If this field is donated, this method undonates this field by mutating the - // `donating_states` according to `mask`. - void SetAllocated(const std::string* default_value, std::string* value, - Arena* arena, bool donated, uint32_t* donating_states, - uint32_t mask, MessageLite* msg); - - void SetAllocatedNoArena(const std::string* default_value, - std::string* value); - - // Release returns a std::string* instance that is heap-allocated and is not - // Own()'d by any arena. If the field is not set, this returns nullptr. The - // caller retains ownership. Clears this field back to nullptr state. Used to - // implement release_<field>() methods on generated classes. - PROTOBUF_NODISCARD std::string* Release(Arena* arena, bool donated); - PROTOBUF_NODISCARD std::string* Release(); - - // -------------------------------------------------------- - // Below functions will be removed in subsequent code change - // -------------------------------------------------------- -#ifdef DEPRECATED_METHODS_TO_BE_DELETED - PROTOBUF_NODISCARD std::string* Release(const std::string*, Arena* arena, - bool donated) { - return Release(arena, donated); - } - - PROTOBUF_NODISCARD std::string* ReleaseNonDefault(const std::string*, - Arena* arena) { - return Release(); - } - - std::string* ReleaseNonDefaultNoArena(const std::string* default_value) { - return Release(); - } - - void Set(const std::string*, ConstStringParam value, Arena* arena, - bool donated, uint32_t* donating_states, uint32_t mask, - MessageLite* msg) { - Set(value, arena, donated, donating_states, mask, msg); - } - - void Set(const std::string*, std::string&& value, Arena* arena, bool donated, - uint32_t* donating_states, uint32_t mask, MessageLite* msg) { - Set(std::move(value), arena, donated, donating_states, mask, msg); - } - - - template <typename FirstParam> - void Set(FirstParam, const char* str, ::google::protobuf::Arena* arena, bool donated, - uint32_t* donating_states, uint32_t mask, MessageLite* msg) { - Set(str, arena, donated, donating_states, mask, msg); - } - - template <typename FirstParam> - void Set(FirstParam p1, const char* str, size_t size, ::google::protobuf::Arena* arena, - bool donated, uint32_t* donating_states, uint32_t mask, - MessageLite* msg) { - Set(str, size, arena, donated, donating_states, mask, msg); - } - - template <typename FirstParam, typename RefWrappedType> - void Set(FirstParam p1, - std::reference_wrapper<RefWrappedType> const_string_ref, - ::google::protobuf::Arena* arena, bool donated, uint32_t* donating_states, - uint32_t mask, MessageLite* msg) { - Set(const_string_ref, arena, donated, donating_states, mask, msg); - } - - void SetBytes(const std::string*, ConstStringParam value, Arena* arena, - bool donated, uint32_t* donating_states, uint32_t mask, - MessageLite* msg) { - Set(value, arena, donated, donating_states, mask, msg); - } - - - void SetBytes(const std::string*, std::string&& value, Arena* arena, - bool donated, uint32_t* donating_states, uint32_t mask, - MessageLite* msg) { - Set(std::move(value), arena, donated, donating_states, mask, msg); - } - - template <typename FirstParam> - void SetBytes(FirstParam p1, const char* str, ::google::protobuf::Arena* arena, - bool donated, uint32_t* donating_states, uint32_t mask, - MessageLite* msg) { - SetBytes(str, arena, donated, donating_states, mask, msg); - } - - template <typename FirstParam> - void SetBytes(FirstParam p1, const void* p, size_t size, - ::google::protobuf::Arena* arena, bool donated, uint32_t* donating_states, - uint32_t mask, MessageLite* msg) { - SetBytes(p, size, arena, donated, donating_states, mask, msg); - } - - template <typename FirstParam, typename RefWrappedType> - void SetBytes(FirstParam p1, - std::reference_wrapper<RefWrappedType> const_string_ref, - ::google::protobuf::Arena* arena, bool donated, uint32_t* donating_states, - uint32_t mask, MessageLite* msg) { - SetBytes(const_string_ref.get(), arena, donated, donating_states, mask, - msg); - } - - void SetNoArena(const std::string*, StringPiece value) { - SetNoArena(value); - } - void SetNoArena(const std::string*, std::string&& value) { - SetNoArena(std::move(value)); - } - - std::string* Mutable(ArenaStringPtr::EmptyDefault, Arena* arena, bool donated, - uint32_t* donating_states, uint32_t mask, - MessageLite* msg) { - return Mutable(arena, donated, donating_states, mask, msg); - } - - PROTOBUF_NDEBUG_INLINE std::string* MutableNoArenaNoDefault( - const std::string* /*default_value*/) { - return MutableNoCopy(nullptr); - } - -#endif // DEPRECATED_METHODS_TO_BE_DELETED - - // Arena-safety semantics: this is guarded by the logic in - // Swap()/UnsafeArenaSwap() at the message level, so this method is - // 'unsafe' if called directly. - inline PROTOBUF_NDEBUG_INLINE static void InternalSwap( - InlinedStringField* lhs, Arena* lhs_arena, bool lhs_arena_dtor_registered, - MessageLite* lhs_msg, // - InlinedStringField* rhs, Arena* rhs_arena, bool rhs_arena_dtor_registered, - MessageLite* rhs_msg); - - // Frees storage (if not on an arena). - PROTOBUF_NDEBUG_INLINE void Destroy(const std::string* default_value, - Arena* arena) { - if (arena == nullptr) { - DestroyNoArena(default_value); - } - } - PROTOBUF_NDEBUG_INLINE void DestroyNoArena(const std::string* default_value); - - // Clears content, but keeps allocated std::string, to avoid the overhead of - // heap operations. After this returns, the content (as seen by the user) will - // always be the empty std::string. - PROTOBUF_NDEBUG_INLINE void ClearToEmpty() { ClearNonDefaultToEmpty(); } - PROTOBUF_NDEBUG_INLINE void ClearNonDefaultToEmpty() { - get_mutable()->clear(); - } - - // Clears content, but keeps allocated std::string if arena != nullptr, to - // avoid the overhead of heap operations. After this returns, the content (as - // seen by the user) will always be equal to |default_value|. - void ClearToDefault(const LazyString& default_value, Arena* arena, - bool donated); - - // Generated code / reflection only! Returns a mutable pointer to the string. - PROTOBUF_NDEBUG_INLINE std::string* UnsafeMutablePointer(); - - // InlinedStringField doesn't have things like the `default_value` pointer in - // ArenaStringPtr. - static constexpr bool IsDefault() { return false; } - static constexpr bool IsDefault(const std::string*) { return false; } - - private: - void Destruct() { get_mutable()->~basic_string(); } - - PROTOBUF_NDEBUG_INLINE std::string* get_mutable(); - PROTOBUF_NDEBUG_INLINE const std::string* get_const() const; - - alignas(std::string) char value_[sizeof(std::string)]; - - std::string* MutableSlow(::google::protobuf::Arena* arena, bool donated, - uint32_t* donating_states, uint32_t mask, - MessageLite* msg); - - - // When constructed in an Arena, we want our destructor to be skipped. - friend class ::google::protobuf::Arena; - typedef void InternalArenaConstructable_; - typedef void DestructorSkippable_; -}; - -inline std::string* InlinedStringField::get_mutable() { - return reinterpret_cast<std::string*>(&value_); -} - -inline const std::string* InlinedStringField::get_const() const { - return reinterpret_cast<const std::string*>(&value_); -} - -inline InlinedStringField::InlinedStringField( - const std::string& default_value) { - new (get_mutable()) std::string(default_value); -} - - -inline InlinedStringField::InlinedStringField(Arena* /*arena*/) { Init(); } - -inline const std::string& InlinedStringField::GetNoArena() const { - return *get_const(); -} - -inline void InlinedStringField::SetAllocatedNoArena( - const std::string* /*default_value*/, std::string* value) { - if (value == nullptr) { - // Currently, inlined string field can't have non empty default. - get_mutable()->clear(); - } else { - get_mutable()->assign(std::move(*value)); - delete value; - } -} - -inline void InlinedStringField::DestroyNoArena(const std::string*) { - // This is invoked from the generated message's ArenaDtor, which is used to - // clean up objects not allocated on the Arena. - this->~InlinedStringField(); -} - -inline void InlinedStringField::SetNoArena(StringPiece value) { - get_mutable()->assign(value.data(), value.length()); -} - -inline void InlinedStringField::SetNoArena(std::string&& value) { - get_mutable()->assign(std::move(value)); -} - -// Caller should make sure rhs_arena allocated rhs, and lhs_arena allocated lhs. -inline PROTOBUF_NDEBUG_INLINE void InlinedStringField::InternalSwap( - InlinedStringField* lhs, Arena* lhs_arena, bool lhs_arena_dtor_registered, - MessageLite* lhs_msg, // - InlinedStringField* rhs, Arena* rhs_arena, bool rhs_arena_dtor_registered, - MessageLite* rhs_msg) { -#if GOOGLE_PROTOBUF_INTERNAL_DONATE_STEAL_INLINE - lhs->get_mutable()->swap(*rhs->get_mutable()); - if (!lhs_arena_dtor_registered && rhs_arena_dtor_registered) { - lhs_msg->OnDemandRegisterArenaDtor(lhs_arena); - } else if (lhs_arena_dtor_registered && !rhs_arena_dtor_registered) { - rhs_msg->OnDemandRegisterArenaDtor(rhs_arena); - } -#else - (void)lhs_arena; - (void)rhs_arena; - (void)lhs_arena_dtor_registered; - (void)rhs_arena_dtor_registered; - (void)lhs_msg; - (void)rhs_msg; - lhs->get_mutable()->swap(*rhs->get_mutable()); -#endif -} - -inline void InlinedStringField::Set(ConstStringParam value, Arena* arena, - bool donated, uint32_t* /*donating_states*/, - uint32_t /*mask*/, MessageLite* /*msg*/) { - (void)arena; - (void)donated; - SetNoArena(value); -} - -inline void InlinedStringField::Set(const char* str, ::google::protobuf::Arena* arena, - bool donated, uint32_t* donating_states, - uint32_t mask, MessageLite* msg) { - Set(ConstStringParam(str), arena, donated, donating_states, mask, msg); -} - -inline void InlinedStringField::Set(const char* str, size_t size, - ::google::protobuf::Arena* arena, bool donated, - uint32_t* donating_states, uint32_t mask, - MessageLite* msg) { - Set(ConstStringParam{str, size}, arena, donated, donating_states, mask, msg); -} - -inline void InlinedStringField::SetBytes(ConstStringParam value, Arena* arena, - bool donated, - uint32_t* donating_states, - uint32_t mask, MessageLite* msg) { - Set(value, arena, donated, donating_states, mask, msg); -} - -inline void InlinedStringField::SetBytes(std::string&& value, Arena* arena, - bool donated, - uint32_t* donating_states, - uint32_t mask, MessageLite* msg) { - Set(std::move(value), arena, donated, donating_states, mask, msg); -} - -inline void InlinedStringField::SetBytes(const char* str, - ::google::protobuf::Arena* arena, bool donated, - uint32_t* donating_states, - uint32_t mask, MessageLite* msg) { - Set(str, arena, donated, donating_states, mask, msg); -} - -inline void InlinedStringField::SetBytes(const void* p, size_t size, - ::google::protobuf::Arena* arena, bool donated, - uint32_t* donating_states, - uint32_t mask, MessageLite* msg) { - Set(static_cast<const char*>(p), size, arena, donated, donating_states, mask, - msg); -} - -template <typename RefWrappedType> -inline void InlinedStringField::Set( - std::reference_wrapper<RefWrappedType> const_string_ref, - ::google::protobuf::Arena* arena, bool donated, uint32_t* donating_states, - uint32_t mask, MessageLite* msg) { - Set(const_string_ref.get(), arena, donated, donating_states, mask, msg); -} - -template <typename RefWrappedType> -inline void InlinedStringField::SetBytes( - std::reference_wrapper<RefWrappedType> const_string_ref, - ::google::protobuf::Arena* arena, bool donated, uint32_t* donating_states, - uint32_t mask, MessageLite* msg) { - Set(const_string_ref.get(), arena, donated, donating_states, mask, msg); -} - -inline std::string* InlinedStringField::UnsafeMutablePointer() { - return get_mutable(); -} - -inline std::string* InlinedStringField::Mutable(std::nullptr_t) { - return get_mutable(); -} - -inline std::string* InlinedStringField::MutableNoCopy(std::nullptr_t) { - return get_mutable(); -} - -} // namespace internal -} // namespace protobuf -} // namespace google - -#include <google/protobuf/port_undef.inc> - -#endif // GOOGLE_PROTOBUF_INLINED_STRING_FIELD_H__ diff --git a/include/google/protobuf/io/coded_stream.h b/include/google/protobuf/io/coded_stream.h deleted file mode 100644 index c8fc994f91..0000000000 --- a/include/google/protobuf/io/coded_stream.h +++ /dev/null @@ -1,1799 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// 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 -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -// Author: kenton@google.com (Kenton Varda) -// Based on original Protocol Buffers design by -// Sanjay Ghemawat, Jeff Dean, and others. -// -// This file contains the CodedInputStream and CodedOutputStream classes, -// which wrap a ZeroCopyInputStream or ZeroCopyOutputStream, respectively, -// and allow you to read or write individual pieces of data in various -// formats. In particular, these implement the varint encoding for -// integers, a simple variable-length encoding in which smaller numbers -// take fewer bytes. -// -// Typically these classes will only be used internally by the protocol -// buffer library in order to encode and decode protocol buffers. Clients -// of the library only need to know about this class if they wish to write -// custom message parsing or serialization procedures. -// -// CodedOutputStream example: -// // Write some data to "myfile". First we write a 4-byte "magic number" -// // to identify the file type, then write a length-delimited string. The -// // string is composed of a varint giving the length followed by the raw -// // bytes. -// int fd = open("myfile", O_CREAT | O_WRONLY); -// ZeroCopyOutputStream* raw_output = new FileOutputStream(fd); -// CodedOutputStream* coded_output = new CodedOutputStream(raw_output); -// -// int magic_number = 1234; -// char text[] = "Hello world!"; -// coded_output->WriteLittleEndian32(magic_number); -// coded_output->WriteVarint32(strlen(text)); -// coded_output->WriteRaw(text, strlen(text)); -// -// delete coded_output; -// delete raw_output; -// close(fd); -// -// CodedInputStream example: -// // Read a file created by the above code. -// int fd = open("myfile", O_RDONLY); -// ZeroCopyInputStream* raw_input = new FileInputStream(fd); -// CodedInputStream* coded_input = new CodedInputStream(raw_input); -// -// coded_input->ReadLittleEndian32(&magic_number); -// if (magic_number != 1234) { -// cerr << "File not in expected format." << endl; -// return; -// } -// -// uint32_t size; -// coded_input->ReadVarint32(&size); -// -// char* text = new char[size + 1]; -// coded_input->ReadRaw(buffer, size); -// text[size] = '\0'; -// -// delete coded_input; -// delete raw_input; -// close(fd); -// -// cout << "Text is: " << text << endl; -// delete [] text; -// -// For those who are interested, varint encoding is defined as follows: -// -// The encoding operates on unsigned integers of up to 64 bits in length. -// Each byte of the encoded value has the format: -// * bits 0-6: Seven bits of the number being encoded. -// * bit 7: Zero if this is the last byte in the encoding (in which -// case all remaining bits of the number are zero) or 1 if -// more bytes follow. -// The first byte contains the least-significant 7 bits of the number, the -// second byte (if present) contains the next-least-significant 7 bits, -// and so on. So, the binary number 1011000101011 would be encoded in two -// bytes as "10101011 00101100". -// -// In theory, varint could be used to encode integers of any length. -// However, for practicality we set a limit at 64 bits. The maximum encoded -// length of a number is thus 10 bytes. - -#ifndef GOOGLE_PROTOBUF_IO_CODED_STREAM_H__ -#define GOOGLE_PROTOBUF_IO_CODED_STREAM_H__ - - -#include <assert.h> - -#include <atomic> -#include <climits> -#include <cstddef> -#include <cstring> -#include <limits> -#include <string> -#include <type_traits> -#include <utility> - -#if defined(_MSC_VER) && _MSC_VER >= 1300 && !defined(__INTEL_COMPILER) -// If MSVC has "/RTCc" set, it will complain about truncating casts at -// runtime. This file contains some intentional truncating casts. -#pragma runtime_checks("c", off) -#endif - - -#include <google/protobuf/stubs/common.h> -#include <google/protobuf/stubs/logging.h> -#include <google/protobuf/stubs/strutil.h> -#include <google/protobuf/port.h> -#include <google/protobuf/stubs/port.h> - - -// Must be included last. -#include <google/protobuf/port_def.inc> - -namespace google { -namespace protobuf { - -class DescriptorPool; -class MessageFactory; -class ZeroCopyCodedInputStream; - -namespace internal { -void MapTestForceDeterministic(); -class EpsCopyByteStream; -} // namespace internal - -namespace io { - -// Defined in this file. -class CodedInputStream; -class CodedOutputStream; - -// Defined in other files. -class ZeroCopyInputStream; // zero_copy_stream.h -class ZeroCopyOutputStream; // zero_copy_stream.h - -// Class which reads and decodes binary data which is composed of varint- -// encoded integers and fixed-width pieces. Wraps a ZeroCopyInputStream. -// Most users will not need to deal with CodedInputStream. -// -// Most methods of CodedInputStream that return a bool return false if an -// underlying I/O error occurs or if the data is malformed. Once such a -// failure occurs, the CodedInputStream is broken and is no longer useful. -// After a failure, callers also should assume writes to "out" args may have -// occurred, though nothing useful can be determined from those writes. -class PROTOBUF_EXPORT CodedInputStream { - public: - // Create a CodedInputStream that reads from the given ZeroCopyInputStream. - explicit CodedInputStream(ZeroCopyInputStream* input); - - // Create a CodedInputStream that reads from the given flat array. This is - // faster than using an ArrayInputStream. PushLimit(size) is implied by - // this constructor. - explicit CodedInputStream(const uint8_t* buffer, int size); - - // Destroy the CodedInputStream and position the underlying - // ZeroCopyInputStream at the first unread byte. If an error occurred while - // reading (causing a method to return false), then the exact position of - // the input stream may be anywhere between the last value that was read - // successfully and the stream's byte limit. - ~CodedInputStream(); - - // Return true if this CodedInputStream reads from a flat array instead of - // a ZeroCopyInputStream. - inline bool IsFlat() const; - - // Skips a number of bytes. Returns false if an underlying read error - // occurs. - inline bool Skip(int count); - - // Sets *data to point directly at the unread part of the CodedInputStream's - // underlying buffer, and *size to the size of that buffer, but does not - // advance the stream's current position. This will always either produce - // a non-empty buffer or return false. If the caller consumes any of - // this data, it should then call Skip() to skip over the consumed bytes. - // This may be useful for implementing external fast parsing routines for - // types of data not covered by the CodedInputStream interface. - bool GetDirectBufferPointer(const void** data, int* size); - - // Like GetDirectBufferPointer, but this method is inlined, and does not - // attempt to Refresh() if the buffer is currently empty. - PROTOBUF_ALWAYS_INLINE - void GetDirectBufferPointerInline(const void** data, int* size); - - // Read raw bytes, copying them into the given buffer. - bool ReadRaw(void* buffer, int size); - - // Like ReadRaw, but reads into a string. - bool ReadString(std::string* buffer, int size); - - - // Read a 32-bit little-endian integer. - bool ReadLittleEndian32(uint32_t* value); - // Read a 64-bit little-endian integer. - bool ReadLittleEndian64(uint64_t* value); - - // These methods read from an externally provided buffer. The caller is - // responsible for ensuring that the buffer has sufficient space. - // Read a 32-bit little-endian integer. - static const uint8_t* ReadLittleEndian32FromArray(const uint8_t* buffer, - uint32_t* value); - // Read a 64-bit little-endian integer. - static const uint8_t* ReadLittleEndian64FromArray(const uint8_t* buffer, - uint64_t* value); - - // Read an unsigned integer with Varint encoding, truncating to 32 bits. - // Reading a 32-bit value is equivalent to reading a 64-bit one and casting - // it to uint32_t, but may be more efficient. - bool ReadVarint32(uint32_t* value); - // Read an unsigned integer with Varint encoding. - bool ReadVarint64(uint64_t* value); - - // Reads a varint off the wire into an "int". This should be used for reading - // sizes off the wire (sizes of strings, submessages, bytes fields, etc). - // - // The value from the wire is interpreted as unsigned. If its value exceeds - // the representable value of an integer on this platform, instead of - // truncating we return false. Truncating (as performed by ReadVarint32() - // above) is an acceptable approach for fields representing an integer, but - // when we are parsing a size from the wire, truncating the value would result - // in us misparsing the payload. - bool ReadVarintSizeAsInt(int* value); - - // Read a tag. This calls ReadVarint32() and returns the result, or returns - // zero (which is not a valid tag) if ReadVarint32() fails. Also, ReadTag - // (but not ReadTagNoLastTag) updates the last tag value, which can be checked - // with LastTagWas(). - // - // Always inline because this is only called in one place per parse loop - // but it is called for every iteration of said loop, so it should be fast. - // GCC doesn't want to inline this by default. - PROTOBUF_ALWAYS_INLINE uint32_t ReadTag() { - return last_tag_ = ReadTagNoLastTag(); - } - - PROTOBUF_ALWAYS_INLINE uint32_t ReadTagNoLastTag(); - - // This usually a faster alternative to ReadTag() when cutoff is a manifest - // constant. It does particularly well for cutoff >= 127. The first part - // of the return value is the tag that was read, though it can also be 0 in - // the cases where ReadTag() would return 0. If the second part is true - // then the tag is known to be in [0, cutoff]. If not, the tag either is - // above cutoff or is 0. (There's intentional wiggle room when tag is 0, - // because that can arise in several ways, and for best performance we want - // to avoid an extra "is tag == 0?" check here.) - PROTOBUF_ALWAYS_INLINE - std::pair<uint32_t, bool> ReadTagWithCutoff(uint32_t cutoff) { - std::pair<uint32_t, bool> result = ReadTagWithCutoffNoLastTag(cutoff); - last_tag_ = result.first; - return result; - } - - PROTOBUF_ALWAYS_INLINE - std::pair<uint32_t, bool> ReadTagWithCutoffNoLastTag(uint32_t cutoff); - - // Usually returns true if calling ReadVarint32() now would produce the given - // value. Will always return false if ReadVarint32() would not return the - // given value. If ExpectTag() returns true, it also advances past - // the varint. For best performance, use a compile-time constant as the - // parameter. - // Always inline because this collapses to a small number of instructions - // when given a constant parameter, but GCC doesn't want to inline by default. - PROTOBUF_ALWAYS_INLINE bool ExpectTag(uint32_t expected); - - // Like above, except this reads from the specified buffer. The caller is - // responsible for ensuring that the buffer is large enough to read a varint - // of the expected size. For best performance, use a compile-time constant as - // the expected tag parameter. - // - // Returns a pointer beyond the expected tag if it was found, or NULL if it - // was not. - PROTOBUF_ALWAYS_INLINE - static const uint8_t* ExpectTagFromArray(const uint8_t* buffer, - uint32_t expected); - - // Usually returns true if no more bytes can be read. Always returns false - // if more bytes can be read. If ExpectAtEnd() returns true, a subsequent - // call to LastTagWas() will act as if ReadTag() had been called and returned - // zero, and ConsumedEntireMessage() will return true. - bool ExpectAtEnd(); - - // If the last call to ReadTag() or ReadTagWithCutoff() returned the given - // value, returns true. Otherwise, returns false. - // ReadTagNoLastTag/ReadTagWithCutoffNoLastTag do not preserve the last - // returned value. - // - // This is needed because parsers for some types of embedded messages - // (with field type TYPE_GROUP) don't actually know that they've reached the - // end of a message until they see an ENDGROUP tag, which was actually part - // of the enclosing message. The enclosing message would like to check that - // tag to make sure it had the right number, so it calls LastTagWas() on - // return from the embedded parser to check. - bool LastTagWas(uint32_t expected); - void SetLastTag(uint32_t tag) { last_tag_ = tag; } - - // When parsing message (but NOT a group), this method must be called - // immediately after MergeFromCodedStream() returns (if it returns true) - // to further verify that the message ended in a legitimate way. For - // example, this verifies that parsing did not end on an end-group tag. - // It also checks for some cases where, due to optimizations, - // MergeFromCodedStream() can incorrectly return true. - bool ConsumedEntireMessage(); - void SetConsumed() { legitimate_message_end_ = true; } - - // Limits ---------------------------------------------------------- - // Limits are used when parsing length-delimited embedded messages. - // After the message's length is read, PushLimit() is used to prevent - // the CodedInputStream from reading beyond that length. Once the - // embedded message has been parsed, PopLimit() is called to undo the - // limit. - - // Opaque type used with PushLimit() and PopLimit(). Do not modify - // values of this type yourself. The only reason that this isn't a - // struct with private internals is for efficiency. - typedef int Limit; - - // Places a limit on the number of bytes that the stream may read, - // starting from the current position. Once the stream hits this limit, - // it will act like the end of the input has been reached until PopLimit() - // is called. - // - // As the names imply, the stream conceptually has a stack of limits. The - // shortest limit on the stack is always enforced, even if it is not the - // top limit. - // - // The value returned by PushLimit() is opaque to the caller, and must - // be passed unchanged to the corresponding call to PopLimit(). - Limit PushLimit(int byte_limit); - - // Pops the last limit pushed by PushLimit(). The input must be the value - // returned by that call to PushLimit(). - void PopLimit(Limit limit); - - // Returns the number of bytes left until the nearest limit on the - // stack is hit, or -1 if no limits are in place. - int BytesUntilLimit() const; - - // Returns current position relative to the beginning of the input stream. - int CurrentPosition() const; - - // Total Bytes Limit ----------------------------------------------- - // To prevent malicious users from sending excessively large messages - // and causing memory exhaustion, CodedInputStream imposes a hard limit on - // the total number of bytes it will read. - - // Sets the maximum number of bytes that this CodedInputStream will read - // before refusing to continue. To prevent servers from allocating enormous - // amounts of memory to hold parsed messages, the maximum message length - // should be limited to the shortest length that will not harm usability. - // The default limit is INT_MAX (~2GB) and apps should set shorter limits - // if possible. An error will always be printed to stderr if the limit is - // reached. - // - // Note: setting a limit less than the current read position is interpreted - // as a limit on the current position. - // - // This is unrelated to PushLimit()/PopLimit(). - void SetTotalBytesLimit(int total_bytes_limit); - - // The Total Bytes Limit minus the Current Position, or -1 if the total bytes - // limit is INT_MAX. - int BytesUntilTotalBytesLimit() const; - - // Recursion Limit ------------------------------------------------- - // To prevent corrupt or malicious messages from causing stack overflows, - // we must keep track of the depth of recursion when parsing embedded - // messages and groups. CodedInputStream keeps track of this because it - // is the only object that is passed down the stack during parsing. - - // Sets the maximum recursion depth. The default is 100. - void SetRecursionLimit(int limit); - int RecursionBudget() { return recursion_budget_; } - - static int GetDefaultRecursionLimit() { return default_recursion_limit_; } - - // Increments the current recursion depth. Returns true if the depth is - // under the limit, false if it has gone over. - bool IncrementRecursionDepth(); - - // Decrements the recursion depth if possible. - void DecrementRecursionDepth(); - - // Decrements the recursion depth blindly. This is faster than - // DecrementRecursionDepth(). It should be used only if all previous - // increments to recursion depth were successful. - void UnsafeDecrementRecursionDepth(); - - // Shorthand for make_pair(PushLimit(byte_limit), --recursion_budget_). - // Using this can reduce code size and complexity in some cases. The caller - // is expected to check that the second part of the result is non-negative (to - // bail out if the depth of recursion is too high) and, if all is well, to - // later pass the first part of the result to PopLimit() or similar. - std::pair<CodedInputStream::Limit, int> IncrementRecursionDepthAndPushLimit( - int byte_limit); - - // Shorthand for PushLimit(ReadVarint32(&length) ? length : 0). - Limit ReadLengthAndPushLimit(); - - // Helper that is equivalent to: { - // bool result = ConsumedEntireMessage(); - // PopLimit(limit); - // UnsafeDecrementRecursionDepth(); - // return result; } - // Using this can reduce code size and complexity in some cases. - // Do not use unless the current recursion depth is greater than zero. - bool DecrementRecursionDepthAndPopLimit(Limit limit); - - // Helper that is equivalent to: { - // bool result = ConsumedEntireMessage(); - // PopLimit(limit); - // return result; } - // Using this can reduce code size and complexity in some cases. - bool CheckEntireMessageConsumedAndPopLimit(Limit limit); - - // Extension Registry ---------------------------------------------- - // ADVANCED USAGE: 99.9% of people can ignore this section. - // - // By default, when parsing extensions, the parser looks for extension - // definitions in the pool which owns the outer message's Descriptor. - // However, you may call SetExtensionRegistry() to provide an alternative - // pool instead. This makes it possible, for example, to parse a message - // using a generated class, but represent some extensions using - // DynamicMessage. - - // Set the pool used to look up extensions. Most users do not need to call - // this as the correct pool will be chosen automatically. - // - // WARNING: It is very easy to misuse this. Carefully read the requirements - // below. Do not use this unless you are sure you need it. Almost no one - // does. - // - // Let's say you are parsing a message into message object m, and you want - // to take advantage of SetExtensionRegistry(). You must follow these - // requirements: - // - // The given DescriptorPool must contain m->GetDescriptor(). It is not - // sufficient for it to simply contain a descriptor that has the same name - // and content -- it must be the *exact object*. In other words: - // assert(pool->FindMessageTypeByName(m->GetDescriptor()->full_name()) == - // m->GetDescriptor()); - // There are two ways to satisfy this requirement: - // 1) Use m->GetDescriptor()->pool() as the pool. This is generally useless - // because this is the pool that would be used anyway if you didn't call - // SetExtensionRegistry() at all. - // 2) Use a DescriptorPool which has m->GetDescriptor()->pool() as an - // "underlay". Read the documentation for DescriptorPool for more - // information about underlays. - // - // You must also provide a MessageFactory. This factory will be used to - // construct Message objects representing extensions. The factory's - // GetPrototype() MUST return non-NULL for any Descriptor which can be found - // through the provided pool. - // - // If the provided factory might return instances of protocol-compiler- - // generated (i.e. compiled-in) types, or if the outer message object m is - // a generated type, then the given factory MUST have this property: If - // GetPrototype() is given a Descriptor which resides in - // DescriptorPool::generated_pool(), the factory MUST return the same - // prototype which MessageFactory::generated_factory() would return. That - // is, given a descriptor for a generated type, the factory must return an - // instance of the generated class (NOT DynamicMessage). However, when - // given a descriptor for a type that is NOT in generated_pool, the factory - // is free to return any implementation. - // - // The reason for this requirement is that generated sub-objects may be - // accessed via the standard (non-reflection) extension accessor methods, - // and these methods will down-cast the object to the generated class type. - // If the object is not actually of that type, the results would be undefined. - // On the other hand, if an extension is not compiled in, then there is no - // way the code could end up accessing it via the standard accessors -- the - // only way to access the extension is via reflection. When using reflection, - // DynamicMessage and generated messages are indistinguishable, so it's fine - // if these objects are represented using DynamicMessage. - // - // Using DynamicMessageFactory on which you have called - // SetDelegateToGeneratedFactory(true) should be sufficient to satisfy the - // above requirement. - // - // If either pool or factory is NULL, both must be NULL. - // - // Note that this feature is ignored when parsing "lite" messages as they do - // not have descriptors. - void SetExtensionRegistry(const DescriptorPool* pool, - MessageFactory* factory); - - // Get the DescriptorPool set via SetExtensionRegistry(), or NULL if no pool - // has been provided. - const DescriptorPool* GetExtensionPool(); - - // Get the MessageFactory set via SetExtensionRegistry(), or NULL if no - // factory has been provided. - MessageFactory* GetExtensionFactory(); - - private: - GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(CodedInputStream); - - const uint8_t* buffer_; - const uint8_t* buffer_end_; // pointer to the end of the buffer. - ZeroCopyInputStream* input_; - int total_bytes_read_; // total bytes read from input_, including - // the current buffer - - // If total_bytes_read_ surpasses INT_MAX, we record the extra bytes here - // so that we can BackUp() on destruction. - int overflow_bytes_; - - // LastTagWas() stuff. - uint32_t last_tag_; // result of last ReadTag() or ReadTagWithCutoff(). - - // This is set true by ReadTag{Fallback/Slow}() if it is called when exactly - // at EOF, or by ExpectAtEnd() when it returns true. This happens when we - // reach the end of a message and attempt to read another tag. - bool legitimate_message_end_; - - // See EnableAliasing(). - bool aliasing_enabled_; - - // Limits - Limit current_limit_; // if position = -1, no limit is applied - - // For simplicity, if the current buffer crosses a limit (either a normal - // limit created by PushLimit() or the total bytes limit), buffer_size_ - // only tracks the number of bytes before that limit. This field - // contains the number of bytes after it. Note that this implies that if - // buffer_size_ == 0 and buffer_size_after_limit_ > 0, we know we've - // hit a limit. However, if both are zero, it doesn't necessarily mean - // we aren't at a limit -- the buffer may have ended exactly at the limit. - int buffer_size_after_limit_; - - // Maximum number of bytes to read, period. This is unrelated to - // current_limit_. Set using SetTotalBytesLimit(). - int total_bytes_limit_; - - // Current recursion budget, controlled by IncrementRecursionDepth() and - // similar. Starts at recursion_limit_ and goes down: if this reaches - // -1 we are over budget. - int recursion_budget_; - // Recursion depth limit, set by SetRecursionLimit(). - int recursion_limit_; - - // See SetExtensionRegistry(). - const DescriptorPool* extension_pool_; - MessageFactory* extension_factory_; - - // Private member functions. - - // Fallback when Skip() goes past the end of the current buffer. - bool SkipFallback(int count, int original_buffer_size); - - // Advance the buffer by a given number of bytes. - void Advance(int amount); - - // Back up input_ to the current buffer position. - void BackUpInputToCurrentPosition(); - - // Recomputes the value of buffer_size_after_limit_. Must be called after - // current_limit_ or total_bytes_limit_ changes. - void RecomputeBufferLimits(); - - // Writes an error message saying that we hit total_bytes_limit_. - void PrintTotalBytesLimitError(); - - // Called when the buffer runs out to request more data. Implies an - // Advance(BufferSize()). - bool Refresh(); - - // When parsing varints, we optimize for the common case of small values, and - // then optimize for the case when the varint fits within the current buffer - // piece. The Fallback method is used when we can't use the one-byte - // optimization. The Slow method is yet another fallback when the buffer is - // not large enough. Making the slow path out-of-line speeds up the common - // case by 10-15%. The slow path is fairly uncommon: it only triggers when a - // message crosses multiple buffers. Note: ReadVarint32Fallback() and - // ReadVarint64Fallback() are called frequently and generally not inlined, so - // they have been optimized to avoid "out" parameters. The former returns -1 - // if it fails and the uint32_t it read otherwise. The latter has a bool - // indicating success or failure as part of its return type. - int64_t ReadVarint32Fallback(uint32_t first_byte_or_zero); - int ReadVarintSizeAsIntFallback(); - std::pair<uint64_t, bool> ReadVarint64Fallback(); - bool ReadVarint32Slow(uint32_t* value); - bool ReadVarint64Slow(uint64_t* value); - int ReadVarintSizeAsIntSlow(); - bool ReadLittleEndian32Fallback(uint32_t* value); - bool ReadLittleEndian64Fallback(uint64_t* value); - - // Fallback/slow methods for reading tags. These do not update last_tag_, - // but will set legitimate_message_end_ if we are at the end of the input - // stream. - uint32_t ReadTagFallback(uint32_t first_byte_or_zero); - uint32_t ReadTagSlow(); - bool ReadStringFallback(std::string* buffer, int size); - - // Return the size of the buffer. - int BufferSize() const; - - static const int kDefaultTotalBytesLimit = INT_MAX; - - static int default_recursion_limit_; // 100 by default. - - friend class google::protobuf::ZeroCopyCodedInputStream; - friend class google::protobuf::internal::EpsCopyByteStream; -}; - -// EpsCopyOutputStream wraps a ZeroCopyOutputStream and exposes a new stream, -// which has the property you can write kSlopBytes (16 bytes) from the current -// position without bounds checks. The cursor into the stream is managed by -// the user of the class and is an explicit parameter in the methods. Careful -// use of this class, ie. keep ptr a local variable, eliminates the need to -// for the compiler to sync the ptr value between register and memory. -class PROTOBUF_EXPORT EpsCopyOutputStream { - public: - enum { kSlopBytes = 16 }; - - // Initialize from a stream. - EpsCopyOutputStream(ZeroCopyOutputStream* stream, bool deterministic, - uint8_t** pp) - : end_(buffer_), - stream_(stream), - is_serialization_deterministic_(deterministic) { - *pp = buffer_; - } - - // Only for array serialization. No overflow protection, end_ will be the - // pointed to the end of the array. When using this the total size is already - // known, so no need to maintain the slop region. - EpsCopyOutputStream(void* data, int size, bool deterministic) - : end_(static_cast<uint8_t*>(data) + size), - buffer_end_(nullptr), - stream_(nullptr), - is_serialization_deterministic_(deterministic) {} - - // Initialize from stream but with the first buffer already given (eager). - EpsCopyOutputStream(void* data, int size, ZeroCopyOutputStream* stream, - bool deterministic, uint8_t** pp) - : stream_(stream), is_serialization_deterministic_(deterministic) { - *pp = SetInitialBuffer(data, size); - } - - // Flush everything that's written into the underlying ZeroCopyOutputStream - // and trims the underlying stream to the location of ptr. - uint8_t* Trim(uint8_t* ptr); - - // After this it's guaranteed you can safely write kSlopBytes to ptr. This - // will never fail! The underlying stream can produce an error. Use HadError - // to check for errors. - PROTOBUF_NODISCARD uint8_t* EnsureSpace(uint8_t* ptr) { - if (PROTOBUF_PREDICT_FALSE(ptr >= end_)) { - return EnsureSpaceFallback(ptr); - } - return ptr; - } - - uint8_t* WriteRaw(const void* data, int size, uint8_t* ptr) { - if (PROTOBUF_PREDICT_FALSE(end_ - ptr < size)) { - return WriteRawFallback(data, size, ptr); - } - std::memcpy(ptr, data, size); - return ptr + size; - } - // Writes the buffer specified by data, size to the stream. Possibly by - // aliasing the buffer (ie. not copying the data). The caller is responsible - // to make sure the buffer is alive for the duration of the - // ZeroCopyOutputStream. -#ifndef NDEBUG - PROTOBUF_NOINLINE -#endif - uint8_t* WriteRawMaybeAliased(const void* data, int size, uint8_t* ptr) { - if (aliasing_enabled_) { - return WriteAliasedRaw(data, size, ptr); - } else { - return WriteRaw(data, size, ptr); - } - } - - -#ifndef NDEBUG - PROTOBUF_NOINLINE -#endif - uint8_t* WriteStringMaybeAliased(uint32_t num, const std::string& s, - uint8_t* ptr) { - std::ptrdiff_t size = s.size(); - if (PROTOBUF_PREDICT_FALSE( - size >= 128 || end_ - ptr + 16 - TagSize(num << 3) - 1 < size)) { - return WriteStringMaybeAliasedOutline(num, s, ptr); - } - ptr = UnsafeVarint((num << 3) | 2, ptr); - *ptr++ = static_cast<uint8_t>(size); - std::memcpy(ptr, s.data(), size); - return ptr + size; - } - uint8_t* WriteBytesMaybeAliased(uint32_t num, const std::string& s, - uint8_t* ptr) { - return WriteStringMaybeAliased(num, s, ptr); - } - - template <typename T> - PROTOBUF_ALWAYS_INLINE uint8_t* WriteString(uint32_t num, const T& s, - uint8_t* ptr) { - std::ptrdiff_t size = s.size(); - if (PROTOBUF_PREDICT_FALSE( - size >= 128 || end_ - ptr + 16 - TagSize(num << 3) - 1 < size)) { - return WriteStringOutline(num, s, ptr); - } - ptr = UnsafeVarint((num << 3) | 2, ptr); - *ptr++ = static_cast<uint8_t>(size); - std::memcpy(ptr, s.data(), size); - return ptr + size; - } - template <typename T> -#ifndef NDEBUG - PROTOBUF_NOINLINE -#endif - uint8_t* WriteBytes(uint32_t num, const T& s, uint8_t* ptr) { - return WriteString(num, s, ptr); - } - - template <typename T> - PROTOBUF_ALWAYS_INLINE uint8_t* WriteInt32Packed(int num, const T& r, - int size, uint8_t* ptr) { - return WriteVarintPacked(num, r, size, ptr, Encode64); - } - template <typename T> - PROTOBUF_ALWAYS_INLINE uint8_t* WriteUInt32Packed(int num, const T& r, - int size, uint8_t* ptr) { - return WriteVarintPacked(num, r, size, ptr, Encode32); - } - template <typename T> - PROTOBUF_ALWAYS_INLINE uint8_t* WriteSInt32Packed(int num, const T& r, - int size, uint8_t* ptr) { - return WriteVarintPacked(num, r, size, ptr, ZigZagEncode32); - } - template <typename T> - PROTOBUF_ALWAYS_INLINE uint8_t* WriteInt64Packed(int num, const T& r, - int size, uint8_t* ptr) { - return WriteVarintPacked(num, r, size, ptr, Encode64); - } - template <typename T> - PROTOBUF_ALWAYS_INLINE uint8_t* WriteUInt64Packed(int num, const T& r, - int size, uint8_t* ptr) { - return WriteVarintPacked(num, r, size, ptr, Encode64); - } - template <typename T> - PROTOBUF_ALWAYS_INLINE uint8_t* WriteSInt64Packed(int num, const T& r, - int size, uint8_t* ptr) { - return WriteVarintPacked(num, r, size, ptr, ZigZagEncode64); - } - template <typename T> - PROTOBUF_ALWAYS_INLINE uint8_t* WriteEnumPacked(int num, const T& r, int size, - uint8_t* ptr) { - return WriteVarintPacked(num, r, size, ptr, Encode64); - } - - template <typename T> - PROTOBUF_ALWAYS_INLINE uint8_t* WriteFixedPacked(int num, const T& r, - uint8_t* ptr) { - ptr = EnsureSpace(ptr); - constexpr auto element_size = sizeof(typename T::value_type); - auto size = r.size() * element_size; - ptr = WriteLengthDelim(num, size, ptr); - return WriteRawLittleEndian<element_size>(r.data(), static_cast<int>(size), - ptr); - } - - // Returns true if there was an underlying I/O error since this object was - // created. - bool HadError() const { return had_error_; } - - // Instructs the EpsCopyOutputStream to allow the underlying - // ZeroCopyOutputStream to hold pointers to the original structure instead of - // copying, if it supports it (i.e. output->AllowsAliasing() is true). If the - // underlying stream does not support aliasing, then enabling it has no - // affect. For now, this only affects the behavior of - // WriteRawMaybeAliased(). - // - // NOTE: It is caller's responsibility to ensure that the chunk of memory - // remains live until all of the data has been consumed from the stream. - void EnableAliasing(bool enabled); - - // See documentation on CodedOutputStream::SetSerializationDeterministic. - void SetSerializationDeterministic(bool value) { - is_serialization_deterministic_ = value; - } - - // See documentation on CodedOutputStream::IsSerializationDeterministic. - bool IsSerializationDeterministic() const { - return is_serialization_deterministic_; - } - - // The number of bytes written to the stream at position ptr, relative to the - // stream's overall position. - int64_t ByteCount(uint8_t* ptr) const; - - - private: - uint8_t* end_; - uint8_t* buffer_end_ = buffer_; - uint8_t buffer_[2 * kSlopBytes]; - ZeroCopyOutputStream* stream_; - bool had_error_ = false; - bool aliasing_enabled_ = false; // See EnableAliasing(). - bool is_serialization_deterministic_; - bool skip_check_consistency = false; - - uint8_t* EnsureSpaceFallback(uint8_t* ptr); - inline uint8_t* Next(); - int Flush(uint8_t* ptr); - std::ptrdiff_t GetSize(uint8_t* ptr) const { - GOOGLE_DCHECK(ptr <= end_ + kSlopBytes); // NOLINT - return end_ + kSlopBytes - ptr; - } - - uint8_t* Error() { - had_error_ = true; - // We use the patch buffer to always guarantee space to write to. - end_ = buffer_ + kSlopBytes; - return buffer_; - } - - static constexpr int TagSize(uint32_t tag) { - return (tag < (1 << 7)) ? 1 - : (tag < (1 << 14)) ? 2 - : (tag < (1 << 21)) ? 3 - : (tag < (1 << 28)) ? 4 - : 5; - } - - PROTOBUF_ALWAYS_INLINE uint8_t* WriteTag(uint32_t num, uint32_t wt, - uint8_t* ptr) { - GOOGLE_DCHECK(ptr < end_); // NOLINT - return UnsafeVarint((num << 3) | wt, ptr); - } - - PROTOBUF_ALWAYS_INLINE uint8_t* WriteLengthDelim(int num, uint32_t size, - uint8_t* ptr) { - ptr = WriteTag(num, 2, ptr); - return UnsafeWriteSize(size, ptr); - } - - uint8_t* WriteRawFallback(const void* data, int size, uint8_t* ptr); - - uint8_t* WriteAliasedRaw(const void* data, int size, uint8_t* ptr); - - uint8_t* WriteStringMaybeAliasedOutline(uint32_t num, const std::string& s, - uint8_t* ptr); - uint8_t* WriteStringOutline(uint32_t num, const std::string& s, uint8_t* ptr); - - template <typename T, typename E> - PROTOBUF_ALWAYS_INLINE uint8_t* WriteVarintPacked(int num, const T& r, - int size, uint8_t* ptr, - const E& encode) { - ptr = EnsureSpace(ptr); - ptr = WriteLengthDelim(num, size, ptr); - auto it = r.data(); - auto end = it + r.size(); - do { - ptr = EnsureSpace(ptr); - ptr = UnsafeVarint(encode(*it++), ptr); - } while (it < end); - return ptr; - } - - static uint32_t Encode32(uint32_t v) { return v; } - static uint64_t Encode64(uint64_t v) { return v; } - static uint32_t ZigZagEncode32(int32_t v) { - return (static_cast<uint32_t>(v) << 1) ^ static_cast<uint32_t>(v >> 31); - } - static uint64_t ZigZagEncode64(int64_t v) { - return (static_cast<uint64_t>(v) << 1) ^ static_cast<uint64_t>(v >> 63); - } - - template <typename T> - PROTOBUF_ALWAYS_INLINE static uint8_t* UnsafeVarint(T value, uint8_t* ptr) { - static_assert(std::is_unsigned<T>::value, - "Varint serialization must be unsigned"); - ptr[0] = static_cast<uint8_t>(value); - if (value < 0x80) { - return ptr + 1; - } - // Turn on continuation bit in the byte we just wrote. - ptr[0] |= static_cast<uint8_t>(0x80); - value >>= 7; - ptr[1] = static_cast<uint8_t>(value); - if (value < 0x80) { - return ptr + 2; - } - ptr += 2; - do { - // Turn on continuation bit in the byte we just wrote. - ptr[-1] |= static_cast<uint8_t>(0x80); - value >>= 7; - *ptr = static_cast<uint8_t>(value); - ++ptr; - } while (value >= 0x80); - return ptr; - } - - PROTOBUF_ALWAYS_INLINE static uint8_t* UnsafeWriteSize(uint32_t value, - uint8_t* ptr) { - while (PROTOBUF_PREDICT_FALSE(value >= 0x80)) { - *ptr = static_cast<uint8_t>(value | 0x80); - value >>= 7; - ++ptr; - } - *ptr++ = static_cast<uint8_t>(value); - return ptr; - } - - template <int S> - uint8_t* WriteRawLittleEndian(const void* data, int size, uint8_t* ptr); -#if !defined(PROTOBUF_LITTLE_ENDIAN) || \ - defined(PROTOBUF_DISABLE_LITTLE_ENDIAN_OPT_FOR_TEST) - uint8_t* WriteRawLittleEndian32(const void* data, int size, uint8_t* ptr); - uint8_t* WriteRawLittleEndian64(const void* data, int size, uint8_t* ptr); -#endif - - // These methods are for CodedOutputStream. Ideally they should be private - // but to match current behavior of CodedOutputStream as close as possible - // we allow it some functionality. - public: - uint8_t* SetInitialBuffer(void* data, int size) { - auto ptr = static_cast<uint8_t*>(data); - if (size > kSlopBytes) { - end_ = ptr + size - kSlopBytes; - buffer_end_ = nullptr; - return ptr; - } else { - end_ = buffer_ + size; - buffer_end_ = ptr; - return buffer_; - } - } - - private: - // Needed by CodedOutputStream HadError. HadError needs to flush the patch - // buffers to ensure there is no error as of yet. - uint8_t* FlushAndResetBuffer(uint8_t*); - - // The following functions mimic the old CodedOutputStream behavior as close - // as possible. They flush the current state to the stream, behave as - // the old CodedOutputStream and then return to normal operation. - bool Skip(int count, uint8_t** pp); - bool GetDirectBufferPointer(void** data, int* size, uint8_t** pp); - uint8_t* GetDirectBufferForNBytesAndAdvance(int size, uint8_t** pp); - - friend class CodedOutputStream; -}; - -template <> -inline uint8_t* EpsCopyOutputStream::WriteRawLittleEndian<1>(const void* data, - int size, - uint8_t* ptr) { - return WriteRaw(data, size, ptr); -} -template <> -inline uint8_t* EpsCopyOutputStream::WriteRawLittleEndian<4>(const void* data, - int size, - uint8_t* ptr) { -#if defined(PROTOBUF_LITTLE_ENDIAN) && \ - !defined(PROTOBUF_DISABLE_LITTLE_ENDIAN_OPT_FOR_TEST) - return WriteRaw(data, size, ptr); -#else - return WriteRawLittleEndian32(data, size, ptr); -#endif -} -template <> -inline uint8_t* EpsCopyOutputStream::WriteRawLittleEndian<8>(const void* data, - int size, - uint8_t* ptr) { -#if defined(PROTOBUF_LITTLE_ENDIAN) && \ - !defined(PROTOBUF_DISABLE_LITTLE_ENDIAN_OPT_FOR_TEST) - return WriteRaw(data, size, ptr); -#else - return WriteRawLittleEndian64(data, size, ptr); -#endif -} - -// Class which encodes and writes binary data which is composed of varint- -// encoded integers and fixed-width pieces. Wraps a ZeroCopyOutputStream. -// Most users will not need to deal with CodedOutputStream. -// -// Most methods of CodedOutputStream which return a bool return false if an -// underlying I/O error occurs. Once such a failure occurs, the -// CodedOutputStream is broken and is no longer useful. The Write* methods do -// not return the stream status, but will invalidate the stream if an error -// occurs. The client can probe HadError() to determine the status. -// -// Note that every method of CodedOutputStream which writes some data has -// a corresponding static "ToArray" version. These versions write directly -// to the provided buffer, returning a pointer past the last written byte. -// They require that the buffer has sufficient capacity for the encoded data. -// This allows an optimization where we check if an output stream has enough -// space for an entire message before we start writing and, if there is, we -// call only the ToArray methods to avoid doing bound checks for each -// individual value. -// i.e., in the example above: -// -// CodedOutputStream* coded_output = new CodedOutputStream(raw_output); -// int magic_number = 1234; -// char text[] = "Hello world!"; -// -// int coded_size = sizeof(magic_number) + -// CodedOutputStream::VarintSize32(strlen(text)) + -// strlen(text); -// -// uint8_t* buffer = -// coded_output->GetDirectBufferForNBytesAndAdvance(coded_size); -// if (buffer != nullptr) { -// // The output stream has enough space in the buffer: write directly to -// // the array. -// buffer = CodedOutputStream::WriteLittleEndian32ToArray(magic_number, -// buffer); -// buffer = CodedOutputStream::WriteVarint32ToArray(strlen(text), buffer); -// buffer = CodedOutputStream::WriteRawToArray(text, strlen(text), buffer); -// } else { -// // Make bound-checked writes, which will ask the underlying stream for -// // more space as needed. -// coded_output->WriteLittleEndian32(magic_number); -// coded_output->WriteVarint32(strlen(text)); -// coded_output->WriteRaw(text, strlen(text)); -// } -// -// delete coded_output; -class PROTOBUF_EXPORT CodedOutputStream { - public: - // Creates a CodedOutputStream that writes to the given `stream`. - // The provided stream must publicly derive from `ZeroCopyOutputStream`. - template <class Stream, class = typename std::enable_if<std::is_base_of< - ZeroCopyOutputStream, Stream>::value>::type> - explicit CodedOutputStream(Stream* stream); - - // Creates a CodedOutputStream that writes to the given `stream`, and does - // an 'eager initialization' of the internal state if `eager_init` is true. - // The provided stream must publicly derive from `ZeroCopyOutputStream`. - template <class Stream, class = typename std::enable_if<std::is_base_of< - ZeroCopyOutputStream, Stream>::value>::type> - CodedOutputStream(Stream* stream, bool eager_init); - - // Destroy the CodedOutputStream and position the underlying - // ZeroCopyOutputStream immediately after the last byte written. - ~CodedOutputStream(); - - // Returns true if there was an underlying I/O error since this object was - // created. On should call Trim before this function in order to catch all - // errors. - bool HadError() { - cur_ = impl_.FlushAndResetBuffer(cur_); - GOOGLE_DCHECK(cur_); - return impl_.HadError(); - } - - // Trims any unused space in the underlying buffer so that its size matches - // the number of bytes written by this stream. The underlying buffer will - // automatically be trimmed when this stream is destroyed; this call is only - // necessary if the underlying buffer is accessed *before* the stream is - // destroyed. - void Trim() { cur_ = impl_.Trim(cur_); } - - // Skips a number of bytes, leaving the bytes unmodified in the underlying - // buffer. Returns false if an underlying write error occurs. This is - // mainly useful with GetDirectBufferPointer(). - // Note of caution, the skipped bytes may contain uninitialized data. The - // caller must make sure that the skipped bytes are properly initialized, - // otherwise you might leak bytes from your heap. - bool Skip(int count) { return impl_.Skip(count, &cur_); } - - // Sets *data to point directly at the unwritten part of the - // CodedOutputStream's underlying buffer, and *size to the size of that - // buffer, but does not advance the stream's current position. This will - // always either produce a non-empty buffer or return false. If the caller - // writes any data to this buffer, it should then call Skip() to skip over - // the consumed bytes. This may be useful for implementing external fast - // serialization routines for types of data not covered by the - // CodedOutputStream interface. - bool GetDirectBufferPointer(void** data, int* size) { - return impl_.GetDirectBufferPointer(data, size, &cur_); - } - - // If there are at least "size" bytes available in the current buffer, - // returns a pointer directly into the buffer and advances over these bytes. - // The caller may then write directly into this buffer (e.g. using the - // *ToArray static methods) rather than go through CodedOutputStream. If - // there are not enough bytes available, returns NULL. The return pointer is - // invalidated as soon as any other non-const method of CodedOutputStream - // is called. - inline uint8_t* GetDirectBufferForNBytesAndAdvance(int size) { - return impl_.GetDirectBufferForNBytesAndAdvance(size, &cur_); - } - - // Write raw bytes, copying them from the given buffer. - void WriteRaw(const void* buffer, int size) { - cur_ = impl_.WriteRaw(buffer, size, cur_); - } - // Like WriteRaw() but will try to write aliased data if aliasing is - // turned on. - void WriteRawMaybeAliased(const void* data, int size); - // Like WriteRaw() but writing directly to the target array. - // This is _not_ inlined, as the compiler often optimizes memcpy into inline - // copy loops. Since this gets called by every field with string or bytes - // type, inlining may lead to a significant amount of code bloat, with only a - // minor performance gain. - static uint8_t* WriteRawToArray(const void* buffer, int size, - uint8_t* target); - - // Equivalent to WriteRaw(str.data(), str.size()). - void WriteString(const std::string& str); - // Like WriteString() but writing directly to the target array. - static uint8_t* WriteStringToArray(const std::string& str, uint8_t* target); - // Write the varint-encoded size of str followed by str. - static uint8_t* WriteStringWithSizeToArray(const std::string& str, - uint8_t* target); - - - // Write a 32-bit little-endian integer. - void WriteLittleEndian32(uint32_t value) { - cur_ = impl_.EnsureSpace(cur_); - SetCur(WriteLittleEndian32ToArray(value, Cur())); - } - // Like WriteLittleEndian32() but writing directly to the target array. - static uint8_t* WriteLittleEndian32ToArray(uint32_t value, uint8_t* target); - // Write a 64-bit little-endian integer. - void WriteLittleEndian64(uint64_t value) { - cur_ = impl_.EnsureSpace(cur_); - SetCur(WriteLittleEndian64ToArray(value, Cur())); - } - // Like WriteLittleEndian64() but writing directly to the target array. - static uint8_t* WriteLittleEndian64ToArray(uint64_t value, uint8_t* target); - - // Write an unsigned integer with Varint encoding. Writing a 32-bit value - // is equivalent to casting it to uint64_t and writing it as a 64-bit value, - // but may be more efficient. - void WriteVarint32(uint32_t value); - // Like WriteVarint32() but writing directly to the target array. - static uint8_t* WriteVarint32ToArray(uint32_t value, uint8_t* target); - // Like WriteVarint32() but writing directly to the target array, and with - // the less common-case paths being out of line rather than inlined. - static uint8_t* WriteVarint32ToArrayOutOfLine(uint32_t value, - uint8_t* target); - // Write an unsigned integer with Varint encoding. - void WriteVarint64(uint64_t value); - // Like WriteVarint64() but writing directly to the target array. - static uint8_t* WriteVarint64ToArray(uint64_t value, uint8_t* target); - - // Equivalent to WriteVarint32() except when the value is negative, - // in which case it must be sign-extended to a full 10 bytes. - void WriteVarint32SignExtended(int32_t value); - // Like WriteVarint32SignExtended() but writing directly to the target array. - static uint8_t* WriteVarint32SignExtendedToArray(int32_t value, - uint8_t* target); - - // This is identical to WriteVarint32(), but optimized for writing tags. - // In particular, if the input is a compile-time constant, this method - // compiles down to a couple instructions. - // Always inline because otherwise the aforementioned optimization can't work, - // but GCC by default doesn't want to inline this. - void WriteTag(uint32_t value); - // Like WriteTag() but writing directly to the target array. - PROTOBUF_ALWAYS_INLINE - static uint8_t* WriteTagToArray(uint32_t value, uint8_t* target); - - // Returns the number of bytes needed to encode the given value as a varint. - static size_t VarintSize32(uint32_t value); - // Returns the number of bytes needed to encode the given value as a varint. - static size_t VarintSize64(uint64_t value); - - // If negative, 10 bytes. Otherwise, same as VarintSize32(). - static size_t VarintSize32SignExtended(int32_t value); - - // Same as above, plus one. The additional one comes at no compute cost. - static size_t VarintSize32PlusOne(uint32_t value); - static size_t VarintSize64PlusOne(uint64_t value); - static size_t VarintSize32SignExtendedPlusOne(int32_t value); - - // Compile-time equivalent of VarintSize32(). - template <uint32_t Value> - struct StaticVarintSize32 { - static const size_t value = (Value < (1 << 7)) ? 1 - : (Value < (1 << 14)) ? 2 - : (Value < (1 << 21)) ? 3 - : (Value < (1 << 28)) ? 4 - : 5; - }; - - // Returns the total number of bytes written since this object was created. - int ByteCount() const { - return static_cast<int>(impl_.ByteCount(cur_) - start_count_); - } - - // Instructs the CodedOutputStream to allow the underlying - // ZeroCopyOutputStream to hold pointers to the original structure instead of - // copying, if it supports it (i.e. output->AllowsAliasing() is true). If the - // underlying stream does not support aliasing, then enabling it has no - // affect. For now, this only affects the behavior of - // WriteRawMaybeAliased(). - // - // NOTE: It is caller's responsibility to ensure that the chunk of memory - // remains live until all of the data has been consumed from the stream. - void EnableAliasing(bool enabled) { impl_.EnableAliasing(enabled); } - - // Indicate to the serializer whether the user wants deterministic - // serialization. The default when this is not called comes from the global - // default, controlled by SetDefaultSerializationDeterministic. - // - // What deterministic serialization means is entirely up to the driver of the - // serialization process (i.e. the caller of methods like WriteVarint32). In - // the case of serializing a proto buffer message using one of the methods of - // MessageLite, this means that for a given binary equal messages will always - // be serialized to the same bytes. This implies: - // - // * Repeated serialization of a message will return the same bytes. - // - // * Different processes running the same binary (including on different - // machines) will serialize equal messages to the same bytes. - // - // Note that this is *not* canonical across languages. It is also unstable - // across different builds with intervening message definition changes, due to - // unknown fields. Users who need canonical serialization (e.g. persistent - // storage in a canonical form, fingerprinting) should define their own - // canonicalization specification and implement the serializer using - // reflection APIs rather than relying on this API. - void SetSerializationDeterministic(bool value) { - impl_.SetSerializationDeterministic(value); - } - - // Return whether the user wants deterministic serialization. See above. - bool IsSerializationDeterministic() const { - return impl_.IsSerializationDeterministic(); - } - - static bool IsDefaultSerializationDeterministic() { - return default_serialization_deterministic_.load( - std::memory_order_relaxed) != 0; - } - - template <typename Func> - void Serialize(const Func& func); - - uint8_t* Cur() const { return cur_; } - void SetCur(uint8_t* ptr) { cur_ = ptr; } - EpsCopyOutputStream* EpsCopy() { return &impl_; } - - private: - template <class Stream> - void InitEagerly(Stream* stream); - - EpsCopyOutputStream impl_; - uint8_t* cur_; - int64_t start_count_; - static std::atomic<bool> default_serialization_deterministic_; - - // See above. Other projects may use "friend" to allow them to call this. - // After SetDefaultSerializationDeterministic() completes, all protocol - // buffer serializations will be deterministic by default. Thread safe. - // However, the meaning of "after" is subtle here: to be safe, each thread - // that wants deterministic serialization by default needs to call - // SetDefaultSerializationDeterministic() or ensure on its own that another - // thread has done so. - friend void internal::MapTestForceDeterministic(); - static void SetDefaultSerializationDeterministic() { - default_serialization_deterministic_.store(true, std::memory_order_relaxed); - } - // REQUIRES: value >= 0x80, and that (value & 7f) has been written to *target. - static uint8_t* WriteVarint32ToArrayOutOfLineHelper(uint32_t value, - uint8_t* target); - GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(CodedOutputStream); -}; - -// inline methods ==================================================== -// The vast majority of varints are only one byte. These inline -// methods optimize for that case. - -inline bool CodedInputStream::ReadVarint32(uint32_t* value) { - uint32_t v = 0; - if (PROTOBUF_PREDICT_TRUE(buffer_ < buffer_end_)) { - v = *buffer_; - if (v < 0x80) { - *value = v; - Advance(1); - return true; - } - } - int64_t result = ReadVarint32Fallback(v); - *value = static_cast<uint32_t>(result); - return result >= 0; -} - -inline bool CodedInputStream::ReadVarint64(uint64_t* value) { - if (PROTOBUF_PREDICT_TRUE(buffer_ < buffer_end_) && *buffer_ < 0x80) { - *value = *buffer_; - Advance(1); - return true; - } - std::pair<uint64_t, bool> p = ReadVarint64Fallback(); - *value = p.first; - return p.second; -} - -inline bool CodedInputStream::ReadVarintSizeAsInt(int* value) { - if (PROTOBUF_PREDICT_TRUE(buffer_ < buffer_end_)) { - int v = *buffer_; - if (v < 0x80) { - *value = v; - Advance(1); - return true; - } - } - *value = ReadVarintSizeAsIntFallback(); - return *value >= 0; -} - -// static -inline const uint8_t* CodedInputStream::ReadLittleEndian32FromArray( - const uint8_t* buffer, uint32_t* value) { -#if defined(PROTOBUF_LITTLE_ENDIAN) && \ - !defined(PROTOBUF_DISABLE_LITTLE_ENDIAN_OPT_FOR_TEST) - memcpy(value, buffer, sizeof(*value)); - return buffer + sizeof(*value); -#else - *value = (static_cast<uint32_t>(buffer[0])) | - (static_cast<uint32_t>(buffer[1]) << 8) | - (static_cast<uint32_t>(buffer[2]) << 16) | - (static_cast<uint32_t>(buffer[3]) << 24); - return buffer + sizeof(*value); -#endif -} -// static -inline const uint8_t* CodedInputStream::ReadLittleEndian64FromArray( - const uint8_t* buffer, uint64_t* value) { -#if defined(PROTOBUF_LITTLE_ENDIAN) && \ - !defined(PROTOBUF_DISABLE_LITTLE_ENDIAN_OPT_FOR_TEST) - memcpy(value, buffer, sizeof(*value)); - return buffer + sizeof(*value); -#else - uint32_t part0 = (static_cast<uint32_t>(buffer[0])) | - (static_cast<uint32_t>(buffer[1]) << 8) | - (static_cast<uint32_t>(buffer[2]) << 16) | - (static_cast<uint32_t>(buffer[3]) << 24); - uint32_t part1 = (static_cast<uint32_t>(buffer[4])) | - (static_cast<uint32_t>(buffer[5]) << 8) | - (static_cast<uint32_t>(buffer[6]) << 16) | - (static_cast<uint32_t>(buffer[7]) << 24); - *value = static_cast<uint64_t>(part0) | (static_cast<uint64_t>(part1) << 32); - return buffer + sizeof(*value); -#endif -} - -inline bool CodedInputStream::ReadLittleEndian32(uint32_t* value) { -#if defined(PROTOBUF_LITTLE_ENDIAN) && \ - !defined(PROTOBUF_DISABLE_LITTLE_ENDIAN_OPT_FOR_TEST) - if (PROTOBUF_PREDICT_TRUE(BufferSize() >= static_cast<int>(sizeof(*value)))) { - buffer_ = ReadLittleEndian32FromArray(buffer_, value); - return true; - } else { - return ReadLittleEndian32Fallback(value); - } -#else - return ReadLittleEndian32Fallback(value); -#endif -} - -inline bool CodedInputStream::ReadLittleEndian64(uint64_t* value) { -#if defined(PROTOBUF_LITTLE_ENDIAN) && \ - !defined(PROTOBUF_DISABLE_LITTLE_ENDIAN_OPT_FOR_TEST) - if (PROTOBUF_PREDICT_TRUE(BufferSize() >= static_cast<int>(sizeof(*value)))) { - buffer_ = ReadLittleEndian64FromArray(buffer_, value); - return true; - } else { - return ReadLittleEndian64Fallback(value); - } -#else - return ReadLittleEndian64Fallback(value); -#endif -} - -inline uint32_t CodedInputStream::ReadTagNoLastTag() { - uint32_t v = 0; - if (PROTOBUF_PREDICT_TRUE(buffer_ < buffer_end_)) { - v = *buffer_; - if (v < 0x80) { - Advance(1); - return v; - } - } - v = ReadTagFallback(v); - return v; -} - -inline std::pair<uint32_t, bool> CodedInputStream::ReadTagWithCutoffNoLastTag( - uint32_t cutoff) { - // In performance-sensitive code we can expect cutoff to be a compile-time - // constant, and things like "cutoff >= kMax1ByteVarint" to be evaluated at - // compile time. - uint32_t first_byte_or_zero = 0; - if (PROTOBUF_PREDICT_TRUE(buffer_ < buffer_end_)) { - // Hot case: buffer_ non_empty, buffer_[0] in [1, 128). - // TODO(gpike): Is it worth rearranging this? E.g., if the number of fields - // is large enough then is it better to check for the two-byte case first? - first_byte_or_zero = buffer_[0]; - if (static_cast<int8_t>(buffer_[0]) > 0) { - const uint32_t kMax1ByteVarint = 0x7f; - uint32_t tag = buffer_[0]; - Advance(1); - return std::make_pair(tag, cutoff >= kMax1ByteVarint || tag <= cutoff); - } - // Other hot case: cutoff >= 0x80, buffer_ has at least two bytes available, - // and tag is two bytes. The latter is tested by bitwise-and-not of the - // first byte and the second byte. - if (cutoff >= 0x80 && PROTOBUF_PREDICT_TRUE(buffer_ + 1 < buffer_end_) && - PROTOBUF_PREDICT_TRUE((buffer_[0] & ~buffer_[1]) >= 0x80)) { - const uint32_t kMax2ByteVarint = (0x7f << 7) + 0x7f; - uint32_t tag = (1u << 7) * buffer_[1] + (buffer_[0] - 0x80); - Advance(2); - // It might make sense to test for tag == 0 now, but it is so rare that - // that we don't bother. A varint-encoded 0 should be one byte unless - // the encoder lost its mind. The second part of the return value of - // this function is allowed to be either true or false if the tag is 0, - // so we don't have to check for tag == 0. We may need to check whether - // it exceeds cutoff. - bool at_or_below_cutoff = cutoff >= kMax2ByteVarint || tag <= cutoff; - return std::make_pair(tag, at_or_below_cutoff); - } - } - // Slow path - const uint32_t tag = ReadTagFallback(first_byte_or_zero); - return std::make_pair(tag, static_cast<uint32_t>(tag - 1) < cutoff); -} - -inline bool CodedInputStream::LastTagWas(uint32_t expected) { - return last_tag_ == expected; -} - -inline bool CodedInputStream::ConsumedEntireMessage() { - return legitimate_message_end_; -} - -inline bool CodedInputStream::ExpectTag(uint32_t expected) { - if (expected < (1 << 7)) { - if (PROTOBUF_PREDICT_TRUE(buffer_ < buffer_end_) && - buffer_[0] == expected) { - Advance(1); - return true; - } else { - return false; - } - } else if (expected < (1 << 14)) { - if (PROTOBUF_PREDICT_TRUE(BufferSize() >= 2) && - buffer_[0] == static_cast<uint8_t>(expected | 0x80) && - buffer_[1] == static_cast<uint8_t>(expected >> 7)) { - Advance(2); - return true; - } else { - return false; - } - } else { - // Don't bother optimizing for larger values. - return false; - } -} - -inline const uint8_t* CodedInputStream::ExpectTagFromArray( - const uint8_t* buffer, uint32_t expected) { - if (expected < (1 << 7)) { - if (buffer[0] == expected) { - return buffer + 1; - } - } else if (expected < (1 << 14)) { - if (buffer[0] == static_cast<uint8_t>(expected | 0x80) && - buffer[1] == static_cast<uint8_t>(expected >> 7)) { - return buffer + 2; - } - } - return nullptr; -} - -inline void CodedInputStream::GetDirectBufferPointerInline(const void** data, - int* size) { - *data = buffer_; - *size = static_cast<int>(buffer_end_ - buffer_); -} - -inline bool CodedInputStream::ExpectAtEnd() { - // If we are at a limit we know no more bytes can be read. Otherwise, it's - // hard to say without calling Refresh(), and we'd rather not do that. - - if (buffer_ == buffer_end_ && ((buffer_size_after_limit_ != 0) || - (total_bytes_read_ == current_limit_))) { - last_tag_ = 0; // Pretend we called ReadTag()... - legitimate_message_end_ = true; // ... and it hit EOF. - return true; - } else { - return false; - } -} - -inline int CodedInputStream::CurrentPosition() const { - return total_bytes_read_ - (BufferSize() + buffer_size_after_limit_); -} - -inline void CodedInputStream::Advance(int amount) { buffer_ += amount; } - -inline void CodedInputStream::SetRecursionLimit(int limit) { - recursion_budget_ += limit - recursion_limit_; - recursion_limit_ = limit; -} - -inline bool CodedInputStream::IncrementRecursionDepth() { - --recursion_budget_; - return recursion_budget_ >= 0; -} - -inline void CodedInputStream::DecrementRecursionDepth() { - if (recursion_budget_ < recursion_limit_) ++recursion_budget_; -} - -inline void CodedInputStream::UnsafeDecrementRecursionDepth() { - assert(recursion_budget_ < recursion_limit_); - ++recursion_budget_; -} - -inline void CodedInputStream::SetExtensionRegistry(const DescriptorPool* pool, - MessageFactory* factory) { - extension_pool_ = pool; - extension_factory_ = factory; -} - -inline const DescriptorPool* CodedInputStream::GetExtensionPool() { - return extension_pool_; -} - -inline MessageFactory* CodedInputStream::GetExtensionFactory() { - return extension_factory_; -} - -inline int CodedInputStream::BufferSize() const { - return static_cast<int>(buffer_end_ - buffer_); -} - -inline CodedInputStream::CodedInputStream(ZeroCopyInputStream* input) - : buffer_(nullptr), - buffer_end_(nullptr), - input_(input), - total_bytes_read_(0), - overflow_bytes_(0), - last_tag_(0), - legitimate_message_end_(false), - aliasing_enabled_(false), - current_limit_(std::numeric_limits<int32_t>::max()), - buffer_size_after_limit_(0), - total_bytes_limit_(kDefaultTotalBytesLimit), - recursion_budget_(default_recursion_limit_), - recursion_limit_(default_recursion_limit_), - extension_pool_(nullptr), - extension_factory_(nullptr) { - // Eagerly Refresh() so buffer space is immediately available. - Refresh(); -} - -inline CodedInputStream::CodedInputStream(const uint8_t* buffer, int size) - : buffer_(buffer), - buffer_end_(buffer + size), - input_(nullptr), - total_bytes_read_(size), - overflow_bytes_(0), - last_tag_(0), - legitimate_message_end_(false), - aliasing_enabled_(false), - current_limit_(size), - buffer_size_after_limit_(0), - total_bytes_limit_(kDefaultTotalBytesLimit), - recursion_budget_(default_recursion_limit_), - recursion_limit_(default_recursion_limit_), - extension_pool_(nullptr), - extension_factory_(nullptr) { - // Note that setting current_limit_ == size is important to prevent some - // code paths from trying to access input_ and segfaulting. -} - -inline bool CodedInputStream::IsFlat() const { return input_ == nullptr; } - -inline bool CodedInputStream::Skip(int count) { - if (count < 0) return false; // security: count is often user-supplied - - const int original_buffer_size = BufferSize(); - - if (count <= original_buffer_size) { - // Just skipping within the current buffer. Easy. - Advance(count); - return true; - } - - return SkipFallback(count, original_buffer_size); -} - -template <class Stream, class> -inline CodedOutputStream::CodedOutputStream(Stream* stream) - : impl_(stream, IsDefaultSerializationDeterministic(), &cur_), - start_count_(stream->ByteCount()) { - InitEagerly(stream); -} - -template <class Stream, class> -inline CodedOutputStream::CodedOutputStream(Stream* stream, bool eager_init) - : impl_(stream, IsDefaultSerializationDeterministic(), &cur_), - start_count_(stream->ByteCount()) { - if (eager_init) { - InitEagerly(stream); - } -} - -template <class Stream> -inline void CodedOutputStream::InitEagerly(Stream* stream) { - void* data; - int size; - if (PROTOBUF_PREDICT_TRUE(stream->Next(&data, &size) && size > 0)) { - cur_ = impl_.SetInitialBuffer(data, size); - } -} - -inline uint8_t* CodedOutputStream::WriteVarint32ToArray(uint32_t value, - uint8_t* target) { - return EpsCopyOutputStream::UnsafeVarint(value, target); -} - -inline uint8_t* CodedOutputStream::WriteVarint32ToArrayOutOfLine( - uint32_t value, uint8_t* target) { - target[0] = static_cast<uint8_t>(value); - if (value < 0x80) { - return target + 1; - } else { - return WriteVarint32ToArrayOutOfLineHelper(value, target); - } -} - -inline uint8_t* CodedOutputStream::WriteVarint64ToArray(uint64_t value, - uint8_t* target) { - return EpsCopyOutputStream::UnsafeVarint(value, target); -} - -inline void CodedOutputStream::WriteVarint32SignExtended(int32_t value) { - WriteVarint64(static_cast<uint64_t>(value)); -} - -inline uint8_t* CodedOutputStream::WriteVarint32SignExtendedToArray( - int32_t value, uint8_t* target) { - return WriteVarint64ToArray(static_cast<uint64_t>(value), target); -} - -inline uint8_t* CodedOutputStream::WriteLittleEndian32ToArray(uint32_t value, - uint8_t* target) { -#if defined(PROTOBUF_LITTLE_ENDIAN) && \ - !defined(PROTOBUF_DISABLE_LITTLE_ENDIAN_OPT_FOR_TEST) - memcpy(target, &value, sizeof(value)); -#else - target[0] = static_cast<uint8_t>(value); - target[1] = static_cast<uint8_t>(value >> 8); - target[2] = static_cast<uint8_t>(value >> 16); - target[3] = static_cast<uint8_t>(value >> 24); -#endif - return target + sizeof(value); -} - -inline uint8_t* CodedOutputStream::WriteLittleEndian64ToArray(uint64_t value, - uint8_t* target) { -#if defined(PROTOBUF_LITTLE_ENDIAN) && \ - !defined(PROTOBUF_DISABLE_LITTLE_ENDIAN_OPT_FOR_TEST) - memcpy(target, &value, sizeof(value)); -#else - uint32_t part0 = static_cast<uint32_t>(value); - uint32_t part1 = static_cast<uint32_t>(value >> 32); - - target[0] = static_cast<uint8_t>(part0); - target[1] = static_cast<uint8_t>(part0 >> 8); - target[2] = static_cast<uint8_t>(part0 >> 16); - target[3] = static_cast<uint8_t>(part0 >> 24); - target[4] = static_cast<uint8_t>(part1); - target[5] = static_cast<uint8_t>(part1 >> 8); - target[6] = static_cast<uint8_t>(part1 >> 16); - target[7] = static_cast<uint8_t>(part1 >> 24); -#endif - return target + sizeof(value); -} - -inline void CodedOutputStream::WriteVarint32(uint32_t value) { - cur_ = impl_.EnsureSpace(cur_); - SetCur(WriteVarint32ToArray(value, Cur())); -} - -inline void CodedOutputStream::WriteVarint64(uint64_t value) { - cur_ = impl_.EnsureSpace(cur_); - SetCur(WriteVarint64ToArray(value, Cur())); -} - -inline void CodedOutputStream::WriteTag(uint32_t value) { - WriteVarint32(value); -} - -inline uint8_t* CodedOutputStream::WriteTagToArray(uint32_t value, - uint8_t* target) { - return WriteVarint32ToArray(value, target); -} - -inline size_t CodedOutputStream::VarintSize32(uint32_t value) { - // This computes value == 0 ? 1 : floor(log2(value)) / 7 + 1 - // Use an explicit multiplication to implement the divide of - // a number in the 1..31 range. - // Explicit OR 0x1 to avoid calling Bits::Log2FloorNonZero(0), which is - // undefined. - uint32_t log2value = Bits::Log2FloorNonZero(value | 0x1); - return static_cast<size_t>((log2value * 9 + 73) / 64); -} - -inline size_t CodedOutputStream::VarintSize32PlusOne(uint32_t value) { - // Same as above, but one more. - uint32_t log2value = Bits::Log2FloorNonZero(value | 0x1); - return static_cast<size_t>((log2value * 9 + 73 + 64) / 64); -} - -inline size_t CodedOutputStream::VarintSize64(uint64_t value) { - // This computes value == 0 ? 1 : floor(log2(value)) / 7 + 1 - // Use an explicit multiplication to implement the divide of - // a number in the 1..63 range. - // Explicit OR 0x1 to avoid calling Bits::Log2FloorNonZero(0), which is - // undefined. - uint32_t log2value = Bits::Log2FloorNonZero64(value | 0x1); - return static_cast<size_t>((log2value * 9 + 73) / 64); -} - -inline size_t CodedOutputStream::VarintSize64PlusOne(uint64_t value) { - // Same as above, but one more. - uint32_t log2value = Bits::Log2FloorNonZero64(value | 0x1); - return static_cast<size_t>((log2value * 9 + 73 + 64) / 64); -} - -inline size_t CodedOutputStream::VarintSize32SignExtended(int32_t value) { - return VarintSize64(static_cast<uint64_t>(int64_t{value})); -} - -inline size_t CodedOutputStream::VarintSize32SignExtendedPlusOne( - int32_t value) { - return VarintSize64PlusOne(static_cast<uint64_t>(int64_t{value})); -} - -inline void CodedOutputStream::WriteString(const std::string& str) { - WriteRaw(str.data(), static_cast<int>(str.size())); -} - -inline void CodedOutputStream::WriteRawMaybeAliased(const void* data, - int size) { - cur_ = impl_.WriteRawMaybeAliased(data, size, cur_); -} - -inline uint8_t* CodedOutputStream::WriteRawToArray(const void* data, int size, - uint8_t* target) { - memcpy(target, data, size); - return target + size; -} - -inline uint8_t* CodedOutputStream::WriteStringToArray(const std::string& str, - uint8_t* target) { - return WriteRawToArray(str.data(), static_cast<int>(str.size()), target); -} - -} // namespace io -} // namespace protobuf -} // namespace google - -#if defined(_MSC_VER) && _MSC_VER >= 1300 && !defined(__INTEL_COMPILER) -#pragma runtime_checks("c", restore) -#endif // _MSC_VER && !defined(__INTEL_COMPILER) - -#include <google/protobuf/port_undef.inc> - -#endif // GOOGLE_PROTOBUF_IO_CODED_STREAM_H__ diff --git a/include/google/protobuf/io/gzip_stream.h b/include/google/protobuf/io/gzip_stream.h deleted file mode 100644 index 4cf71b6c32..0000000000 --- a/include/google/protobuf/io/gzip_stream.h +++ /dev/null @@ -1,205 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// 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 -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -// Author: brianolson@google.com (Brian Olson) -// -// This file contains the definition for classes GzipInputStream and -// GzipOutputStream. -// -// GzipInputStream decompresses data from an underlying -// ZeroCopyInputStream and provides the decompressed data as a -// ZeroCopyInputStream. -// -// GzipOutputStream is an ZeroCopyOutputStream that compresses data to -// an underlying ZeroCopyOutputStream. - -#ifndef GOOGLE_PROTOBUF_IO_GZIP_STREAM_H__ -#define GOOGLE_PROTOBUF_IO_GZIP_STREAM_H__ - - -#include <google/protobuf/stubs/common.h> -#include <google/protobuf/io/zero_copy_stream.h> -#include <google/protobuf/port.h> -#include "zlib.h" - -// Must be included last. -#include <google/protobuf/port_def.inc> - -namespace google { -namespace protobuf { -namespace io { - -// A ZeroCopyInputStream that reads compressed data through zlib -class PROTOBUF_EXPORT GzipInputStream PROTOBUF_FUTURE_FINAL - : public ZeroCopyInputStream { - public: - // Format key for constructor - enum Format { - // zlib will autodetect gzip header or deflate stream - AUTO = 0, - - // GZIP streams have some extra header data for file attributes. - GZIP = 1, - - // Simpler zlib stream format. - ZLIB = 2, - }; - - // buffer_size and format may be -1 for default of 64kB and GZIP format - explicit GzipInputStream(ZeroCopyInputStream* sub_stream, - Format format = AUTO, int buffer_size = -1); - virtual ~GzipInputStream(); - - // Return last error message or NULL if no error. - inline const char* ZlibErrorMessage() const { return zcontext_.msg; } - inline int ZlibErrorCode() const { return zerror_; } - - // implements ZeroCopyInputStream ---------------------------------- - bool Next(const void** data, int* size) override; - void BackUp(int count) override; - bool Skip(int count) override; - int64_t ByteCount() const override; - - private: - Format format_; - - ZeroCopyInputStream* sub_stream_; - - z_stream zcontext_; - int zerror_; - - void* output_buffer_; - void* output_position_; - size_t output_buffer_length_; - int64_t byte_count_; - - int Inflate(int flush); - void DoNextOutput(const void** data, int* size); - - GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(GzipInputStream); -}; - -class PROTOBUF_EXPORT GzipOutputStream PROTOBUF_FUTURE_FINAL - : public ZeroCopyOutputStream { - public: - // Format key for constructor - enum Format { - // GZIP streams have some extra header data for file attributes. - GZIP = 1, - - // Simpler zlib stream format. - ZLIB = 2, - }; - - struct PROTOBUF_EXPORT Options { - // Defaults to GZIP. - Format format; - - // What size buffer to use internally. Defaults to 64kB. - int buffer_size; - - // A number between 0 and 9, where 0 is no compression and 9 is best - // compression. Defaults to Z_DEFAULT_COMPRESSION (see zlib.h). - int compression_level; - - // Defaults to Z_DEFAULT_STRATEGY. Can also be set to Z_FILTERED, - // Z_HUFFMAN_ONLY, or Z_RLE. See the documentation for deflateInit2 in - // zlib.h for definitions of these constants. - int compression_strategy; - - Options(); // Initializes with default values. - }; - - // Create a GzipOutputStream with default options. - explicit GzipOutputStream(ZeroCopyOutputStream* sub_stream); - - // Create a GzipOutputStream with the given options. - GzipOutputStream(ZeroCopyOutputStream* sub_stream, const Options& options); - - virtual ~GzipOutputStream(); - - // Return last error message or NULL if no error. - inline const char* ZlibErrorMessage() const { return zcontext_.msg; } - inline int ZlibErrorCode() const { return zerror_; } - - // Flushes data written so far to zipped data in the underlying stream. - // It is the caller's responsibility to flush the underlying stream if - // necessary. - // Compression may be less efficient stopping and starting around flushes. - // Returns true if no error. - // - // Please ensure that block size is > 6. Here is an excerpt from the zlib - // doc that explains why: - // - // In the case of a Z_FULL_FLUSH or Z_SYNC_FLUSH, make sure that avail_out - // is greater than six to avoid repeated flush markers due to - // avail_out == 0 on return. - bool Flush(); - - // Writes out all data and closes the gzip stream. - // It is the caller's responsibility to close the underlying stream if - // necessary. - // Returns true if no error. - bool Close(); - - // implements ZeroCopyOutputStream --------------------------------- - bool Next(void** data, int* size) override; - void BackUp(int count) override; - int64_t ByteCount() const override; - - private: - ZeroCopyOutputStream* sub_stream_; - // Result from calling Next() on sub_stream_ - void* sub_data_; - int sub_data_size_; - - z_stream zcontext_; - int zerror_; - void* input_buffer_; - size_t input_buffer_length_; - - // Shared constructor code. - void Init(ZeroCopyOutputStream* sub_stream, const Options& options); - - // Do some compression. - // Takes zlib flush mode. - // Returns zlib error code. - int Deflate(int flush); - - GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(GzipOutputStream); -}; - -} // namespace io -} // namespace protobuf -} // namespace google - -#include <google/protobuf/port_undef.inc> - -#endif // GOOGLE_PROTOBUF_IO_GZIP_STREAM_H__ diff --git a/include/google/protobuf/io/io_win32.h b/include/google/protobuf/io/io_win32.h deleted file mode 100644 index a72b4ea3cf..0000000000 --- a/include/google/protobuf/io/io_win32.h +++ /dev/null @@ -1,141 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// 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 -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -// Author: laszlocsomor@google.com (Laszlo Csomor) -// Based on original Protocol Buffers design by -// Sanjay Ghemawat, Jeff Dean, and others. - -// This file contains the declarations for Windows implementations of -// commonly used POSIX functions such as open(2) and access(2), as well -// as macro definitions for flags of these functions. -// -// By including this file you'll redefine open/access/etc. to -// ::google::protobuf::io::win32::{open/access/etc.}. -// Make sure you don't include a header that attempts to redeclare or -// redefine these functions, that'll lead to confusing compilation -// errors. It's best to #include this file as the last one to ensure that. -// -// This file is only used on Windows, it's empty on other platforms. - -#ifndef GOOGLE_PROTOBUF_IO_IO_WIN32_H__ -#define GOOGLE_PROTOBUF_IO_IO_WIN32_H__ - -#if defined(_WIN32) - -#include <functional> -#include <string> - -#include <google/protobuf/port.h> - -// Must be included last. -#include <google/protobuf/port_def.inc> - -// Compilers on Windows other than MSVC (e.g. Cygwin, MinGW32) define the -// following functions already, except for mkdir. -namespace google { -namespace protobuf { -namespace io { -namespace win32 { - -PROTOBUF_EXPORT FILE* fopen(const char* path, const char* mode); -PROTOBUF_EXPORT int access(const char* path, int mode); -PROTOBUF_EXPORT int chdir(const char* path); -PROTOBUF_EXPORT int close(int fd); -PROTOBUF_EXPORT int dup(int fd); -PROTOBUF_EXPORT int dup2(int fd1, int fd2); -PROTOBUF_EXPORT int mkdir(const char* path, int _mode); -PROTOBUF_EXPORT int open(const char* path, int flags, int mode = 0); -PROTOBUF_EXPORT int read(int fd, void* buffer, size_t size); -PROTOBUF_EXPORT int setmode(int fd, int mode); -PROTOBUF_EXPORT int stat(const char* path, struct _stat* buffer); -PROTOBUF_EXPORT int write(int fd, const void* buffer, size_t size); -PROTOBUF_EXPORT std::wstring testonly_utf8_to_winpath(const char* path); - -enum class ExpandWildcardsResult { - kSuccess = 0, - kErrorNoMatchingFile = 1, - kErrorInputPathConversion = 2, - kErrorOutputPathConversion = 3, -}; - -// Expand wildcards in a path pattern, feed the result to a consumer function. -// -// `path` must be a valid, Windows-style path. It may be absolute, or relative -// to the current working directory, and it may contain wildcards ("*" and "?") -// in the last path segment. This function passes all matching file names to -// `consume`. The resulting paths may not be absolute nor normalized. -// -// The function returns a value from `ExpandWildcardsResult`. -PROTOBUF_EXPORT ExpandWildcardsResult ExpandWildcards( - const std::string& path, std::function<void(const std::string&)> consume); - -namespace strings { - -// Convert from UTF-16 to Active-Code-Page-encoded or to UTF-8-encoded text. -PROTOBUF_EXPORT bool wcs_to_mbs(const wchar_t* s, std::string* out, - bool outUtf8); - -// Convert from Active-Code-Page-encoded or UTF-8-encoded text to UTF-16. -PROTOBUF_EXPORT bool mbs_to_wcs(const char* s, std::wstring* out, bool inUtf8); - -// Convert from UTF-8-encoded text to UTF-16. -PROTOBUF_EXPORT bool utf8_to_wcs(const char* input, std::wstring* out); - -// Convert from UTF-16-encoded text to UTF-8. -PROTOBUF_EXPORT bool wcs_to_utf8(const wchar_t* input, std::string* out); - -} // namespace strings - -} // namespace win32 -} // namespace io -} // namespace protobuf -} // namespace google - -#ifndef W_OK -#define W_OK 02 // not defined by MSVC for whatever reason -#endif - -#ifndef F_OK -#define F_OK 00 // not defined by MSVC for whatever reason -#endif - -#ifndef STDIN_FILENO -#define STDIN_FILENO 0 -#endif - -#ifndef STDOUT_FILENO -#define STDOUT_FILENO 1 -#endif - -#include <google/protobuf/port_undef.inc> - -#endif // defined(_WIN32) - -#endif // GOOGLE_PROTOBUF_IO_IO_WIN32_H__ diff --git a/include/google/protobuf/io/printer.h b/include/google/protobuf/io/printer.h deleted file mode 100644 index 92a4321c04..0000000000 --- a/include/google/protobuf/io/printer.h +++ /dev/null @@ -1,387 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// 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 -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -// Author: kenton@google.com (Kenton Varda) -// Based on original Protocol Buffers design by -// Sanjay Ghemawat, Jeff Dean, and others. -// -// Utility class for writing text to a ZeroCopyOutputStream. - -#ifndef GOOGLE_PROTOBUF_IO_PRINTER_H__ -#define GOOGLE_PROTOBUF_IO_PRINTER_H__ - - -#include <map> -#include <string> -#include <vector> - -#include <google/protobuf/stubs/common.h> - -// Must be included last. -#include <google/protobuf/port_def.inc> - -namespace google { -namespace protobuf { -namespace io { - -class ZeroCopyOutputStream; // zero_copy_stream.h - -// Records annotations about a Printer's output. -class PROTOBUF_EXPORT AnnotationCollector { - public: - // Annotation is a offset range and a payload pair. - typedef std::pair<std::pair<size_t, size_t>, std::string> Annotation; - - // Records that the bytes in file_path beginning with begin_offset and ending - // before end_offset are associated with the SourceCodeInfo-style path. - virtual void AddAnnotation(size_t begin_offset, size_t end_offset, - const std::string& file_path, - const std::vector<int>& path) = 0; - - // TODO(gerbens) I don't see why we need virtuals here. Just a vector of - // range, payload pairs stored in a context should suffice. - virtual void AddAnnotationNew(Annotation& /* a */) {} - - virtual ~AnnotationCollector() {} -}; - -// Records annotations about a Printer's output to the given protocol buffer, -// assuming that the buffer has an ::Annotation message exposing path, -// source_file, begin and end fields. -template <typename AnnotationProto> -class AnnotationProtoCollector : public AnnotationCollector { - public: - // annotation_proto is the protocol buffer to which new Annotations should be - // added. It is not owned by the AnnotationProtoCollector. - explicit AnnotationProtoCollector(AnnotationProto* annotation_proto) - : annotation_proto_(annotation_proto) {} - - // Override for AnnotationCollector::AddAnnotation. - void AddAnnotation(size_t begin_offset, size_t end_offset, - const std::string& file_path, - const std::vector<int>& path) override { - typename AnnotationProto::Annotation* annotation = - annotation_proto_->add_annotation(); - for (int i = 0; i < path.size(); ++i) { - annotation->add_path(path[i]); - } - annotation->set_source_file(file_path); - annotation->set_begin(begin_offset); - annotation->set_end(end_offset); - } - // Override for AnnotationCollector::AddAnnotation. - void AddAnnotationNew(Annotation& a) override { - auto* annotation = annotation_proto_->add_annotation(); - annotation->ParseFromString(a.second); - annotation->set_begin(a.first.first); - annotation->set_end(a.first.second); - } - - private: - // The protocol buffer to which new annotations should be added. - AnnotationProto* const annotation_proto_; -}; - -// This simple utility class assists in code generation. It basically -// allows the caller to define a set of variables and then output some -// text with variable substitutions. Example usage: -// -// Printer printer(output, '$'); -// map<string, string> vars; -// vars["name"] = "Bob"; -// printer.Print(vars, "My name is $name$."); -// -// The above writes "My name is Bob." to the output stream. -// -// Printer aggressively enforces correct usage, crashing (with assert failures) -// in the case of undefined variables in debug builds. This helps greatly in -// debugging code which uses it. -// -// If a Printer is constructed with an AnnotationCollector, it will provide it -// with annotations that connect the Printer's output to paths that can identify -// various descriptors. In the above example, if person_ is a descriptor that -// identifies Bob, we can associate the output string "My name is Bob." with -// a source path pointing to that descriptor with: -// -// printer.Annotate("name", person_); -// -// The AnnotationCollector will be sent an annotation linking the output range -// covering "Bob" to the logical path provided by person_. Tools may use -// this association to (for example) link "Bob" in the output back to the -// source file that defined the person_ descriptor identifying Bob. -// -// Annotate can only examine variables substituted during the last call to -// Print. It is invalid to refer to a variable that was used multiple times -// in a single Print call. -// -// In full generality, one may specify a range of output text using a beginning -// substitution variable and an ending variable. The resulting annotation will -// span from the first character of the substituted value for the beginning -// variable to the last character of the substituted value for the ending -// variable. For example, the Annotate call above is equivalent to this one: -// -// printer.Annotate("name", "name", person_); -// -// This is useful if multiple variables combine to form a single span of output -// that should be annotated with the same source path. For example: -// -// Printer printer(output, '$'); -// map<string, string> vars; -// vars["first"] = "Alice"; -// vars["last"] = "Smith"; -// printer.Print(vars, "My name is $first$ $last$."); -// printer.Annotate("first", "last", person_); -// -// This code would associate the span covering "Alice Smith" in the output with -// the person_ descriptor. -// -// Note that the beginning variable must come before (or overlap with, in the -// case of zero-sized substitution values) the ending variable. -// -// It is also sometimes useful to use variables with zero-sized values as -// markers. This avoids issues with multiple references to the same variable -// and also allows annotation ranges to span literal text from the Print -// templates: -// -// Printer printer(output, '$'); -// map<string, string> vars; -// vars["foo"] = "bar"; -// vars["function"] = "call"; -// vars["mark"] = ""; -// printer.Print(vars, "$function$($foo$,$foo$)$mark$"); -// printer.Annotate("function", "mark", call_); -// -// This code associates the span covering "call(bar,bar)" in the output with the -// call_ descriptor. - -class PROTOBUF_EXPORT Printer { - public: - // Create a printer that writes text to the given output stream. Use the - // given character as the delimiter for variables. - Printer(ZeroCopyOutputStream* output, char variable_delimiter); - - // Create a printer that writes text to the given output stream. Use the - // given character as the delimiter for variables. If annotation_collector - // is not null, Printer will provide it with annotations about code written - // to the stream. annotation_collector is not owned by Printer. - Printer(ZeroCopyOutputStream* output, char variable_delimiter, - AnnotationCollector* annotation_collector); - - ~Printer(); - - // Link a substitution variable emitted by the last call to Print to the - // object described by descriptor. - template <typename SomeDescriptor> - void Annotate(const char* varname, const SomeDescriptor* descriptor) { - Annotate(varname, varname, descriptor); - } - - // Link the output range defined by the substitution variables as emitted by - // the last call to Print to the object described by descriptor. The range - // begins at begin_varname's value and ends after the last character of the - // value substituted for end_varname. - template <typename SomeDescriptor> - void Annotate(const char* begin_varname, const char* end_varname, - const SomeDescriptor* descriptor) { - if (annotation_collector_ == NULL) { - // Annotations aren't turned on for this Printer, so don't pay the cost - // of building the location path. - return; - } - std::vector<int> path; - descriptor->GetLocationPath(&path); - Annotate(begin_varname, end_varname, descriptor->file()->name(), path); - } - - // Link a substitution variable emitted by the last call to Print to the file - // with path file_name. - void Annotate(const char* varname, const std::string& file_name) { - Annotate(varname, varname, file_name); - } - - // Link the output range defined by the substitution variables as emitted by - // the last call to Print to the file with path file_name. The range begins - // at begin_varname's value and ends after the last character of the value - // substituted for end_varname. - void Annotate(const char* begin_varname, const char* end_varname, - const std::string& file_name) { - if (annotation_collector_ == NULL) { - // Annotations aren't turned on for this Printer. - return; - } - std::vector<int> empty_path; - Annotate(begin_varname, end_varname, file_name, empty_path); - } - - // Print some text after applying variable substitutions. If a particular - // variable in the text is not defined, this will crash. Variables to be - // substituted are identified by their names surrounded by delimiter - // characters (as given to the constructor). The variable bindings are - // defined by the given map. - void Print(const std::map<std::string, std::string>& variables, - const char* text); - - // Like the first Print(), except the substitutions are given as parameters. - template <typename... Args> - void Print(const char* text, const Args&... args) { - std::map<std::string, std::string> vars; - PrintInternal(&vars, text, args...); - } - - // Indent text by two spaces. After calling Indent(), two spaces will be - // inserted at the beginning of each line of text. Indent() may be called - // multiple times to produce deeper indents. - void Indent(); - - // Reduces the current indent level by two spaces, or crashes if the indent - // level is zero. - void Outdent(); - - // Write a string to the output buffer. - // This method does not look for newlines to add indentation. - void PrintRaw(const std::string& data); - - // Write a zero-delimited string to output buffer. - // This method does not look for newlines to add indentation. - void PrintRaw(const char* data); - - // Write some bytes to the output buffer. - // This method does not look for newlines to add indentation. - void WriteRaw(const char* data, int size); - - // FormatInternal is a helper function not meant to use directly, use - // compiler::cpp::Formatter instead. This function is meant to support - // formatting text using named variables (eq. "$foo$) from a lookup map (vars) - // and variables directly supplied by arguments (eq "$1$" meaning first - // argument which is the zero index element of args). - void FormatInternal(const std::vector<std::string>& args, - const std::map<std::string, std::string>& vars, - const char* format); - - // True if any write to the underlying stream failed. (We don't just - // crash in this case because this is an I/O failure, not a programming - // error.) - bool failed() const { return failed_; } - - private: - // Link the output range defined by the substitution variables as emitted by - // the last call to Print to the object found at the SourceCodeInfo-style path - // in a file with path file_path. The range begins at the start of - // begin_varname's value and ends after the last character of the value - // substituted for end_varname. Note that begin_varname and end_varname - // may refer to the same variable. - void Annotate(const char* begin_varname, const char* end_varname, - const std::string& file_path, const std::vector<int>& path); - - // Base case - void PrintInternal(std::map<std::string, std::string>* vars, - const char* text) { - Print(*vars, text); - } - - template <typename... Args> - void PrintInternal(std::map<std::string, std::string>* vars, const char* text, - const char* key, const std::string& value, - const Args&... args) { - (*vars)[key] = value; - PrintInternal(vars, text, args...); - } - - // Copy size worth of bytes from data to buffer_. - void CopyToBuffer(const char* data, int size); - - void push_back(char c) { - if (failed_) return; - if (buffer_size_ == 0) { - if (!Next()) return; - } - *buffer_++ = c; - buffer_size_--; - offset_++; - } - - bool Next(); - - inline void IndentIfAtStart(); - const char* WriteVariable( - const std::vector<std::string>& args, - const std::map<std::string, std::string>& vars, const char* format, - int* arg_index, - std::vector<AnnotationCollector::Annotation>* annotations); - - const char variable_delimiter_; - - ZeroCopyOutputStream* const output_; - char* buffer_; - int buffer_size_; - // The current position, in bytes, in the output stream. This is equivalent - // to the total number of bytes that have been written so far. This value is - // used to calculate annotation ranges in the substitutions_ map below. - size_t offset_; - - std::string indent_; - bool at_start_of_line_; - bool failed_; - - // A map from variable name to [start, end) offsets in the output buffer. - // These refer to the offsets used for a variable after the last call to - // Print. If a variable was used more than once, the entry used in - // this map is set to a negative-length span. For singly-used variables, the - // start offset is the beginning of the substitution; the end offset is the - // last byte of the substitution plus one (such that (end - start) is the - // length of the substituted string). - std::map<std::string, std::pair<size_t, size_t> > substitutions_; - - // Keeps track of the keys in substitutions_ that need to be updated when - // indents are inserted. These are keys that refer to the beginning of the - // current line. - std::vector<std::string> line_start_variables_; - - // Returns true and sets range to the substitution range in the output for - // varname if varname was used once in the last call to Print. If varname - // was not used, or if it was used multiple times, returns false (and - // fails a debug assertion). - bool GetSubstitutionRange(const char* varname, - std::pair<size_t, size_t>* range); - - // If non-null, annotation_collector_ is used to store annotations about - // generated code. - AnnotationCollector* const annotation_collector_; - - GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(Printer); -}; - -} // namespace io -} // namespace protobuf -} // namespace google - -#include <google/protobuf/port_undef.inc> - -#endif // GOOGLE_PROTOBUF_IO_PRINTER_H__ diff --git a/include/google/protobuf/io/strtod.h b/include/google/protobuf/io/strtod.h deleted file mode 100644 index 38f544af34..0000000000 --- a/include/google/protobuf/io/strtod.h +++ /dev/null @@ -1,55 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// 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 -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -// A locale-independent version of strtod(), used to parse floating -// point default values in .proto files, where the decimal separator -// is always a dot. - -#ifndef GOOGLE_PROTOBUF_IO_STRTOD_H__ -#define GOOGLE_PROTOBUF_IO_STRTOD_H__ - -namespace google { -namespace protobuf { -namespace io { - -// A locale-independent version of the standard strtod(), which always -// uses a dot as the decimal separator. -double NoLocaleStrtod(const char* str, char** endptr); - -// Casts a double value to a float value. If the value is outside of the -// representable range of float, it will be converted to positive or negative -// infinity. -float SafeDoubleToFloat(double value); - -} // namespace io -} // namespace protobuf -} // namespace google - -#endif // GOOGLE_PROTOBUF_IO_STRTOD_H__ diff --git a/include/google/protobuf/io/tokenizer.h b/include/google/protobuf/io/tokenizer.h deleted file mode 100644 index 4abab7e30c..0000000000 --- a/include/google/protobuf/io/tokenizer.h +++ /dev/null @@ -1,442 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// 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 -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -// Author: kenton@google.com (Kenton Varda) -// Based on original Protocol Buffers design by -// Sanjay Ghemawat, Jeff Dean, and others. -// -// Class for parsing tokenized text from a ZeroCopyInputStream. - -#ifndef GOOGLE_PROTOBUF_IO_TOKENIZER_H__ -#define GOOGLE_PROTOBUF_IO_TOKENIZER_H__ - - -#include <string> -#include <vector> - -#include <google/protobuf/stubs/common.h> -#include <google/protobuf/stubs/logging.h> - -// Must be included last. -#include <google/protobuf/port_def.inc> - -namespace google { -namespace protobuf { -namespace io { - -class ZeroCopyInputStream; // zero_copy_stream.h - -// Defined in this file. -class ErrorCollector; -class Tokenizer; - -// By "column number", the proto compiler refers to a count of the number -// of bytes before a given byte, except that a tab character advances to -// the next multiple of 8 bytes. Note in particular that column numbers -// are zero-based, while many user interfaces use one-based column numbers. -typedef int ColumnNumber; - -// Abstract interface for an object which collects the errors that occur -// during parsing. A typical implementation might simply print the errors -// to stdout. -class PROTOBUF_EXPORT ErrorCollector { - public: - inline ErrorCollector() {} - virtual ~ErrorCollector(); - - // Indicates that there was an error in the input at the given line and - // column numbers. The numbers are zero-based, so you may want to add - // 1 to each before printing them. - virtual void AddError(int line, ColumnNumber column, - const std::string& message) = 0; - - // Indicates that there was a warning in the input at the given line and - // column numbers. The numbers are zero-based, so you may want to add - // 1 to each before printing them. - virtual void AddWarning(int /* line */, ColumnNumber /* column */, - const std::string& /* message */) {} - - private: - GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(ErrorCollector); -}; - -// This class converts a stream of raw text into a stream of tokens for -// the protocol definition parser to parse. The tokens recognized are -// similar to those that make up the C language; see the TokenType enum for -// precise descriptions. Whitespace and comments are skipped. By default, -// C- and C++-style comments are recognized, but other styles can be used by -// calling set_comment_style(). -class PROTOBUF_EXPORT Tokenizer { - public: - // Construct a Tokenizer that reads and tokenizes text from the given - // input stream and writes errors to the given error_collector. - // The caller keeps ownership of input and error_collector. - Tokenizer(ZeroCopyInputStream* input, ErrorCollector* error_collector); - ~Tokenizer(); - - enum TokenType { - TYPE_START, // Next() has not yet been called. - TYPE_END, // End of input reached. "text" is empty. - - TYPE_IDENTIFIER, // A sequence of letters, digits, and underscores, not - // starting with a digit. It is an error for a number - // to be followed by an identifier with no space in - // between. - TYPE_INTEGER, // A sequence of digits representing an integer. Normally - // the digits are decimal, but a prefix of "0x" indicates - // a hex number and a leading zero indicates octal, just - // like with C numeric literals. A leading negative sign - // is NOT included in the token; it's up to the parser to - // interpret the unary minus operator on its own. - TYPE_FLOAT, // A floating point literal, with a fractional part and/or - // an exponent. Always in decimal. Again, never - // negative. - TYPE_STRING, // A quoted sequence of escaped characters. Either single - // or double quotes can be used, but they must match. - // A string literal cannot cross a line break. - TYPE_SYMBOL, // Any other printable character, like '!' or '+'. - // Symbols are always a single character, so "!+$%" is - // four tokens. - TYPE_WHITESPACE, // A sequence of whitespace. This token type is only - // produced if report_whitespace() is true. It is not - // reported for whitespace within comments or strings. - TYPE_NEWLINE, // A newline (\n). This token type is only - // produced if report_whitespace() is true and - // report_newlines() is true. It is not reported for - // newlines in comments or strings. - }; - - // Structure representing a token read from the token stream. - struct Token { - TokenType type; - std::string text; // The exact text of the token as it appeared in - // the input. e.g. tokens of TYPE_STRING will still - // be escaped and in quotes. - - // "line" and "column" specify the position of the first character of - // the token within the input stream. They are zero-based. - int line; - ColumnNumber column; - ColumnNumber end_column; - }; - - // Get the current token. This is updated when Next() is called. Before - // the first call to Next(), current() has type TYPE_START and no contents. - const Token& current(); - - // Return the previous token -- i.e. what current() returned before the - // previous call to Next(). - const Token& previous(); - - // Advance to the next token. Returns false if the end of the input is - // reached. - bool Next(); - - // Like Next(), but also collects comments which appear between the previous - // and next tokens. - // - // Comments which appear to be attached to the previous token are stored - // in *prev_tailing_comments. Comments which appear to be attached to the - // next token are stored in *next_leading_comments. Comments appearing in - // between which do not appear to be attached to either will be added to - // detached_comments. Any of these parameters can be NULL to simply discard - // the comments. - // - // A series of line comments appearing on consecutive lines, with no other - // tokens appearing on those lines, will be treated as a single comment. - // - // Only the comment content is returned; comment markers (e.g. //) are - // stripped out. For block comments, leading whitespace and an asterisk will - // be stripped from the beginning of each line other than the first. Newlines - // are included in the output. - // - // Examples: - // - // optional int32 foo = 1; // Comment attached to foo. - // // Comment attached to bar. - // optional int32 bar = 2; - // - // optional string baz = 3; - // // Comment attached to baz. - // // Another line attached to baz. - // - // // Comment attached to qux. - // // - // // Another line attached to qux. - // optional double qux = 4; - // - // // Detached comment. This is not attached to qux or corge - // // because there are blank lines separating it from both. - // - // optional string corge = 5; - // /* Block comment attached - // * to corge. Leading asterisks - // * will be removed. */ - // /* Block comment attached to - // * grault. */ - // optional int32 grault = 6; - bool NextWithComments(std::string* prev_trailing_comments, - std::vector<std::string>* detached_comments, - std::string* next_leading_comments); - - // Parse helpers --------------------------------------------------- - - // Parses a TYPE_FLOAT token. This never fails, so long as the text actually - // comes from a TYPE_FLOAT token parsed by Tokenizer. If it doesn't, the - // result is undefined (possibly an assert failure). - static double ParseFloat(const std::string& text); - - // Parses a TYPE_STRING token. This never fails, so long as the text actually - // comes from a TYPE_STRING token parsed by Tokenizer. If it doesn't, the - // result is undefined (possibly an assert failure). - static void ParseString(const std::string& text, std::string* output); - - // Identical to ParseString, but appends to output. - static void ParseStringAppend(const std::string& text, std::string* output); - - // Parses a TYPE_INTEGER token. Returns false if the result would be - // greater than max_value. Otherwise, returns true and sets *output to the - // result. If the text is not from a Token of type TYPE_INTEGER originally - // parsed by a Tokenizer, the result is undefined (possibly an assert - // failure). - static bool ParseInteger(const std::string& text, uint64_t max_value, - uint64_t* output); - - // Options --------------------------------------------------------- - - // Set true to allow floats to be suffixed with the letter 'f'. Tokens - // which would otherwise be integers but which have the 'f' suffix will be - // forced to be interpreted as floats. For all other purposes, the 'f' is - // ignored. - void set_allow_f_after_float(bool value) { allow_f_after_float_ = value; } - - // Valid values for set_comment_style(). - enum CommentStyle { - // Line comments begin with "//", block comments are delimited by "/*" and - // "*/". - CPP_COMMENT_STYLE, - // Line comments begin with "#". No way to write block comments. - SH_COMMENT_STYLE - }; - - // Sets the comment style. - void set_comment_style(CommentStyle style) { comment_style_ = style; } - - // Whether to require whitespace between a number and a field name. - // Default is true. Do not use this; for Google-internal cleanup only. - void set_require_space_after_number(bool require) { - require_space_after_number_ = require; - } - - // Whether to allow string literals to span multiple lines. Default is false. - // Do not use this; for Google-internal cleanup only. - void set_allow_multiline_strings(bool allow) { - allow_multiline_strings_ = allow; - } - - // If true, whitespace tokens are reported by Next(). - // Note: `set_report_whitespace(false)` implies `set_report_newlines(false)`. - bool report_whitespace() const; - void set_report_whitespace(bool report); - - // If true, newline tokens are reported by Next(). - // Note: `set_report_newlines(true)` implies `set_report_whitespace(true)`. - bool report_newlines() const; - void set_report_newlines(bool report); - - // External helper: validate an identifier. - static bool IsIdentifier(const std::string& text); - - // ----------------------------------------------------------------- - private: - GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(Tokenizer); - - Token current_; // Returned by current(). - Token previous_; // Returned by previous(). - - ZeroCopyInputStream* input_; - ErrorCollector* error_collector_; - - char current_char_; // == buffer_[buffer_pos_], updated by NextChar(). - const char* buffer_; // Current buffer returned from input_. - int buffer_size_; // Size of buffer_. - int buffer_pos_; // Current position within the buffer. - bool read_error_; // Did we previously encounter a read error? - - // Line and column number of current_char_ within the whole input stream. - int line_; - ColumnNumber column_; - - // String to which text should be appended as we advance through it. - // Call RecordTo(&str) to start recording and StopRecording() to stop. - // E.g. StartToken() calls RecordTo(¤t_.text). record_start_ is the - // position within the current buffer where recording started. - std::string* record_target_; - int record_start_; - - // Options. - bool allow_f_after_float_; - CommentStyle comment_style_; - bool require_space_after_number_; - bool allow_multiline_strings_; - bool report_whitespace_ = false; - bool report_newlines_ = false; - - // Since we count columns we need to interpret tabs somehow. We'll take - // the standard 8-character definition for lack of any way to do better. - // This must match the documentation of ColumnNumber. - static const int kTabWidth = 8; - - // ----------------------------------------------------------------- - // Helper methods. - - // Consume this character and advance to the next one. - void NextChar(); - - // Read a new buffer from the input. - void Refresh(); - - inline void RecordTo(std::string* target); - inline void StopRecording(); - - // Called when the current character is the first character of a new - // token (not including whitespace or comments). - inline void StartToken(); - // Called when the current character is the first character after the - // end of the last token. After this returns, current_.text will - // contain all text consumed since StartToken() was called. - inline void EndToken(); - - // Convenience method to add an error at the current line and column. - void AddError(const std::string& message) { - error_collector_->AddError(line_, column_, message); - } - - // ----------------------------------------------------------------- - // The following four methods are used to consume tokens of specific - // types. They are actually used to consume all characters *after* - // the first, since the calling function consumes the first character - // in order to decide what kind of token is being read. - - // Read and consume a string, ending when the given delimiter is - // consumed. - void ConsumeString(char delimiter); - - // Read and consume a number, returning TYPE_FLOAT or TYPE_INTEGER - // depending on what was read. This needs to know if the first - // character was a zero in order to correctly recognize hex and octal - // numbers. - // It also needs to know if the first character was a . to parse floating - // point correctly. - TokenType ConsumeNumber(bool started_with_zero, bool started_with_dot); - - // Consume the rest of a line. - void ConsumeLineComment(std::string* content); - // Consume until "*/". - void ConsumeBlockComment(std::string* content); - - enum NextCommentStatus { - // Started a line comment. - LINE_COMMENT, - - // Started a block comment. - BLOCK_COMMENT, - - // Consumed a slash, then realized it wasn't a comment. current_ has - // been filled in with a slash token. The caller should return it. - SLASH_NOT_COMMENT, - - // We do not appear to be starting a comment here. - NO_COMMENT - }; - - // If we're at the start of a new comment, consume it and return what kind - // of comment it is. - NextCommentStatus TryConsumeCommentStart(); - - // If we're looking at a TYPE_WHITESPACE token and `report_whitespace_` is - // true, consume it and return true. - bool TryConsumeWhitespace(); - - // If we're looking at a TYPE_NEWLINE token and `report_newlines_` is true, - // consume it and return true. - bool TryConsumeNewline(); - - // ----------------------------------------------------------------- - // These helper methods make the parsing code more readable. The - // "character classes" referred to are defined at the top of the .cc file. - // Basically it is a C++ class with one method: - // static bool InClass(char c); - // The method returns true if c is a member of this "class", like "Letter" - // or "Digit". - - // Returns true if the current character is of the given character - // class, but does not consume anything. - template <typename CharacterClass> - inline bool LookingAt(); - - // If the current character is in the given class, consume it and return - // true. Otherwise return false. - // e.g. TryConsumeOne<Letter>() - template <typename CharacterClass> - inline bool TryConsumeOne(); - - // Like above, but try to consume the specific character indicated. - inline bool TryConsume(char c); - - // Consume zero or more of the given character class. - template <typename CharacterClass> - inline void ConsumeZeroOrMore(); - - // Consume one or more of the given character class or log the given - // error message. - // e.g. ConsumeOneOrMore<Digit>("Expected digits."); - template <typename CharacterClass> - inline void ConsumeOneOrMore(const char* error); -}; - -// inline methods ==================================================== -inline const Tokenizer::Token& Tokenizer::current() { return current_; } - -inline const Tokenizer::Token& Tokenizer::previous() { return previous_; } - -inline void Tokenizer::ParseString(const std::string& text, - std::string* output) { - output->clear(); - ParseStringAppend(text, output); -} - -} // namespace io -} // namespace protobuf -} // namespace google - -#include <google/protobuf/port_undef.inc> - -#endif // GOOGLE_PROTOBUF_IO_TOKENIZER_H__ diff --git a/include/google/protobuf/io/zero_copy_stream.h b/include/google/protobuf/io/zero_copy_stream.h deleted file mode 100644 index 2041cbf648..0000000000 --- a/include/google/protobuf/io/zero_copy_stream.h +++ /dev/null @@ -1,260 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// 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 -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -// Author: kenton@google.com (Kenton Varda) -// Based on original Protocol Buffers design by -// Sanjay Ghemawat, Jeff Dean, and others. -// -// This file contains the ZeroCopyInputStream and ZeroCopyOutputStream -// interfaces, which represent abstract I/O streams to and from which -// protocol buffers can be read and written. For a few simple -// implementations of these interfaces, see zero_copy_stream_impl.h. -// -// These interfaces are different from classic I/O streams in that they -// try to minimize the amount of data copying that needs to be done. -// To accomplish this, responsibility for allocating buffers is moved to -// the stream object, rather than being the responsibility of the caller. -// So, the stream can return a buffer which actually points directly into -// the final data structure where the bytes are to be stored, and the caller -// can interact directly with that buffer, eliminating an intermediate copy -// operation. -// -// As an example, consider the common case in which you are reading bytes -// from an array that is already in memory (or perhaps an mmap()ed file). -// With classic I/O streams, you would do something like: -// char buffer[BUFFER_SIZE]; -// input->Read(buffer, BUFFER_SIZE); -// DoSomething(buffer, BUFFER_SIZE); -// Then, the stream basically just calls memcpy() to copy the data from -// the array into your buffer. With a ZeroCopyInputStream, you would do -// this instead: -// const void* buffer; -// int size; -// input->Next(&buffer, &size); -// DoSomething(buffer, size); -// Here, no copy is performed. The input stream returns a pointer directly -// into the backing array, and the caller ends up reading directly from it. -// -// If you want to be able to read the old-fashion way, you can create -// a CodedInputStream or CodedOutputStream wrapping these objects and use -// their ReadRaw()/WriteRaw() methods. These will, of course, add a copy -// step, but Coded*Stream will handle buffering so at least it will be -// reasonably efficient. -// -// ZeroCopyInputStream example: -// // Read in a file and print its contents to stdout. -// int fd = open("myfile", O_RDONLY); -// ZeroCopyInputStream* input = new FileInputStream(fd); -// -// const void* buffer; -// int size; -// while (input->Next(&buffer, &size)) { -// cout.write(buffer, size); -// } -// -// delete input; -// close(fd); -// -// ZeroCopyOutputStream example: -// // Copy the contents of "infile" to "outfile", using plain read() for -// // "infile" but a ZeroCopyOutputStream for "outfile". -// int infd = open("infile", O_RDONLY); -// int outfd = open("outfile", O_WRONLY); -// ZeroCopyOutputStream* output = new FileOutputStream(outfd); -// -// void* buffer; -// int size; -// while (output->Next(&buffer, &size)) { -// int bytes = read(infd, buffer, size); -// if (bytes < size) { -// // Reached EOF. -// output->BackUp(size - bytes); -// break; -// } -// } -// -// delete output; -// close(infd); -// close(outfd); - -#ifndef GOOGLE_PROTOBUF_IO_ZERO_COPY_STREAM_H__ -#define GOOGLE_PROTOBUF_IO_ZERO_COPY_STREAM_H__ - - -#include <google/protobuf/stubs/common.h> - - -// Must be included last. -#include <google/protobuf/port_def.inc> - -namespace google { -namespace protobuf { -namespace io { - -// Defined in this file. -class ZeroCopyInputStream; -class ZeroCopyOutputStream; - -// Abstract interface similar to an input stream but designed to minimize -// copying. -class PROTOBUF_EXPORT ZeroCopyInputStream { - public: - ZeroCopyInputStream() {} - virtual ~ZeroCopyInputStream() {} - - // Obtains a chunk of data from the stream. - // - // Preconditions: - // * "size" and "data" are not NULL. - // - // Postconditions: - // * If the returned value is false, there is no more data to return or - // an error occurred. All errors are permanent. - // * Otherwise, "size" points to the actual number of bytes read and "data" - // points to a pointer to a buffer containing these bytes. - // * Ownership of this buffer remains with the stream, and the buffer - // remains valid only until some other method of the stream is called - // or the stream is destroyed. - // * It is legal for the returned buffer to have zero size, as long - // as repeatedly calling Next() eventually yields a buffer with non-zero - // size. - virtual bool Next(const void** data, int* size) = 0; - - // Backs up a number of bytes, so that the next call to Next() returns - // data again that was already returned by the last call to Next(). This - // is useful when writing procedures that are only supposed to read up - // to a certain point in the input, then return. If Next() returns a - // buffer that goes beyond what you wanted to read, you can use BackUp() - // to return to the point where you intended to finish. - // - // This method can be called with `count = 0` to finalize (flush) any - // previously returned buffer. For example, a file output stream can - // flush buffers returned from a previous call to Next() upon such - // BackUp(0) invocations. ZeroCopyOutputStream callers should always - // invoke BackUp() after a final Next() call, even if there is no - // excess buffer data to be backed up to indicate a flush point. - // - // Preconditions: - // * The last method called must have been Next(). - // * count must be less than or equal to the size of the last buffer - // returned by Next(). - // - // Postconditions: - // * The last "count" bytes of the last buffer returned by Next() will be - // pushed back into the stream. Subsequent calls to Next() will return - // the same data again before producing new data. - virtual void BackUp(int count) = 0; - - // Skips a number of bytes. Returns false if the end of the stream is - // reached or some input error occurred. In the end-of-stream case, the - // stream is advanced to the end of the stream (so ByteCount() will return - // the total size of the stream). - virtual bool Skip(int count) = 0; - - // Returns the total number of bytes read since this object was created. - virtual int64_t ByteCount() const = 0; - - - private: - GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(ZeroCopyInputStream); -}; - -// Abstract interface similar to an output stream but designed to minimize -// copying. -class PROTOBUF_EXPORT ZeroCopyOutputStream { - public: - ZeroCopyOutputStream() {} - virtual ~ZeroCopyOutputStream() {} - - // Obtains a buffer into which data can be written. Any data written - // into this buffer will eventually (maybe instantly, maybe later on) - // be written to the output. - // - // Preconditions: - // * "size" and "data" are not NULL. - // - // Postconditions: - // * If the returned value is false, an error occurred. All errors are - // permanent. - // * Otherwise, "size" points to the actual number of bytes in the buffer - // and "data" points to the buffer. - // * Ownership of this buffer remains with the stream, and the buffer - // remains valid only until some other method of the stream is called - // or the stream is destroyed. - // * Any data which the caller stores in this buffer will eventually be - // written to the output (unless BackUp() is called). - // * It is legal for the returned buffer to have zero size, as long - // as repeatedly calling Next() eventually yields a buffer with non-zero - // size. - virtual bool Next(void** data, int* size) = 0; - - // Backs up a number of bytes, so that the end of the last buffer returned - // by Next() is not actually written. This is needed when you finish - // writing all the data you want to write, but the last buffer was bigger - // than you needed. You don't want to write a bunch of garbage after the - // end of your data, so you use BackUp() to back up. - // - // Preconditions: - // * The last method called must have been Next(). - // * count must be less than or equal to the size of the last buffer - // returned by Next(). - // * The caller must not have written anything to the last "count" bytes - // of that buffer. - // - // Postconditions: - // * The last "count" bytes of the last buffer returned by Next() will be - // ignored. - virtual void BackUp(int count) = 0; - - // Returns the total number of bytes written since this object was created. - virtual int64_t ByteCount() const = 0; - - // Write a given chunk of data to the output. Some output streams may - // implement this in a way that avoids copying. Check AllowsAliasing() before - // calling WriteAliasedRaw(). It will GOOGLE_CHECK fail if WriteAliasedRaw() is - // called on a stream that does not allow aliasing. - // - // NOTE: It is caller's responsibility to ensure that the chunk of memory - // remains live until all of the data has been consumed from the stream. - virtual bool WriteAliasedRaw(const void* data, int size); - virtual bool AllowsAliasing() const { return false; } - - - private: - GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(ZeroCopyOutputStream); -}; - -} // namespace io -} // namespace protobuf -} // namespace google - -#include <google/protobuf/port_undef.inc> - -#endif // GOOGLE_PROTOBUF_IO_ZERO_COPY_STREAM_H__ diff --git a/include/google/protobuf/io/zero_copy_stream_impl.h b/include/google/protobuf/io/zero_copy_stream_impl.h deleted file mode 100644 index a385992f20..0000000000 --- a/include/google/protobuf/io/zero_copy_stream_impl.h +++ /dev/null @@ -1,336 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// 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 -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -// Author: kenton@google.com (Kenton Varda) -// Based on original Protocol Buffers design by -// Sanjay Ghemawat, Jeff Dean, and others. -// -// This file contains common implementations of the interfaces defined in -// zero_copy_stream.h which are only included in the full (non-lite) -// protobuf library. These implementations include Unix file descriptors -// and C++ iostreams. See also: zero_copy_stream_impl_lite.h - -#ifndef GOOGLE_PROTOBUF_IO_ZERO_COPY_STREAM_IMPL_H__ -#define GOOGLE_PROTOBUF_IO_ZERO_COPY_STREAM_IMPL_H__ - - -#include <iosfwd> -#include <string> - -#include <google/protobuf/stubs/common.h> -#include <google/protobuf/io/zero_copy_stream.h> -#include <google/protobuf/io/zero_copy_stream_impl_lite.h> - -// Must be included last. -#include <google/protobuf/port_def.inc> - -namespace google { -namespace protobuf { -namespace io { - -// =================================================================== - -// A ZeroCopyInputStream which reads from a file descriptor. -// -// FileInputStream is preferred over using an ifstream with IstreamInputStream. -// The latter will introduce an extra layer of buffering, harming performance. -// Also, it's conceivable that FileInputStream could someday be enhanced -// to use zero-copy file descriptors on OSs which support them. -class PROTOBUF_EXPORT FileInputStream PROTOBUF_FUTURE_FINAL - : public ZeroCopyInputStream { - public: - // Creates a stream that reads from the given Unix file descriptor. - // If a block_size is given, it specifies the number of bytes that - // should be read and returned with each call to Next(). Otherwise, - // a reasonable default is used. - explicit FileInputStream(int file_descriptor, int block_size = -1); - - // Flushes any buffers and closes the underlying file. Returns false if - // an error occurs during the process; use GetErrno() to examine the error. - // Even if an error occurs, the file descriptor is closed when this returns. - bool Close(); - - // By default, the file descriptor is not closed when the stream is - // destroyed. Call SetCloseOnDelete(true) to change that. WARNING: - // This leaves no way for the caller to detect if close() fails. If - // detecting close() errors is important to you, you should arrange - // to close the descriptor yourself. - void SetCloseOnDelete(bool value) { copying_input_.SetCloseOnDelete(value); } - - // If an I/O error has occurred on this file descriptor, this is the - // errno from that error. Otherwise, this is zero. Once an error - // occurs, the stream is broken and all subsequent operations will - // fail. - int GetErrno() const { return copying_input_.GetErrno(); } - - // implements ZeroCopyInputStream ---------------------------------- - bool Next(const void** data, int* size) override; - void BackUp(int count) override; - bool Skip(int count) override; - int64_t ByteCount() const override; - - private: - class PROTOBUF_EXPORT CopyingFileInputStream PROTOBUF_FUTURE_FINAL - : public CopyingInputStream { - public: - CopyingFileInputStream(int file_descriptor); - ~CopyingFileInputStream() override; - - bool Close(); - void SetCloseOnDelete(bool value) { close_on_delete_ = value; } - int GetErrno() const { return errno_; } - - // implements CopyingInputStream --------------------------------- - int Read(void* buffer, int size) override; - int Skip(int count) override; - - private: - // The file descriptor. - const int file_; - bool close_on_delete_; - bool is_closed_; - - // The errno of the I/O error, if one has occurred. Otherwise, zero. - int errno_; - - // Did we try to seek once and fail? If so, we assume this file descriptor - // doesn't support seeking and won't try again. - bool previous_seek_failed_; - - GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(CopyingFileInputStream); - }; - - CopyingFileInputStream copying_input_; - CopyingInputStreamAdaptor impl_; - - GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(FileInputStream); -}; - -// =================================================================== - -// A ZeroCopyOutputStream which writes to a file descriptor. -// -// FileOutputStream is preferred over using an ofstream with -// OstreamOutputStream. The latter will introduce an extra layer of buffering, -// harming performance. Also, it's conceivable that FileOutputStream could -// someday be enhanced to use zero-copy file descriptors on OSs which -// support them. -class PROTOBUF_EXPORT FileOutputStream PROTOBUF_FUTURE_FINAL - : public CopyingOutputStreamAdaptor { - public: - // Creates a stream that writes to the given Unix file descriptor. - // If a block_size is given, it specifies the size of the buffers - // that should be returned by Next(). Otherwise, a reasonable default - // is used. - explicit FileOutputStream(int file_descriptor, int block_size = -1); - - ~FileOutputStream() override; - - // Flushes any buffers and closes the underlying file. Returns false if - // an error occurs during the process; use GetErrno() to examine the error. - // Even if an error occurs, the file descriptor is closed when this returns. - bool Close(); - - // By default, the file descriptor is not closed when the stream is - // destroyed. Call SetCloseOnDelete(true) to change that. WARNING: - // This leaves no way for the caller to detect if close() fails. If - // detecting close() errors is important to you, you should arrange - // to close the descriptor yourself. - void SetCloseOnDelete(bool value) { copying_output_.SetCloseOnDelete(value); } - - // If an I/O error has occurred on this file descriptor, this is the - // errno from that error. Otherwise, this is zero. Once an error - // occurs, the stream is broken and all subsequent operations will - // fail. - int GetErrno() const { return copying_output_.GetErrno(); } - - private: - class PROTOBUF_EXPORT CopyingFileOutputStream PROTOBUF_FUTURE_FINAL - : public CopyingOutputStream { - public: - CopyingFileOutputStream(int file_descriptor); - ~CopyingFileOutputStream() override; - - bool Close(); - void SetCloseOnDelete(bool value) { close_on_delete_ = value; } - int GetErrno() const { return errno_; } - - // implements CopyingOutputStream -------------------------------- - bool Write(const void* buffer, int size) override; - - private: - // The file descriptor. - const int file_; - bool close_on_delete_; - bool is_closed_; - - // The errno of the I/O error, if one has occurred. Otherwise, zero. - int errno_; - - GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(CopyingFileOutputStream); - }; - - CopyingFileOutputStream copying_output_; - - GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(FileOutputStream); -}; - -// =================================================================== - -// A ZeroCopyInputStream which reads from a C++ istream. -// -// Note that for reading files (or anything represented by a file descriptor), -// FileInputStream is more efficient. -class PROTOBUF_EXPORT IstreamInputStream PROTOBUF_FUTURE_FINAL - : public ZeroCopyInputStream { - public: - // Creates a stream that reads from the given C++ istream. - // If a block_size is given, it specifies the number of bytes that - // should be read and returned with each call to Next(). Otherwise, - // a reasonable default is used. - explicit IstreamInputStream(std::istream* stream, int block_size = -1); - - // implements ZeroCopyInputStream ---------------------------------- - bool Next(const void** data, int* size) override; - void BackUp(int count) override; - bool Skip(int count) override; - int64_t ByteCount() const override; - - private: - class PROTOBUF_EXPORT CopyingIstreamInputStream PROTOBUF_FUTURE_FINAL - : public CopyingInputStream { - public: - CopyingIstreamInputStream(std::istream* input); - ~CopyingIstreamInputStream() override; - - // implements CopyingInputStream --------------------------------- - int Read(void* buffer, int size) override; - // (We use the default implementation of Skip().) - - private: - // The stream. - std::istream* input_; - - GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(CopyingIstreamInputStream); - }; - - CopyingIstreamInputStream copying_input_; - CopyingInputStreamAdaptor impl_; - - GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(IstreamInputStream); -}; - -// =================================================================== - -// A ZeroCopyOutputStream which writes to a C++ ostream. -// -// Note that for writing files (or anything represented by a file descriptor), -// FileOutputStream is more efficient. -class PROTOBUF_EXPORT OstreamOutputStream PROTOBUF_FUTURE_FINAL - : public ZeroCopyOutputStream { - public: - // Creates a stream that writes to the given C++ ostream. - // If a block_size is given, it specifies the size of the buffers - // that should be returned by Next(). Otherwise, a reasonable default - // is used. - explicit OstreamOutputStream(std::ostream* stream, int block_size = -1); - ~OstreamOutputStream() override; - - // implements ZeroCopyOutputStream --------------------------------- - bool Next(void** data, int* size) override; - void BackUp(int count) override; - int64_t ByteCount() const override; - - private: - class PROTOBUF_EXPORT CopyingOstreamOutputStream PROTOBUF_FUTURE_FINAL - : public CopyingOutputStream { - public: - CopyingOstreamOutputStream(std::ostream* output); - ~CopyingOstreamOutputStream() override; - - // implements CopyingOutputStream -------------------------------- - bool Write(const void* buffer, int size) override; - - private: - // The stream. - std::ostream* output_; - - GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(CopyingOstreamOutputStream); - }; - - CopyingOstreamOutputStream copying_output_; - CopyingOutputStreamAdaptor impl_; - - GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(OstreamOutputStream); -}; - -// =================================================================== - -// A ZeroCopyInputStream which reads from several other streams in sequence. -// ConcatenatingInputStream is unable to distinguish between end-of-stream -// and read errors in the underlying streams, so it assumes any errors mean -// end-of-stream. So, if the underlying streams fail for any other reason, -// ConcatenatingInputStream may do odd things. It is suggested that you do -// not use ConcatenatingInputStream on streams that might produce read errors -// other than end-of-stream. -class PROTOBUF_EXPORT ConcatenatingInputStream PROTOBUF_FUTURE_FINAL - : public ZeroCopyInputStream { - public: - // All streams passed in as well as the array itself must remain valid - // until the ConcatenatingInputStream is destroyed. - ConcatenatingInputStream(ZeroCopyInputStream* const streams[], int count); - ~ConcatenatingInputStream() override = default; - - // implements ZeroCopyInputStream ---------------------------------- - bool Next(const void** data, int* size) override; - void BackUp(int count) override; - bool Skip(int count) override; - int64_t ByteCount() const override; - - - private: - // As streams are retired, streams_ is incremented and count_ is - // decremented. - ZeroCopyInputStream* const* streams_; - int stream_count_; - int64_t bytes_retired_; // Bytes read from previous streams. - - GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(ConcatenatingInputStream); -}; - -// =================================================================== - -} // namespace io -} // namespace protobuf -} // namespace google - -#include <google/protobuf/port_undef.inc> - -#endif // GOOGLE_PROTOBUF_IO_ZERO_COPY_STREAM_IMPL_H__ diff --git a/include/google/protobuf/io/zero_copy_stream_impl_lite.h b/include/google/protobuf/io/zero_copy_stream_impl_lite.h deleted file mode 100644 index cbda32871e..0000000000 --- a/include/google/protobuf/io/zero_copy_stream_impl_lite.h +++ /dev/null @@ -1,413 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// 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 -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -// Author: kenton@google.com (Kenton Varda) -// Based on original Protocol Buffers design by -// Sanjay Ghemawat, Jeff Dean, and others. -// -// This file contains common implementations of the interfaces defined in -// zero_copy_stream.h which are included in the "lite" protobuf library. -// These implementations cover I/O on raw arrays and strings, as well as -// adaptors which make it easy to implement streams based on traditional -// streams. Of course, many users will probably want to write their own -// implementations of these interfaces specific to the particular I/O -// abstractions they prefer to use, but these should cover the most common -// cases. - -#ifndef GOOGLE_PROTOBUF_IO_ZERO_COPY_STREAM_IMPL_LITE_H__ -#define GOOGLE_PROTOBUF_IO_ZERO_COPY_STREAM_IMPL_LITE_H__ - - -#include <iosfwd> -#include <memory> -#include <string> - -#include <google/protobuf/stubs/callback.h> -#include <google/protobuf/stubs/common.h> -#include <google/protobuf/io/zero_copy_stream.h> -#include <google/protobuf/stubs/stl_util.h> - - -// Must be included last. -#include <google/protobuf/port_def.inc> - -namespace google { -namespace protobuf { -namespace io { - -// =================================================================== - -// A ZeroCopyInputStream backed by an in-memory array of bytes. -class PROTOBUF_EXPORT ArrayInputStream PROTOBUF_FUTURE_FINAL - : public ZeroCopyInputStream { - public: - // Create an InputStream that returns the bytes pointed to by "data". - // "data" remains the property of the caller but must remain valid until - // the stream is destroyed. If a block_size is given, calls to Next() - // will return data blocks no larger than the given size. Otherwise, the - // first call to Next() returns the entire array. block_size is mainly - // useful for testing; in production you would probably never want to set - // it. - ArrayInputStream(const void* data, int size, int block_size = -1); - ~ArrayInputStream() override = default; - - // implements ZeroCopyInputStream ---------------------------------- - bool Next(const void** data, int* size) override; - void BackUp(int count) override; - bool Skip(int count) override; - int64_t ByteCount() const override; - - - private: - const uint8_t* const data_; // The byte array. - const int size_; // Total size of the array. - const int block_size_; // How many bytes to return at a time. - - int position_; - int last_returned_size_; // How many bytes we returned last time Next() - // was called (used for error checking only). - - GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(ArrayInputStream); -}; - -// =================================================================== - -// A ZeroCopyOutputStream backed by an in-memory array of bytes. -class PROTOBUF_EXPORT ArrayOutputStream PROTOBUF_FUTURE_FINAL - : public ZeroCopyOutputStream { - public: - // Create an OutputStream that writes to the bytes pointed to by "data". - // "data" remains the property of the caller but must remain valid until - // the stream is destroyed. If a block_size is given, calls to Next() - // will return data blocks no larger than the given size. Otherwise, the - // first call to Next() returns the entire array. block_size is mainly - // useful for testing; in production you would probably never want to set - // it. - ArrayOutputStream(void* data, int size, int block_size = -1); - ~ArrayOutputStream() override = default; - - // implements ZeroCopyOutputStream --------------------------------- - bool Next(void** data, int* size) override; - void BackUp(int count) override; - int64_t ByteCount() const override; - - private: - uint8_t* const data_; // The byte array. - const int size_; // Total size of the array. - const int block_size_; // How many bytes to return at a time. - - int position_; - int last_returned_size_; // How many bytes we returned last time Next() - // was called (used for error checking only). - - GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(ArrayOutputStream); -}; - -// =================================================================== - -// A ZeroCopyOutputStream which appends bytes to a string. -class PROTOBUF_EXPORT StringOutputStream PROTOBUF_FUTURE_FINAL - : public ZeroCopyOutputStream { - public: - // Create a StringOutputStream which appends bytes to the given string. - // The string remains property of the caller, but it is mutated in arbitrary - // ways and MUST NOT be accessed in any way until you're done with the - // stream. Either be sure there's no further usage, or (safest) destroy the - // stream before using the contents. - // - // Hint: If you call target->reserve(n) before creating the stream, - // the first call to Next() will return at least n bytes of buffer - // space. - explicit StringOutputStream(std::string* target); - ~StringOutputStream() override = default; - - // implements ZeroCopyOutputStream --------------------------------- - bool Next(void** data, int* size) override; - void BackUp(int count) override; - int64_t ByteCount() const override; - - private: - static constexpr size_t kMinimumSize = 16; - - std::string* target_; - - GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(StringOutputStream); -}; - -// Note: There is no StringInputStream. Instead, just create an -// ArrayInputStream as follows: -// ArrayInputStream input(str.data(), str.size()); - -// =================================================================== - -// A generic traditional input stream interface. -// -// Lots of traditional input streams (e.g. file descriptors, C stdio -// streams, and C++ iostreams) expose an interface where every read -// involves copying bytes into a buffer. If you want to take such an -// interface and make a ZeroCopyInputStream based on it, simply implement -// CopyingInputStream and then use CopyingInputStreamAdaptor. -// -// CopyingInputStream implementations should avoid buffering if possible. -// CopyingInputStreamAdaptor does its own buffering and will read data -// in large blocks. -class PROTOBUF_EXPORT CopyingInputStream { - public: - virtual ~CopyingInputStream() {} - - // Reads up to "size" bytes into the given buffer. Returns the number of - // bytes read. Read() waits until at least one byte is available, or - // returns zero if no bytes will ever become available (EOF), or -1 if a - // permanent read error occurred. - virtual int Read(void* buffer, int size) = 0; - - // Skips the next "count" bytes of input. Returns the number of bytes - // actually skipped. This will always be exactly equal to "count" unless - // EOF was reached or a permanent read error occurred. - // - // The default implementation just repeatedly calls Read() into a scratch - // buffer. - virtual int Skip(int count); -}; - -// A ZeroCopyInputStream which reads from a CopyingInputStream. This is -// useful for implementing ZeroCopyInputStreams that read from traditional -// streams. Note that this class is not really zero-copy. -// -// If you want to read from file descriptors or C++ istreams, this is -// already implemented for you: use FileInputStream or IstreamInputStream -// respectively. -class PROTOBUF_EXPORT CopyingInputStreamAdaptor : public ZeroCopyInputStream { - public: - // Creates a stream that reads from the given CopyingInputStream. - // If a block_size is given, it specifies the number of bytes that - // should be read and returned with each call to Next(). Otherwise, - // a reasonable default is used. The caller retains ownership of - // copying_stream unless SetOwnsCopyingStream(true) is called. - explicit CopyingInputStreamAdaptor(CopyingInputStream* copying_stream, - int block_size = -1); - ~CopyingInputStreamAdaptor() override; - - // Call SetOwnsCopyingStream(true) to tell the CopyingInputStreamAdaptor to - // delete the underlying CopyingInputStream when it is destroyed. - void SetOwnsCopyingStream(bool value) { owns_copying_stream_ = value; } - - // implements ZeroCopyInputStream ---------------------------------- - bool Next(const void** data, int* size) override; - void BackUp(int count) override; - bool Skip(int count) override; - int64_t ByteCount() const override; - - private: - // Insures that buffer_ is not NULL. - void AllocateBufferIfNeeded(); - // Frees the buffer and resets buffer_used_. - void FreeBuffer(); - - // The underlying copying stream. - CopyingInputStream* copying_stream_; - bool owns_copying_stream_; - - // True if we have seen a permanent error from the underlying stream. - bool failed_; - - // The current position of copying_stream_, relative to the point where - // we started reading. - int64_t position_; - - // Data is read into this buffer. It may be NULL if no buffer is currently - // in use. Otherwise, it points to an array of size buffer_size_. - std::unique_ptr<uint8_t[]> buffer_; - const int buffer_size_; - - // Number of valid bytes currently in the buffer (i.e. the size last - // returned by Next()). 0 <= buffer_used_ <= buffer_size_. - int buffer_used_; - - // Number of bytes in the buffer which were backed up over by a call to - // BackUp(). These need to be returned again. - // 0 <= backup_bytes_ <= buffer_used_ - int backup_bytes_; - - GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(CopyingInputStreamAdaptor); -}; - -// =================================================================== - -// A generic traditional output stream interface. -// -// Lots of traditional output streams (e.g. file descriptors, C stdio -// streams, and C++ iostreams) expose an interface where every write -// involves copying bytes from a buffer. If you want to take such an -// interface and make a ZeroCopyOutputStream based on it, simply implement -// CopyingOutputStream and then use CopyingOutputStreamAdaptor. -// -// CopyingOutputStream implementations should avoid buffering if possible. -// CopyingOutputStreamAdaptor does its own buffering and will write data -// in large blocks. -class PROTOBUF_EXPORT CopyingOutputStream { - public: - virtual ~CopyingOutputStream() {} - - // Writes "size" bytes from the given buffer to the output. Returns true - // if successful, false on a write error. - virtual bool Write(const void* buffer, int size) = 0; -}; - -// A ZeroCopyOutputStream which writes to a CopyingOutputStream. This is -// useful for implementing ZeroCopyOutputStreams that write to traditional -// streams. Note that this class is not really zero-copy. -// -// If you want to write to file descriptors or C++ ostreams, this is -// already implemented for you: use FileOutputStream or OstreamOutputStream -// respectively. -class PROTOBUF_EXPORT CopyingOutputStreamAdaptor : public ZeroCopyOutputStream { - public: - // Creates a stream that writes to the given Unix file descriptor. - // If a block_size is given, it specifies the size of the buffers - // that should be returned by Next(). Otherwise, a reasonable default - // is used. - explicit CopyingOutputStreamAdaptor(CopyingOutputStream* copying_stream, - int block_size = -1); - ~CopyingOutputStreamAdaptor() override; - - // Writes all pending data to the underlying stream. Returns false if a - // write error occurred on the underlying stream. (The underlying - // stream itself is not necessarily flushed.) - bool Flush(); - - // Call SetOwnsCopyingStream(true) to tell the CopyingOutputStreamAdaptor to - // delete the underlying CopyingOutputStream when it is destroyed. - void SetOwnsCopyingStream(bool value) { owns_copying_stream_ = value; } - - // implements ZeroCopyOutputStream --------------------------------- - bool Next(void** data, int* size) override; - void BackUp(int count) override; - int64_t ByteCount() const override; - bool WriteAliasedRaw(const void* data, int size) override; - bool AllowsAliasing() const override { return true; } - - private: - // Write the current buffer, if it is present. - bool WriteBuffer(); - // Insures that buffer_ is not NULL. - void AllocateBufferIfNeeded(); - // Frees the buffer. - void FreeBuffer(); - - // The underlying copying stream. - CopyingOutputStream* copying_stream_; - bool owns_copying_stream_; - - // True if we have seen a permanent error from the underlying stream. - bool failed_; - - // The current position of copying_stream_, relative to the point where - // we started writing. - int64_t position_; - - // Data is written from this buffer. It may be NULL if no buffer is - // currently in use. Otherwise, it points to an array of size buffer_size_. - std::unique_ptr<uint8_t[]> buffer_; - const int buffer_size_; - - // Number of valid bytes currently in the buffer (i.e. the size last - // returned by Next()). When BackUp() is called, we just reduce this. - // 0 <= buffer_used_ <= buffer_size_. - int buffer_used_; - - GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(CopyingOutputStreamAdaptor); -}; - -// =================================================================== - -// A ZeroCopyInputStream which wraps some other stream and limits it to -// a particular byte count. -class PROTOBUF_EXPORT LimitingInputStream PROTOBUF_FUTURE_FINAL - : public ZeroCopyInputStream { - public: - LimitingInputStream(ZeroCopyInputStream* input, int64_t limit); - ~LimitingInputStream() override; - - // implements ZeroCopyInputStream ---------------------------------- - bool Next(const void** data, int* size) override; - void BackUp(int count) override; - bool Skip(int count) override; - int64_t ByteCount() const override; - - - private: - ZeroCopyInputStream* input_; - int64_t limit_; // Decreases as we go, becomes negative if we overshoot. - int64_t prior_bytes_read_; // Bytes read on underlying stream at construction - - GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(LimitingInputStream); -}; - - -// =================================================================== - -// mutable_string_data() and as_string_data() are workarounds to improve -// the performance of writing new data to an existing string. Unfortunately -// the methods provided by the string class are suboptimal, and using memcpy() -// is mildly annoying because it requires its pointer args to be non-NULL even -// if we ask it to copy 0 bytes. Furthermore, string_as_array() has the -// property that it always returns NULL if its arg is the empty string, exactly -// what we want to avoid if we're using it in conjunction with memcpy()! -// With C++11, the desired memcpy() boils down to memcpy(..., &(*s)[0], size), -// where s is a string*. Without C++11, &(*s)[0] is not guaranteed to be safe, -// so we use string_as_array(), and live with the extra logic that tests whether -// *s is empty. - -// Return a pointer to mutable characters underlying the given string. The -// return value is valid until the next time the string is resized. We -// trust the caller to treat the return value as an array of length s->size(). -inline char* mutable_string_data(std::string* s) { - // This should be simpler & faster than string_as_array() because the latter - // is guaranteed to return NULL when *s is empty, so it has to check for that. - return &(*s)[0]; -} - -// as_string_data(s) is equivalent to -// ({ char* p = mutable_string_data(s); make_pair(p, p != NULL); }) -// Sometimes it's faster: in some scenarios p cannot be NULL, and then the -// code can avoid that check. -inline std::pair<char*, bool> as_string_data(std::string* s) { - char* p = mutable_string_data(s); - return std::make_pair(p, true); -} - -} // namespace io -} // namespace protobuf -} // namespace google - -#include <google/protobuf/port_undef.inc> - -#endif // GOOGLE_PROTOBUF_IO_ZERO_COPY_STREAM_IMPL_LITE_H__ diff --git a/include/google/protobuf/map.h b/include/google/protobuf/map.h deleted file mode 100644 index 008c192253..0000000000 --- a/include/google/protobuf/map.h +++ /dev/null @@ -1,1448 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// 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 -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (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 file defines the map container and its helpers to support protobuf maps. -// -// The Map and MapIterator types are provided by this header file. -// Please avoid using other types defined here, unless they are public -// types within Map or MapIterator, such as Map::value_type. - -#ifndef GOOGLE_PROTOBUF_MAP_H__ -#define GOOGLE_PROTOBUF_MAP_H__ - - -#include <functional> -#include <initializer_list> -#include <iterator> -#include <limits> // To support Visual Studio 2008 -#include <map> -#include <string> -#include <type_traits> -#include <utility> - -#if defined(__cpp_lib_string_view) -#include <string_view> -#endif // defined(__cpp_lib_string_view) - -#if !defined(GOOGLE_PROTOBUF_NO_RDTSC) && defined(__APPLE__) -#include <mach/mach_time.h> -#endif - -#include <google/protobuf/stubs/common.h> -#include <google/protobuf/arena.h> -#include <google/protobuf/generated_enum_util.h> -#include <google/protobuf/map_type_handler.h> -#include <google/protobuf/port.h> -#include <google/protobuf/stubs/hash.h> - -#ifdef SWIG -#error "You cannot SWIG proto headers" -#endif - -// Must be included last. -#include <google/protobuf/port_def.inc> - -namespace google { -namespace protobuf { - -template <typename Key, typename T> -class Map; - -class MapIterator; - -template <typename Enum> -struct is_proto_enum; - -namespace internal { -template <typename Derived, typename Key, typename T, - WireFormatLite::FieldType key_wire_type, - WireFormatLite::FieldType value_wire_type> -class MapFieldLite; - -template <typename Derived, typename Key, typename T, - WireFormatLite::FieldType key_wire_type, - WireFormatLite::FieldType value_wire_type> -class MapField; - -template <typename Key, typename T> -class TypeDefinedMapFieldBase; - -class DynamicMapField; - -class GeneratedMessageReflection; - -// re-implement std::allocator to use arena allocator for memory allocation. -// Used for Map implementation. Users should not use this class -// directly. -template <typename U> -class MapAllocator { - public: - using value_type = U; - using pointer = value_type*; - using const_pointer = const value_type*; - using reference = value_type&; - using const_reference = const value_type&; - using size_type = size_t; - using difference_type = ptrdiff_t; - - constexpr MapAllocator() : arena_(nullptr) {} - explicit constexpr MapAllocator(Arena* arena) : arena_(arena) {} - template <typename X> - MapAllocator(const MapAllocator<X>& allocator) // NOLINT(runtime/explicit) - : arena_(allocator.arena()) {} - - // MapAllocator does not support alignments beyond 8. Technically we should - // support up to std::max_align_t, but this fails with ubsan and tcmalloc - // debug allocation logic which assume 8 as default alignment. - static_assert(alignof(value_type) <= 8, ""); - - pointer allocate(size_type n, const void* /* hint */ = nullptr) { - // If arena is not given, malloc needs to be called which doesn't - // construct element object. - if (arena_ == nullptr) { - return static_cast<pointer>(::operator new(n * sizeof(value_type))); - } else { - return reinterpret_cast<pointer>( - Arena::CreateArray<uint8_t>(arena_, n * sizeof(value_type))); - } - } - - void deallocate(pointer p, size_type n) { - if (arena_ == nullptr) { - internal::SizedDelete(p, n * sizeof(value_type)); - } - } - -#if !defined(GOOGLE_PROTOBUF_OS_APPLE) && !defined(GOOGLE_PROTOBUF_OS_NACL) && \ - !defined(GOOGLE_PROTOBUF_OS_EMSCRIPTEN) - template <class NodeType, class... Args> - void construct(NodeType* p, Args&&... args) { - // Clang 3.6 doesn't compile static casting to void* directly. (Issue - // #1266) According C++ standard 5.2.9/1: "The static_cast operator shall - // not cast away constness". So first the maybe const pointer is casted to - // const void* and after the const void* is const casted. - new (const_cast<void*>(static_cast<const void*>(p))) - NodeType(std::forward<Args>(args)...); - } - - template <class NodeType> - void destroy(NodeType* p) { - p->~NodeType(); - } -#else - void construct(pointer p, const_reference t) { new (p) value_type(t); } - - void destroy(pointer p) { p->~value_type(); } -#endif - - template <typename X> - struct rebind { - using other = MapAllocator<X>; - }; - - template <typename X> - bool operator==(const MapAllocator<X>& other) const { - return arena_ == other.arena_; - } - - template <typename X> - bool operator!=(const MapAllocator<X>& other) const { - return arena_ != other.arena_; - } - - // To support Visual Studio 2008 - size_type max_size() const { - // parentheses around (std::...:max) prevents macro warning of max() - return (std::numeric_limits<size_type>::max)(); - } - - // To support gcc-4.4, which does not properly - // support templated friend classes - Arena* arena() const { return arena_; } - - private: - using DestructorSkippable_ = void; - Arena* arena_; -}; - -template <typename T> -using KeyForTree = - typename std::conditional<std::is_scalar<T>::value, T, - std::reference_wrapper<const T>>::type; - -// Default case: Not transparent. -// We use std::hash<key_type>/std::less<key_type> and all the lookup functions -// only accept `key_type`. -template <typename key_type> -struct TransparentSupport { - using hash = std::hash<key_type>; - using less = std::less<key_type>; - - static bool Equals(const key_type& a, const key_type& b) { return a == b; } - - template <typename K> - using key_arg = key_type; -}; - -#if defined(__cpp_lib_string_view) -// If std::string_view is available, we add transparent support for std::string -// keys. We use std::hash<std::string_view> as it supports the input types we -// care about. The lookup functions accept arbitrary `K`. This will include any -// key type that is convertible to std::string_view. -template <> -struct TransparentSupport<std::string> { - static std::string_view ImplicitConvert(std::string_view str) { return str; } - // If the element is not convertible to std::string_view, try to convert to - // std::string first. - // The template makes this overload lose resolution when both have the same - // rank otherwise. - template <typename = void> - static std::string_view ImplicitConvert(const std::string& str) { - return str; - } - - struct hash : private std::hash<std::string_view> { - using is_transparent = void; - - template <typename T> - size_t operator()(const T& str) const { - return base()(ImplicitConvert(str)); - } - - private: - const std::hash<std::string_view>& base() const { return *this; } - }; - struct less { - using is_transparent = void; - - template <typename T, typename U> - bool operator()(const T& t, const U& u) const { - return ImplicitConvert(t) < ImplicitConvert(u); - } - }; - - template <typename T, typename U> - static bool Equals(const T& t, const U& u) { - return ImplicitConvert(t) == ImplicitConvert(u); - } - - template <typename K> - using key_arg = K; -}; -#endif // defined(__cpp_lib_string_view) - -template <typename Key> -using TreeForMap = - std::map<KeyForTree<Key>, void*, typename TransparentSupport<Key>::less, - MapAllocator<std::pair<const KeyForTree<Key>, void*>>>; - -inline bool TableEntryIsEmpty(void* const* table, size_t b) { - return table[b] == nullptr; -} -inline bool TableEntryIsNonEmptyList(void* const* table, size_t b) { - return table[b] != nullptr && table[b] != table[b ^ 1]; -} -inline bool TableEntryIsTree(void* const* table, size_t b) { - return !TableEntryIsEmpty(table, b) && !TableEntryIsNonEmptyList(table, b); -} -inline bool TableEntryIsList(void* const* table, size_t b) { - return !TableEntryIsTree(table, b); -} - -// This captures all numeric types. -inline size_t MapValueSpaceUsedExcludingSelfLong(bool) { return 0; } -inline size_t MapValueSpaceUsedExcludingSelfLong(const std::string& str) { - return StringSpaceUsedExcludingSelfLong(str); -} -template <typename T, - typename = decltype(std::declval<const T&>().SpaceUsedLong())> -size_t MapValueSpaceUsedExcludingSelfLong(const T& message) { - return message.SpaceUsedLong() - sizeof(T); -} - -constexpr size_t kGlobalEmptyTableSize = 1; -PROTOBUF_EXPORT extern void* const kGlobalEmptyTable[kGlobalEmptyTableSize]; - -// Space used for the table, trees, and nodes. -// Does not include the indirect space used. Eg the data of a std::string. -template <typename Key> -PROTOBUF_NOINLINE size_t SpaceUsedInTable(void** table, size_t num_buckets, - size_t num_elements, - size_t sizeof_node) { - size_t size = 0; - // The size of the table. - size += sizeof(void*) * num_buckets; - // All the nodes. - size += sizeof_node * num_elements; - // For each tree, count the overhead of the those nodes. - // Two buckets at a time because we only care about trees. - for (size_t b = 0; b < num_buckets; b += 2) { - if (internal::TableEntryIsTree(table, b)) { - using Tree = TreeForMap<Key>; - Tree* tree = static_cast<Tree*>(table[b]); - // Estimated cost of the red-black tree nodes, 3 pointers plus a - // bool (plus alignment, so 4 pointers). - size += tree->size() * - (sizeof(typename Tree::value_type) + sizeof(void*) * 4); - } - } - return size; -} - -template <typename Map, - typename = typename std::enable_if< - !std::is_scalar<typename Map::key_type>::value || - !std::is_scalar<typename Map::mapped_type>::value>::type> -size_t SpaceUsedInValues(const Map* map) { - size_t size = 0; - for (const auto& v : *map) { - size += internal::MapValueSpaceUsedExcludingSelfLong(v.first) + - internal::MapValueSpaceUsedExcludingSelfLong(v.second); - } - return size; -} - -inline size_t SpaceUsedInValues(const void*) { return 0; } - -} // namespace internal - -// This is the class for Map's internal value_type. Instead of using -// std::pair as value_type, we use this class which provides us more control of -// its process of construction and destruction. -template <typename Key, typename T> -struct PROTOBUF_ATTRIBUTE_STANDALONE_DEBUG MapPair { - using first_type = const Key; - using second_type = T; - - MapPair(const Key& other_first, const T& other_second) - : first(other_first), second(other_second) {} - explicit MapPair(const Key& other_first) : first(other_first), second() {} - explicit MapPair(Key&& other_first) - : first(std::move(other_first)), second() {} - MapPair(const MapPair& other) : first(other.first), second(other.second) {} - - ~MapPair() {} - - // Implicitly convertible to std::pair of compatible types. - template <typename T1, typename T2> - operator std::pair<T1, T2>() const { // NOLINT(runtime/explicit) - return std::pair<T1, T2>(first, second); - } - - const Key first; - T second; - - private: - friend class Arena; - friend class Map<Key, T>; -}; - -// Map is an associative container type used to store protobuf map -// fields. Each Map instance may or may not use a different hash function, a -// different iteration order, and so on. E.g., please don't examine -// implementation details to decide if the following would work: -// Map<int, int> m0, m1; -// m0[0] = m1[0] = m0[1] = m1[1] = 0; -// assert(m0.begin()->first == m1.begin()->first); // Bug! -// -// Map's interface is similar to std::unordered_map, except that Map is not -// designed to play well with exceptions. -template <typename Key, typename T> -class Map { - public: - using key_type = Key; - using mapped_type = T; - using value_type = MapPair<Key, T>; - - using pointer = value_type*; - using const_pointer = const value_type*; - using reference = value_type&; - using const_reference = const value_type&; - - using size_type = size_t; - using hasher = typename internal::TransparentSupport<Key>::hash; - - constexpr Map() : elements_(nullptr) {} - explicit Map(Arena* arena) : elements_(arena) {} - - Map(const Map& other) : Map() { insert(other.begin(), other.end()); } - - Map(Map&& other) noexcept : Map() { - if (other.arena() != nullptr) { - *this = other; - } else { - swap(other); - } - } - - Map& operator=(Map&& other) noexcept { - if (this != &other) { - if (arena() != other.arena()) { - *this = other; - } else { - swap(other); - } - } - return *this; - } - - template <class InputIt> - Map(const InputIt& first, const InputIt& last) : Map() { - insert(first, last); - } - - ~Map() {} - - private: - using Allocator = internal::MapAllocator<void*>; - - // InnerMap is a generic hash-based map. It doesn't contain any - // protocol-buffer-specific logic. It is a chaining hash map with the - // additional feature that some buckets can be converted to use an ordered - // container. This ensures O(lg n) bounds on find, insert, and erase, while - // avoiding the overheads of ordered containers most of the time. - // - // The implementation doesn't need the full generality of unordered_map, - // and it doesn't have it. More bells and whistles can be added as needed. - // Some implementation details: - // 1. The hash function has type hasher and the equality function - // equal_to<Key>. We inherit from hasher to save space - // (empty-base-class optimization). - // 2. The number of buckets is a power of two. - // 3. Buckets are converted to trees in pairs: if we convert bucket b then - // buckets b and b^1 will share a tree. Invariant: buckets b and b^1 have - // the same non-null value iff they are sharing a tree. (An alternative - // implementation strategy would be to have a tag bit per bucket.) - // 4. As is typical for hash_map and such, the Keys and Values are always - // stored in linked list nodes. Pointers to elements are never invalidated - // until the element is deleted. - // 5. The trees' payload type is pointer to linked-list node. Tree-converting - // a bucket doesn't copy Key-Value pairs. - // 6. Once we've tree-converted a bucket, it is never converted back. However, - // the items a tree contains may wind up assigned to trees or lists upon a - // rehash. - // 7. The code requires no C++ features from C++14 or later. - // 8. Mutations to a map do not invalidate the map's iterators, pointers to - // elements, or references to elements. - // 9. Except for erase(iterator), any non-const method can reorder iterators. - // 10. InnerMap uses KeyForTree<Key> when using the Tree representation, which - // is either `Key`, if Key is a scalar, or `reference_wrapper<const Key>` - // otherwise. This avoids unnecessary copies of string keys, for example. - class InnerMap : private hasher { - public: - explicit constexpr InnerMap(Arena* arena) - : hasher(), - num_elements_(0), - num_buckets_(internal::kGlobalEmptyTableSize), - seed_(0), - index_of_first_non_null_(internal::kGlobalEmptyTableSize), - table_(const_cast<void**>(internal::kGlobalEmptyTable)), - alloc_(arena) {} - - ~InnerMap() { - if (alloc_.arena() == nullptr && - num_buckets_ != internal::kGlobalEmptyTableSize) { - clear(); - Dealloc<void*>(table_, num_buckets_); - } - } - - private: - enum { kMinTableSize = 8 }; - - // Linked-list nodes, as one would expect for a chaining hash table. - struct Node { - value_type kv; - Node* next; - }; - - // Trees. The payload type is a copy of Key, so that we can query the tree - // with Keys that are not in any particular data structure. - // The value is a void* pointing to Node. We use void* instead of Node* to - // avoid code bloat. That way there is only one instantiation of the tree - // class per key type. - using Tree = internal::TreeForMap<Key>; - using TreeIterator = typename Tree::iterator; - - static Node* NodeFromTreeIterator(TreeIterator it) { - return static_cast<Node*>(it->second); - } - - // iterator and const_iterator are instantiations of iterator_base. - template <typename KeyValueType> - class iterator_base { - public: - using reference = KeyValueType&; - using pointer = KeyValueType*; - - // Invariants: - // node_ is always correct. This is handy because the most common - // operations are operator* and operator-> and they only use node_. - // When node_ is set to a non-null value, all the other non-const fields - // are updated to be correct also, but those fields can become stale - // if the underlying map is modified. When those fields are needed they - // are rechecked, and updated if necessary. - iterator_base() : node_(nullptr), m_(nullptr), bucket_index_(0) {} - - explicit iterator_base(const InnerMap* m) : m_(m) { - SearchFrom(m->index_of_first_non_null_); - } - - // Any iterator_base can convert to any other. This is overkill, and we - // rely on the enclosing class to use it wisely. The standard "iterator - // can convert to const_iterator" is OK but the reverse direction is not. - template <typename U> - explicit iterator_base(const iterator_base<U>& it) - : node_(it.node_), m_(it.m_), bucket_index_(it.bucket_index_) {} - - iterator_base(Node* n, const InnerMap* m, size_type index) - : node_(n), m_(m), bucket_index_(index) {} - - iterator_base(TreeIterator tree_it, const InnerMap* m, size_type index) - : node_(NodeFromTreeIterator(tree_it)), m_(m), bucket_index_(index) { - // Invariant: iterators that use buckets with trees have an even - // bucket_index_. - GOOGLE_DCHECK_EQ(bucket_index_ % 2, 0u); - } - - // Advance through buckets, looking for the first that isn't empty. - // If nothing non-empty is found then leave node_ == nullptr. - void SearchFrom(size_type start_bucket) { - GOOGLE_DCHECK(m_->index_of_first_non_null_ == m_->num_buckets_ || - m_->table_[m_->index_of_first_non_null_] != nullptr); - node_ = nullptr; - for (bucket_index_ = start_bucket; bucket_index_ < m_->num_buckets_; - bucket_index_++) { - if (m_->TableEntryIsNonEmptyList(bucket_index_)) { - node_ = static_cast<Node*>(m_->table_[bucket_index_]); - break; - } else if (m_->TableEntryIsTree(bucket_index_)) { - Tree* tree = static_cast<Tree*>(m_->table_[bucket_index_]); - GOOGLE_DCHECK(!tree->empty()); - node_ = NodeFromTreeIterator(tree->begin()); - break; - } - } - } - - reference operator*() const { return node_->kv; } - pointer operator->() const { return &(operator*()); } - - friend bool operator==(const iterator_base& a, const iterator_base& b) { - return a.node_ == b.node_; - } - friend bool operator!=(const iterator_base& a, const iterator_base& b) { - return a.node_ != b.node_; - } - - iterator_base& operator++() { - if (node_->next == nullptr) { - TreeIterator tree_it; - const bool is_list = revalidate_if_necessary(&tree_it); - if (is_list) { - SearchFrom(bucket_index_ + 1); - } else { - GOOGLE_DCHECK_EQ(bucket_index_ & 1, 0u); - Tree* tree = static_cast<Tree*>(m_->table_[bucket_index_]); - if (++tree_it == tree->end()) { - SearchFrom(bucket_index_ + 2); - } else { - node_ = NodeFromTreeIterator(tree_it); - } - } - } else { - node_ = node_->next; - } - return *this; - } - - iterator_base operator++(int /* unused */) { - iterator_base tmp = *this; - ++*this; - return tmp; - } - - // Assumes node_ and m_ are correct and non-null, but other fields may be - // stale. Fix them as needed. Then return true iff node_ points to a - // Node in a list. If false is returned then *it is modified to be - // a valid iterator for node_. - bool revalidate_if_necessary(TreeIterator* it) { - GOOGLE_DCHECK(node_ != nullptr && m_ != nullptr); - // Force bucket_index_ to be in range. - bucket_index_ &= (m_->num_buckets_ - 1); - // Common case: the bucket we think is relevant points to node_. - if (m_->table_[bucket_index_] == static_cast<void*>(node_)) return true; - // Less common: the bucket is a linked list with node_ somewhere in it, - // but not at the head. - if (m_->TableEntryIsNonEmptyList(bucket_index_)) { - Node* l = static_cast<Node*>(m_->table_[bucket_index_]); - while ((l = l->next) != nullptr) { - if (l == node_) { - return true; - } - } - } - // Well, bucket_index_ still might be correct, but probably - // not. Revalidate just to be sure. This case is rare enough that we - // don't worry about potential optimizations, such as having a custom - // find-like method that compares Node* instead of the key. - iterator_base i(m_->find(node_->kv.first, it)); - bucket_index_ = i.bucket_index_; - return m_->TableEntryIsList(bucket_index_); - } - - Node* node_; - const InnerMap* m_; - size_type bucket_index_; - }; - - public: - using iterator = iterator_base<value_type>; - using const_iterator = iterator_base<const value_type>; - - Arena* arena() const { return alloc_.arena(); } - - void Swap(InnerMap* other) { - std::swap(num_elements_, other->num_elements_); - std::swap(num_buckets_, other->num_buckets_); - std::swap(seed_, other->seed_); - std::swap(index_of_first_non_null_, other->index_of_first_non_null_); - std::swap(table_, other->table_); - std::swap(alloc_, other->alloc_); - } - - iterator begin() { return iterator(this); } - iterator end() { return iterator(); } - const_iterator begin() const { return const_iterator(this); } - const_iterator end() const { return const_iterator(); } - - void clear() { - for (size_type b = 0; b < num_buckets_; b++) { - if (TableEntryIsNonEmptyList(b)) { - Node* node = static_cast<Node*>(table_[b]); - table_[b] = nullptr; - do { - Node* next = node->next; - DestroyNode(node); - node = next; - } while (node != nullptr); - } else if (TableEntryIsTree(b)) { - Tree* tree = static_cast<Tree*>(table_[b]); - GOOGLE_DCHECK(table_[b] == table_[b + 1] && (b & 1) == 0); - table_[b] = table_[b + 1] = nullptr; - typename Tree::iterator tree_it = tree->begin(); - do { - Node* node = NodeFromTreeIterator(tree_it); - typename Tree::iterator next = tree_it; - ++next; - tree->erase(tree_it); - DestroyNode(node); - tree_it = next; - } while (tree_it != tree->end()); - DestroyTree(tree); - b++; - } - } - num_elements_ = 0; - index_of_first_non_null_ = num_buckets_; - } - - const hasher& hash_function() const { return *this; } - - static size_type max_size() { - return static_cast<size_type>(1) << (sizeof(void**) >= 8 ? 60 : 28); - } - size_type size() const { return num_elements_; } - bool empty() const { return size() == 0; } - - template <typename K> - iterator find(const K& k) { - return iterator(FindHelper(k).first); - } - - template <typename K> - const_iterator find(const K& k) const { - return FindHelper(k).first; - } - - // Inserts a new element into the container if there is no element with the - // key in the container. - // The new element is: - // (1) Constructed in-place with the given args, if mapped_type is not - // arena constructible. - // (2) Constructed in-place with the arena and then assigned with a - // mapped_type temporary constructed with the given args, otherwise. - template <typename K, typename... Args> - std::pair<iterator, bool> try_emplace(K&& k, Args&&... args) { - return ArenaAwareTryEmplace(Arena::is_arena_constructable<mapped_type>(), - std::forward<K>(k), - std::forward<Args>(args)...); - } - - // Inserts the key into the map, if not present. In that case, the value - // will be value initialized. - template <typename K> - std::pair<iterator, bool> insert(K&& k) { - return try_emplace(std::forward<K>(k)); - } - - template <typename K> - value_type& operator[](K&& k) { - return *try_emplace(std::forward<K>(k)).first; - } - - void erase(iterator it) { - GOOGLE_DCHECK_EQ(it.m_, this); - typename Tree::iterator tree_it; - const bool is_list = it.revalidate_if_necessary(&tree_it); - size_type b = it.bucket_index_; - Node* const item = it.node_; - if (is_list) { - GOOGLE_DCHECK(TableEntryIsNonEmptyList(b)); - Node* head = static_cast<Node*>(table_[b]); - head = EraseFromLinkedList(item, head); - table_[b] = static_cast<void*>(head); - } else { - GOOGLE_DCHECK(TableEntryIsTree(b)); - Tree* tree = static_cast<Tree*>(table_[b]); - tree->erase(tree_it); - if (tree->empty()) { - // Force b to be the minimum of b and b ^ 1. This is important - // only because we want index_of_first_non_null_ to be correct. - b &= ~static_cast<size_type>(1); - DestroyTree(tree); - table_[b] = table_[b + 1] = nullptr; - } - } - DestroyNode(item); - --num_elements_; - if (PROTOBUF_PREDICT_FALSE(b == index_of_first_non_null_)) { - while (index_of_first_non_null_ < num_buckets_ && - table_[index_of_first_non_null_] == nullptr) { - ++index_of_first_non_null_; - } - } - } - - size_t SpaceUsedInternal() const { - return internal::SpaceUsedInTable<Key>(table_, num_buckets_, - num_elements_, sizeof(Node)); - } - - private: - template <typename K, typename... Args> - std::pair<iterator, bool> TryEmplaceInternal(K&& k, Args&&... args) { - std::pair<const_iterator, size_type> p = FindHelper(k); - // Case 1: key was already present. - if (p.first.node_ != nullptr) - return std::make_pair(iterator(p.first), false); - // Case 2: insert. - if (ResizeIfLoadIsOutOfRange(num_elements_ + 1)) { - p = FindHelper(k); - } - const size_type b = p.second; // bucket number - // If K is not key_type, make the conversion to key_type explicit. - using TypeToInit = typename std::conditional< - std::is_same<typename std::decay<K>::type, key_type>::value, K&&, - key_type>::type; - Node* node = Alloc<Node>(1); - // Even when arena is nullptr, CreateInArenaStorage is still used to - // ensure the arena of submessage will be consistent. Otherwise, - // submessage may have its own arena when message-owned arena is enabled. - // Note: This only works if `Key` is not arena constructible. - Arena::CreateInArenaStorage(const_cast<Key*>(&node->kv.first), - alloc_.arena(), - static_cast<TypeToInit>(std::forward<K>(k))); - // Note: if `T` is arena constructible, `Args` needs to be empty. - Arena::CreateInArenaStorage(&node->kv.second, alloc_.arena(), - std::forward<Args>(args)...); - - iterator result = InsertUnique(b, node); - ++num_elements_; - return std::make_pair(result, true); - } - - // A helper function to perform an assignment of `mapped_type`. - // If the first argument is true, then it is a regular assignment. - // Otherwise, we first create a temporary and then perform an assignment. - template <typename V> - static void AssignMapped(std::true_type, mapped_type& mapped, V&& v) { - mapped = std::forward<V>(v); - } - template <typename... Args> - static void AssignMapped(std::false_type, mapped_type& mapped, - Args&&... args) { - mapped = mapped_type(std::forward<Args>(args)...); - } - - // Case 1: `mapped_type` is arena constructible. A temporary object is - // created and then (if `Args` are not empty) assigned to a mapped value - // that was created with the arena. - template <typename K> - std::pair<iterator, bool> ArenaAwareTryEmplace(std::true_type, K&& k) { - // case 1.1: "default" constructed (e.g. from arena only). - return TryEmplaceInternal(std::forward<K>(k)); - } - template <typename K, typename... Args> - std::pair<iterator, bool> ArenaAwareTryEmplace(std::true_type, K&& k, - Args&&... args) { - // case 1.2: "default" constructed + copy/move assignment - auto p = TryEmplaceInternal(std::forward<K>(k)); - if (p.second) { - AssignMapped(std::is_same<void(typename std::decay<Args>::type...), - void(mapped_type)>(), - p.first->second, std::forward<Args>(args)...); - } - return p; - } - // Case 2: `mapped_type` is not arena constructible. Using in-place - // construction. - template <typename... Args> - std::pair<iterator, bool> ArenaAwareTryEmplace(std::false_type, - Args&&... args) { - return TryEmplaceInternal(std::forward<Args>(args)...); - } - - const_iterator find(const Key& k, TreeIterator* it) const { - return FindHelper(k, it).first; - } - template <typename K> - std::pair<const_iterator, size_type> FindHelper(const K& k) const { - return FindHelper(k, nullptr); - } - template <typename K> - std::pair<const_iterator, size_type> FindHelper(const K& k, - TreeIterator* it) const { - size_type b = BucketNumber(k); - if (TableEntryIsNonEmptyList(b)) { - Node* node = static_cast<Node*>(table_[b]); - do { - if (internal::TransparentSupport<Key>::Equals(node->kv.first, k)) { - return std::make_pair(const_iterator(node, this, b), b); - } else { - node = node->next; - } - } while (node != nullptr); - } else if (TableEntryIsTree(b)) { - GOOGLE_DCHECK_EQ(table_[b], table_[b ^ 1]); - b &= ~static_cast<size_t>(1); - Tree* tree = static_cast<Tree*>(table_[b]); - auto tree_it = tree->find(k); - if (tree_it != tree->end()) { - if (it != nullptr) *it = tree_it; - return std::make_pair(const_iterator(tree_it, this, b), b); - } - } - return std::make_pair(end(), b); - } - - // Insert the given Node in bucket b. If that would make bucket b too big, - // and bucket b is not a tree, create a tree for buckets b and b^1 to share. - // Requires count(*KeyPtrFromNodePtr(node)) == 0 and that b is the correct - // bucket. num_elements_ is not modified. - iterator InsertUnique(size_type b, Node* node) { - GOOGLE_DCHECK(index_of_first_non_null_ == num_buckets_ || - table_[index_of_first_non_null_] != nullptr); - // In practice, the code that led to this point may have already - // determined whether we are inserting into an empty list, a short list, - // or whatever. But it's probably cheap enough to recompute that here; - // it's likely that we're inserting into an empty or short list. - iterator result; - GOOGLE_DCHECK(find(node->kv.first) == end()); - if (TableEntryIsEmpty(b)) { - result = InsertUniqueInList(b, node); - } else if (TableEntryIsNonEmptyList(b)) { - if (PROTOBUF_PREDICT_FALSE(TableEntryIsTooLong(b))) { - TreeConvert(b); - result = InsertUniqueInTree(b, node); - GOOGLE_DCHECK_EQ(result.bucket_index_, b & ~static_cast<size_type>(1)); - } else { - // Insert into a pre-existing list. This case cannot modify - // index_of_first_non_null_, so we skip the code to update it. - return InsertUniqueInList(b, node); - } - } else { - // Insert into a pre-existing tree. This case cannot modify - // index_of_first_non_null_, so we skip the code to update it. - return InsertUniqueInTree(b, node); - } - // parentheses around (std::min) prevents macro expansion of min(...) - index_of_first_non_null_ = - (std::min)(index_of_first_non_null_, result.bucket_index_); - return result; - } - - // Returns whether we should insert after the head of the list. For - // non-optimized builds, we randomly decide whether to insert right at the - // head of the list or just after the head. This helps add a little bit of - // non-determinism to the map ordering. - bool ShouldInsertAfterHead(void* node) { -#ifdef NDEBUG - (void)node; - return false; -#else - // Doing modulo with a prime mixes the bits more. - return (reinterpret_cast<uintptr_t>(node) ^ seed_) % 13 > 6; -#endif - } - - // Helper for InsertUnique. Handles the case where bucket b is a - // not-too-long linked list. - iterator InsertUniqueInList(size_type b, Node* node) { - if (table_[b] != nullptr && ShouldInsertAfterHead(node)) { - Node* first = static_cast<Node*>(table_[b]); - node->next = first->next; - first->next = node; - return iterator(node, this, b); - } - - node->next = static_cast<Node*>(table_[b]); - table_[b] = static_cast<void*>(node); - return iterator(node, this, b); - } - - // Helper for InsertUnique. Handles the case where bucket b points to a - // Tree. - iterator InsertUniqueInTree(size_type b, Node* node) { - GOOGLE_DCHECK_EQ(table_[b], table_[b ^ 1]); - // Maintain the invariant that node->next is null for all Nodes in Trees. - node->next = nullptr; - return iterator( - static_cast<Tree*>(table_[b])->insert({node->kv.first, node}).first, - this, b & ~static_cast<size_t>(1)); - } - - // Returns whether it did resize. Currently this is only used when - // num_elements_ increases, though it could be used in other situations. - // It checks for load too low as well as load too high: because any number - // of erases can occur between inserts, the load could be as low as 0 here. - // Resizing to a lower size is not always helpful, but failing to do so can - // destroy the expected big-O bounds for some operations. By having the - // policy that sometimes we resize down as well as up, clients can easily - // keep O(size()) = O(number of buckets) if they want that. - bool ResizeIfLoadIsOutOfRange(size_type new_size) { - const size_type kMaxMapLoadTimes16 = 12; // controls RAM vs CPU tradeoff - const size_type hi_cutoff = num_buckets_ * kMaxMapLoadTimes16 / 16; - const size_type lo_cutoff = hi_cutoff / 4; - // We don't care how many elements are in trees. If a lot are, - // we may resize even though there are many empty buckets. In - // practice, this seems fine. - if (PROTOBUF_PREDICT_FALSE(new_size >= hi_cutoff)) { - if (num_buckets_ <= max_size() / 2) { - Resize(num_buckets_ * 2); - return true; - } - } else if (PROTOBUF_PREDICT_FALSE(new_size <= lo_cutoff && - num_buckets_ > kMinTableSize)) { - size_type lg2_of_size_reduction_factor = 1; - // It's possible we want to shrink a lot here... size() could even be 0. - // So, estimate how much to shrink by making sure we don't shrink so - // much that we would need to grow the table after a few inserts. - const size_type hypothetical_size = new_size * 5 / 4 + 1; - while ((hypothetical_size << lg2_of_size_reduction_factor) < - hi_cutoff) { - ++lg2_of_size_reduction_factor; - } - size_type new_num_buckets = std::max<size_type>( - kMinTableSize, num_buckets_ >> lg2_of_size_reduction_factor); - if (new_num_buckets != num_buckets_) { - Resize(new_num_buckets); - return true; - } - } - return false; - } - - // Resize to the given number of buckets. - void Resize(size_t new_num_buckets) { - if (num_buckets_ == internal::kGlobalEmptyTableSize) { - // This is the global empty array. - // Just overwrite with a new one. No need to transfer or free anything. - num_buckets_ = index_of_first_non_null_ = kMinTableSize; - table_ = CreateEmptyTable(num_buckets_); - seed_ = Seed(); - return; - } - - GOOGLE_DCHECK_GE(new_num_buckets, kMinTableSize); - void** const old_table = table_; - const size_type old_table_size = num_buckets_; - num_buckets_ = new_num_buckets; - table_ = CreateEmptyTable(num_buckets_); - const size_type start = index_of_first_non_null_; - index_of_first_non_null_ = num_buckets_; - for (size_type i = start; i < old_table_size; i++) { - if (internal::TableEntryIsNonEmptyList(old_table, i)) { - TransferList(old_table, i); - } else if (internal::TableEntryIsTree(old_table, i)) { - TransferTree(old_table, i++); - } - } - Dealloc<void*>(old_table, old_table_size); - } - - void TransferList(void* const* table, size_type index) { - Node* node = static_cast<Node*>(table[index]); - do { - Node* next = node->next; - InsertUnique(BucketNumber(node->kv.first), node); - node = next; - } while (node != nullptr); - } - - void TransferTree(void* const* table, size_type index) { - Tree* tree = static_cast<Tree*>(table[index]); - typename Tree::iterator tree_it = tree->begin(); - do { - InsertUnique(BucketNumber(std::cref(tree_it->first).get()), - NodeFromTreeIterator(tree_it)); - } while (++tree_it != tree->end()); - DestroyTree(tree); - } - - Node* EraseFromLinkedList(Node* item, Node* head) { - if (head == item) { - return head->next; - } else { - head->next = EraseFromLinkedList(item, head->next); - return head; - } - } - - bool TableEntryIsEmpty(size_type b) const { - return internal::TableEntryIsEmpty(table_, b); - } - bool TableEntryIsNonEmptyList(size_type b) const { - return internal::TableEntryIsNonEmptyList(table_, b); - } - bool TableEntryIsTree(size_type b) const { - return internal::TableEntryIsTree(table_, b); - } - bool TableEntryIsList(size_type b) const { - return internal::TableEntryIsList(table_, b); - } - - void TreeConvert(size_type b) { - GOOGLE_DCHECK(!TableEntryIsTree(b) && !TableEntryIsTree(b ^ 1)); - Tree* tree = - Arena::Create<Tree>(alloc_.arena(), typename Tree::key_compare(), - typename Tree::allocator_type(alloc_)); - size_type count = CopyListToTree(b, tree) + CopyListToTree(b ^ 1, tree); - GOOGLE_DCHECK_EQ(count, tree->size()); - table_[b] = table_[b ^ 1] = static_cast<void*>(tree); - } - - // Copy a linked list in the given bucket to a tree. - // Returns the number of things it copied. - size_type CopyListToTree(size_type b, Tree* tree) { - size_type count = 0; - Node* node = static_cast<Node*>(table_[b]); - while (node != nullptr) { - tree->insert({node->kv.first, node}); - ++count; - Node* next = node->next; - node->next = nullptr; - node = next; - } - return count; - } - - // Return whether table_[b] is a linked list that seems awfully long. - // Requires table_[b] to point to a non-empty linked list. - bool TableEntryIsTooLong(size_type b) { - const size_type kMaxLength = 8; - size_type count = 0; - Node* node = static_cast<Node*>(table_[b]); - do { - ++count; - node = node->next; - } while (node != nullptr); - // Invariant: no linked list ever is more than kMaxLength in length. - GOOGLE_DCHECK_LE(count, kMaxLength); - return count >= kMaxLength; - } - - template <typename K> - size_type BucketNumber(const K& k) const { - // We xor the hash value against the random seed so that we effectively - // have a random hash function. - uint64_t h = hash_function()(k) ^ seed_; - - // We use the multiplication method to determine the bucket number from - // the hash value. The constant kPhi (suggested by Knuth) is roughly - // (sqrt(5) - 1) / 2 * 2^64. - constexpr uint64_t kPhi = uint64_t{0x9e3779b97f4a7c15}; - return ((kPhi * h) >> 32) & (num_buckets_ - 1); - } - - // Return a power of two no less than max(kMinTableSize, n). - // Assumes either n < kMinTableSize or n is a power of two. - size_type TableSize(size_type n) { - return n < static_cast<size_type>(kMinTableSize) - ? static_cast<size_type>(kMinTableSize) - : n; - } - - // Use alloc_ to allocate an array of n objects of type U. - template <typename U> - U* Alloc(size_type n) { - using alloc_type = typename Allocator::template rebind<U>::other; - return alloc_type(alloc_).allocate(n); - } - - // Use alloc_ to deallocate an array of n objects of type U. - template <typename U> - void Dealloc(U* t, size_type n) { - using alloc_type = typename Allocator::template rebind<U>::other; - alloc_type(alloc_).deallocate(t, n); - } - - void DestroyNode(Node* node) { - if (alloc_.arena() == nullptr) { - delete node; - } - } - - void DestroyTree(Tree* tree) { - if (alloc_.arena() == nullptr) { - delete tree; - } - } - - void** CreateEmptyTable(size_type n) { - GOOGLE_DCHECK(n >= kMinTableSize); - GOOGLE_DCHECK_EQ(n & (n - 1), 0u); - void** result = Alloc<void*>(n); - memset(result, 0, n * sizeof(result[0])); - return result; - } - - // Return a randomish value. - size_type Seed() const { - // We get a little bit of randomness from the address of the map. The - // lower bits are not very random, due to alignment, so we discard them - // and shift the higher bits into their place. - size_type s = reinterpret_cast<uintptr_t>(this) >> 4; -#if !defined(GOOGLE_PROTOBUF_NO_RDTSC) -#if defined(__APPLE__) - // Use a commpage-based fast time function on Apple environments (MacOS, - // iOS, tvOS, watchOS, etc). - s += mach_absolute_time(); -#elif defined(__x86_64__) && defined(__GNUC__) - uint32_t hi, lo; - asm volatile("rdtsc" : "=a"(lo), "=d"(hi)); - s += ((static_cast<uint64_t>(hi) << 32) | lo); -#elif defined(__aarch64__) && defined(__GNUC__) - // There is no rdtsc on ARMv8. CNTVCT_EL0 is the virtual counter of the - // system timer. It runs at a different frequency than the CPU's, but is - // the best source of time-based entropy we get. - uint64_t virtual_timer_value; - asm volatile("mrs %0, cntvct_el0" : "=r"(virtual_timer_value)); - s += virtual_timer_value; -#endif -#endif // !defined(GOOGLE_PROTOBUF_NO_RDTSC) - return s; - } - - friend class Arena; - using InternalArenaConstructable_ = void; - using DestructorSkippable_ = void; - - size_type num_elements_; - size_type num_buckets_; - size_type seed_; - size_type index_of_first_non_null_; - void** table_; // an array with num_buckets_ entries - Allocator alloc_; - GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(InnerMap); - }; // end of class InnerMap - - template <typename LookupKey> - using key_arg = typename internal::TransparentSupport< - key_type>::template key_arg<LookupKey>; - - public: - // Iterators - class const_iterator { - using InnerIt = typename InnerMap::const_iterator; - - public: - using iterator_category = std::forward_iterator_tag; - using value_type = typename Map::value_type; - using difference_type = ptrdiff_t; - using pointer = const value_type*; - using reference = const value_type&; - - const_iterator() {} - explicit const_iterator(const InnerIt& it) : it_(it) {} - - const_reference operator*() const { return *it_; } - const_pointer operator->() const { return &(operator*()); } - - const_iterator& operator++() { - ++it_; - return *this; - } - const_iterator operator++(int) { return const_iterator(it_++); } - - friend bool operator==(const const_iterator& a, const const_iterator& b) { - return a.it_ == b.it_; - } - friend bool operator!=(const const_iterator& a, const const_iterator& b) { - return !(a == b); - } - - private: - InnerIt it_; - }; - - class iterator { - using InnerIt = typename InnerMap::iterator; - - public: - using iterator_category = std::forward_iterator_tag; - using value_type = typename Map::value_type; - using difference_type = ptrdiff_t; - using pointer = value_type*; - using reference = value_type&; - - iterator() {} - explicit iterator(const InnerIt& it) : it_(it) {} - - reference operator*() const { return *it_; } - pointer operator->() const { return &(operator*()); } - - iterator& operator++() { - ++it_; - return *this; - } - iterator operator++(int) { return iterator(it_++); } - - // Allow implicit conversion to const_iterator. - operator const_iterator() const { // NOLINT(runtime/explicit) - return const_iterator(typename InnerMap::const_iterator(it_)); - } - - friend bool operator==(const iterator& a, const iterator& b) { - return a.it_ == b.it_; - } - friend bool operator!=(const iterator& a, const iterator& b) { - return !(a == b); - } - - private: - friend class Map; - - InnerIt it_; - }; - - iterator begin() { return iterator(elements_.begin()); } - iterator end() { return iterator(elements_.end()); } - const_iterator begin() const { return const_iterator(elements_.begin()); } - const_iterator end() const { return const_iterator(elements_.end()); } - const_iterator cbegin() const { return begin(); } - const_iterator cend() const { return end(); } - - // Capacity - size_type size() const { return elements_.size(); } - bool empty() const { return size() == 0; } - - // Element access - template <typename K = key_type> - T& operator[](const key_arg<K>& key) { - return elements_[key].second; - } - template < - typename K = key_type, - // Disable for integral types to reduce code bloat. - typename = typename std::enable_if<!std::is_integral<K>::value>::type> - T& operator[](key_arg<K>&& key) { - return elements_[std::forward<K>(key)].second; - } - - template <typename K = key_type> - const T& at(const key_arg<K>& key) const { - const_iterator it = find(key); - GOOGLE_CHECK(it != end()) << "key not found: " << static_cast<Key>(key); - return it->second; - } - - template <typename K = key_type> - T& at(const key_arg<K>& key) { - iterator it = find(key); - GOOGLE_CHECK(it != end()) << "key not found: " << static_cast<Key>(key); - return it->second; - } - - // Lookup - template <typename K = key_type> - size_type count(const key_arg<K>& key) const { - return find(key) == end() ? 0 : 1; - } - - template <typename K = key_type> - const_iterator find(const key_arg<K>& key) const { - return const_iterator(elements_.find(key)); - } - template <typename K = key_type> - iterator find(const key_arg<K>& key) { - return iterator(elements_.find(key)); - } - - template <typename K = key_type> - bool contains(const key_arg<K>& key) const { - return find(key) != end(); - } - - template <typename K = key_type> - std::pair<const_iterator, const_iterator> equal_range( - const key_arg<K>& key) const { - const_iterator it = find(key); - if (it == end()) { - return std::pair<const_iterator, const_iterator>(it, it); - } else { - const_iterator begin = it++; - return std::pair<const_iterator, const_iterator>(begin, it); - } - } - - template <typename K = key_type> - std::pair<iterator, iterator> equal_range(const key_arg<K>& key) { - iterator it = find(key); - if (it == end()) { - return std::pair<iterator, iterator>(it, it); - } else { - iterator begin = it++; - return std::pair<iterator, iterator>(begin, it); - } - } - - // insert - template <typename K, typename... Args> - std::pair<iterator, bool> try_emplace(K&& k, Args&&... args) { - auto p = - elements_.try_emplace(std::forward<K>(k), std::forward<Args>(args)...); - return std::pair<iterator, bool>(iterator(p.first), p.second); - } - std::pair<iterator, bool> insert(const value_type& value) { - return try_emplace(value.first, value.second); - } - std::pair<iterator, bool> insert(value_type&& value) { - return try_emplace(value.first, std::move(value.second)); - } - template <typename... Args> - std::pair<iterator, bool> emplace(Args&&... args) { - return insert(value_type(std::forward<Args>(args)...)); - } - template <class InputIt> - void insert(InputIt first, InputIt last) { - for (; first != last; ++first) { - try_emplace(first->first, first->second); - } - } - void insert(std::initializer_list<value_type> values) { - insert(values.begin(), values.end()); - } - - // Erase and clear - template <typename K = key_type> - size_type erase(const key_arg<K>& key) { - iterator it = find(key); - if (it == end()) { - return 0; - } else { - erase(it); - return 1; - } - } - iterator erase(iterator pos) { - iterator i = pos++; - elements_.erase(i.it_); - return pos; - } - void erase(iterator first, iterator last) { - while (first != last) { - first = erase(first); - } - } - void clear() { elements_.clear(); } - - // Assign - Map& operator=(const Map& other) { - if (this != &other) { - clear(); - insert(other.begin(), other.end()); - } - return *this; - } - - void swap(Map& other) { - if (arena() == other.arena()) { - InternalSwap(other); - } else { - // TODO(zuguang): optimize this. The temporary copy can be allocated - // in the same arena as the other message, and the "other = copy" can - // be replaced with the fast-path swap above. - Map copy = *this; - *this = other; - other = copy; - } - } - - void InternalSwap(Map& other) { elements_.Swap(&other.elements_); } - - // Access to hasher. Currently this returns a copy, but it may - // be modified to return a const reference in the future. - hasher hash_function() const { return elements_.hash_function(); } - - size_t SpaceUsedExcludingSelfLong() const { - if (empty()) return 0; - return elements_.SpaceUsedInternal() + internal::SpaceUsedInValues(this); - } - - private: - Arena* arena() const { return elements_.arena(); } - InnerMap elements_; - - friend class Arena; - using InternalArenaConstructable_ = void; - using DestructorSkippable_ = void; - template <typename Derived, typename K, typename V, - internal::WireFormatLite::FieldType key_wire_type, - internal::WireFormatLite::FieldType value_wire_type> - friend class internal::MapFieldLite; -}; - -} // namespace protobuf -} // namespace google - -#include <google/protobuf/port_undef.inc> - -#endif // GOOGLE_PROTOBUF_MAP_H__ diff --git a/include/google/protobuf/map_entry.h b/include/google/protobuf/map_entry.h deleted file mode 100644 index 536dec9d0d..0000000000 --- a/include/google/protobuf/map_entry.h +++ /dev/null @@ -1,134 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// 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 -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -#ifndef GOOGLE_PROTOBUF_MAP_ENTRY_H__ -#define GOOGLE_PROTOBUF_MAP_ENTRY_H__ - -#include <google/protobuf/port.h> -#include <google/protobuf/generated_message_reflection.h> -#include <google/protobuf/map_entry_lite.h> -#include <google/protobuf/map_type_handler.h> -#include <google/protobuf/reflection_ops.h> -#include <google/protobuf/unknown_field_set.h> -#include <google/protobuf/wire_format_lite.h> - -// Must be included last. -#include <google/protobuf/port_def.inc> - -#ifdef SWIG -#error "You cannot SWIG proto headers" -#endif - -namespace google { -namespace protobuf { -class Arena; -namespace internal { -template <typename Derived, typename Key, typename Value, - WireFormatLite::FieldType kKeyFieldType, - WireFormatLite::FieldType kValueFieldType> -class MapField; -} -} // namespace protobuf -} // namespace google - -namespace google { -namespace protobuf { -namespace internal { - -// MapEntry is the returned google::protobuf::Message when calling AddMessage of -// google::protobuf::Reflection. In order to let it work with generated message -// reflection, its in-memory type is the same as generated message with the same -// fields. However, in order to decide the in-memory type of key/value, we need -// to know both their cpp type in generated api and proto type. In -// implementation, all in-memory types have related wire format functions to -// support except ArenaStringPtr. Therefore, we need to define another type with -// supporting wire format functions. Since this type is only used as return type -// of MapEntry accessors, it's named MapEntry accessor type. -// -// cpp type: the type visible to users in public API. -// proto type: WireFormatLite::FieldType of the field. -// in-memory type: type of the data member used to stored this field. -// MapEntry accessor type: type used in MapEntry getters/mutators to access the -// field. -// -// cpp type | proto type | in-memory type | MapEntry accessor type -// int32_t TYPE_INT32 int32_t int32_t -// int32_t TYPE_FIXED32 int32_t int32_t -// string TYPE_STRING ArenaStringPtr string -// FooEnum TYPE_ENUM int int -// FooMessage TYPE_MESSAGE FooMessage* FooMessage -// -// The in-memory types of primitive types can be inferred from its proto type, -// while we need to explicitly specify the cpp type if proto type is -// TYPE_MESSAGE to infer the in-memory type. -template <typename Derived, typename Key, typename Value, - WireFormatLite::FieldType kKeyFieldType, - WireFormatLite::FieldType kValueFieldType> -class MapEntry : public MapEntryImpl<Derived, Message, Key, Value, - kKeyFieldType, kValueFieldType> { - public: - constexpr MapEntry() {} - explicit MapEntry(Arena* arena) - : MapEntryImpl<Derived, Message, Key, Value, kKeyFieldType, - kValueFieldType>(arena) {} - ~MapEntry() override { - Message::_internal_metadata_.template Delete<UnknownFieldSet>(); - } - typedef void InternalArenaConstructable_; - typedef void DestructorSkippable_; - - typedef typename MapEntryImpl<Derived, Message, Key, Value, kKeyFieldType, - kValueFieldType>::KeyTypeHandler KeyTypeHandler; - typedef - typename MapEntryImpl<Derived, Message, Key, Value, kKeyFieldType, - kValueFieldType>::ValueTypeHandler ValueTypeHandler; - size_t SpaceUsedLong() const override { - size_t size = sizeof(Derived); - size += KeyTypeHandler::SpaceUsedInMapEntryLong(this->key_); - size += ValueTypeHandler::SpaceUsedInMapEntryLong(this->value_); - return size; - } - - private: - friend class ::PROTOBUF_NAMESPACE_ID::Arena; - template <typename C, typename K, typename V, - WireFormatLite::FieldType k_wire_type, WireFormatLite::FieldType> - friend class internal::MapField; - - GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(MapEntry); -}; - -} // namespace internal -} // namespace protobuf -} // namespace google - -#include <google/protobuf/port_undef.inc> - -#endif // GOOGLE_PROTOBUF_MAP_ENTRY_H__ diff --git a/include/google/protobuf/map_entry_lite.h b/include/google/protobuf/map_entry_lite.h deleted file mode 100644 index 6b08cd92ba..0000000000 --- a/include/google/protobuf/map_entry_lite.h +++ /dev/null @@ -1,563 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// 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 -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -#ifndef GOOGLE_PROTOBUF_MAP_ENTRY_LITE_H__ -#define GOOGLE_PROTOBUF_MAP_ENTRY_LITE_H__ - -#include <assert.h> - -#include <algorithm> -#include <string> -#include <utility> - -#include <google/protobuf/stubs/casts.h> -#include <google/protobuf/io/coded_stream.h> -#include <google/protobuf/arena.h> -#include <google/protobuf/port.h> -#include <google/protobuf/arenastring.h> -#include <google/protobuf/generated_message_util.h> -#include <google/protobuf/map.h> -#include <google/protobuf/map_type_handler.h> -#include <google/protobuf/parse_context.h> -#include <google/protobuf/wire_format_lite.h> - -// Must be included last. -#include <google/protobuf/port_def.inc> -#ifdef SWIG -#error "You cannot SWIG proto headers" -#endif - -namespace google { -namespace protobuf { -namespace internal { -template <typename Derived, typename Key, typename Value, - WireFormatLite::FieldType kKeyFieldType, - WireFormatLite::FieldType kValueFieldType> -class MapEntry; -template <typename Derived, typename Key, typename Value, - WireFormatLite::FieldType kKeyFieldType, - WireFormatLite::FieldType kValueFieldType> -class MapFieldLite; -} // namespace internal -} // namespace protobuf -} // namespace google - -namespace google { -namespace protobuf { -namespace internal { - -// MoveHelper::Move is used to set *dest. It copies *src, or moves it (in -// the C++11 sense), or swaps it. *src is left in a sane state for -// subsequent destruction, but shouldn't be used for anything. -template <bool is_enum, bool is_message, bool is_stringlike, typename T> -struct MoveHelper { // primitives - static void Move(T* src, T* dest) { *dest = *src; } -}; - -template <bool is_message, bool is_stringlike, typename T> -struct MoveHelper<true, is_message, is_stringlike, T> { // enums - static void Move(T* src, T* dest) { *dest = *src; } - // T is an enum here, so allow conversions to and from int. - static void Move(T* src, int* dest) { *dest = static_cast<int>(*src); } - static void Move(int* src, T* dest) { *dest = static_cast<T>(*src); } -}; - -template <bool is_stringlike, typename T> -struct MoveHelper<false, true, is_stringlike, T> { // messages - static void Move(T* src, T* dest) { dest->Swap(src); } -}; - -template <typename T> -struct MoveHelper<false, false, true, T> { // strings and similar - static void Move(T* src, T* dest) { - *dest = std::move(*src); - } -}; - -// MapEntryImpl is used to implement parsing and serialization of map entries. -// It uses Curious Recursive Template Pattern (CRTP) to provide the type of -// the eventual code to the template code. -template <typename Derived, typename Base, typename Key, typename Value, - WireFormatLite::FieldType kKeyFieldType, - WireFormatLite::FieldType kValueFieldType> -class MapEntryImpl : public Base { - public: - typedef MapEntryFuncs<Key, Value, kKeyFieldType, kValueFieldType> Funcs; - - protected: - // Provide utilities to parse/serialize key/value. Provide utilities to - // manipulate internal stored type. - typedef MapTypeHandler<kKeyFieldType, Key> KeyTypeHandler; - typedef MapTypeHandler<kValueFieldType, Value> ValueTypeHandler; - - // Define internal memory layout. Strings and messages are stored as - // pointers, while other types are stored as values. - typedef typename KeyTypeHandler::TypeOnMemory KeyOnMemory; - typedef typename ValueTypeHandler::TypeOnMemory ValueOnMemory; - - // Enum type cannot be used for MapTypeHandler::Read. Define a type - // which will replace Enum with int. - typedef typename KeyTypeHandler::MapEntryAccessorType KeyMapEntryAccessorType; - typedef - typename ValueTypeHandler::MapEntryAccessorType ValueMapEntryAccessorType; - - // Constants for field number. - static const int kKeyFieldNumber = 1; - static const int kValueFieldNumber = 2; - - // Constants for field tag. - static const uint8_t kKeyTag = - GOOGLE_PROTOBUF_WIRE_FORMAT_MAKE_TAG(kKeyFieldNumber, KeyTypeHandler::kWireType); - static const uint8_t kValueTag = GOOGLE_PROTOBUF_WIRE_FORMAT_MAKE_TAG( - kValueFieldNumber, ValueTypeHandler::kWireType); - static const size_t kTagSize = 1; - - public: - // Work-around for a compiler bug (see repeated_field.h). - typedef void MapEntryHasMergeTypeTrait; - typedef Derived EntryType; - typedef Key EntryKeyType; - typedef Value EntryValueType; - static const WireFormatLite::FieldType kEntryKeyFieldType = kKeyFieldType; - static const WireFormatLite::FieldType kEntryValueFieldType = kValueFieldType; - - constexpr MapEntryImpl() - : key_(KeyTypeHandler::Constinit()), - value_(ValueTypeHandler::Constinit()), - _has_bits_{} {} - - explicit MapEntryImpl(Arena* arena) - : Base(arena), - key_(KeyTypeHandler::Constinit()), - value_(ValueTypeHandler::Constinit()), - _has_bits_{} {} - - ~MapEntryImpl() override { - if (Base::GetArenaForAllocation() != nullptr) return; - KeyTypeHandler::DeleteNoArena(key_); - ValueTypeHandler::DeleteNoArena(value_); - } - - // accessors ====================================================== - - virtual inline const KeyMapEntryAccessorType& key() const { - return KeyTypeHandler::GetExternalReference(key_); - } - virtual inline const ValueMapEntryAccessorType& value() const { - return ValueTypeHandler::DefaultIfNotInitialized(value_); - } - inline KeyMapEntryAccessorType* mutable_key() { - set_has_key(); - return KeyTypeHandler::EnsureMutable(&key_, Base::GetArenaForAllocation()); - } - inline ValueMapEntryAccessorType* mutable_value() { - set_has_value(); - return ValueTypeHandler::EnsureMutable(&value_, - Base::GetArenaForAllocation()); - } - - // implements MessageLite ========================================= - - // MapEntryImpl is for implementation only and this function isn't called - // anywhere. Just provide a fake implementation here for MessageLite. - std::string GetTypeName() const override { return ""; } - - void CheckTypeAndMergeFrom(const MessageLite& other) override { - MergeFromInternal(*::google::protobuf::internal::DownCast<const Derived*>(&other)); - } - - const char* _InternalParse(const char* ptr, ParseContext* ctx) final { - while (!ctx->Done(&ptr)) { - uint32_t tag; - ptr = ReadTag(ptr, &tag); - GOOGLE_PROTOBUF_PARSER_ASSERT(ptr); - if (tag == kKeyTag) { - set_has_key(); - KeyMapEntryAccessorType* key = mutable_key(); - ptr = KeyTypeHandler::Read(ptr, ctx, key); - if (!Derived::ValidateKey(key)) return nullptr; - } else if (tag == kValueTag) { - set_has_value(); - ValueMapEntryAccessorType* value = mutable_value(); - ptr = ValueTypeHandler::Read(ptr, ctx, value); - if (!Derived::ValidateValue(value)) return nullptr; - } else { - if (tag == 0 || WireFormatLite::GetTagWireType(tag) == - WireFormatLite::WIRETYPE_END_GROUP) { - ctx->SetLastTag(tag); - return ptr; - } - ptr = UnknownFieldParse(tag, static_cast<std::string*>(nullptr), ptr, - ctx); - } - GOOGLE_PROTOBUF_PARSER_ASSERT(ptr); - } - return ptr; - } - - size_t ByteSizeLong() const override { - size_t size = 0; - size += kTagSize + static_cast<size_t>(KeyTypeHandler::ByteSize(key())); - size += kTagSize + static_cast<size_t>(ValueTypeHandler::ByteSize(value())); - return size; - } - - ::uint8_t* _InternalSerialize( - ::uint8_t* ptr, io::EpsCopyOutputStream* stream) const override { - ptr = KeyTypeHandler::Write(kKeyFieldNumber, key(), ptr, stream); - return ValueTypeHandler::Write(kValueFieldNumber, value(), ptr, stream); - } - - // Don't override SerializeWithCachedSizesToArray. Use MessageLite's. - - int GetCachedSize() const override { - int size = 0; - size += has_key() ? static_cast<int>(kTagSize) + - KeyTypeHandler::GetCachedSize(key()) - : 0; - size += has_value() ? static_cast<int>(kTagSize) + - ValueTypeHandler::GetCachedSize(value()) - : 0; - return size; - } - - bool IsInitialized() const override { - return ValueTypeHandler::IsInitialized(value_); - } - - Base* New(Arena* arena) const override { - Derived* entry = Arena::CreateMessage<Derived>(arena); - return entry; - } - - protected: - // We can't declare this function directly here as it would hide the other - // overload (const Message&). - void MergeFromInternal(const MapEntryImpl& from) { - if (from._has_bits_[0]) { - if (from.has_key()) { - KeyTypeHandler::EnsureMutable(&key_, Base::GetArenaForAllocation()); - KeyTypeHandler::Merge(from.key(), &key_, Base::GetArenaForAllocation()); - set_has_key(); - } - if (from.has_value()) { - ValueTypeHandler::EnsureMutable(&value_, Base::GetArenaForAllocation()); - ValueTypeHandler::Merge(from.value(), &value_, - Base::GetArenaForAllocation()); - set_has_value(); - } - } - } - - public: - void Clear() override { - KeyTypeHandler::Clear(&key_, Base::GetArenaForAllocation()); - ValueTypeHandler::Clear(&value_, Base::GetArenaForAllocation()); - clear_has_key(); - clear_has_value(); - } - - // Parsing using MergePartialFromCodedStream, above, is not as - // efficient as it could be. This helper class provides a speedier way. - template <typename MapField, typename Map> - class Parser { - public: - explicit Parser(MapField* mf) : mf_(mf), map_(mf->MutableMap()) {} - ~Parser() { - if (entry_ != nullptr && entry_->GetArenaForAllocation() == nullptr) - delete entry_; - } - - const char* _InternalParse(const char* ptr, ParseContext* ctx) { - if (PROTOBUF_PREDICT_TRUE(!ctx->Done(&ptr) && *ptr == kKeyTag)) { - ptr = KeyTypeHandler::Read(ptr + 1, ctx, &key_); - if (PROTOBUF_PREDICT_FALSE(!ptr || !Derived::ValidateKey(&key_))) { - return nullptr; - } - if (PROTOBUF_PREDICT_TRUE(!ctx->Done(&ptr) && *ptr == kValueTag)) { - typename Map::size_type map_size = map_->size(); - value_ptr_ = &(*map_)[key_]; - if (PROTOBUF_PREDICT_TRUE(map_size != map_->size())) { - using T = - typename MapIf<ValueTypeHandler::kIsEnum, int*, Value*>::type; - ptr = ValueTypeHandler::Read(ptr + 1, ctx, - reinterpret_cast<T>(value_ptr_)); - if (PROTOBUF_PREDICT_FALSE(!ptr || - !Derived::ValidateValue(value_ptr_))) { - map_->erase(key_); // Failure! Undo insertion. - return nullptr; - } - if (PROTOBUF_PREDICT_TRUE(ctx->Done(&ptr))) return ptr; - if (!ptr) return nullptr; - NewEntry(); - ValueMover::Move(value_ptr_, entry_->mutable_value()); - map_->erase(key_); - goto move_key; - } - } else { - if (!ptr) return nullptr; - } - NewEntry(); - move_key: - KeyMover::Move(&key_, entry_->mutable_key()); - } else { - if (!ptr) return nullptr; - NewEntry(); - } - ptr = entry_->_InternalParse(ptr, ctx); - if (ptr) UseKeyAndValueFromEntry(); - return ptr; - } - - template <typename UnknownType> - const char* ParseWithEnumValidation(const char* ptr, ParseContext* ctx, - bool (*is_valid)(int), - uint32_t field_num, - InternalMetadata* metadata) { - auto entry = NewEntry(); - ptr = entry->_InternalParse(ptr, ctx); - if (!ptr) return nullptr; - if (is_valid(entry->value())) { - UseKeyAndValueFromEntry(); - } else { - WriteLengthDelimited(field_num, entry->SerializeAsString(), - metadata->mutable_unknown_fields<UnknownType>()); - } - return ptr; - } - - MapEntryImpl* NewEntry() { return entry_ = mf_->NewEntry(); } - - const Key& key() const { return key_; } - const Value& value() const { return *value_ptr_; } - - const Key& entry_key() const { return entry_->key(); } - const Value& entry_value() const { return entry_->value(); } - - private: - void UseKeyAndValueFromEntry() { - // Update key_ in case we need it later (because key() is called). - // This is potentially inefficient, especially if the key is - // expensive to copy (e.g., a long string), but this is a cold - // path, so it's not a big deal. - key_ = entry_->key(); - value_ptr_ = &(*map_)[key_]; - ValueMover::Move(entry_->mutable_value(), value_ptr_); - } - - // After reading a key and value successfully, and inserting that data - // into map_, we are not at the end of the input. This is unusual, but - // allowed by the spec. - bool ReadBeyondKeyValuePair(io::CodedInputStream* input) PROTOBUF_COLD { - NewEntry(); - ValueMover::Move(value_ptr_, entry_->mutable_value()); - map_->erase(key_); - KeyMover::Move(&key_, entry_->mutable_key()); - const bool result = entry_->MergePartialFromCodedStream(input); - if (result) UseKeyAndValueFromEntry(); - return result; - } - - typedef MoveHelper<KeyTypeHandler::kIsEnum, KeyTypeHandler::kIsMessage, - KeyTypeHandler::kWireType == - WireFormatLite::WIRETYPE_LENGTH_DELIMITED, - Key> - KeyMover; - typedef MoveHelper<ValueTypeHandler::kIsEnum, ValueTypeHandler::kIsMessage, - ValueTypeHandler::kWireType == - WireFormatLite::WIRETYPE_LENGTH_DELIMITED, - Value> - ValueMover; - - MapField* const mf_; - Map* const map_; - Key key_; - Value* value_ptr_; - MapEntryImpl* entry_ = nullptr; - }; - - protected: - void set_has_key() { _has_bits_[0] |= 0x00000001u; } - bool has_key() const { return (_has_bits_[0] & 0x00000001u) != 0; } - void clear_has_key() { _has_bits_[0] &= ~0x00000001u; } - void set_has_value() { _has_bits_[0] |= 0x00000002u; } - bool has_value() const { return (_has_bits_[0] & 0x00000002u) != 0; } - void clear_has_value() { _has_bits_[0] &= ~0x00000002u; } - - public: - inline Arena* GetArena() const { return Base::GetArena(); } - - protected: // Needed for constructing tables - KeyOnMemory key_; - ValueOnMemory value_; - uint32_t _has_bits_[1]; - - private: - friend class ::PROTOBUF_NAMESPACE_ID::Arena; - typedef void InternalArenaConstructable_; - typedef void DestructorSkippable_; - template <typename C, typename K, typename V, WireFormatLite::FieldType, - WireFormatLite::FieldType> - friend class internal::MapEntry; - template <typename C, typename K, typename V, WireFormatLite::FieldType, - WireFormatLite::FieldType> - friend class internal::MapFieldLite; - - GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(MapEntryImpl); -}; - -template <typename T, typename Key, typename Value, - WireFormatLite::FieldType kKeyFieldType, - WireFormatLite::FieldType kValueFieldType> -class MapEntryLite : public MapEntryImpl<T, MessageLite, Key, Value, - kKeyFieldType, kValueFieldType> { - public: - typedef MapEntryImpl<T, MessageLite, Key, Value, kKeyFieldType, - kValueFieldType> - SuperType; - constexpr MapEntryLite() {} - explicit MapEntryLite(Arena* arena) : SuperType(arena) {} - ~MapEntryLite() override { - MessageLite::_internal_metadata_.template Delete<std::string>(); - } - void MergeFrom(const MapEntryLite& other) { MergeFromInternal(other); } - - private: - GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(MapEntryLite); -}; - -// Helpers for deterministic serialization ============================= - -// Iterator base for MapSorterFlat and MapSorterPtr. -template <typename storage_type> -struct MapSorterIt { - storage_type* ptr; - MapSorterIt(storage_type* ptr) : ptr(ptr) {} - bool operator==(const MapSorterIt& other) const { return ptr == other.ptr; } - bool operator!=(const MapSorterIt& other) const { return !(*this == other); } - MapSorterIt& operator++() { ++ptr; return *this; } - MapSorterIt operator++(int) { auto other = *this; ++ptr; return other; } - MapSorterIt operator+(int v) { return MapSorterIt{ptr + v}; } -}; - -// MapSorterFlat stores keys inline with pointers to map entries, so that -// keys can be compared without indirection. This type is used for maps with -// keys that are not strings. -template <typename MapT> -class MapSorterFlat { - public: - using value_type = typename MapT::value_type; - using storage_type = std::pair<typename MapT::key_type, const value_type*>; - - // This const_iterator dereferenes to the map entry stored in the sorting - // array pairs. This is the same interface as the Map::const_iterator type, - // and allows generated code to use the same loop body with either form: - // for (const auto& entry : map) { ... } - // for (const auto& entry : MapSorterFlat(map)) { ... } - struct const_iterator : public MapSorterIt<storage_type> { - using pointer = const typename MapT::value_type*; - using reference = const typename MapT::value_type&; - using MapSorterIt<storage_type>::MapSorterIt; - - pointer operator->() const { return this->ptr->second; } - reference operator*() const { return *this->operator->(); } - }; - - explicit MapSorterFlat(const MapT& m) - : size_(m.size()), items_(size_ ? new storage_type[size_] : nullptr) { - if (!size_) return; - storage_type* it = &items_[0]; - for (const auto& entry : m) { - *it++ = {entry.first, &entry}; - } - std::sort(&items_[0], &items_[size_], - [](const storage_type& a, const storage_type& b) { - return a.first < b.first; - }); - } - size_t size() const { return size_; } - const_iterator begin() const { return {items_.get()}; } - const_iterator end() const { return {items_.get() + size_}; } - - private: - size_t size_; - std::unique_ptr<storage_type[]> items_; -}; - -// MapSorterPtr stores and sorts pointers to map entries. This type is used for -// maps with keys that are strings. -template <typename MapT> -class MapSorterPtr { - public: - using value_type = typename MapT::value_type; - using storage_type = const typename MapT::value_type*; - - // This const_iterator dereferenes the map entry pointer stored in the sorting - // array. This is the same interface as the Map::const_iterator type, and - // allows generated code to use the same loop body with either form: - // for (const auto& entry : map) { ... } - // for (const auto& entry : MapSorterPtr(map)) { ... } - struct const_iterator : public MapSorterIt<storage_type> { - using pointer = const typename MapT::value_type*; - using reference = const typename MapT::value_type&; - using MapSorterIt<storage_type>::MapSorterIt; - - pointer operator->() const { return *this->ptr; } - reference operator*() const { return *this->operator->(); } - }; - - explicit MapSorterPtr(const MapT& m) - : size_(m.size()), items_(size_ ? new storage_type[size_] : nullptr) { - if (!size_) return; - storage_type* it = &items_[0]; - for (const auto& entry : m) { - *it++ = &entry; - } - std::sort(&items_[0], &items_[size_], - [](const storage_type& a, const storage_type& b) { - return a->first < b->first; - }); - } - size_t size() const { return size_; } - const_iterator begin() const { return {items_.get()}; } - const_iterator end() const { return {items_.get() + size_}; } - - private: - size_t size_; - std::unique_ptr<storage_type[]> items_; -}; - -} // namespace internal -} // namespace protobuf -} // namespace google - -#include <google/protobuf/port_undef.inc> - -#endif // GOOGLE_PROTOBUF_MAP_ENTRY_LITE_H__ diff --git a/include/google/protobuf/map_field.h b/include/google/protobuf/map_field.h deleted file mode 100644 index 287d58f312..0000000000 --- a/include/google/protobuf/map_field.h +++ /dev/null @@ -1,946 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// 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 -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -#ifndef GOOGLE_PROTOBUF_MAP_FIELD_H__ -#define GOOGLE_PROTOBUF_MAP_FIELD_H__ - -#include <atomic> -#include <functional> - -#include <google/protobuf/arena.h> -#include <google/protobuf/stubs/mutex.h> -#include <google/protobuf/port.h> -#include <google/protobuf/descriptor.h> -#include <google/protobuf/generated_message_reflection.h> -#include <google/protobuf/generated_message_util.h> -#include <google/protobuf/map_entry.h> -#include <google/protobuf/map_field_lite.h> -#include <google/protobuf/map_type_handler.h> -#include <google/protobuf/message.h> -#include <google/protobuf/repeated_field.h> -#include <google/protobuf/unknown_field_set.h> - - -// Must be included last. -#include <google/protobuf/port_def.inc> - -#ifdef SWIG -#error "You cannot SWIG proto headers" -#endif - -namespace google { -namespace protobuf { -class DynamicMessage; -class MapIterator; - -// Microsoft compiler complains about non-virtual destructor, -// even when the destructor is private. -#ifdef _MSC_VER -#pragma warning(push) -#pragma warning(disable : 4265) -#endif // _MSC_VER - -#define TYPE_CHECK(EXPECTEDTYPE, METHOD) \ - if (type() != EXPECTEDTYPE) { \ - GOOGLE_LOG(FATAL) << "Protocol Buffer map usage error:\n" \ - << METHOD << " type does not match\n" \ - << " Expected : " \ - << FieldDescriptor::CppTypeName(EXPECTEDTYPE) << "\n" \ - << " Actual : " << FieldDescriptor::CppTypeName(type()); \ - } - -// MapKey is an union type for representing any possible -// map key. -class PROTOBUF_EXPORT MapKey { - public: - MapKey() : type_() {} - MapKey(const MapKey& other) : type_() { CopyFrom(other); } - - MapKey& operator=(const MapKey& other) { - CopyFrom(other); - return *this; - } - - ~MapKey() { - if (type_ == FieldDescriptor::CPPTYPE_STRING) { - val_.string_value_.Destruct(); - } - } - - FieldDescriptor::CppType type() const { - if (type_ == FieldDescriptor::CppType()) { - GOOGLE_LOG(FATAL) << "Protocol Buffer map usage error:\n" - << "MapKey::type MapKey is not initialized. " - << "Call set methods to initialize MapKey."; - } - return type_; - } - - void SetInt64Value(int64_t value) { - SetType(FieldDescriptor::CPPTYPE_INT64); - val_.int64_value_ = value; - } - void SetUInt64Value(uint64_t value) { - SetType(FieldDescriptor::CPPTYPE_UINT64); - val_.uint64_value_ = value; - } - void SetInt32Value(int32_t value) { - SetType(FieldDescriptor::CPPTYPE_INT32); - val_.int32_value_ = value; - } - void SetUInt32Value(uint32_t value) { - SetType(FieldDescriptor::CPPTYPE_UINT32); - val_.uint32_value_ = value; - } - void SetBoolValue(bool value) { - SetType(FieldDescriptor::CPPTYPE_BOOL); - val_.bool_value_ = value; - } - void SetStringValue(std::string val) { - SetType(FieldDescriptor::CPPTYPE_STRING); - *val_.string_value_.get_mutable() = std::move(val); - } - - int64_t GetInt64Value() const { - TYPE_CHECK(FieldDescriptor::CPPTYPE_INT64, "MapKey::GetInt64Value"); - return val_.int64_value_; - } - uint64_t GetUInt64Value() const { - TYPE_CHECK(FieldDescriptor::CPPTYPE_UINT64, "MapKey::GetUInt64Value"); - return val_.uint64_value_; - } - int32_t GetInt32Value() const { - TYPE_CHECK(FieldDescriptor::CPPTYPE_INT32, "MapKey::GetInt32Value"); - return val_.int32_value_; - } - uint32_t GetUInt32Value() const { - TYPE_CHECK(FieldDescriptor::CPPTYPE_UINT32, "MapKey::GetUInt32Value"); - return val_.uint32_value_; - } - bool GetBoolValue() const { - TYPE_CHECK(FieldDescriptor::CPPTYPE_BOOL, "MapKey::GetBoolValue"); - return val_.bool_value_; - } - const std::string& GetStringValue() const { - TYPE_CHECK(FieldDescriptor::CPPTYPE_STRING, "MapKey::GetStringValue"); - return val_.string_value_.get(); - } - - bool operator<(const MapKey& other) const { - if (type_ != other.type_) { - // We could define a total order that handles this case, but - // there currently no need. So, for now, fail. - GOOGLE_LOG(FATAL) << "Unsupported: type mismatch"; - } - switch (type()) { - case FieldDescriptor::CPPTYPE_DOUBLE: - case FieldDescriptor::CPPTYPE_FLOAT: - case FieldDescriptor::CPPTYPE_ENUM: - case FieldDescriptor::CPPTYPE_MESSAGE: - GOOGLE_LOG(FATAL) << "Unsupported"; - return false; - case FieldDescriptor::CPPTYPE_STRING: - return val_.string_value_.get() < other.val_.string_value_.get(); - case FieldDescriptor::CPPTYPE_INT64: - return val_.int64_value_ < other.val_.int64_value_; - case FieldDescriptor::CPPTYPE_INT32: - return val_.int32_value_ < other.val_.int32_value_; - case FieldDescriptor::CPPTYPE_UINT64: - return val_.uint64_value_ < other.val_.uint64_value_; - case FieldDescriptor::CPPTYPE_UINT32: - return val_.uint32_value_ < other.val_.uint32_value_; - case FieldDescriptor::CPPTYPE_BOOL: - return val_.bool_value_ < other.val_.bool_value_; - } - return false; - } - - bool operator==(const MapKey& other) const { - if (type_ != other.type_) { - // To be consistent with operator<, we don't allow this either. - GOOGLE_LOG(FATAL) << "Unsupported: type mismatch"; - } - switch (type()) { - case FieldDescriptor::CPPTYPE_DOUBLE: - case FieldDescriptor::CPPTYPE_FLOAT: - case FieldDescriptor::CPPTYPE_ENUM: - case FieldDescriptor::CPPTYPE_MESSAGE: - GOOGLE_LOG(FATAL) << "Unsupported"; - break; - case FieldDescriptor::CPPTYPE_STRING: - return val_.string_value_.get() == other.val_.string_value_.get(); - case FieldDescriptor::CPPTYPE_INT64: - return val_.int64_value_ == other.val_.int64_value_; - case FieldDescriptor::CPPTYPE_INT32: - return val_.int32_value_ == other.val_.int32_value_; - case FieldDescriptor::CPPTYPE_UINT64: - return val_.uint64_value_ == other.val_.uint64_value_; - case FieldDescriptor::CPPTYPE_UINT32: - return val_.uint32_value_ == other.val_.uint32_value_; - case FieldDescriptor::CPPTYPE_BOOL: - return val_.bool_value_ == other.val_.bool_value_; - } - GOOGLE_LOG(FATAL) << "Can't get here."; - return false; - } - - void CopyFrom(const MapKey& other) { - SetType(other.type()); - switch (type_) { - case FieldDescriptor::CPPTYPE_DOUBLE: - case FieldDescriptor::CPPTYPE_FLOAT: - case FieldDescriptor::CPPTYPE_ENUM: - case FieldDescriptor::CPPTYPE_MESSAGE: - GOOGLE_LOG(FATAL) << "Unsupported"; - break; - case FieldDescriptor::CPPTYPE_STRING: - *val_.string_value_.get_mutable() = other.val_.string_value_.get(); - break; - case FieldDescriptor::CPPTYPE_INT64: - val_.int64_value_ = other.val_.int64_value_; - break; - case FieldDescriptor::CPPTYPE_INT32: - val_.int32_value_ = other.val_.int32_value_; - break; - case FieldDescriptor::CPPTYPE_UINT64: - val_.uint64_value_ = other.val_.uint64_value_; - break; - case FieldDescriptor::CPPTYPE_UINT32: - val_.uint32_value_ = other.val_.uint32_value_; - break; - case FieldDescriptor::CPPTYPE_BOOL: - val_.bool_value_ = other.val_.bool_value_; - break; - } - } - - private: - template <typename K, typename V> - friend class internal::TypeDefinedMapFieldBase; - friend class ::PROTOBUF_NAMESPACE_ID::MapIterator; - friend class internal::DynamicMapField; - - union KeyValue { - KeyValue() {} - internal::ExplicitlyConstructed<std::string> string_value_; - int64_t int64_value_; - int32_t int32_value_; - uint64_t uint64_value_; - uint32_t uint32_value_; - bool bool_value_; - } val_; - - void SetType(FieldDescriptor::CppType type) { - if (type_ == type) return; - if (type_ == FieldDescriptor::CPPTYPE_STRING) { - val_.string_value_.Destruct(); - } - type_ = type; - if (type_ == FieldDescriptor::CPPTYPE_STRING) { - val_.string_value_.DefaultConstruct(); - } - } - - // type_ is 0 or a valid FieldDescriptor::CppType. - // Use "CppType()" to indicate zero. - FieldDescriptor::CppType type_; -}; - -} // namespace protobuf -} // namespace google -namespace std { -template <> -struct hash<::PROTOBUF_NAMESPACE_ID::MapKey> { - size_t operator()(const ::PROTOBUF_NAMESPACE_ID::MapKey& map_key) const { - switch (map_key.type()) { - case ::PROTOBUF_NAMESPACE_ID::FieldDescriptor::CPPTYPE_DOUBLE: - case ::PROTOBUF_NAMESPACE_ID::FieldDescriptor::CPPTYPE_FLOAT: - case ::PROTOBUF_NAMESPACE_ID::FieldDescriptor::CPPTYPE_ENUM: - case ::PROTOBUF_NAMESPACE_ID::FieldDescriptor::CPPTYPE_MESSAGE: - GOOGLE_LOG(FATAL) << "Unsupported"; - break; - case ::PROTOBUF_NAMESPACE_ID::FieldDescriptor::CPPTYPE_STRING: - return hash<std::string>()(map_key.GetStringValue()); - case ::PROTOBUF_NAMESPACE_ID::FieldDescriptor::CPPTYPE_INT64: { - auto value = map_key.GetInt64Value(); - return hash<decltype(value)>()(value); - } - case ::PROTOBUF_NAMESPACE_ID::FieldDescriptor::CPPTYPE_INT32: { - auto value = map_key.GetInt32Value(); - return hash<decltype(value)>()(map_key.GetInt32Value()); - } - case ::PROTOBUF_NAMESPACE_ID::FieldDescriptor::CPPTYPE_UINT64: { - auto value = map_key.GetUInt64Value(); - return hash<decltype(value)>()(map_key.GetUInt64Value()); - } - case ::PROTOBUF_NAMESPACE_ID::FieldDescriptor::CPPTYPE_UINT32: { - auto value = map_key.GetUInt32Value(); - return hash<decltype(value)>()(map_key.GetUInt32Value()); - } - case ::PROTOBUF_NAMESPACE_ID::FieldDescriptor::CPPTYPE_BOOL: { - return hash<bool>()(map_key.GetBoolValue()); - } - } - GOOGLE_LOG(FATAL) << "Can't get here."; - return 0; - } - bool operator()(const ::PROTOBUF_NAMESPACE_ID::MapKey& map_key1, - const ::PROTOBUF_NAMESPACE_ID::MapKey& map_key2) const { - return map_key1 < map_key2; - } -}; -} // namespace std - -namespace google { -namespace protobuf { -namespace internal { - -class ContendedMapCleanTest; -class GeneratedMessageReflection; -class MapFieldAccessor; - -// This class provides access to map field using reflection, which is the same -// as those provided for RepeatedPtrField<Message>. It is used for internal -// reflection implementation only. Users should never use this directly. -class PROTOBUF_EXPORT MapFieldBase { - public: - MapFieldBase() - : arena_(nullptr), repeated_field_(nullptr), state_(STATE_MODIFIED_MAP) {} - - // This constructor is for constant initialized global instances. - // It uses a linker initialized mutex, so it is not compatible with regular - // runtime instances. - // Except in MSVC, where we can't have a constinit mutex. - // NOLINTNEXTLINE(google-explicit-constructor) - constexpr MapFieldBase(ConstantInitialized) - : arena_(nullptr), - repeated_field_(nullptr), - mutex_(GOOGLE_PROTOBUF_LINKER_INITIALIZED), - state_(STATE_MODIFIED_MAP) {} - explicit MapFieldBase(Arena* arena) - : arena_(arena), repeated_field_(nullptr), state_(STATE_MODIFIED_MAP) {} - - protected: - ~MapFieldBase() { // "protected" stops users from deleting a `MapFieldBase *` - GOOGLE_DCHECK(repeated_field_ == nullptr); - } - void Destruct(); - - public: - // Returns reference to internal repeated field. Data written using - // Map's api prior to calling this function is guarantted to be - // included in repeated field. - const RepeatedPtrFieldBase& GetRepeatedField() const; - - // Like above. Returns mutable pointer to the internal repeated field. - RepeatedPtrFieldBase* MutableRepeatedField(); - - // Pure virtual map APIs for Map Reflection. - virtual bool ContainsMapKey(const MapKey& map_key) const = 0; - virtual bool InsertOrLookupMapValue(const MapKey& map_key, - MapValueRef* val) = 0; - virtual bool LookupMapValue(const MapKey& map_key, - MapValueConstRef* val) const = 0; - bool LookupMapValue(const MapKey&, MapValueRef*) const = delete; - - // Returns whether changes to the map are reflected in the repeated field. - bool IsRepeatedFieldValid() const; - // Insures operations after won't get executed before calling this. - bool IsMapValid() const; - virtual bool DeleteMapValue(const MapKey& map_key) = 0; - virtual bool EqualIterator(const MapIterator& a, - const MapIterator& b) const = 0; - virtual void MapBegin(MapIterator* map_iter) const = 0; - virtual void MapEnd(MapIterator* map_iter) const = 0; - virtual void MergeFrom(const MapFieldBase& other) = 0; - virtual void Swap(MapFieldBase* other); - virtual void UnsafeShallowSwap(MapFieldBase* other); - // Sync Map with repeated field and returns the size of map. - virtual int size() const = 0; - virtual void Clear() = 0; - - // Returns the number of bytes used by the repeated field, excluding - // sizeof(*this) - size_t SpaceUsedExcludingSelfLong() const; - - int SpaceUsedExcludingSelf() const { - return internal::ToIntSize(SpaceUsedExcludingSelfLong()); - } - - protected: - // Gets the size of space used by map field. - virtual size_t SpaceUsedExcludingSelfNoLock() const; - - // Synchronizes the content in Map to RepeatedPtrField if there is any change - // to Map after last synchronization. - void SyncRepeatedFieldWithMap() const; - virtual void SyncRepeatedFieldWithMapNoLock() const; - - // Synchronizes the content in RepeatedPtrField to Map if there is any change - // to RepeatedPtrField after last synchronization. - void SyncMapWithRepeatedField() const; - virtual void SyncMapWithRepeatedFieldNoLock() const {} - - // Tells MapFieldBase that there is new change to Map. - void SetMapDirty(); - - // Tells MapFieldBase that there is new change to RepeatedPtrField. - void SetRepeatedDirty(); - - // Provides derived class the access to repeated field. - void* MutableRepeatedPtrField() const; - - void InternalSwap(MapFieldBase* other); - - // Support thread sanitizer (tsan) by making const / mutable races - // more apparent. If one thread calls MutableAccess() while another - // thread calls either ConstAccess() or MutableAccess(), on the same - // MapFieldBase-derived object, and there is no synchronization going - // on between them, tsan will alert. -#if defined(__SANITIZE_THREAD__) || defined(THREAD_SANITIZER) - void ConstAccess() const { GOOGLE_CHECK_EQ(seq1_, seq2_); } - void MutableAccess() { - if (seq1_ & 1) { - seq2_ = ++seq1_; - } else { - seq1_ = ++seq2_; - } - } - unsigned int seq1_ = 0, seq2_ = 0; -#else - void ConstAccess() const {} - void MutableAccess() {} -#endif - enum State { - STATE_MODIFIED_MAP = 0, // map has newly added data that has not been - // synchronized to repeated field - STATE_MODIFIED_REPEATED = 1, // repeated field has newly added data that - // has not been synchronized to map - CLEAN = 2, // data in map and repeated field are same - }; - - Arena* arena_; - mutable RepeatedPtrField<Message>* repeated_field_; - - mutable internal::WrappedMutex - mutex_; // The thread to synchronize map and repeated field - // needs to get lock first; - mutable std::atomic<State> state_; - - private: - friend class ContendedMapCleanTest; - friend class GeneratedMessageReflection; - friend class MapFieldAccessor; - friend class ::PROTOBUF_NAMESPACE_ID::Reflection; - friend class ::PROTOBUF_NAMESPACE_ID::DynamicMessage; - - // Virtual helper methods for MapIterator. MapIterator doesn't have the - // type helper for key and value. Call these help methods to deal with - // different types. Real helper methods are implemented in - // TypeDefinedMapFieldBase. - friend class ::PROTOBUF_NAMESPACE_ID::MapIterator; - // Allocate map<...>::iterator for MapIterator. - virtual void InitializeIterator(MapIterator* map_iter) const = 0; - - // DeleteIterator() is called by the destructor of MapIterator only. - // It deletes map<...>::iterator for MapIterator. - virtual void DeleteIterator(MapIterator* map_iter) const = 0; - - // Copy the map<...>::iterator from other_iterator to - // this_iterator. - virtual void CopyIterator(MapIterator* this_iterator, - const MapIterator& other_iterator) const = 0; - - // IncreaseIterator() is called by operator++() of MapIterator only. - // It implements the ++ operator of MapIterator. - virtual void IncreaseIterator(MapIterator* map_iter) const = 0; - - // Swaps state_ with another MapFieldBase - void SwapState(MapFieldBase* other); - - GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(MapFieldBase); -}; - -// This class provides common Map Reflection implementations for generated -// message and dynamic message. -template <typename Key, typename T> -class TypeDefinedMapFieldBase : public MapFieldBase { - public: - TypeDefinedMapFieldBase() {} - - // This constructor is for constant initialized global instances. - // It uses a linker initialized mutex, so it is not compatible with regular - // runtime instances. - // NOLINTNEXTLINE(google-explicit-constructor) - constexpr TypeDefinedMapFieldBase(ConstantInitialized tag) - : MapFieldBase(tag) {} - explicit TypeDefinedMapFieldBase(Arena* arena) : MapFieldBase(arena) {} - TypeDefinedMapFieldBase(ArenaInitialized, Arena* arena) - : TypeDefinedMapFieldBase(arena) {} - - protected: - ~TypeDefinedMapFieldBase() {} - using MapFieldBase::Destruct; - - public: - void MapBegin(MapIterator* map_iter) const override; - void MapEnd(MapIterator* map_iter) const override; - bool EqualIterator(const MapIterator& a, const MapIterator& b) const override; - - virtual const Map<Key, T>& GetMap() const = 0; - virtual Map<Key, T>* MutableMap() = 0; - - protected: - typename Map<Key, T>::const_iterator& InternalGetIterator( - const MapIterator* map_iter) const; - - private: - void InitializeIterator(MapIterator* map_iter) const override; - void DeleteIterator(MapIterator* map_iter) const override; - void CopyIterator(MapIterator* this_iteratorm, - const MapIterator& that_iterator) const override; - void IncreaseIterator(MapIterator* map_iter) const override; - - virtual void SetMapIteratorValue(MapIterator* map_iter) const = 0; - GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(TypeDefinedMapFieldBase); -}; - -// This class provides access to map field using generated api. It is used for -// internal generated message implementation only. Users should never use this -// directly. -template <typename Derived, typename Key, typename T, - WireFormatLite::FieldType kKeyFieldType, - WireFormatLite::FieldType kValueFieldType> -class MapField : public TypeDefinedMapFieldBase<Key, T> { - // Provide utilities to parse/serialize key/value. Provide utilities to - // manipulate internal stored type. - typedef MapTypeHandler<kKeyFieldType, Key> KeyTypeHandler; - typedef MapTypeHandler<kValueFieldType, T> ValueTypeHandler; - - // Define message type for internal repeated field. - typedef Derived EntryType; - - // Define abbreviation for parent MapFieldLite - typedef MapFieldLite<Derived, Key, T, kKeyFieldType, kValueFieldType> - MapFieldLiteType; - - // Enum needs to be handled differently from other types because it has - // different exposed type in Map's api and repeated field's api. For - // details see the comment in the implementation of - // SyncMapWithRepeatedFieldNoLock. - static constexpr bool kIsValueEnum = ValueTypeHandler::kIsEnum; - typedef typename MapIf<kIsValueEnum, T, const T&>::type CastValueType; - - public: - typedef Map<Key, T> MapType; - - MapField() : impl_() {} - virtual ~MapField() {} // Destruct() must already have been called! - void Destruct() { - impl_.Destruct(); - TypeDefinedMapFieldBase<Key, T>::Destruct(); - } - - // This constructor is for constant initialized global instances. - // It uses a linker initialized mutex, so it is not compatible with regular - // runtime instances. - // NOLINTNEXTLINE(google-explicit-constructor) - constexpr MapField(ConstantInitialized tag) - : TypeDefinedMapFieldBase<Key, T>(tag), impl_() {} - explicit MapField(Arena* arena) - : TypeDefinedMapFieldBase<Key, T>(arena), impl_(arena) {} - MapField(ArenaInitialized, Arena* arena) : MapField(arena) {} - - // Implement MapFieldBase - bool ContainsMapKey(const MapKey& map_key) const override; - bool InsertOrLookupMapValue(const MapKey& map_key, MapValueRef* val) override; - bool LookupMapValue(const MapKey& map_key, - MapValueConstRef* val) const override; - bool LookupMapValue(const MapKey&, MapValueRef*) const = delete; - bool DeleteMapValue(const MapKey& map_key) override; - - const Map<Key, T>& GetMap() const override { - MapFieldBase::SyncMapWithRepeatedField(); - return impl_.GetMap(); - } - - Map<Key, T>* MutableMap() override { - MapFieldBase::SyncMapWithRepeatedField(); - Map<Key, T>* result = impl_.MutableMap(); - MapFieldBase::SetMapDirty(); - return result; - } - - int size() const override; - void Clear() override; - void MergeFrom(const MapFieldBase& other) override; - void Swap(MapFieldBase* other) override; - void UnsafeShallowSwap(MapFieldBase* other) override; - void InternalSwap(MapField* other); - - // Used in the implementation of parsing. Caller should take the ownership iff - // arena_ is nullptr. - EntryType* NewEntry() const { return impl_.NewEntry(); } - - const char* _InternalParse(const char* ptr, ParseContext* ctx) { - return impl_._InternalParse(ptr, ctx); - } - template <typename UnknownType> - const char* ParseWithEnumValidation(const char* ptr, ParseContext* ctx, - bool (*is_valid)(int), uint32_t field_num, - InternalMetadata* metadata) { - return impl_.template ParseWithEnumValidation<UnknownType>( - ptr, ctx, is_valid, field_num, metadata); - } - - private: - MapFieldLiteType impl_; - - typedef void InternalArenaConstructable_; - typedef void DestructorSkippable_; - - // Implements MapFieldBase - void SyncRepeatedFieldWithMapNoLock() const override; - void SyncMapWithRepeatedFieldNoLock() const override; - size_t SpaceUsedExcludingSelfNoLock() const override; - - void SetMapIteratorValue(MapIterator* map_iter) const override; - - friend class ::PROTOBUF_NAMESPACE_ID::Arena; - friend class MapFieldStateTest; // For testing, it needs raw access to impl_ - GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(MapField); -}; - -template <typename Derived, typename Key, typename T, - WireFormatLite::FieldType key_wire_type, - WireFormatLite::FieldType value_wire_type> -bool AllAreInitialized( - const MapField<Derived, Key, T, key_wire_type, value_wire_type>& field) { - const auto& t = field.GetMap(); - for (typename Map<Key, T>::const_iterator it = t.begin(); it != t.end(); - ++it) { - if (!it->second.IsInitialized()) return false; - } - return true; -} - -template <typename T, typename Key, typename Value, - WireFormatLite::FieldType kKeyFieldType, - WireFormatLite::FieldType kValueFieldType> -struct MapEntryToMapField< - MapEntry<T, Key, Value, kKeyFieldType, kValueFieldType>> { - typedef MapField<T, Key, Value, kKeyFieldType, kValueFieldType> MapFieldType; -}; - -class PROTOBUF_EXPORT DynamicMapField - : public TypeDefinedMapFieldBase<MapKey, MapValueRef> { - public: - explicit DynamicMapField(const Message* default_entry); - DynamicMapField(const Message* default_entry, Arena* arena); - virtual ~DynamicMapField(); - - // Implement MapFieldBase - bool ContainsMapKey(const MapKey& map_key) const override; - bool InsertOrLookupMapValue(const MapKey& map_key, MapValueRef* val) override; - bool LookupMapValue(const MapKey& map_key, - MapValueConstRef* val) const override; - bool LookupMapValue(const MapKey&, MapValueRef*) const = delete; - bool DeleteMapValue(const MapKey& map_key) override; - void MergeFrom(const MapFieldBase& other) override; - void Swap(MapFieldBase* other) override; - void UnsafeShallowSwap(MapFieldBase* other) override { Swap(other); } - - const Map<MapKey, MapValueRef>& GetMap() const override; - Map<MapKey, MapValueRef>* MutableMap() override; - - int size() const override; - void Clear() override; - - private: - Map<MapKey, MapValueRef> map_; - const Message* default_entry_; - - void AllocateMapValue(MapValueRef* map_val); - - // Implements MapFieldBase - void SyncRepeatedFieldWithMapNoLock() const override; - void SyncMapWithRepeatedFieldNoLock() const override; - size_t SpaceUsedExcludingSelfNoLock() const override; - void SetMapIteratorValue(MapIterator* map_iter) const override; - GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(DynamicMapField); -}; - -} // namespace internal - -// MapValueConstRef points to a map value. Users can NOT modify -// the map value. -class PROTOBUF_EXPORT MapValueConstRef { - public: - MapValueConstRef() : data_(nullptr), type_() {} - - int64_t GetInt64Value() const { - TYPE_CHECK(FieldDescriptor::CPPTYPE_INT64, - "MapValueConstRef::GetInt64Value"); - return *reinterpret_cast<int64_t*>(data_); - } - uint64_t GetUInt64Value() const { - TYPE_CHECK(FieldDescriptor::CPPTYPE_UINT64, - "MapValueConstRef::GetUInt64Value"); - return *reinterpret_cast<uint64_t*>(data_); - } - int32_t GetInt32Value() const { - TYPE_CHECK(FieldDescriptor::CPPTYPE_INT32, - "MapValueConstRef::GetInt32Value"); - return *reinterpret_cast<int32_t*>(data_); - } - uint32_t GetUInt32Value() const { - TYPE_CHECK(FieldDescriptor::CPPTYPE_UINT32, - "MapValueConstRef::GetUInt32Value"); - return *reinterpret_cast<uint32_t*>(data_); - } - bool GetBoolValue() const { - TYPE_CHECK(FieldDescriptor::CPPTYPE_BOOL, "MapValueConstRef::GetBoolValue"); - return *reinterpret_cast<bool*>(data_); - } - int GetEnumValue() const { - TYPE_CHECK(FieldDescriptor::CPPTYPE_ENUM, "MapValueConstRef::GetEnumValue"); - return *reinterpret_cast<int*>(data_); - } - const std::string& GetStringValue() const { - TYPE_CHECK(FieldDescriptor::CPPTYPE_STRING, - "MapValueConstRef::GetStringValue"); - return *reinterpret_cast<std::string*>(data_); - } - float GetFloatValue() const { - TYPE_CHECK(FieldDescriptor::CPPTYPE_FLOAT, - "MapValueConstRef::GetFloatValue"); - return *reinterpret_cast<float*>(data_); - } - double GetDoubleValue() const { - TYPE_CHECK(FieldDescriptor::CPPTYPE_DOUBLE, - "MapValueConstRef::GetDoubleValue"); - return *reinterpret_cast<double*>(data_); - } - - const Message& GetMessageValue() const { - TYPE_CHECK(FieldDescriptor::CPPTYPE_MESSAGE, - "MapValueConstRef::GetMessageValue"); - return *reinterpret_cast<Message*>(data_); - } - - protected: - // data_ point to a map value. MapValueConstRef does not - // own this value. - void* data_; - // type_ is 0 or a valid FieldDescriptor::CppType. - // Use "CppType()" to indicate zero. - FieldDescriptor::CppType type_; - - FieldDescriptor::CppType type() const { - if (type_ == FieldDescriptor::CppType() || data_ == nullptr) { - GOOGLE_LOG(FATAL) - << "Protocol Buffer map usage error:\n" - << "MapValueConstRef::type MapValueConstRef is not initialized."; - } - return type_; - } - - private: - template <typename Derived, typename K, typename V, - internal::WireFormatLite::FieldType key_wire_type, - internal::WireFormatLite::FieldType value_wire_type> - friend class internal::MapField; - template <typename K, typename V> - friend class internal::TypeDefinedMapFieldBase; - friend class ::PROTOBUF_NAMESPACE_ID::MapIterator; - friend class Reflection; - friend class internal::DynamicMapField; - - void SetType(FieldDescriptor::CppType type) { type_ = type; } - void SetValue(const void* val) { data_ = const_cast<void*>(val); } - void CopyFrom(const MapValueConstRef& other) { - type_ = other.type_; - data_ = other.data_; - } -}; - -// MapValueRef points to a map value. Users are able to modify -// the map value. -class PROTOBUF_EXPORT MapValueRef final : public MapValueConstRef { - public: - MapValueRef() {} - - void SetInt64Value(int64_t value) { - TYPE_CHECK(FieldDescriptor::CPPTYPE_INT64, "MapValueRef::SetInt64Value"); - *reinterpret_cast<int64_t*>(data_) = value; - } - void SetUInt64Value(uint64_t value) { - TYPE_CHECK(FieldDescriptor::CPPTYPE_UINT64, "MapValueRef::SetUInt64Value"); - *reinterpret_cast<uint64_t*>(data_) = value; - } - void SetInt32Value(int32_t value) { - TYPE_CHECK(FieldDescriptor::CPPTYPE_INT32, "MapValueRef::SetInt32Value"); - *reinterpret_cast<int32_t*>(data_) = value; - } - void SetUInt32Value(uint32_t value) { - TYPE_CHECK(FieldDescriptor::CPPTYPE_UINT32, "MapValueRef::SetUInt32Value"); - *reinterpret_cast<uint32_t*>(data_) = value; - } - void SetBoolValue(bool value) { - TYPE_CHECK(FieldDescriptor::CPPTYPE_BOOL, "MapValueRef::SetBoolValue"); - *reinterpret_cast<bool*>(data_) = value; - } - // TODO(jieluo) - Checks that enum is member. - void SetEnumValue(int value) { - TYPE_CHECK(FieldDescriptor::CPPTYPE_ENUM, "MapValueRef::SetEnumValue"); - *reinterpret_cast<int*>(data_) = value; - } - void SetStringValue(const std::string& value) { - TYPE_CHECK(FieldDescriptor::CPPTYPE_STRING, "MapValueRef::SetStringValue"); - *reinterpret_cast<std::string*>(data_) = value; - } - void SetFloatValue(float value) { - TYPE_CHECK(FieldDescriptor::CPPTYPE_FLOAT, "MapValueRef::SetFloatValue"); - *reinterpret_cast<float*>(data_) = value; - } - void SetDoubleValue(double value) { - TYPE_CHECK(FieldDescriptor::CPPTYPE_DOUBLE, "MapValueRef::SetDoubleValue"); - *reinterpret_cast<double*>(data_) = value; - } - - Message* MutableMessageValue() { - TYPE_CHECK(FieldDescriptor::CPPTYPE_MESSAGE, - "MapValueRef::MutableMessageValue"); - return reinterpret_cast<Message*>(data_); - } - - private: - friend class internal::DynamicMapField; - - // Only used in DynamicMapField - void DeleteData() { - switch (type_) { -#define HANDLE_TYPE(CPPTYPE, TYPE) \ - case FieldDescriptor::CPPTYPE_##CPPTYPE: { \ - delete reinterpret_cast<TYPE*>(data_); \ - break; \ - } - HANDLE_TYPE(INT32, int32_t); - HANDLE_TYPE(INT64, int64_t); - HANDLE_TYPE(UINT32, uint32_t); - HANDLE_TYPE(UINT64, uint64_t); - HANDLE_TYPE(DOUBLE, double); - HANDLE_TYPE(FLOAT, float); - HANDLE_TYPE(BOOL, bool); - HANDLE_TYPE(STRING, std::string); - HANDLE_TYPE(ENUM, int32_t); - HANDLE_TYPE(MESSAGE, Message); -#undef HANDLE_TYPE - } - } -}; - -#undef TYPE_CHECK - -class PROTOBUF_EXPORT MapIterator { - public: - MapIterator(Message* message, const FieldDescriptor* field) { - const Reflection* reflection = message->GetReflection(); - map_ = reflection->MutableMapData(message, field); - key_.SetType(field->message_type()->map_key()->cpp_type()); - value_.SetType(field->message_type()->map_value()->cpp_type()); - map_->InitializeIterator(this); - } - MapIterator(const MapIterator& other) { - map_ = other.map_; - map_->InitializeIterator(this); - map_->CopyIterator(this, other); - } - ~MapIterator() { map_->DeleteIterator(this); } - MapIterator& operator=(const MapIterator& other) { - map_ = other.map_; - map_->CopyIterator(this, other); - return *this; - } - friend bool operator==(const MapIterator& a, const MapIterator& b) { - return a.map_->EqualIterator(a, b); - } - friend bool operator!=(const MapIterator& a, const MapIterator& b) { - return !a.map_->EqualIterator(a, b); - } - MapIterator& operator++() { - map_->IncreaseIterator(this); - return *this; - } - MapIterator operator++(int) { - // iter_ is copied from Map<...>::iterator, no need to - // copy from its self again. Use the same implementation - // with operator++() - map_->IncreaseIterator(this); - return *this; - } - const MapKey& GetKey() { return key_; } - const MapValueRef& GetValueRef() { return value_; } - MapValueRef* MutableValueRef() { - map_->SetMapDirty(); - return &value_; - } - - private: - template <typename Key, typename T> - friend class internal::TypeDefinedMapFieldBase; - friend class internal::DynamicMapField; - template <typename Derived, typename Key, typename T, - internal::WireFormatLite::FieldType kKeyFieldType, - internal::WireFormatLite::FieldType kValueFieldType> - friend class internal::MapField; - - // reinterpret_cast from heap-allocated Map<...>::iterator*. MapIterator owns - // the iterator. It is allocated by MapField<...>::InitializeIterator() called - // in constructor and deleted by MapField<...>::DeleteIterator() called in - // destructor. - void* iter_; - // Point to a MapField to call helper methods implemented in MapField. - // MapIterator does not own this object. - internal::MapFieldBase* map_; - MapKey key_; - MapValueRef value_; -}; - -} // namespace protobuf -} // namespace google - -#ifdef _MSC_VER -#pragma warning(pop) // restore warning C4265 -#endif // _MSC_VER - -#include <google/protobuf/port_undef.inc> - -#endif // GOOGLE_PROTOBUF_MAP_FIELD_H__ diff --git a/include/google/protobuf/map_field_inl.h b/include/google/protobuf/map_field_inl.h deleted file mode 100644 index 7c4c2323c4..0000000000 --- a/include/google/protobuf/map_field_inl.h +++ /dev/null @@ -1,375 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// 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 -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -#ifndef GOOGLE_PROTOBUF_MAP_FIELD_INL_H__ -#define GOOGLE_PROTOBUF_MAP_FIELD_INL_H__ - -#include <memory> - -#include <google/protobuf/stubs/casts.h> -#include <google/protobuf/map.h> -#include <google/protobuf/map_field.h> -#include <google/protobuf/map_type_handler.h> - -#ifdef SWIG -#error "You cannot SWIG proto headers" -#endif - -namespace google { -namespace protobuf { -namespace internal { -// UnwrapMapKey template -template <typename T> -T UnwrapMapKey(const MapKey& map_key); -template <> -inline int32_t UnwrapMapKey<int32_t>(const MapKey& map_key) { - return map_key.GetInt32Value(); -} -template <> -inline uint32_t UnwrapMapKey<uint32_t>(const MapKey& map_key) { - return map_key.GetUInt32Value(); -} -template <> -inline int64_t UnwrapMapKey<int64_t>(const MapKey& map_key) { - return map_key.GetInt64Value(); -} -template <> -inline uint64_t UnwrapMapKey<uint64_t>(const MapKey& map_key) { - return map_key.GetUInt64Value(); -} -template <> -inline bool UnwrapMapKey<bool>(const MapKey& map_key) { - return map_key.GetBoolValue(); -} -template <> -inline std::string UnwrapMapKey<std::string>(const MapKey& map_key) { - return map_key.GetStringValue(); -} - -// SetMapKey template -template <typename T> -inline void SetMapKey(MapKey* map_key, const T& value); -template <> -inline void SetMapKey<int32_t>(MapKey* map_key, const int32_t& value) { - map_key->SetInt32Value(value); -} -template <> -inline void SetMapKey<uint32_t>(MapKey* map_key, const uint32_t& value) { - map_key->SetUInt32Value(value); -} -template <> -inline void SetMapKey<int64_t>(MapKey* map_key, const int64_t& value) { - map_key->SetInt64Value(value); -} -template <> -inline void SetMapKey<uint64_t>(MapKey* map_key, const uint64_t& value) { - map_key->SetUInt64Value(value); -} -template <> -inline void SetMapKey<bool>(MapKey* map_key, const bool& value) { - map_key->SetBoolValue(value); -} -template <> -inline void SetMapKey<std::string>(MapKey* map_key, const std::string& value) { - map_key->SetStringValue(value); -} - -// ------------------------TypeDefinedMapFieldBase--------------- -template <typename Key, typename T> -typename Map<Key, T>::const_iterator& -TypeDefinedMapFieldBase<Key, T>::InternalGetIterator( - const MapIterator* map_iter) const { - return *reinterpret_cast<typename Map<Key, T>::const_iterator*>( - map_iter->iter_); -} - -template <typename Key, typename T> -void TypeDefinedMapFieldBase<Key, T>::MapBegin(MapIterator* map_iter) const { - InternalGetIterator(map_iter) = GetMap().begin(); - SetMapIteratorValue(map_iter); -} - -template <typename Key, typename T> -void TypeDefinedMapFieldBase<Key, T>::MapEnd(MapIterator* map_iter) const { - InternalGetIterator(map_iter) = GetMap().end(); -} - -template <typename Key, typename T> -bool TypeDefinedMapFieldBase<Key, T>::EqualIterator( - const MapIterator& a, const MapIterator& b) const { - return InternalGetIterator(&a) == InternalGetIterator(&b); -} - -template <typename Key, typename T> -void TypeDefinedMapFieldBase<Key, T>::IncreaseIterator( - MapIterator* map_iter) const { - ++InternalGetIterator(map_iter); - SetMapIteratorValue(map_iter); -} - -template <typename Key, typename T> -void TypeDefinedMapFieldBase<Key, T>::InitializeIterator( - MapIterator* map_iter) const { - map_iter->iter_ = new typename Map<Key, T>::const_iterator; - GOOGLE_CHECK(map_iter->iter_ != nullptr); -} - -template <typename Key, typename T> -void TypeDefinedMapFieldBase<Key, T>::DeleteIterator( - MapIterator* map_iter) const { - delete reinterpret_cast<typename Map<Key, T>::const_iterator*>( - map_iter->iter_); -} - -template <typename Key, typename T> -void TypeDefinedMapFieldBase<Key, T>::CopyIterator( - MapIterator* this_iter, const MapIterator& that_iter) const { - InternalGetIterator(this_iter) = InternalGetIterator(&that_iter); - this_iter->key_.SetType(that_iter.key_.type()); - // MapValueRef::type() fails when containing data is null. However, if - // this_iter points to MapEnd, data can be null. - this_iter->value_.SetType( - static_cast<FieldDescriptor::CppType>(that_iter.value_.type_)); - SetMapIteratorValue(this_iter); -} - -// ---------------------------------------------------------------------- - -template <typename Derived, typename Key, typename T, - WireFormatLite::FieldType kKeyFieldType, - WireFormatLite::FieldType kValueFieldType> -int MapField<Derived, Key, T, kKeyFieldType, kValueFieldType>::size() const { - MapFieldBase::SyncMapWithRepeatedField(); - return static_cast<int>(impl_.GetMap().size()); -} - -template <typename Derived, typename Key, typename T, - WireFormatLite::FieldType kKeyFieldType, - WireFormatLite::FieldType kValueFieldType> -void MapField<Derived, Key, T, kKeyFieldType, kValueFieldType>::Clear() { - if (this->MapFieldBase::repeated_field_ != nullptr) { - RepeatedPtrField<EntryType>* repeated_field = - reinterpret_cast<RepeatedPtrField<EntryType>*>( - this->MapFieldBase::repeated_field_); - repeated_field->Clear(); - } - - impl_.MutableMap()->clear(); - // Data in map and repeated field are both empty, but we can't set status - // CLEAN. Because clear is a generated API, we cannot invalidate previous - // reference to map. - MapFieldBase::SetMapDirty(); -} - -template <typename Derived, typename Key, typename T, - WireFormatLite::FieldType kKeyFieldType, - WireFormatLite::FieldType kValueFieldType> -void MapField<Derived, Key, T, kKeyFieldType, - kValueFieldType>::SetMapIteratorValue(MapIterator* map_iter) - const { - const Map<Key, T>& map = impl_.GetMap(); - typename Map<Key, T>::const_iterator iter = - TypeDefinedMapFieldBase<Key, T>::InternalGetIterator(map_iter); - if (iter == map.end()) return; - SetMapKey(&map_iter->key_, iter->first); - map_iter->value_.SetValue(&iter->second); -} - -template <typename Derived, typename Key, typename T, - WireFormatLite::FieldType kKeyFieldType, - WireFormatLite::FieldType kValueFieldType> -bool MapField<Derived, Key, T, kKeyFieldType, kValueFieldType>::ContainsMapKey( - const MapKey& map_key) const { - const Map<Key, T>& map = impl_.GetMap(); - const Key& key = UnwrapMapKey<Key>(map_key); - typename Map<Key, T>::const_iterator iter = map.find(key); - return iter != map.end(); -} - -template <typename Derived, typename Key, typename T, - WireFormatLite::FieldType kKeyFieldType, - WireFormatLite::FieldType kValueFieldType> -bool MapField<Derived, Key, T, kKeyFieldType, - kValueFieldType>::InsertOrLookupMapValue(const MapKey& map_key, - MapValueRef* val) { - // Always use mutable map because users may change the map value by - // MapValueRef. - Map<Key, T>* map = MutableMap(); - const Key& key = UnwrapMapKey<Key>(map_key); - typename Map<Key, T>::iterator iter = map->find(key); - if (map->end() == iter) { - val->SetValue(&((*map)[key])); - return true; - } - // Key is already in the map. Make sure (*map)[key] is not called. - // [] may reorder the map and iterators. - val->SetValue(&(iter->second)); - return false; -} - -template <typename Derived, typename Key, typename T, - WireFormatLite::FieldType kKeyFieldType, - WireFormatLite::FieldType kValueFieldType> -bool MapField<Derived, Key, T, kKeyFieldType, kValueFieldType>::LookupMapValue( - const MapKey& map_key, MapValueConstRef* val) const { - const Map<Key, T>& map = GetMap(); - const Key& key = UnwrapMapKey<Key>(map_key); - typename Map<Key, T>::const_iterator iter = map.find(key); - if (map.end() == iter) { - return false; - } - // Key is already in the map. Make sure (*map)[key] is not called. - // [] may reorder the map and iterators. - val->SetValue(&(iter->second)); - return true; -} - -template <typename Derived, typename Key, typename T, - WireFormatLite::FieldType kKeyFieldType, - WireFormatLite::FieldType kValueFieldType> -bool MapField<Derived, Key, T, kKeyFieldType, kValueFieldType>::DeleteMapValue( - const MapKey& map_key) { - const Key& key = UnwrapMapKey<Key>(map_key); - return MutableMap()->erase(key); -} - -template <typename Derived, typename Key, typename T, - WireFormatLite::FieldType kKeyFieldType, - WireFormatLite::FieldType kValueFieldType> -void MapField<Derived, Key, T, kKeyFieldType, kValueFieldType>::MergeFrom( - const MapFieldBase& other) { - MapFieldBase::SyncMapWithRepeatedField(); - const MapField& other_field = static_cast<const MapField&>(other); - other_field.SyncMapWithRepeatedField(); - impl_.MergeFrom(other_field.impl_); - MapFieldBase::SetMapDirty(); -} - -template <typename Derived, typename Key, typename T, - WireFormatLite::FieldType kKeyFieldType, - WireFormatLite::FieldType kValueFieldType> -void MapField<Derived, Key, T, kKeyFieldType, kValueFieldType>::Swap( - MapFieldBase* other) { - MapFieldBase::Swap(other); - MapField* other_field = down_cast<MapField*>(other); - impl_.Swap(&other_field->impl_); -} - -template <typename Derived, typename Key, typename T, - WireFormatLite::FieldType kKeyFieldType, - WireFormatLite::FieldType kValueFieldType> -void MapField<Derived, Key, T, kKeyFieldType, - kValueFieldType>::UnsafeShallowSwap(MapFieldBase* other) { - InternalSwap(down_cast<MapField*>(other)); -} - -template <typename Derived, typename Key, typename T, - WireFormatLite::FieldType kKeyFieldType, - WireFormatLite::FieldType kValueFieldType> -void MapField<Derived, Key, T, kKeyFieldType, kValueFieldType>::InternalSwap( - MapField* other) { - MapFieldBase::InternalSwap(other); - impl_.InternalSwap(&other->impl_); -} - -template <typename Derived, typename Key, typename T, - WireFormatLite::FieldType kKeyFieldType, - WireFormatLite::FieldType kValueFieldType> -void MapField<Derived, Key, T, kKeyFieldType, - kValueFieldType>::SyncRepeatedFieldWithMapNoLock() const { - if (this->MapFieldBase::repeated_field_ == nullptr) { - this->MapFieldBase::repeated_field_ = - Arena::CreateMessage<RepeatedPtrField<Message> >( - this->MapFieldBase::arena_); - } - const Map<Key, T>& map = impl_.GetMap(); - RepeatedPtrField<EntryType>* repeated_field = - reinterpret_cast<RepeatedPtrField<EntryType>*>( - this->MapFieldBase::repeated_field_); - - repeated_field->Clear(); - - // The only way we can get at this point is through reflection and the - // only way we can get the reflection object is by having called GetReflection - // on the encompassing field. So that type must have existed and hence we - // know that this MapEntry default_type has also already been constructed. - // So it's safe to just call internal_default_instance(). - const Message* default_entry = Derived::internal_default_instance(); - for (typename Map<Key, T>::const_iterator it = map.begin(); it != map.end(); - ++it) { - EntryType* new_entry = - down_cast<EntryType*>(default_entry->New(this->MapFieldBase::arena_)); - repeated_field->AddAllocated(new_entry); - (*new_entry->mutable_key()) = it->first; - (*new_entry->mutable_value()) = it->second; - } -} - -template <typename Derived, typename Key, typename T, - WireFormatLite::FieldType kKeyFieldType, - WireFormatLite::FieldType kValueFieldType> -void MapField<Derived, Key, T, kKeyFieldType, - kValueFieldType>::SyncMapWithRepeatedFieldNoLock() const { - Map<Key, T>* map = const_cast<MapField*>(this)->impl_.MutableMap(); - RepeatedPtrField<EntryType>* repeated_field = - reinterpret_cast<RepeatedPtrField<EntryType>*>( - this->MapFieldBase::repeated_field_); - GOOGLE_CHECK(this->MapFieldBase::repeated_field_ != nullptr); - map->clear(); - for (typename RepeatedPtrField<EntryType>::iterator it = - repeated_field->begin(); - it != repeated_field->end(); ++it) { - // Cast is needed because Map's api and internal storage is different when - // value is enum. For enum, we cannot cast an int to enum. Thus, we have to - // copy value. For other types, they have same exposed api type and internal - // stored type. We should not introduce value copy for them. We achieve this - // by casting to value for enum while casting to reference for other types. - (*map)[it->key()] = static_cast<CastValueType>(it->value()); - } -} - -template <typename Derived, typename Key, typename T, - WireFormatLite::FieldType kKeyFieldType, - WireFormatLite::FieldType kValueFieldType> -size_t MapField<Derived, Key, T, kKeyFieldType, - kValueFieldType>::SpaceUsedExcludingSelfNoLock() const { - size_t size = 0; - if (this->MapFieldBase::repeated_field_ != nullptr) { - size += this->MapFieldBase::repeated_field_->SpaceUsedExcludingSelfLong(); - } - size += impl_.GetMap().SpaceUsedExcludingSelfLong(); - - return size; -} -} // namespace internal -} // namespace protobuf -} // namespace google - -#endif // GOOGLE_PROTOBUF_MAP_FIELD_INL_H__ diff --git a/include/google/protobuf/map_field_lite.h b/include/google/protobuf/map_field_lite.h deleted file mode 100644 index 53bf7a0811..0000000000 --- a/include/google/protobuf/map_field_lite.h +++ /dev/null @@ -1,209 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// 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 -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -#ifndef GOOGLE_PROTOBUF_MAP_FIELD_LITE_H__ -#define GOOGLE_PROTOBUF_MAP_FIELD_LITE_H__ - -#include <type_traits> - -#include <google/protobuf/io/coded_stream.h> -#include <google/protobuf/port.h> -#include <google/protobuf/map.h> -#include <google/protobuf/map_entry_lite.h> -#include <google/protobuf/parse_context.h> -#include <google/protobuf/wire_format_lite.h> - -// Must be included last. -#include <google/protobuf/port_def.inc> - -#ifdef SWIG -#error "You cannot SWIG proto headers" -#endif - -namespace google { -namespace protobuf { -namespace internal { - -#ifndef NDEBUG -void MapFieldLiteNotDestructed(void* map_field_lite); -#endif - -// This class provides access to map field using generated api. It is used for -// internal generated message implementation only. Users should never use this -// directly. -template <typename Derived, typename Key, typename T, - WireFormatLite::FieldType key_wire_type, - WireFormatLite::FieldType value_wire_type> -class MapFieldLite { - // Define message type for internal repeated field. - typedef Derived EntryType; - - public: - typedef Map<Key, T> MapType; - - constexpr MapFieldLite() : map_() {} - explicit MapFieldLite(Arena* arena) : map_(arena) {} - MapFieldLite(ArenaInitialized, Arena* arena) : MapFieldLite(arena) {} - -#ifdef NDEBUG - void Destruct() { map_.~Map(); } - ~MapFieldLite() {} -#else - void Destruct() { - // We want to destruct the map in such a way that we can verify - // that we've done that, but also be sure that we've deallocated - // everything (as opposed to leaving an allocation behind with no - // data in it, as would happen if a vector was resize'd to zero. - // Map::Swap with an empty map accomplishes that. - decltype(map_) swapped_map(map_.arena()); - map_.InternalSwap(swapped_map); - } - ~MapFieldLite() { - if (map_.arena() == nullptr && !map_.empty()) { - MapFieldLiteNotDestructed(this); - } - } -#endif - // Accessors - const Map<Key, T>& GetMap() const { return map_; } - Map<Key, T>* MutableMap() { return &map_; } - - // Convenient methods for generated message implementation. - int size() const { return static_cast<int>(map_.size()); } - void Clear() { return map_.clear(); } - void MergeFrom(const MapFieldLite& other) { - for (typename Map<Key, T>::const_iterator it = other.map_.begin(); - it != other.map_.end(); ++it) { - map_[it->first] = it->second; - } - } - void Swap(MapFieldLite* other) { map_.swap(other->map_); } - void InternalSwap(MapFieldLite* other) { map_.InternalSwap(other->map_); } - - // Used in the implementation of parsing. Caller should take the ownership iff - // arena_ is nullptr. - EntryType* NewEntry() const { - return Arena::CreateMessage<EntryType>(map_.arena()); - } - - const char* _InternalParse(const char* ptr, ParseContext* ctx) { - typename Derived::template Parser<MapFieldLite, Map<Key, T>> parser(this); - return parser._InternalParse(ptr, ctx); - } - - template <typename UnknownType> - const char* ParseWithEnumValidation(const char* ptr, ParseContext* ctx, - bool (*is_valid)(int), uint32_t field_num, - InternalMetadata* metadata) { - typename Derived::template Parser<MapFieldLite, Map<Key, T>> parser(this); - return parser.template ParseWithEnumValidation<UnknownType>( - ptr, ctx, is_valid, field_num, metadata); - } - - private: - typedef void DestructorSkippable_; - - // map_ is inside an anonymous union so we can explicitly control its - // destruction - union { - Map<Key, T> map_; - }; - - friend class ::PROTOBUF_NAMESPACE_ID::Arena; -}; - -template <typename UnknownType, typename T> -struct EnumParseWrapper { - const char* _InternalParse(const char* ptr, ParseContext* ctx) { - return map_field->template ParseWithEnumValidation<UnknownType>( - ptr, ctx, is_valid, field_num, metadata); - } - T* map_field; - bool (*is_valid)(int); - uint32_t field_num; - InternalMetadata* metadata; -}; - -// Helper function because the typenames of maps are horrendous to print. This -// leverages compiler type deduction, to keep all type data out of the -// generated code -template <typename UnknownType, typename T> -EnumParseWrapper<UnknownType, T> InitEnumParseWrapper( - T* map_field, bool (*is_valid)(int), uint32_t field_num, - InternalMetadata* metadata) { - return EnumParseWrapper<UnknownType, T>{map_field, is_valid, field_num, - metadata}; -} - -// True if IsInitialized() is true for value field in all elements of t. T is -// expected to be message. It's useful to have this helper here to keep the -// protobuf compiler from ever having to emit loops in IsInitialized() methods. -// We want the C++ compiler to inline this or not as it sees fit. -template <typename Derived, typename Key, typename T, - WireFormatLite::FieldType key_wire_type, - WireFormatLite::FieldType value_wire_type> -bool AllAreInitialized(const MapFieldLite<Derived, Key, T, key_wire_type, - value_wire_type>& field) { - const auto& t = field.GetMap(); - for (typename Map<Key, T>::const_iterator it = t.begin(); it != t.end(); - ++it) { - if (!it->second.IsInitialized()) return false; - } - return true; -} - -template <typename MEntry> -struct MapEntryToMapField : MapEntryToMapField<typename MEntry::SuperType> {}; - -template <typename T, typename Key, typename Value, - WireFormatLite::FieldType kKeyFieldType, - WireFormatLite::FieldType kValueFieldType> -struct MapEntryToMapField< - MapEntryLite<T, Key, Value, kKeyFieldType, kValueFieldType>> { - typedef MapFieldLite< - MapEntryLite<T, Key, Value, kKeyFieldType, kValueFieldType>, Key, Value, - kKeyFieldType, kValueFieldType> - MapFieldType; -}; - -#ifndef NDEBUG -inline PROTOBUF_NOINLINE void MapFieldLiteNotDestructed(void* map_field_lite) { - bool proper_destruct = false; - GOOGLE_CHECK(proper_destruct) << map_field_lite; -} -#endif - -} // namespace internal -} // namespace protobuf -} // namespace google - -#include <google/protobuf/port_undef.inc> - -#endif // GOOGLE_PROTOBUF_MAP_FIELD_LITE_H__ diff --git a/include/google/protobuf/map_type_handler.h b/include/google/protobuf/map_type_handler.h deleted file mode 100644 index c210c63db5..0000000000 --- a/include/google/protobuf/map_type_handler.h +++ /dev/null @@ -1,736 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// 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 -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -#ifndef GOOGLE_PROTOBUF_MAP_TYPE_HANDLER_H__ -#define GOOGLE_PROTOBUF_MAP_TYPE_HANDLER_H__ - -#include <google/protobuf/io/coded_stream.h> -#include <google/protobuf/arena.h> -#include <google/protobuf/arenastring.h> -#include <google/protobuf/parse_context.h> -#include <google/protobuf/wire_format_lite.h> - -#ifdef SWIG -#error "You cannot SWIG proto headers" -#endif - -namespace google { -namespace protobuf { -namespace internal { - -// Used for compile time type selection. MapIf::type will be TrueType if Flag is -// true and FalseType otherwise. -template <bool Flag, typename TrueType, typename FalseType> -struct MapIf; - -template <typename TrueType, typename FalseType> -struct MapIf<true, TrueType, FalseType> { - typedef TrueType type; -}; - -template <typename TrueType, typename FalseType> -struct MapIf<false, TrueType, FalseType> { - typedef FalseType type; -}; - -template <typename Type, bool is_arena_constructable> -class MapArenaMessageCreator { - public: - // Use arena to create message if Type is arena constructable. Otherwise, - // create the message on heap. - static inline Type* CreateMessage(Arena* arena); -}; -template <typename Type> -class MapArenaMessageCreator<Type, true> { - public: - static inline Type* CreateMessage(Arena* arena) { - return Arena::CreateMessage<Type>(arena); - } -}; -template <typename Type> -class MapArenaMessageCreator<Type, false> { - public: - static inline Type* CreateMessage(Arena* arena) { - return Arena::Create<Type>(arena); - } -}; - -// Define constants for given wire field type -template <WireFormatLite::FieldType field_type, typename Type> -class MapWireFieldTypeTraits {}; - -#define TYPE_TRAITS(FieldType, CType, WireFormatType, IsMessage, IsEnum) \ - template <typename Type> \ - class MapWireFieldTypeTraits<WireFormatLite::TYPE_##FieldType, Type> { \ - public: \ - static const bool kIsMessage = IsMessage; \ - static const bool kIsEnum = IsEnum; \ - typedef typename MapIf<kIsMessage, Type*, CType>::type TypeOnMemory; \ - typedef typename MapIf<kIsEnum, int, Type>::type MapEntryAccessorType; \ - static const WireFormatLite::WireType kWireType = \ - WireFormatLite::WIRETYPE_##WireFormatType; \ - }; - -TYPE_TRAITS(MESSAGE, Type, LENGTH_DELIMITED, true, false) -TYPE_TRAITS(STRING, ArenaStringPtr, LENGTH_DELIMITED, false, false) -TYPE_TRAITS(BYTES, ArenaStringPtr, LENGTH_DELIMITED, false, false) -TYPE_TRAITS(INT64, int64_t, VARINT, false, false) -TYPE_TRAITS(UINT64, uint64_t, VARINT, false, false) -TYPE_TRAITS(INT32, int32_t, VARINT, false, false) -TYPE_TRAITS(UINT32, uint32_t, VARINT, false, false) -TYPE_TRAITS(SINT64, int64_t, VARINT, false, false) -TYPE_TRAITS(SINT32, int32_t, VARINT, false, false) -TYPE_TRAITS(ENUM, int, VARINT, false, true) -TYPE_TRAITS(DOUBLE, double, FIXED64, false, false) -TYPE_TRAITS(FLOAT, float, FIXED32, false, false) -TYPE_TRAITS(FIXED64, uint64_t, FIXED64, false, false) -TYPE_TRAITS(FIXED32, uint32_t, FIXED32, false, false) -TYPE_TRAITS(SFIXED64, int64_t, FIXED64, false, false) -TYPE_TRAITS(SFIXED32, int32_t, FIXED32, false, false) -TYPE_TRAITS(BOOL, bool, VARINT, false, false) - -#undef TYPE_TRAITS - -template <WireFormatLite::FieldType field_type, typename Type> -class MapTypeHandler {}; - -template <typename Type> -class MapTypeHandler<WireFormatLite::TYPE_MESSAGE, Type> { - public: - // Enum type cannot be used for MapTypeHandler::Read. Define a type which will - // replace Enum with int. - typedef typename MapWireFieldTypeTraits<WireFormatLite::TYPE_MESSAGE, - Type>::MapEntryAccessorType - MapEntryAccessorType; - // Internal stored type in MapEntryLite for given wire field type. - typedef typename MapWireFieldTypeTraits<WireFormatLite::TYPE_MESSAGE, - Type>::TypeOnMemory TypeOnMemory; - // Corresponding wire type for field type. - static constexpr WireFormatLite::WireType kWireType = - MapWireFieldTypeTraits<WireFormatLite::TYPE_MESSAGE, Type>::kWireType; - // Whether wire type is for message. - static constexpr bool kIsMessage = - MapWireFieldTypeTraits<WireFormatLite::TYPE_MESSAGE, Type>::kIsMessage; - // Whether wire type is for enum. - static constexpr bool kIsEnum = - MapWireFieldTypeTraits<WireFormatLite::TYPE_MESSAGE, Type>::kIsEnum; - - // Functions used in parsing and serialization. =================== - static inline size_t ByteSize(const MapEntryAccessorType& value); - static inline int GetCachedSize(const MapEntryAccessorType& value); - static inline bool Read(io::CodedInputStream* input, - MapEntryAccessorType* value); - static inline const char* Read(const char* ptr, ParseContext* ctx, - MapEntryAccessorType* value); - - static inline uint8_t* Write(int field, const MapEntryAccessorType& value, - uint8_t* ptr, io::EpsCopyOutputStream* stream); - - // Functions to manipulate data on memory. ======================== - static inline const Type& GetExternalReference(const Type* value); - static inline void DeleteNoArena(const Type* x); - static inline void Merge(const Type& from, Type** to, Arena* arena); - static inline void Clear(Type** value, Arena* arena); - static constexpr TypeOnMemory Constinit(); - - static inline Type* EnsureMutable(Type** value, Arena* arena); - // SpaceUsedInMapEntry: Return bytes used by value in MapEntry, excluding - // those already calculate in sizeof(MapField). - static inline size_t SpaceUsedInMapEntryLong(const Type* value); - // Return default instance if value is not initialized when calling const - // reference accessor. - static inline const Type& DefaultIfNotInitialized(const Type* value); - // Check if all required fields have values set. - static inline bool IsInitialized(Type* value); -}; - -#define MAP_HANDLER(FieldType) \ - template <typename Type> \ - class MapTypeHandler<WireFormatLite::TYPE_##FieldType, Type> { \ - public: \ - typedef typename MapWireFieldTypeTraits<WireFormatLite::TYPE_##FieldType, \ - Type>::MapEntryAccessorType \ - MapEntryAccessorType; \ - typedef typename MapWireFieldTypeTraits<WireFormatLite::TYPE_##FieldType, \ - Type>::TypeOnMemory TypeOnMemory; \ - static const WireFormatLite::WireType kWireType = \ - MapWireFieldTypeTraits<WireFormatLite::TYPE_##FieldType, \ - Type>::kWireType; \ - static const bool kIsMessage = \ - MapWireFieldTypeTraits<WireFormatLite::TYPE_##FieldType, \ - Type>::kIsMessage; \ - static const bool kIsEnum = \ - MapWireFieldTypeTraits<WireFormatLite::TYPE_##FieldType, \ - Type>::kIsEnum; \ - static inline int ByteSize(const MapEntryAccessorType& value); \ - static inline int GetCachedSize(const MapEntryAccessorType& value); \ - static inline bool Read(io::CodedInputStream* input, \ - MapEntryAccessorType* value); \ - static inline const char* Read(const char* begin, ParseContext* ctx, \ - MapEntryAccessorType* value); \ - static inline uint8_t* Write(int field, const MapEntryAccessorType& value, \ - uint8_t* ptr, \ - io::EpsCopyOutputStream* stream); \ - static inline const MapEntryAccessorType& GetExternalReference( \ - const TypeOnMemory& value); \ - static inline void DeleteNoArena(const TypeOnMemory& x); \ - static inline void Merge(const MapEntryAccessorType& from, \ - TypeOnMemory* to, Arena* arena); \ - static inline void Clear(TypeOnMemory* value, Arena* arena); \ - static inline size_t SpaceUsedInMapEntryLong(const TypeOnMemory& value); \ - static inline const MapEntryAccessorType& DefaultIfNotInitialized( \ - const TypeOnMemory& value); \ - static inline bool IsInitialized(const TypeOnMemory& value); \ - static void DeleteNoArena(TypeOnMemory& value); \ - static constexpr TypeOnMemory Constinit(); \ - static inline MapEntryAccessorType* EnsureMutable(TypeOnMemory* value, \ - Arena* arena); \ - }; -MAP_HANDLER(STRING) -MAP_HANDLER(BYTES) -MAP_HANDLER(INT64) -MAP_HANDLER(UINT64) -MAP_HANDLER(INT32) -MAP_HANDLER(UINT32) -MAP_HANDLER(SINT64) -MAP_HANDLER(SINT32) -MAP_HANDLER(ENUM) -MAP_HANDLER(DOUBLE) -MAP_HANDLER(FLOAT) -MAP_HANDLER(FIXED64) -MAP_HANDLER(FIXED32) -MAP_HANDLER(SFIXED64) -MAP_HANDLER(SFIXED32) -MAP_HANDLER(BOOL) -#undef MAP_HANDLER - -template <typename Type> -inline size_t MapTypeHandler<WireFormatLite::TYPE_MESSAGE, Type>::ByteSize( - const MapEntryAccessorType& value) { - return WireFormatLite::MessageSizeNoVirtual(value); -} - -#define GOOGLE_PROTOBUF_BYTE_SIZE(FieldType, DeclaredType) \ - template <typename Type> \ - inline int MapTypeHandler<WireFormatLite::TYPE_##FieldType, Type>::ByteSize( \ - const MapEntryAccessorType& value) { \ - return static_cast<int>(WireFormatLite::DeclaredType##Size(value)); \ - } - -GOOGLE_PROTOBUF_BYTE_SIZE(STRING, String) -GOOGLE_PROTOBUF_BYTE_SIZE(BYTES, Bytes) -GOOGLE_PROTOBUF_BYTE_SIZE(INT64, Int64) -GOOGLE_PROTOBUF_BYTE_SIZE(UINT64, UInt64) -GOOGLE_PROTOBUF_BYTE_SIZE(INT32, Int32) -GOOGLE_PROTOBUF_BYTE_SIZE(UINT32, UInt32) -GOOGLE_PROTOBUF_BYTE_SIZE(SINT64, SInt64) -GOOGLE_PROTOBUF_BYTE_SIZE(SINT32, SInt32) -GOOGLE_PROTOBUF_BYTE_SIZE(ENUM, Enum) - -#undef GOOGLE_PROTOBUF_BYTE_SIZE - -#define FIXED_BYTE_SIZE(FieldType, DeclaredType) \ - template <typename Type> \ - inline int MapTypeHandler<WireFormatLite::TYPE_##FieldType, Type>::ByteSize( \ - const MapEntryAccessorType& /* value */) { \ - return WireFormatLite::k##DeclaredType##Size; \ - } - -FIXED_BYTE_SIZE(DOUBLE, Double) -FIXED_BYTE_SIZE(FLOAT, Float) -FIXED_BYTE_SIZE(FIXED64, Fixed64) -FIXED_BYTE_SIZE(FIXED32, Fixed32) -FIXED_BYTE_SIZE(SFIXED64, SFixed64) -FIXED_BYTE_SIZE(SFIXED32, SFixed32) -FIXED_BYTE_SIZE(BOOL, Bool) - -#undef FIXED_BYTE_SIZE - -template <typename Type> -inline int MapTypeHandler<WireFormatLite::TYPE_MESSAGE, Type>::GetCachedSize( - const MapEntryAccessorType& value) { - return static_cast<int>(WireFormatLite::LengthDelimitedSize( - static_cast<size_t>(value.GetCachedSize()))); -} - -#define GET_CACHED_SIZE(FieldType, DeclaredType) \ - template <typename Type> \ - inline int \ - MapTypeHandler<WireFormatLite::TYPE_##FieldType, Type>::GetCachedSize( \ - const MapEntryAccessorType& value) { \ - return static_cast<int>(WireFormatLite::DeclaredType##Size(value)); \ - } - -GET_CACHED_SIZE(STRING, String) -GET_CACHED_SIZE(BYTES, Bytes) -GET_CACHED_SIZE(INT64, Int64) -GET_CACHED_SIZE(UINT64, UInt64) -GET_CACHED_SIZE(INT32, Int32) -GET_CACHED_SIZE(UINT32, UInt32) -GET_CACHED_SIZE(SINT64, SInt64) -GET_CACHED_SIZE(SINT32, SInt32) -GET_CACHED_SIZE(ENUM, Enum) - -#undef GET_CACHED_SIZE - -#define GET_FIXED_CACHED_SIZE(FieldType, DeclaredType) \ - template <typename Type> \ - inline int \ - MapTypeHandler<WireFormatLite::TYPE_##FieldType, Type>::GetCachedSize( \ - const MapEntryAccessorType& /* value */) { \ - return WireFormatLite::k##DeclaredType##Size; \ - } - -GET_FIXED_CACHED_SIZE(DOUBLE, Double) -GET_FIXED_CACHED_SIZE(FLOAT, Float) -GET_FIXED_CACHED_SIZE(FIXED64, Fixed64) -GET_FIXED_CACHED_SIZE(FIXED32, Fixed32) -GET_FIXED_CACHED_SIZE(SFIXED64, SFixed64) -GET_FIXED_CACHED_SIZE(SFIXED32, SFixed32) -GET_FIXED_CACHED_SIZE(BOOL, Bool) - -#undef GET_FIXED_CACHED_SIZE - -template <typename Type> -inline uint8_t* MapTypeHandler<WireFormatLite::TYPE_MESSAGE, Type>::Write( - int field, const MapEntryAccessorType& value, uint8_t* ptr, - io::EpsCopyOutputStream* stream) { - ptr = stream->EnsureSpace(ptr); - return WireFormatLite::InternalWriteMessage( - field, value, value.GetCachedSize(), ptr, stream); -} - -#define WRITE_METHOD(FieldType, DeclaredType) \ - template <typename Type> \ - inline uint8_t* \ - MapTypeHandler<WireFormatLite::TYPE_##FieldType, Type>::Write( \ - int field, const MapEntryAccessorType& value, uint8_t* ptr, \ - io::EpsCopyOutputStream* stream) { \ - ptr = stream->EnsureSpace(ptr); \ - return stream->Write##DeclaredType(field, value, ptr); \ - } - -WRITE_METHOD(STRING, String) -WRITE_METHOD(BYTES, Bytes) - -#undef WRITE_METHOD -#define WRITE_METHOD(FieldType, DeclaredType) \ - template <typename Type> \ - inline uint8_t* \ - MapTypeHandler<WireFormatLite::TYPE_##FieldType, Type>::Write( \ - int field, const MapEntryAccessorType& value, uint8_t* ptr, \ - io::EpsCopyOutputStream* stream) { \ - ptr = stream->EnsureSpace(ptr); \ - return WireFormatLite::Write##DeclaredType##ToArray(field, value, ptr); \ - } - -WRITE_METHOD(INT64, Int64) -WRITE_METHOD(UINT64, UInt64) -WRITE_METHOD(INT32, Int32) -WRITE_METHOD(UINT32, UInt32) -WRITE_METHOD(SINT64, SInt64) -WRITE_METHOD(SINT32, SInt32) -WRITE_METHOD(ENUM, Enum) -WRITE_METHOD(DOUBLE, Double) -WRITE_METHOD(FLOAT, Float) -WRITE_METHOD(FIXED64, Fixed64) -WRITE_METHOD(FIXED32, Fixed32) -WRITE_METHOD(SFIXED64, SFixed64) -WRITE_METHOD(SFIXED32, SFixed32) -WRITE_METHOD(BOOL, Bool) - -#undef WRITE_METHOD - -template <typename Type> -inline bool MapTypeHandler<WireFormatLite::TYPE_MESSAGE, Type>::Read( - io::CodedInputStream* input, MapEntryAccessorType* value) { - return WireFormatLite::ReadMessageNoVirtual(input, value); -} - -template <typename Type> -inline bool MapTypeHandler<WireFormatLite::TYPE_STRING, Type>::Read( - io::CodedInputStream* input, MapEntryAccessorType* value) { - return WireFormatLite::ReadString(input, value); -} - -template <typename Type> -inline bool MapTypeHandler<WireFormatLite::TYPE_BYTES, Type>::Read( - io::CodedInputStream* input, MapEntryAccessorType* value) { - return WireFormatLite::ReadBytes(input, value); -} - -template <typename Type> -const char* MapTypeHandler<WireFormatLite::TYPE_MESSAGE, Type>::Read( - const char* ptr, ParseContext* ctx, MapEntryAccessorType* value) { - return ctx->ParseMessage(value, ptr); -} - -template <typename Type> -const char* MapTypeHandler<WireFormatLite::TYPE_STRING, Type>::Read( - const char* ptr, ParseContext* ctx, MapEntryAccessorType* value) { - int size = ReadSize(&ptr); - GOOGLE_PROTOBUF_PARSER_ASSERT(ptr); - return ctx->ReadString(ptr, size, value); -} - -template <typename Type> -const char* MapTypeHandler<WireFormatLite::TYPE_BYTES, Type>::Read( - const char* ptr, ParseContext* ctx, MapEntryAccessorType* value) { - int size = ReadSize(&ptr); - GOOGLE_PROTOBUF_PARSER_ASSERT(ptr); - return ctx->ReadString(ptr, size, value); -} - -inline const char* ReadINT64(const char* ptr, int64_t* value) { - return VarintParse(ptr, reinterpret_cast<uint64_t*>(value)); -} -inline const char* ReadUINT64(const char* ptr, uint64_t* value) { - return VarintParse(ptr, value); -} -inline const char* ReadINT32(const char* ptr, int32_t* value) { - return VarintParse(ptr, reinterpret_cast<uint32_t*>(value)); -} -inline const char* ReadUINT32(const char* ptr, uint32_t* value) { - return VarintParse(ptr, value); -} -inline const char* ReadSINT64(const char* ptr, int64_t* value) { - *value = ReadVarintZigZag64(&ptr); - return ptr; -} -inline const char* ReadSINT32(const char* ptr, int32_t* value) { - *value = ReadVarintZigZag32(&ptr); - return ptr; -} -template <typename E> -inline const char* ReadENUM(const char* ptr, E* value) { - *value = static_cast<E>(ReadVarint32(&ptr)); - return ptr; -} -inline const char* ReadBOOL(const char* ptr, bool* value) { - *value = static_cast<bool>(ReadVarint32(&ptr)); - return ptr; -} - -template <typename F> -inline const char* ReadUnaligned(const char* ptr, F* value) { - *value = UnalignedLoad<F>(ptr); - return ptr + sizeof(F); -} -inline const char* ReadFLOAT(const char* ptr, float* value) { - return ReadUnaligned(ptr, value); -} -inline const char* ReadDOUBLE(const char* ptr, double* value) { - return ReadUnaligned(ptr, value); -} -inline const char* ReadFIXED64(const char* ptr, uint64_t* value) { - return ReadUnaligned(ptr, value); -} -inline const char* ReadFIXED32(const char* ptr, uint32_t* value) { - return ReadUnaligned(ptr, value); -} -inline const char* ReadSFIXED64(const char* ptr, int64_t* value) { - return ReadUnaligned(ptr, value); -} -inline const char* ReadSFIXED32(const char* ptr, int32_t* value) { - return ReadUnaligned(ptr, value); -} - -#define READ_METHOD(FieldType) \ - template <typename Type> \ - inline bool MapTypeHandler<WireFormatLite::TYPE_##FieldType, Type>::Read( \ - io::CodedInputStream* input, MapEntryAccessorType* value) { \ - return WireFormatLite::ReadPrimitive<TypeOnMemory, \ - WireFormatLite::TYPE_##FieldType>( \ - input, value); \ - } \ - template <typename Type> \ - const char* MapTypeHandler<WireFormatLite::TYPE_##FieldType, Type>::Read( \ - const char* begin, ParseContext* ctx, MapEntryAccessorType* value) { \ - (void)ctx; \ - return Read##FieldType(begin, value); \ - } - -READ_METHOD(INT64) -READ_METHOD(UINT64) -READ_METHOD(INT32) -READ_METHOD(UINT32) -READ_METHOD(SINT64) -READ_METHOD(SINT32) -READ_METHOD(ENUM) -READ_METHOD(DOUBLE) -READ_METHOD(FLOAT) -READ_METHOD(FIXED64) -READ_METHOD(FIXED32) -READ_METHOD(SFIXED64) -READ_METHOD(SFIXED32) -READ_METHOD(BOOL) - -#undef READ_METHOD - -// Definition for message handler - -template <typename Type> -inline const Type& -MapTypeHandler<WireFormatLite::TYPE_MESSAGE, Type>::GetExternalReference( - const Type* value) { - return *value; -} - -template <typename Type> -inline size_t MapTypeHandler<WireFormatLite::TYPE_MESSAGE, - Type>::SpaceUsedInMapEntryLong(const Type* value) { - return value->SpaceUsedLong(); -} - -template <typename Type> -inline void MapTypeHandler<WireFormatLite::TYPE_MESSAGE, Type>::Clear( - Type** value, Arena* /* arena */) { - if (*value != nullptr) (*value)->Clear(); -} -template <typename Type> -inline void MapTypeHandler<WireFormatLite::TYPE_MESSAGE, Type>::Merge( - const Type& from, Type** to, Arena* /* arena */) { - (*to)->MergeFrom(from); -} - -template <typename Type> -void MapTypeHandler<WireFormatLite::TYPE_MESSAGE, Type>::DeleteNoArena( - const Type* ptr) { - delete ptr; -} - -template <typename Type> -constexpr auto MapTypeHandler<WireFormatLite::TYPE_MESSAGE, Type>::Constinit() - -> TypeOnMemory { - return nullptr; -} - -template <typename Type> -inline Type* MapTypeHandler<WireFormatLite::TYPE_MESSAGE, Type>::EnsureMutable( - Type** value, Arena* arena) { - if (*value == nullptr) { - *value = MapArenaMessageCreator< - Type, - Arena::is_arena_constructable<Type>::type::value>::CreateMessage(arena); - } - return *value; -} - -template <typename Type> -inline const Type& -MapTypeHandler<WireFormatLite::TYPE_MESSAGE, Type>::DefaultIfNotInitialized( - const Type* value) { - return value != nullptr ? *value : *Type::internal_default_instance(); -} - -template <typename Type> -inline bool MapTypeHandler<WireFormatLite::TYPE_MESSAGE, Type>::IsInitialized( - Type* value) { - return value ? value->IsInitialized() : false; -} - -// Definition for string/bytes handler - -#define STRING_OR_BYTES_HANDLER_FUNCTIONS(FieldType) \ - template <typename Type> \ - inline const typename MapTypeHandler<WireFormatLite::TYPE_##FieldType, \ - Type>::MapEntryAccessorType& \ - MapTypeHandler<WireFormatLite::TYPE_##FieldType, \ - Type>::GetExternalReference(const TypeOnMemory& value) { \ - return value.Get(); \ - } \ - template <typename Type> \ - inline size_t \ - MapTypeHandler<WireFormatLite::TYPE_##FieldType, \ - Type>::SpaceUsedInMapEntryLong(const TypeOnMemory& value) { \ - return sizeof(value); \ - } \ - template <typename Type> \ - inline void MapTypeHandler<WireFormatLite::TYPE_##FieldType, Type>::Clear( \ - TypeOnMemory* value, Arena* /* arena */) { \ - value->ClearToEmpty(); \ - } \ - template <typename Type> \ - inline void MapTypeHandler<WireFormatLite::TYPE_##FieldType, Type>::Merge( \ - const MapEntryAccessorType& from, TypeOnMemory* to, Arena* arena) { \ - to->Set(from, arena); \ - } \ - template <typename Type> \ - void MapTypeHandler<WireFormatLite::TYPE_##FieldType, Type>::DeleteNoArena( \ - TypeOnMemory& value) { \ - value.Destroy(); \ - } \ - template <typename Type> \ - constexpr auto \ - MapTypeHandler<WireFormatLite::TYPE_##FieldType, Type>::Constinit() \ - ->TypeOnMemory { \ - return TypeOnMemory(&internal::fixed_address_empty_string, \ - ConstantInitialized{}); \ - } \ - template <typename Type> \ - inline typename MapTypeHandler<WireFormatLite::TYPE_##FieldType, \ - Type>::MapEntryAccessorType* \ - MapTypeHandler<WireFormatLite::TYPE_##FieldType, Type>::EnsureMutable( \ - TypeOnMemory* value, Arena* arena) { \ - return value->Mutable(arena); \ - } \ - template <typename Type> \ - inline const typename MapTypeHandler<WireFormatLite::TYPE_##FieldType, \ - Type>::MapEntryAccessorType& \ - MapTypeHandler<WireFormatLite::TYPE_##FieldType, \ - Type>::DefaultIfNotInitialized(const TypeOnMemory& value) { \ - return value.Get(); \ - } \ - template <typename Type> \ - inline bool \ - MapTypeHandler<WireFormatLite::TYPE_##FieldType, Type>::IsInitialized( \ - const TypeOnMemory& /* value */) { \ - return true; \ - } -STRING_OR_BYTES_HANDLER_FUNCTIONS(STRING) -STRING_OR_BYTES_HANDLER_FUNCTIONS(BYTES) -#undef STRING_OR_BYTES_HANDLER_FUNCTIONS - -#define PRIMITIVE_HANDLER_FUNCTIONS(FieldType) \ - template <typename Type> \ - inline const typename MapTypeHandler<WireFormatLite::TYPE_##FieldType, \ - Type>::MapEntryAccessorType& \ - MapTypeHandler<WireFormatLite::TYPE_##FieldType, \ - Type>::GetExternalReference(const TypeOnMemory& value) { \ - return value; \ - } \ - template <typename Type> \ - inline size_t MapTypeHandler<WireFormatLite::TYPE_##FieldType, Type>:: \ - SpaceUsedInMapEntryLong(const TypeOnMemory& /* value */) { \ - return 0; \ - } \ - template <typename Type> \ - inline void MapTypeHandler<WireFormatLite::TYPE_##FieldType, Type>::Clear( \ - TypeOnMemory* value, Arena* /* arena */) { \ - *value = 0; \ - } \ - template <typename Type> \ - inline void MapTypeHandler<WireFormatLite::TYPE_##FieldType, Type>::Merge( \ - const MapEntryAccessorType& from, TypeOnMemory* to, \ - Arena* /* arena */) { \ - *to = from; \ - } \ - template <typename Type> \ - inline void MapTypeHandler<WireFormatLite::TYPE_##FieldType, \ - Type>::DeleteNoArena(TypeOnMemory& /* x */) {} \ - template <typename Type> \ - constexpr auto \ - MapTypeHandler<WireFormatLite::TYPE_##FieldType, Type>::Constinit() \ - ->TypeOnMemory { \ - return 0; \ - } \ - template <typename Type> \ - inline typename MapTypeHandler<WireFormatLite::TYPE_##FieldType, \ - Type>::MapEntryAccessorType* \ - MapTypeHandler<WireFormatLite::TYPE_##FieldType, Type>::EnsureMutable( \ - TypeOnMemory* value, Arena* /* arena */) { \ - return value; \ - } \ - template <typename Type> \ - inline const typename MapTypeHandler<WireFormatLite::TYPE_##FieldType, \ - Type>::MapEntryAccessorType& \ - MapTypeHandler<WireFormatLite::TYPE_##FieldType, \ - Type>::DefaultIfNotInitialized(const TypeOnMemory& value) { \ - return value; \ - } \ - template <typename Type> \ - inline bool \ - MapTypeHandler<WireFormatLite::TYPE_##FieldType, Type>::IsInitialized( \ - const TypeOnMemory& /* value */) { \ - return true; \ - } -PRIMITIVE_HANDLER_FUNCTIONS(INT64) -PRIMITIVE_HANDLER_FUNCTIONS(UINT64) -PRIMITIVE_HANDLER_FUNCTIONS(INT32) -PRIMITIVE_HANDLER_FUNCTIONS(UINT32) -PRIMITIVE_HANDLER_FUNCTIONS(SINT64) -PRIMITIVE_HANDLER_FUNCTIONS(SINT32) -PRIMITIVE_HANDLER_FUNCTIONS(ENUM) -PRIMITIVE_HANDLER_FUNCTIONS(DOUBLE) -PRIMITIVE_HANDLER_FUNCTIONS(FLOAT) -PRIMITIVE_HANDLER_FUNCTIONS(FIXED64) -PRIMITIVE_HANDLER_FUNCTIONS(FIXED32) -PRIMITIVE_HANDLER_FUNCTIONS(SFIXED64) -PRIMITIVE_HANDLER_FUNCTIONS(SFIXED32) -PRIMITIVE_HANDLER_FUNCTIONS(BOOL) -#undef PRIMITIVE_HANDLER_FUNCTIONS - -// Functions for operating on a map entry using type handlers. -// -// Does not contain any representation (this class is not intended to be -// instantiated). -template <typename Key, typename Value, WireFormatLite::FieldType kKeyFieldType, - WireFormatLite::FieldType kValueFieldType> -struct MapEntryFuncs { - typedef MapTypeHandler<kKeyFieldType, Key> KeyTypeHandler; - typedef MapTypeHandler<kValueFieldType, Value> ValueTypeHandler; - enum : int { - kKeyFieldNumber = 1, - kValueFieldNumber = 2 - }; - - static uint8_t* InternalSerialize(int field_number, const Key& key, - const Value& value, uint8_t* ptr, - io::EpsCopyOutputStream* stream) { - ptr = stream->EnsureSpace(ptr); - ptr = WireFormatLite::WriteTagToArray( - field_number, WireFormatLite::WIRETYPE_LENGTH_DELIMITED, ptr); - ptr = io::CodedOutputStream::WriteVarint32ToArray(GetCachedSize(key, value), - ptr); - - ptr = KeyTypeHandler::Write(kKeyFieldNumber, key, ptr, stream); - return ValueTypeHandler::Write(kValueFieldNumber, value, ptr, stream); - } - - static size_t ByteSizeLong(const Key& key, const Value& value) { - // Tags for key and value will both be one byte (field numbers 1 and 2). - size_t inner_length = - 2 + KeyTypeHandler::ByteSize(key) + ValueTypeHandler::ByteSize(value); - return inner_length + io::CodedOutputStream::VarintSize32( - static_cast<uint32_t>(inner_length)); - } - - static int GetCachedSize(const Key& key, const Value& value) { - // Tags for key and value will both be one byte (field numbers 1 and 2). - return 2 + KeyTypeHandler::GetCachedSize(key) + - ValueTypeHandler::GetCachedSize(value); - } -}; - -} // namespace internal -} // namespace protobuf -} // namespace google - -#endif // GOOGLE_PROTOBUF_MAP_TYPE_HANDLER_H__ diff --git a/include/google/protobuf/message.h b/include/google/protobuf/message.h deleted file mode 100644 index 39ec154c34..0000000000 --- a/include/google/protobuf/message.h +++ /dev/null @@ -1,1497 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// 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 -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -// Author: kenton@google.com (Kenton Varda) -// Based on original Protocol Buffers design by -// Sanjay Ghemawat, Jeff Dean, and others. -// -// Defines Message, the abstract interface implemented by non-lite -// protocol message objects. Although it's possible to implement this -// interface manually, most users will use the protocol compiler to -// generate implementations. -// -// Example usage: -// -// Say you have a message defined as: -// -// message Foo { -// optional string text = 1; -// repeated int32 numbers = 2; -// } -// -// Then, if you used the protocol compiler to generate a class from the above -// definition, you could use it like so: -// -// std::string data; // Will store a serialized version of the message. -// -// { -// // Create a message and serialize it. -// Foo foo; -// foo.set_text("Hello World!"); -// foo.add_numbers(1); -// foo.add_numbers(5); -// foo.add_numbers(42); -// -// foo.SerializeToString(&data); -// } -// -// { -// // Parse the serialized message and check that it contains the -// // correct data. -// Foo foo; -// foo.ParseFromString(data); -// -// assert(foo.text() == "Hello World!"); -// assert(foo.numbers_size() == 3); -// assert(foo.numbers(0) == 1); -// assert(foo.numbers(1) == 5); -// assert(foo.numbers(2) == 42); -// } -// -// { -// // Same as the last block, but do it dynamically via the Message -// // reflection interface. -// Message* foo = new Foo; -// const Descriptor* descriptor = foo->GetDescriptor(); -// -// // Get the descriptors for the fields we're interested in and verify -// // their types. -// const FieldDescriptor* text_field = descriptor->FindFieldByName("text"); -// assert(text_field != nullptr); -// assert(text_field->type() == FieldDescriptor::TYPE_STRING); -// assert(text_field->label() == FieldDescriptor::LABEL_OPTIONAL); -// const FieldDescriptor* numbers_field = descriptor-> -// FindFieldByName("numbers"); -// assert(numbers_field != nullptr); -// assert(numbers_field->type() == FieldDescriptor::TYPE_INT32); -// assert(numbers_field->label() == FieldDescriptor::LABEL_REPEATED); -// -// // Parse the message. -// foo->ParseFromString(data); -// -// // Use the reflection interface to examine the contents. -// const Reflection* reflection = foo->GetReflection(); -// assert(reflection->GetString(*foo, text_field) == "Hello World!"); -// assert(reflection->FieldSize(*foo, numbers_field) == 3); -// assert(reflection->GetRepeatedInt32(*foo, numbers_field, 0) == 1); -// assert(reflection->GetRepeatedInt32(*foo, numbers_field, 1) == 5); -// assert(reflection->GetRepeatedInt32(*foo, numbers_field, 2) == 42); -// -// delete foo; -// } - -#ifndef GOOGLE_PROTOBUF_MESSAGE_H__ -#define GOOGLE_PROTOBUF_MESSAGE_H__ - - -#include <iosfwd> -#include <string> -#include <type_traits> -#include <vector> - -#include <google/protobuf/stubs/casts.h> -#include <google/protobuf/stubs/common.h> -#include <google/protobuf/arena.h> -#include <google/protobuf/port.h> -#include <google/protobuf/descriptor.h> -#include <google/protobuf/generated_message_reflection.h> -#include <google/protobuf/generated_message_util.h> -#include <google/protobuf/map.h> // TODO(b/211442718): cleanup -#include <google/protobuf/message_lite.h> - - -// Must be included last. -#include <google/protobuf/port_def.inc> - -#ifdef SWIG -#error "You cannot SWIG proto headers" -#endif - -namespace google { -namespace protobuf { - -// Defined in this file. -class Message; -class Reflection; -class MessageFactory; - -// Defined in other files. -class AssignDescriptorsHelper; -class DynamicMessageFactory; -class GeneratedMessageReflectionTestHelper; -class MapKey; -class MapValueConstRef; -class MapValueRef; -class MapIterator; -class MapReflectionTester; - -namespace internal { -struct DescriptorTable; -class MapFieldBase; -class SwapFieldHelper; -class CachedSize; -} // namespace internal -class UnknownFieldSet; // unknown_field_set.h -namespace io { -class ZeroCopyInputStream; // zero_copy_stream.h -class ZeroCopyOutputStream; // zero_copy_stream.h -class CodedInputStream; // coded_stream.h -class CodedOutputStream; // coded_stream.h -} // namespace io -namespace python { -class MapReflectionFriend; // scalar_map_container.h -class MessageReflectionFriend; -} // namespace python -namespace expr { -class CelMapReflectionFriend; // field_backed_map_impl.cc -} - -namespace internal { -class MapFieldPrinterHelper; // text_format.cc -} -namespace util { -class MessageDifferencer; -} - - -namespace internal { -class ReflectionAccessor; // message.cc -class ReflectionOps; // reflection_ops.h -class MapKeySorter; // wire_format.cc -class WireFormat; // wire_format.h -class MapFieldReflectionTest; // map_test.cc -} // namespace internal - -template <typename T> -class RepeatedField; // repeated_field.h - -template <typename T> -class RepeatedPtrField; // repeated_field.h - -// A container to hold message metadata. -struct Metadata { - const Descriptor* descriptor; - const Reflection* reflection; -}; - -namespace internal { -template <class To> -inline To* GetPointerAtOffset(Message* message, uint32_t offset) { - return reinterpret_cast<To*>(reinterpret_cast<char*>(message) + offset); -} - -template <class To> -const To* GetConstPointerAtOffset(const Message* message, uint32_t offset) { - return reinterpret_cast<const To*>(reinterpret_cast<const char*>(message) + - offset); -} - -template <class To> -const To& GetConstRefAtOffset(const Message& message, uint32_t offset) { - return *GetConstPointerAtOffset<To>(&message, offset); -} - -bool CreateUnknownEnumValues(const FieldDescriptor* field); - -// Returns true if "message" is a descendant of "root". -PROTOBUF_EXPORT bool IsDescendant(Message& root, const Message& message); -} // namespace internal - -// Abstract interface for protocol messages. -// -// See also MessageLite, which contains most every-day operations. Message -// adds descriptors and reflection on top of that. -// -// The methods of this class that are virtual but not pure-virtual have -// default implementations based on reflection. Message classes which are -// optimized for speed will want to override these with faster implementations, -// but classes optimized for code size may be happy with keeping them. See -// the optimize_for option in descriptor.proto. -// -// Users must not derive from this class. Only the protocol compiler and -// the internal library are allowed to create subclasses. -class PROTOBUF_EXPORT Message : public MessageLite { - public: - constexpr Message() {} - - // Basic Operations ------------------------------------------------ - - // Construct a new instance of the same type. Ownership is passed to the - // caller. (This is also defined in MessageLite, but is defined again here - // for return-type covariance.) - Message* New() const { return New(nullptr); } - - // Construct a new instance on the arena. Ownership is passed to the caller - // if arena is a nullptr. - Message* New(Arena* arena) const override = 0; - - // Make this message into a copy of the given message. The given message - // must have the same descriptor, but need not necessarily be the same class. - // By default this is just implemented as "Clear(); MergeFrom(from);". - void CopyFrom(const Message& from); - - // Merge the fields from the given message into this message. Singular - // fields will be overwritten, if specified in from, except for embedded - // messages which will be merged. Repeated fields will be concatenated. - // The given message must be of the same type as this message (i.e. the - // exact same class). - virtual void MergeFrom(const Message& from); - - // Verifies that IsInitialized() returns true. GOOGLE_CHECK-fails otherwise, with - // a nice error message. - void CheckInitialized() const; - - // Slowly build a list of all required fields that are not set. - // This is much, much slower than IsInitialized() as it is implemented - // purely via reflection. Generally, you should not call this unless you - // have already determined that an error exists by calling IsInitialized(). - void FindInitializationErrors(std::vector<std::string>* errors) const; - - // Like FindInitializationErrors, but joins all the strings, delimited by - // commas, and returns them. - std::string InitializationErrorString() const override; - - // Clears all unknown fields from this message and all embedded messages. - // Normally, if unknown tag numbers are encountered when parsing a message, - // the tag and value are stored in the message's UnknownFieldSet and - // then written back out when the message is serialized. This allows servers - // which simply route messages to other servers to pass through messages - // that have new field definitions which they don't yet know about. However, - // this behavior can have security implications. To avoid it, call this - // method after parsing. - // - // See Reflection::GetUnknownFields() for more on unknown fields. - void DiscardUnknownFields(); - - // Computes (an estimate of) the total number of bytes currently used for - // storing the message in memory. The default implementation calls the - // Reflection object's SpaceUsed() method. - // - // SpaceUsed() is noticeably slower than ByteSize(), as it is implemented - // using reflection (rather than the generated code implementation for - // ByteSize()). Like ByteSize(), its CPU time is linear in the number of - // fields defined for the proto. - virtual size_t SpaceUsedLong() const; - - PROTOBUF_DEPRECATED_MSG("Please use SpaceUsedLong() instead") - int SpaceUsed() const { return internal::ToIntSize(SpaceUsedLong()); } - - // Debugging & Testing---------------------------------------------- - - // Generates a human-readable form of this message for debugging purposes. - // Note that the format and content of a debug string is not guaranteed, may - // change without notice, and should not be depended on. Code that does - // anything except display a string to assist in debugging should use - // TextFormat instead. - std::string DebugString() const; - // Like DebugString(), but with less whitespace. - std::string ShortDebugString() const; - // Like DebugString(), but do not escape UTF-8 byte sequences. - std::string Utf8DebugString() const; - // Convenience function useful in GDB. Prints DebugString() to stdout. - void PrintDebugString() const; - - // Reflection-based methods ---------------------------------------- - // These methods are pure-virtual in MessageLite, but Message provides - // reflection-based default implementations. - - std::string GetTypeName() const override; - void Clear() override; - - // Returns whether all required fields have been set. Note that required - // fields no longer exist starting in proto3. - bool IsInitialized() const override; - - void CheckTypeAndMergeFrom(const MessageLite& other) override; - // Reflective parser - const char* _InternalParse(const char* ptr, - internal::ParseContext* ctx) override; - size_t ByteSizeLong() const override; - uint8_t* _InternalSerialize(uint8_t* target, - io::EpsCopyOutputStream* stream) const override; - - private: - // This is called only by the default implementation of ByteSize(), to - // update the cached size. If you override ByteSize(), you do not need - // to override this. If you do not override ByteSize(), you MUST override - // this; the default implementation will crash. - // - // The method is private because subclasses should never call it; only - // override it. Yes, C++ lets you do that. Crazy, huh? - virtual void SetCachedSize(int size) const; - - public: - // Introspection --------------------------------------------------- - - - // Get a non-owning pointer to a Descriptor for this message's type. This - // describes what fields the message contains, the types of those fields, etc. - // This object remains property of the Message. - const Descriptor* GetDescriptor() const { return GetMetadata().descriptor; } - - // Get a non-owning pointer to the Reflection interface for this Message, - // which can be used to read and modify the fields of the Message dynamically - // (in other words, without knowing the message type at compile time). This - // object remains property of the Message. - const Reflection* GetReflection() const { return GetMetadata().reflection; } - - protected: - // Get a struct containing the metadata for the Message, which is used in turn - // to implement GetDescriptor() and GetReflection() above. - virtual Metadata GetMetadata() const = 0; - - struct ClassData { - // Note: The order of arguments (to, then from) is chosen so that the ABI - // of this function is the same as the CopyFrom method. That is, the - // hidden "this" parameter comes first. - void (*copy_to_from)(Message& to, const Message& from_msg); - void (*merge_to_from)(Message& to, const Message& from_msg); - }; - // GetClassData() returns a pointer to a ClassData struct which - // exists in global memory and is unique to each subclass. This uniqueness - // property is used in order to quickly determine whether two messages are - // of the same type. - // TODO(jorg): change to pure virtual - virtual const ClassData* GetClassData() const { return nullptr; } - - // CopyWithSourceCheck calls Clear() and then MergeFrom(), and in debug - // builds, checks that calling Clear() on the destination message doesn't - // alter the source. It assumes the messages are known to be of the same - // type, and thus uses GetClassData(). - static void CopyWithSourceCheck(Message& to, const Message& from); - - // Fail if "from" is a descendant of "to" as such copy is not allowed. - static void FailIfCopyFromDescendant(Message& to, const Message& from); - - inline explicit Message(Arena* arena, bool is_message_owned = false) - : MessageLite(arena, is_message_owned) {} - size_t ComputeUnknownFieldsSize(size_t total_size, - internal::CachedSize* cached_size) const; - size_t MaybeComputeUnknownFieldsSize(size_t total_size, - internal::CachedSize* cached_size) const; - - - protected: - static uint64_t GetInvariantPerBuild(uint64_t salt); - - private: - GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(Message); -}; - -namespace internal { -// Forward-declare interfaces used to implement RepeatedFieldRef. -// These are protobuf internals that users shouldn't care about. -class RepeatedFieldAccessor; -} // namespace internal - -// Forward-declare RepeatedFieldRef templates. The second type parameter is -// used for SFINAE tricks. Users should ignore it. -template <typename T, typename Enable = void> -class RepeatedFieldRef; - -template <typename T, typename Enable = void> -class MutableRepeatedFieldRef; - -// This interface contains methods that can be used to dynamically access -// and modify the fields of a protocol message. Their semantics are -// similar to the accessors the protocol compiler generates. -// -// To get the Reflection for a given Message, call Message::GetReflection(). -// -// This interface is separate from Message only for efficiency reasons; -// the vast majority of implementations of Message will share the same -// implementation of Reflection (GeneratedMessageReflection, -// defined in generated_message.h), and all Messages of a particular class -// should share the same Reflection object (though you should not rely on -// the latter fact). -// -// There are several ways that these methods can be used incorrectly. For -// example, any of the following conditions will lead to undefined -// results (probably assertion failures): -// - The FieldDescriptor is not a field of this message type. -// - The method called is not appropriate for the field's type. For -// each field type in FieldDescriptor::TYPE_*, there is only one -// Get*() method, one Set*() method, and one Add*() method that is -// valid for that type. It should be obvious which (except maybe -// for TYPE_BYTES, which are represented using strings in C++). -// - A Get*() or Set*() method for singular fields is called on a repeated -// field. -// - GetRepeated*(), SetRepeated*(), or Add*() is called on a non-repeated -// field. -// - The Message object passed to any method is not of the right type for -// this Reflection object (i.e. message.GetReflection() != reflection). -// -// You might wonder why there is not any abstract representation for a field -// of arbitrary type. E.g., why isn't there just a "GetField()" method that -// returns "const Field&", where "Field" is some class with accessors like -// "GetInt32Value()". The problem is that someone would have to deal with -// allocating these Field objects. For generated message classes, having to -// allocate space for an additional object to wrap every field would at least -// double the message's memory footprint, probably worse. Allocating the -// objects on-demand, on the other hand, would be expensive and prone to -// memory leaks. So, instead we ended up with this flat interface. -class PROTOBUF_EXPORT Reflection final { - public: - // Get the UnknownFieldSet for the message. This contains fields which - // were seen when the Message was parsed but were not recognized according - // to the Message's definition. - const UnknownFieldSet& GetUnknownFields(const Message& message) const; - // Get a mutable pointer to the UnknownFieldSet for the message. This - // contains fields which were seen when the Message was parsed but were not - // recognized according to the Message's definition. - UnknownFieldSet* MutableUnknownFields(Message* message) const; - - // Estimate the amount of memory used by the message object. - size_t SpaceUsedLong(const Message& message) const; - - PROTOBUF_DEPRECATED_MSG("Please use SpaceUsedLong() instead") - int SpaceUsed(const Message& message) const { - return internal::ToIntSize(SpaceUsedLong(message)); - } - - // Check if the given non-repeated field is set. - bool HasField(const Message& message, const FieldDescriptor* field) const; - - // Get the number of elements of a repeated field. - int FieldSize(const Message& message, const FieldDescriptor* field) const; - - // Clear the value of a field, so that HasField() returns false or - // FieldSize() returns zero. - void ClearField(Message* message, const FieldDescriptor* field) const; - - // Check if the oneof is set. Returns true if any field in oneof - // is set, false otherwise. - bool HasOneof(const Message& message, - const OneofDescriptor* oneof_descriptor) const; - - void ClearOneof(Message* message, - const OneofDescriptor* oneof_descriptor) const; - - // Returns the field descriptor if the oneof is set. nullptr otherwise. - const FieldDescriptor* GetOneofFieldDescriptor( - const Message& message, const OneofDescriptor* oneof_descriptor) const; - - // Removes the last element of a repeated field. - // We don't provide a way to remove any element other than the last - // because it invites inefficient use, such as O(n^2) filtering loops - // that should have been O(n). If you want to remove an element other - // than the last, the best way to do it is to re-arrange the elements - // (using Swap()) so that the one you want removed is at the end, then - // call RemoveLast(). - void RemoveLast(Message* message, const FieldDescriptor* field) const; - // Removes the last element of a repeated message field, and returns the - // pointer to the caller. Caller takes ownership of the returned pointer. - PROTOBUF_NODISCARD Message* ReleaseLast(Message* message, - const FieldDescriptor* field) const; - - // Similar to ReleaseLast() without internal safety and ownershp checks. This - // method should only be used when the objects are on the same arena or paired - // with a call to `UnsafeArenaAddAllocatedMessage`. - Message* UnsafeArenaReleaseLast(Message* message, - const FieldDescriptor* field) const; - - // Swap the complete contents of two messages. - void Swap(Message* message1, Message* message2) const; - - // Swap fields listed in fields vector of two messages. - void SwapFields(Message* message1, Message* message2, - const std::vector<const FieldDescriptor*>& fields) const; - - // Swap two elements of a repeated field. - void SwapElements(Message* message, const FieldDescriptor* field, int index1, - int index2) const; - - // Swap without internal safety and ownership checks. This method should only - // be used when the objects are on the same arena. - void UnsafeArenaSwap(Message* lhs, Message* rhs) const; - - // SwapFields without internal safety and ownership checks. This method should - // only be used when the objects are on the same arena. - void UnsafeArenaSwapFields( - Message* lhs, Message* rhs, - const std::vector<const FieldDescriptor*>& fields) const; - - // List all fields of the message which are currently set, except for unknown - // fields, but including extension known to the parser (i.e. compiled in). - // Singular fields will only be listed if HasField(field) would return true - // and repeated fields will only be listed if FieldSize(field) would return - // non-zero. Fields (both normal fields and extension fields) will be listed - // ordered by field number. - // Use Reflection::GetUnknownFields() or message.unknown_fields() to also get - // access to fields/extensions unknown to the parser. - void ListFields(const Message& message, - std::vector<const FieldDescriptor*>* output) const; - - // Singular field getters ------------------------------------------ - // These get the value of a non-repeated field. They return the default - // value for fields that aren't set. - - int32_t GetInt32(const Message& message, const FieldDescriptor* field) const; - int64_t GetInt64(const Message& message, const FieldDescriptor* field) const; - uint32_t GetUInt32(const Message& message, - const FieldDescriptor* field) const; - uint64_t GetUInt64(const Message& message, - const FieldDescriptor* field) const; - float GetFloat(const Message& message, const FieldDescriptor* field) const; - double GetDouble(const Message& message, const FieldDescriptor* field) const; - bool GetBool(const Message& message, const FieldDescriptor* field) const; - std::string GetString(const Message& message, - const FieldDescriptor* field) const; - const EnumValueDescriptor* GetEnum(const Message& message, - const FieldDescriptor* field) const; - - // GetEnumValue() returns an enum field's value as an integer rather than - // an EnumValueDescriptor*. If the integer value does not correspond to a - // known value descriptor, a new value descriptor is created. (Such a value - // will only be present when the new unknown-enum-value semantics are enabled - // for a message.) - int GetEnumValue(const Message& message, const FieldDescriptor* field) const; - - // See MutableMessage() for the meaning of the "factory" parameter. - const Message& GetMessage(const Message& message, - const FieldDescriptor* field, - MessageFactory* factory = nullptr) const; - - // Get a string value without copying, if possible. - // - // GetString() necessarily returns a copy of the string. This can be - // inefficient when the std::string is already stored in a std::string object - // in the underlying message. GetStringReference() will return a reference to - // the underlying std::string in this case. Otherwise, it will copy the - // string into *scratch and return that. - // - // Note: It is perfectly reasonable and useful to write code like: - // str = reflection->GetStringReference(message, field, &str); - // This line would ensure that only one copy of the string is made - // regardless of the field's underlying representation. When initializing - // a newly-constructed string, though, it's just as fast and more - // readable to use code like: - // std::string str = reflection->GetString(message, field); - const std::string& GetStringReference(const Message& message, - const FieldDescriptor* field, - std::string* scratch) const; - - - // Singular field mutators ----------------------------------------- - // These mutate the value of a non-repeated field. - - void SetInt32(Message* message, const FieldDescriptor* field, - int32_t value) const; - void SetInt64(Message* message, const FieldDescriptor* field, - int64_t value) const; - void SetUInt32(Message* message, const FieldDescriptor* field, - uint32_t value) const; - void SetUInt64(Message* message, const FieldDescriptor* field, - uint64_t value) const; - void SetFloat(Message* message, const FieldDescriptor* field, - float value) const; - void SetDouble(Message* message, const FieldDescriptor* field, - double value) const; - void SetBool(Message* message, const FieldDescriptor* field, - bool value) const; - void SetString(Message* message, const FieldDescriptor* field, - std::string value) const; - void SetEnum(Message* message, const FieldDescriptor* field, - const EnumValueDescriptor* value) const; - // Set an enum field's value with an integer rather than EnumValueDescriptor. - // For proto3 this is just setting the enum field to the value specified, for - // proto2 it's more complicated. If value is a known enum value the field is - // set as usual. If the value is unknown then it is added to the unknown field - // set. Note this matches the behavior of parsing unknown enum values. - // If multiple calls with unknown values happen than they are all added to the - // unknown field set in order of the calls. - void SetEnumValue(Message* message, const FieldDescriptor* field, - int value) const; - - // Get a mutable pointer to a field with a message type. If a MessageFactory - // is provided, it will be used to construct instances of the sub-message; - // otherwise, the default factory is used. If the field is an extension that - // does not live in the same pool as the containing message's descriptor (e.g. - // it lives in an overlay pool), then a MessageFactory must be provided. - // If you have no idea what that meant, then you probably don't need to worry - // about it (don't provide a MessageFactory). WARNING: If the - // FieldDescriptor is for a compiled-in extension, then - // factory->GetPrototype(field->message_type()) MUST return an instance of - // the compiled-in class for this type, NOT DynamicMessage. - Message* MutableMessage(Message* message, const FieldDescriptor* field, - MessageFactory* factory = nullptr) const; - - // Replaces the message specified by 'field' with the already-allocated object - // sub_message, passing ownership to the message. If the field contained a - // message, that message is deleted. If sub_message is nullptr, the field is - // cleared. - void SetAllocatedMessage(Message* message, Message* sub_message, - const FieldDescriptor* field) const; - - // Similar to `SetAllocatedMessage`, but omits all internal safety and - // ownership checks. This method should only be used when the objects are on - // the same arena or paired with a call to `UnsafeArenaReleaseMessage`. - void UnsafeArenaSetAllocatedMessage(Message* message, Message* sub_message, - const FieldDescriptor* field) const; - - // Releases the message specified by 'field' and returns the pointer, - // ReleaseMessage() will return the message the message object if it exists. - // Otherwise, it may or may not return nullptr. In any case, if the return - // value is non-null, the caller takes ownership of the pointer. - // If the field existed (HasField() is true), then the returned pointer will - // be the same as the pointer returned by MutableMessage(). - // This function has the same effect as ClearField(). - PROTOBUF_NODISCARD Message* ReleaseMessage( - Message* message, const FieldDescriptor* field, - MessageFactory* factory = nullptr) const; - - // Similar to `ReleaseMessage`, but omits all internal safety and ownership - // checks. This method should only be used when the objects are on the same - // arena or paired with a call to `UnsafeArenaSetAllocatedMessage`. - Message* UnsafeArenaReleaseMessage(Message* message, - const FieldDescriptor* field, - MessageFactory* factory = nullptr) const; - - - // Repeated field getters ------------------------------------------ - // These get the value of one element of a repeated field. - - int32_t GetRepeatedInt32(const Message& message, const FieldDescriptor* field, - int index) const; - int64_t GetRepeatedInt64(const Message& message, const FieldDescriptor* field, - int index) const; - uint32_t GetRepeatedUInt32(const Message& message, - const FieldDescriptor* field, int index) const; - uint64_t GetRepeatedUInt64(const Message& message, - const FieldDescriptor* field, int index) const; - float GetRepeatedFloat(const Message& message, const FieldDescriptor* field, - int index) const; - double GetRepeatedDouble(const Message& message, const FieldDescriptor* field, - int index) const; - bool GetRepeatedBool(const Message& message, const FieldDescriptor* field, - int index) const; - std::string GetRepeatedString(const Message& message, - const FieldDescriptor* field, int index) const; - const EnumValueDescriptor* GetRepeatedEnum(const Message& message, - const FieldDescriptor* field, - int index) const; - // GetRepeatedEnumValue() returns an enum field's value as an integer rather - // than an EnumValueDescriptor*. If the integer value does not correspond to a - // known value descriptor, a new value descriptor is created. (Such a value - // will only be present when the new unknown-enum-value semantics are enabled - // for a message.) - int GetRepeatedEnumValue(const Message& message, const FieldDescriptor* field, - int index) const; - const Message& GetRepeatedMessage(const Message& message, - const FieldDescriptor* field, - int index) const; - - // See GetStringReference(), above. - const std::string& GetRepeatedStringReference(const Message& message, - const FieldDescriptor* field, - int index, - std::string* scratch) const; - - - // Repeated field mutators ----------------------------------------- - // These mutate the value of one element of a repeated field. - - void SetRepeatedInt32(Message* message, const FieldDescriptor* field, - int index, int32_t value) const; - void SetRepeatedInt64(Message* message, const FieldDescriptor* field, - int index, int64_t value) const; - void SetRepeatedUInt32(Message* message, const FieldDescriptor* field, - int index, uint32_t value) const; - void SetRepeatedUInt64(Message* message, const FieldDescriptor* field, - int index, uint64_t value) const; - void SetRepeatedFloat(Message* message, const FieldDescriptor* field, - int index, float value) const; - void SetRepeatedDouble(Message* message, const FieldDescriptor* field, - int index, double value) const; - void SetRepeatedBool(Message* message, const FieldDescriptor* field, - int index, bool value) const; - void SetRepeatedString(Message* message, const FieldDescriptor* field, - int index, std::string value) const; - void SetRepeatedEnum(Message* message, const FieldDescriptor* field, - int index, const EnumValueDescriptor* value) const; - // Set an enum field's value with an integer rather than EnumValueDescriptor. - // For proto3 this is just setting the enum field to the value specified, for - // proto2 it's more complicated. If value is a known enum value the field is - // set as usual. If the value is unknown then it is added to the unknown field - // set. Note this matches the behavior of parsing unknown enum values. - // If multiple calls with unknown values happen than they are all added to the - // unknown field set in order of the calls. - void SetRepeatedEnumValue(Message* message, const FieldDescriptor* field, - int index, int value) const; - // Get a mutable pointer to an element of a repeated field with a message - // type. - Message* MutableRepeatedMessage(Message* message, - const FieldDescriptor* field, - int index) const; - - - // Repeated field adders ------------------------------------------- - // These add an element to a repeated field. - - void AddInt32(Message* message, const FieldDescriptor* field, - int32_t value) const; - void AddInt64(Message* message, const FieldDescriptor* field, - int64_t value) const; - void AddUInt32(Message* message, const FieldDescriptor* field, - uint32_t value) const; - void AddUInt64(Message* message, const FieldDescriptor* field, - uint64_t value) const; - void AddFloat(Message* message, const FieldDescriptor* field, - float value) const; - void AddDouble(Message* message, const FieldDescriptor* field, - double value) const; - void AddBool(Message* message, const FieldDescriptor* field, - bool value) const; - void AddString(Message* message, const FieldDescriptor* field, - std::string value) const; - void AddEnum(Message* message, const FieldDescriptor* field, - const EnumValueDescriptor* value) const; - // Add an integer value to a repeated enum field rather than - // EnumValueDescriptor. For proto3 this is just setting the enum field to the - // value specified, for proto2 it's more complicated. If value is a known enum - // value the field is set as usual. If the value is unknown then it is added - // to the unknown field set. Note this matches the behavior of parsing unknown - // enum values. If multiple calls with unknown values happen than they are all - // added to the unknown field set in order of the calls. - void AddEnumValue(Message* message, const FieldDescriptor* field, - int value) const; - // See MutableMessage() for comments on the "factory" parameter. - Message* AddMessage(Message* message, const FieldDescriptor* field, - MessageFactory* factory = nullptr) const; - - // Appends an already-allocated object 'new_entry' to the repeated field - // specified by 'field' passing ownership to the message. - void AddAllocatedMessage(Message* message, const FieldDescriptor* field, - Message* new_entry) const; - - // Similar to AddAllocatedMessage() without internal safety and ownership - // checks. This method should only be used when the objects are on the same - // arena or paired with a call to `UnsafeArenaReleaseLast`. - void UnsafeArenaAddAllocatedMessage(Message* message, - const FieldDescriptor* field, - Message* new_entry) const; - - - // Get a RepeatedFieldRef object that can be used to read the underlying - // repeated field. The type parameter T must be set according to the - // field's cpp type. The following table shows the mapping from cpp type - // to acceptable T. - // - // field->cpp_type() T - // CPPTYPE_INT32 int32_t - // CPPTYPE_UINT32 uint32_t - // CPPTYPE_INT64 int64_t - // CPPTYPE_UINT64 uint64_t - // CPPTYPE_DOUBLE double - // CPPTYPE_FLOAT float - // CPPTYPE_BOOL bool - // CPPTYPE_ENUM generated enum type or int32_t - // CPPTYPE_STRING std::string - // CPPTYPE_MESSAGE generated message type or google::protobuf::Message - // - // A RepeatedFieldRef object can be copied and the resulted object will point - // to the same repeated field in the same message. The object can be used as - // long as the message is not destroyed. - // - // Note that to use this method users need to include the header file - // "reflection.h" (which defines the RepeatedFieldRef class templates). - template <typename T> - RepeatedFieldRef<T> GetRepeatedFieldRef(const Message& message, - const FieldDescriptor* field) const; - - // Like GetRepeatedFieldRef() but return an object that can also be used - // manipulate the underlying repeated field. - template <typename T> - MutableRepeatedFieldRef<T> GetMutableRepeatedFieldRef( - Message* message, const FieldDescriptor* field) const; - - // DEPRECATED. Please use Get(Mutable)RepeatedFieldRef() for repeated field - // access. The following repeated field accessors will be removed in the - // future. - // - // Repeated field accessors ------------------------------------------------- - // The methods above, e.g. GetRepeatedInt32(msg, fd, index), provide singular - // access to the data in a RepeatedField. The methods below provide aggregate - // access by exposing the RepeatedField object itself with the Message. - // Applying these templates to inappropriate types will lead to an undefined - // reference at link time (e.g. GetRepeatedField<***double>), or possibly a - // template matching error at compile time (e.g. GetRepeatedPtrField<File>). - // - // Usage example: my_doubs = refl->GetRepeatedField<double>(msg, fd); - - // DEPRECATED. Please use GetRepeatedFieldRef(). - // - // for T = Cord and all protobuf scalar types except enums. - template <typename T> - PROTOBUF_DEPRECATED_MSG("Please use GetRepeatedFieldRef() instead") - const RepeatedField<T>& GetRepeatedField(const Message& msg, - const FieldDescriptor* d) const { - return GetRepeatedFieldInternal<T>(msg, d); - } - - // DEPRECATED. Please use GetMutableRepeatedFieldRef(). - // - // for T = Cord and all protobuf scalar types except enums. - template <typename T> - PROTOBUF_DEPRECATED_MSG("Please use GetMutableRepeatedFieldRef() instead") - RepeatedField<T>* MutableRepeatedField(Message* msg, - const FieldDescriptor* d) const { - return MutableRepeatedFieldInternal<T>(msg, d); - } - - // DEPRECATED. Please use GetRepeatedFieldRef(). - // - // for T = std::string, google::protobuf::internal::StringPieceField - // google::protobuf::Message & descendants. - template <typename T> - PROTOBUF_DEPRECATED_MSG("Please use GetRepeatedFieldRef() instead") - const RepeatedPtrField<T>& GetRepeatedPtrField( - const Message& msg, const FieldDescriptor* d) const { - return GetRepeatedPtrFieldInternal<T>(msg, d); - } - - // DEPRECATED. Please use GetMutableRepeatedFieldRef(). - // - // for T = std::string, google::protobuf::internal::StringPieceField - // google::protobuf::Message & descendants. - template <typename T> - PROTOBUF_DEPRECATED_MSG("Please use GetMutableRepeatedFieldRef() instead") - RepeatedPtrField<T>* MutableRepeatedPtrField(Message* msg, - const FieldDescriptor* d) const { - return MutableRepeatedPtrFieldInternal<T>(msg, d); - } - - // Extensions ---------------------------------------------------------------- - - // Try to find an extension of this message type by fully-qualified field - // name. Returns nullptr if no extension is known for this name or number. - const FieldDescriptor* FindKnownExtensionByName( - const std::string& name) const; - - // Try to find an extension of this message type by field number. - // Returns nullptr if no extension is known for this name or number. - const FieldDescriptor* FindKnownExtensionByNumber(int number) const; - - // Feature Flags ------------------------------------------------------------- - - // Does this message support storing arbitrary integer values in enum fields? - // If |true|, GetEnumValue/SetEnumValue and associated repeated-field versions - // take arbitrary integer values, and the legacy GetEnum() getter will - // dynamically create an EnumValueDescriptor for any integer value without - // one. If |false|, setting an unknown enum value via the integer-based - // setters results in undefined behavior (in practice, GOOGLE_DCHECK-fails). - // - // Generic code that uses reflection to handle messages with enum fields - // should check this flag before using the integer-based setter, and either - // downgrade to a compatible value or use the UnknownFieldSet if not. For - // example: - // - // int new_value = GetValueFromApplicationLogic(); - // if (reflection->SupportsUnknownEnumValues()) { - // reflection->SetEnumValue(message, field, new_value); - // } else { - // if (field_descriptor->enum_type()-> - // FindValueByNumber(new_value) != nullptr) { - // reflection->SetEnumValue(message, field, new_value); - // } else if (emit_unknown_enum_values) { - // reflection->MutableUnknownFields(message)->AddVarint( - // field->number(), new_value); - // } else { - // // convert value to a compatible/default value. - // new_value = CompatibleDowngrade(new_value); - // reflection->SetEnumValue(message, field, new_value); - // } - // } - bool SupportsUnknownEnumValues() const; - - // Returns the MessageFactory associated with this message. This can be - // useful for determining if a message is a generated message or not, for - // example: - // if (message->GetReflection()->GetMessageFactory() == - // google::protobuf::MessageFactory::generated_factory()) { - // // This is a generated message. - // } - // It can also be used to create more messages of this type, though - // Message::New() is an easier way to accomplish this. - MessageFactory* GetMessageFactory() const; - - private: - template <typename T> - const RepeatedField<T>& GetRepeatedFieldInternal( - const Message& message, const FieldDescriptor* field) const; - template <typename T> - RepeatedField<T>* MutableRepeatedFieldInternal( - Message* message, const FieldDescriptor* field) const; - template <typename T> - const RepeatedPtrField<T>& GetRepeatedPtrFieldInternal( - const Message& message, const FieldDescriptor* field) const; - template <typename T> - RepeatedPtrField<T>* MutableRepeatedPtrFieldInternal( - Message* message, const FieldDescriptor* field) const; - // Obtain a pointer to a Repeated Field Structure and do some type checking: - // on field->cpp_type(), - // on field->field_option().ctype() (if ctype >= 0) - // of field->message_type() (if message_type != nullptr). - // We use 2 routine rather than 4 (const vs mutable) x (scalar vs pointer). - void* MutableRawRepeatedField(Message* message, const FieldDescriptor* field, - FieldDescriptor::CppType, int ctype, - const Descriptor* message_type) const; - - const void* GetRawRepeatedField(const Message& message, - const FieldDescriptor* field, - FieldDescriptor::CppType cpptype, int ctype, - const Descriptor* message_type) const; - - // The following methods are used to implement (Mutable)RepeatedFieldRef. - // A Ref object will store a raw pointer to the repeated field data (obtained - // from RepeatedFieldData()) and a pointer to a Accessor (obtained from - // RepeatedFieldAccessor) which will be used to access the raw data. - - // Returns a raw pointer to the repeated field - // - // "cpp_type" and "message_type" are deduced from the type parameter T passed - // to Get(Mutable)RepeatedFieldRef. If T is a generated message type, - // "message_type" should be set to its descriptor. Otherwise "message_type" - // should be set to nullptr. Implementations of this method should check - // whether "cpp_type"/"message_type" is consistent with the actual type of the - // field. We use 1 routine rather than 2 (const vs mutable) because it is - // protected and it doesn't change the message. - void* RepeatedFieldData(Message* message, const FieldDescriptor* field, - FieldDescriptor::CppType cpp_type, - const Descriptor* message_type) const; - - // The returned pointer should point to a singleton instance which implements - // the RepeatedFieldAccessor interface. - const internal::RepeatedFieldAccessor* RepeatedFieldAccessor( - const FieldDescriptor* field) const; - - // Lists all fields of the message which are currently set, except for unknown - // fields and stripped fields. See ListFields for details. - void ListFieldsOmitStripped( - const Message& message, - std::vector<const FieldDescriptor*>* output) const; - - bool IsMessageStripped(const Descriptor* descriptor) const { - return schema_.IsMessageStripped(descriptor); - } - - friend class TextFormat; - - void ListFieldsMayFailOnStripped( - const Message& message, bool should_fail, - std::vector<const FieldDescriptor*>* output) const; - - // Returns true if the message field is backed by a LazyField. - // - // A message field may be backed by a LazyField without the user annotation - // ([lazy = true]). While the user-annotated LazyField is lazily verified on - // first touch (i.e. failure on access rather than parsing if the LazyField is - // not initialized), the inferred LazyField is eagerly verified to avoid lazy - // parsing error at the cost of lower efficiency. When reflecting a message - // field, use this API instead of checking field->options().lazy(). - bool IsLazyField(const FieldDescriptor* field) const { - return IsLazilyVerifiedLazyField(field) || - IsEagerlyVerifiedLazyField(field); - } - - // Returns true if the field is lazy extension. It is meant to allow python - // reparse lazy field until b/157559327 is fixed. - bool IsLazyExtension(const Message& message, - const FieldDescriptor* field) const; - - bool IsLazilyVerifiedLazyField(const FieldDescriptor* field) const; - bool IsEagerlyVerifiedLazyField(const FieldDescriptor* field) const; - - friend class FastReflectionMessageMutator; - friend bool internal::IsDescendant(Message& root, const Message& message); - - const Descriptor* const descriptor_; - const internal::ReflectionSchema schema_; - const DescriptorPool* const descriptor_pool_; - MessageFactory* const message_factory_; - - // Last non weak field index. This is an optimization when most weak fields - // are at the end of the containing message. If a message proto doesn't - // contain weak fields, then this field equals descriptor_->field_count(). - int last_non_weak_field_index_; - - template <typename T, typename Enable> - friend class RepeatedFieldRef; - template <typename T, typename Enable> - friend class MutableRepeatedFieldRef; - friend class ::PROTOBUF_NAMESPACE_ID::MessageLayoutInspector; - friend class ::PROTOBUF_NAMESPACE_ID::AssignDescriptorsHelper; - friend class DynamicMessageFactory; - friend class GeneratedMessageReflectionTestHelper; - friend class python::MapReflectionFriend; - friend class python::MessageReflectionFriend; - friend class util::MessageDifferencer; -#define GOOGLE_PROTOBUF_HAS_CEL_MAP_REFLECTION_FRIEND - friend class expr::CelMapReflectionFriend; - friend class internal::MapFieldReflectionTest; - friend class internal::MapKeySorter; - friend class internal::WireFormat; - friend class internal::ReflectionOps; - friend class internal::SwapFieldHelper; - // Needed for implementing text format for map. - friend class internal::MapFieldPrinterHelper; - - Reflection(const Descriptor* descriptor, - const internal::ReflectionSchema& schema, - const DescriptorPool* pool, MessageFactory* factory); - - // Special version for specialized implementations of string. We can't - // call MutableRawRepeatedField directly here because we don't have access to - // FieldOptions::* which are defined in descriptor.pb.h. Including that - // file here is not possible because it would cause a circular include cycle. - // We use 1 routine rather than 2 (const vs mutable) because it is private - // and mutable a repeated string field doesn't change the message. - void* MutableRawRepeatedString(Message* message, const FieldDescriptor* field, - bool is_string) const; - - friend class MapReflectionTester; - // Returns true if key is in map. Returns false if key is not in map field. - bool ContainsMapKey(const Message& message, const FieldDescriptor* field, - const MapKey& key) const; - - // If key is in map field: Saves the value pointer to val and returns - // false. If key in not in map field: Insert the key into map, saves - // value pointer to val and returns true. Users are able to modify the - // map value by MapValueRef. - bool InsertOrLookupMapValue(Message* message, const FieldDescriptor* field, - const MapKey& key, MapValueRef* val) const; - - // If key is in map field: Saves the value pointer to val and returns true. - // Returns false if key is not in map field. Users are NOT able to modify - // the value by MapValueConstRef. - bool LookupMapValue(const Message& message, const FieldDescriptor* field, - const MapKey& key, MapValueConstRef* val) const; - bool LookupMapValue(const Message&, const FieldDescriptor*, const MapKey&, - MapValueRef*) const = delete; - - // Delete and returns true if key is in the map field. Returns false - // otherwise. - bool DeleteMapValue(Message* message, const FieldDescriptor* field, - const MapKey& key) const; - - // Returns a MapIterator referring to the first element in the map field. - // If the map field is empty, this function returns the same as - // reflection::MapEnd. Mutation to the field may invalidate the iterator. - MapIterator MapBegin(Message* message, const FieldDescriptor* field) const; - - // Returns a MapIterator referring to the theoretical element that would - // follow the last element in the map field. It does not point to any - // real element. Mutation to the field may invalidate the iterator. - MapIterator MapEnd(Message* message, const FieldDescriptor* field) const; - - // Get the number of <key, value> pair of a map field. The result may be - // different from FieldSize which can have duplicate keys. - int MapSize(const Message& message, const FieldDescriptor* field) const; - - // Help method for MapIterator. - friend class MapIterator; - friend class WireFormatForMapFieldTest; - internal::MapFieldBase* MutableMapData(Message* message, - const FieldDescriptor* field) const; - - const internal::MapFieldBase* GetMapData(const Message& message, - const FieldDescriptor* field) const; - - template <class T> - const T& GetRawNonOneof(const Message& message, - const FieldDescriptor* field) const; - template <class T> - T* MutableRawNonOneof(Message* message, const FieldDescriptor* field) const; - - template <typename Type> - const Type& GetRaw(const Message& message, - const FieldDescriptor* field) const; - template <typename Type> - inline Type* MutableRaw(Message* message, const FieldDescriptor* field) const; - template <typename Type> - const Type& DefaultRaw(const FieldDescriptor* field) const; - - const Message* GetDefaultMessageInstance(const FieldDescriptor* field) const; - - inline const uint32_t* GetHasBits(const Message& message) const; - inline uint32_t* MutableHasBits(Message* message) const; - inline uint32_t GetOneofCase(const Message& message, - const OneofDescriptor* oneof_descriptor) const; - inline uint32_t* MutableOneofCase( - Message* message, const OneofDescriptor* oneof_descriptor) const; - inline bool HasExtensionSet(const Message& /* message */) const { - return schema_.HasExtensionSet(); - } - const internal::ExtensionSet& GetExtensionSet(const Message& message) const; - internal::ExtensionSet* MutableExtensionSet(Message* message) const; - - const internal::InternalMetadata& GetInternalMetadata( - const Message& message) const; - - internal::InternalMetadata* MutableInternalMetadata(Message* message) const; - - inline bool IsInlined(const FieldDescriptor* field) const; - - inline bool HasBit(const Message& message, - const FieldDescriptor* field) const; - inline void SetBit(Message* message, const FieldDescriptor* field) const; - inline void ClearBit(Message* message, const FieldDescriptor* field) const; - inline void SwapBit(Message* message1, Message* message2, - const FieldDescriptor* field) const; - - inline const uint32_t* GetInlinedStringDonatedArray( - const Message& message) const; - inline uint32_t* MutableInlinedStringDonatedArray(Message* message) const; - inline bool IsInlinedStringDonated(const Message& message, - const FieldDescriptor* field) const; - inline void SwapInlinedStringDonated(Message* lhs, Message* rhs, - const FieldDescriptor* field) const; - - // Shallow-swap fields listed in fields vector of two messages. It is the - // caller's responsibility to make sure shallow swap is safe. - void UnsafeShallowSwapFields( - Message* message1, Message* message2, - const std::vector<const FieldDescriptor*>& fields) const; - - // This function only swaps the field. Should swap corresponding has_bit - // before or after using this function. - void SwapField(Message* message1, Message* message2, - const FieldDescriptor* field) const; - - // Unsafe but shallow version of SwapField. - void UnsafeShallowSwapField(Message* message1, Message* message2, - const FieldDescriptor* field) const; - - template <bool unsafe_shallow_swap> - void SwapFieldsImpl(Message* message1, Message* message2, - const std::vector<const FieldDescriptor*>& fields) const; - - template <bool unsafe_shallow_swap> - void SwapOneofField(Message* lhs, Message* rhs, - const OneofDescriptor* oneof_descriptor) const; - - inline bool HasOneofField(const Message& message, - const FieldDescriptor* field) const; - inline void SetOneofCase(Message* message, - const FieldDescriptor* field) const; - inline void ClearOneofField(Message* message, - const FieldDescriptor* field) const; - - template <typename Type> - inline const Type& GetField(const Message& message, - const FieldDescriptor* field) const; - template <typename Type> - inline void SetField(Message* message, const FieldDescriptor* field, - const Type& value) const; - template <typename Type> - inline Type* MutableField(Message* message, - const FieldDescriptor* field) const; - template <typename Type> - inline const Type& GetRepeatedField(const Message& message, - const FieldDescriptor* field, - int index) const; - template <typename Type> - inline const Type& GetRepeatedPtrField(const Message& message, - const FieldDescriptor* field, - int index) const; - template <typename Type> - inline void SetRepeatedField(Message* message, const FieldDescriptor* field, - int index, Type value) const; - template <typename Type> - inline Type* MutableRepeatedField(Message* message, - const FieldDescriptor* field, - int index) const; - template <typename Type> - inline void AddField(Message* message, const FieldDescriptor* field, - const Type& value) const; - template <typename Type> - inline Type* AddField(Message* message, const FieldDescriptor* field) const; - - int GetExtensionNumberOrDie(const Descriptor* type) const; - - // Internal versions of EnumValue API perform no checking. Called after checks - // by public methods. - void SetEnumValueInternal(Message* message, const FieldDescriptor* field, - int value) const; - void SetRepeatedEnumValueInternal(Message* message, - const FieldDescriptor* field, int index, - int value) const; - void AddEnumValueInternal(Message* message, const FieldDescriptor* field, - int value) const; - - friend inline // inline so nobody can call this function. - void - RegisterAllTypesInternal(const Metadata* file_level_metadata, int size); - friend inline const char* ParseLenDelim(int field_number, - const FieldDescriptor* field, - Message* msg, - const Reflection* reflection, - const char* ptr, - internal::ParseContext* ctx); - friend inline const char* ParsePackedField(const FieldDescriptor* field, - Message* msg, - const Reflection* reflection, - const char* ptr, - internal::ParseContext* ctx); - - GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(Reflection); -}; - -// Abstract interface for a factory for message objects. -class PROTOBUF_EXPORT MessageFactory { - public: - inline MessageFactory() {} - virtual ~MessageFactory(); - - // Given a Descriptor, gets or constructs the default (prototype) Message - // of that type. You can then call that message's New() method to construct - // a mutable message of that type. - // - // Calling this method twice with the same Descriptor returns the same - // object. The returned object remains property of the factory. Also, any - // objects created by calling the prototype's New() method share some data - // with the prototype, so these must be destroyed before the MessageFactory - // is destroyed. - // - // The given descriptor must outlive the returned message, and hence must - // outlive the MessageFactory. - // - // Some implementations do not support all types. GetPrototype() will - // return nullptr if the descriptor passed in is not supported. - // - // This method may or may not be thread-safe depending on the implementation. - // Each implementation should document its own degree thread-safety. - virtual const Message* GetPrototype(const Descriptor* type) = 0; - - // Gets a MessageFactory which supports all generated, compiled-in messages. - // In other words, for any compiled-in type FooMessage, the following is true: - // MessageFactory::generated_factory()->GetPrototype( - // FooMessage::descriptor()) == FooMessage::default_instance() - // This factory supports all types which are found in - // DescriptorPool::generated_pool(). If given a descriptor from any other - // pool, GetPrototype() will return nullptr. (You can also check if a - // descriptor is for a generated message by checking if - // descriptor->file()->pool() == DescriptorPool::generated_pool().) - // - // This factory is 100% thread-safe; calling GetPrototype() does not modify - // any shared data. - // - // This factory is a singleton. The caller must not delete the object. - static MessageFactory* generated_factory(); - - // For internal use only: Registers a .proto file at static initialization - // time, to be placed in generated_factory. The first time GetPrototype() - // is called with a descriptor from this file, |register_messages| will be - // called, with the file name as the parameter. It must call - // InternalRegisterGeneratedMessage() (below) to register each message type - // in the file. This strange mechanism is necessary because descriptors are - // built lazily, so we can't register types by their descriptor until we - // know that the descriptor exists. |filename| must be a permanent string. - static void InternalRegisterGeneratedFile( - const google::protobuf::internal::DescriptorTable* table); - - // For internal use only: Registers a message type. Called only by the - // functions which are registered with InternalRegisterGeneratedFile(), - // above. - static void InternalRegisterGeneratedMessage(const Descriptor* descriptor, - const Message* prototype); - - - private: - GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(MessageFactory); -}; - -#define DECLARE_GET_REPEATED_FIELD(TYPE) \ - template <> \ - PROTOBUF_EXPORT const RepeatedField<TYPE>& \ - Reflection::GetRepeatedFieldInternal<TYPE>( \ - const Message& message, const FieldDescriptor* field) const; \ - \ - template <> \ - PROTOBUF_EXPORT RepeatedField<TYPE>* \ - Reflection::MutableRepeatedFieldInternal<TYPE>( \ - Message * message, const FieldDescriptor* field) const; - -DECLARE_GET_REPEATED_FIELD(int32_t) -DECLARE_GET_REPEATED_FIELD(int64_t) -DECLARE_GET_REPEATED_FIELD(uint32_t) -DECLARE_GET_REPEATED_FIELD(uint64_t) -DECLARE_GET_REPEATED_FIELD(float) -DECLARE_GET_REPEATED_FIELD(double) -DECLARE_GET_REPEATED_FIELD(bool) - -#undef DECLARE_GET_REPEATED_FIELD - -// Tries to downcast this message to a generated message type. Returns nullptr -// if this class is not an instance of T. This works even if RTTI is disabled. -// -// This also has the effect of creating a strong reference to T that will -// prevent the linker from stripping it out at link time. This can be important -// if you are using a DynamicMessageFactory that delegates to the generated -// factory. -template <typename T> -const T* DynamicCastToGenerated(const Message* from) { - // Compile-time assert that T is a generated type that has a - // default_instance() accessor, but avoid actually calling it. - const T& (*get_default_instance)() = &T::default_instance; - (void)get_default_instance; - - // Compile-time assert that T is a subclass of google::protobuf::Message. - const Message* unused = static_cast<T*>(nullptr); - (void)unused; - -#if PROTOBUF_RTTI - return dynamic_cast<const T*>(from); -#else - bool ok = from != nullptr && - T::default_instance().GetReflection() == from->GetReflection(); - return ok ? down_cast<const T*>(from) : nullptr; -#endif -} - -template <typename T> -T* DynamicCastToGenerated(Message* from) { - const Message* message_const = from; - return const_cast<T*>(DynamicCastToGenerated<T>(message_const)); -} - -// Call this function to ensure that this message's reflection is linked into -// the binary: -// -// google::protobuf::LinkMessageReflection<pkg::FooMessage>(); -// -// This will ensure that the following lookup will succeed: -// -// DescriptorPool::generated_pool()->FindMessageTypeByName("pkg.FooMessage"); -// -// As a side-effect, it will also guarantee that anything else from the same -// .proto file will also be available for lookup in the generated pool. -// -// This function does not actually register the message, so it does not need -// to be called before the lookup. However it does need to occur in a function -// that cannot be stripped from the binary (ie. it must be reachable from main). -// -// Best practice is to call this function as close as possible to where the -// reflection is actually needed. This function is very cheap to call, so you -// should not need to worry about its runtime overhead except in the tightest -// of loops (on x86-64 it compiles into two "mov" instructions). -template <typename T> -void LinkMessageReflection() { - internal::StrongReference(T::default_instance); -} - -// ============================================================================= -// Implementation details for {Get,Mutable}RawRepeatedPtrField. We provide -// specializations for <std::string>, <StringPieceField> and <Message> and -// handle everything else with the default template which will match any type -// having a method with signature "static const google::protobuf::Descriptor* -// descriptor()". Such a type presumably is a descendant of google::protobuf::Message. - -template <> -inline const RepeatedPtrField<std::string>& -Reflection::GetRepeatedPtrFieldInternal<std::string>( - const Message& message, const FieldDescriptor* field) const { - return *static_cast<RepeatedPtrField<std::string>*>( - MutableRawRepeatedString(const_cast<Message*>(&message), field, true)); -} - -template <> -inline RepeatedPtrField<std::string>* -Reflection::MutableRepeatedPtrFieldInternal<std::string>( - Message* message, const FieldDescriptor* field) const { - return static_cast<RepeatedPtrField<std::string>*>( - MutableRawRepeatedString(message, field, true)); -} - - -// ----- - -template <> -inline const RepeatedPtrField<Message>& Reflection::GetRepeatedPtrFieldInternal( - const Message& message, const FieldDescriptor* field) const { - return *static_cast<const RepeatedPtrField<Message>*>(GetRawRepeatedField( - message, field, FieldDescriptor::CPPTYPE_MESSAGE, -1, nullptr)); -} - -template <> -inline RepeatedPtrField<Message>* Reflection::MutableRepeatedPtrFieldInternal( - Message* message, const FieldDescriptor* field) const { - return static_cast<RepeatedPtrField<Message>*>(MutableRawRepeatedField( - message, field, FieldDescriptor::CPPTYPE_MESSAGE, -1, nullptr)); -} - -template <typename PB> -inline const RepeatedPtrField<PB>& Reflection::GetRepeatedPtrFieldInternal( - const Message& message, const FieldDescriptor* field) const { - return *static_cast<const RepeatedPtrField<PB>*>( - GetRawRepeatedField(message, field, FieldDescriptor::CPPTYPE_MESSAGE, -1, - PB::default_instance().GetDescriptor())); -} - -template <typename PB> -inline RepeatedPtrField<PB>* Reflection::MutableRepeatedPtrFieldInternal( - Message* message, const FieldDescriptor* field) const { - return static_cast<RepeatedPtrField<PB>*>( - MutableRawRepeatedField(message, field, FieldDescriptor::CPPTYPE_MESSAGE, - -1, PB::default_instance().GetDescriptor())); -} - -template <typename Type> -const Type& Reflection::DefaultRaw(const FieldDescriptor* field) const { - return *reinterpret_cast<const Type*>(schema_.GetFieldDefault(field)); -} - -uint32_t Reflection::GetOneofCase( - const Message& message, const OneofDescriptor* oneof_descriptor) const { - GOOGLE_DCHECK(!oneof_descriptor->is_synthetic()); - return internal::GetConstRefAtOffset<uint32_t>( - message, schema_.GetOneofCaseOffset(oneof_descriptor)); -} - -bool Reflection::HasOneofField(const Message& message, - const FieldDescriptor* field) const { - return (GetOneofCase(message, field->containing_oneof()) == - static_cast<uint32_t>(field->number())); -} - -template <typename Type> -const Type& Reflection::GetRaw(const Message& message, - const FieldDescriptor* field) const { - GOOGLE_DCHECK(!schema_.InRealOneof(field) || HasOneofField(message, field)) - << "Field = " << field->full_name(); - return internal::GetConstRefAtOffset<Type>(message, - schema_.GetFieldOffset(field)); -} -} // namespace protobuf -} // namespace google - -#include <google/protobuf/port_undef.inc> - -#endif // GOOGLE_PROTOBUF_MESSAGE_H__ diff --git a/include/google/protobuf/message_lite.h b/include/google/protobuf/message_lite.h deleted file mode 100644 index 950ae1a126..0000000000 --- a/include/google/protobuf/message_lite.h +++ /dev/null @@ -1,591 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// 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 -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -// Authors: wink@google.com (Wink Saville), -// kenton@google.com (Kenton Varda) -// Based on original Protocol Buffers design by -// Sanjay Ghemawat, Jeff Dean, and others. -// -// Defines MessageLite, the abstract interface implemented by all (lite -// and non-lite) protocol message objects. - -#ifndef GOOGLE_PROTOBUF_MESSAGE_LITE_H__ -#define GOOGLE_PROTOBUF_MESSAGE_LITE_H__ - - -#include <climits> -#include <string> - -#include <google/protobuf/stubs/common.h> -#include <google/protobuf/stubs/logging.h> -#include <google/protobuf/io/coded_stream.h> -#include <google/protobuf/arena.h> -#include <google/protobuf/stubs/once.h> -#include <google/protobuf/port.h> -#include <google/protobuf/stubs/strutil.h> -#include <google/protobuf/explicitly_constructed.h> -#include <google/protobuf/metadata_lite.h> -#include <google/protobuf/stubs/hash.h> // TODO(b/211442718): cleanup - -// clang-format off -#include <google/protobuf/port_def.inc> -// clang-format on - -#ifdef SWIG -#error "You cannot SWIG proto headers" -#endif - -namespace google { -namespace protobuf { - -template <typename T> -class RepeatedPtrField; - -class FastReflectionMessageMutator; -class FastReflectionStringSetter; -class Reflection; - -namespace io { - -class CodedInputStream; -class CodedOutputStream; -class ZeroCopyInputStream; -class ZeroCopyOutputStream; - -} // namespace io -namespace internal { - -class SwapFieldHelper; - -// See parse_context.h for explanation -class ParseContext; - -class ExtensionSet; -class LazyField; -class RepeatedPtrFieldBase; -class TcParser; -class WireFormatLite; -class WeakFieldMap; - -template <typename Type> -class GenericTypeHandler; // defined in repeated_field.h - -// We compute sizes as size_t but cache them as int. This function converts a -// computed size to a cached size. Since we don't proceed with serialization -// if the total size was > INT_MAX, it is not important what this function -// returns for inputs > INT_MAX. However this case should not error or -// GOOGLE_CHECK-fail, because the full size_t resolution is still returned from -// ByteSizeLong() and checked against INT_MAX; we can catch the overflow -// there. -inline int ToCachedSize(size_t size) { return static_cast<int>(size); } - -// We mainly calculate sizes in terms of size_t, but some functions that -// compute sizes return "int". These int sizes are expected to always be -// positive. This function is more efficient than casting an int to size_t -// directly on 64-bit platforms because it avoids making the compiler emit a -// sign extending instruction, which we don't want and don't want to pay for. -inline size_t FromIntSize(int size) { - // Convert to unsigned before widening so sign extension is not necessary. - return static_cast<unsigned int>(size); -} - -// For cases where a legacy function returns an integer size. We GOOGLE_DCHECK() -// that the conversion will fit within an integer; if this is false then we -// are losing information. -inline int ToIntSize(size_t size) { - GOOGLE_DCHECK_LE(size, static_cast<size_t>(INT_MAX)); - return static_cast<int>(size); -} - -// Default empty string object. Don't use this directly. Instead, call -// GetEmptyString() to get the reference. This empty string is aligned with a -// minimum alignment of 8 bytes to match the requirement of ArenaStringPtr. -PROTOBUF_EXPORT extern ExplicitlyConstructedArenaString - fixed_address_empty_string; - - -PROTOBUF_EXPORT constexpr const std::string& GetEmptyStringAlreadyInited() { - return fixed_address_empty_string.get(); -} - -PROTOBUF_EXPORT size_t StringSpaceUsedExcludingSelfLong(const std::string& str); - -} // namespace internal - -// Interface to light weight protocol messages. -// -// This interface is implemented by all protocol message objects. Non-lite -// messages additionally implement the Message interface, which is a -// subclass of MessageLite. Use MessageLite instead when you only need -// the subset of features which it supports -- namely, nothing that uses -// descriptors or reflection. You can instruct the protocol compiler -// to generate classes which implement only MessageLite, not the full -// Message interface, by adding the following line to the .proto file: -// -// option optimize_for = LITE_RUNTIME; -// -// This is particularly useful on resource-constrained systems where -// the full protocol buffers runtime library is too big. -// -// Note that on non-constrained systems (e.g. servers) when you need -// to link in lots of protocol definitions, a better way to reduce -// total code footprint is to use optimize_for = CODE_SIZE. This -// will make the generated code smaller while still supporting all the -// same features (at the expense of speed). optimize_for = LITE_RUNTIME -// is best when you only have a small number of message types linked -// into your binary, in which case the size of the protocol buffers -// runtime itself is the biggest problem. -// -// Users must not derive from this class. Only the protocol compiler and -// the internal library are allowed to create subclasses. -class PROTOBUF_EXPORT MessageLite { - public: - constexpr MessageLite() {} - virtual ~MessageLite() = default; - - // Basic Operations ------------------------------------------------ - - // Get the name of this message type, e.g. "foo.bar.BazProto". - virtual std::string GetTypeName() const = 0; - - // Construct a new instance of the same type. Ownership is passed to the - // caller. - MessageLite* New() const { return New(nullptr); } - - // Construct a new instance on the arena. Ownership is passed to the caller - // if arena is a nullptr. - virtual MessageLite* New(Arena* arena) const = 0; - - // Returns user-owned arena; nullptr if it's message owned. - Arena* GetArena() const { return _internal_metadata_.user_arena(); } - - // Clear all fields of the message and set them to their default values. - // Clear() assumes that any memory allocated to hold parts of the message - // will likely be needed again, so the memory used may not be freed. - // To ensure that all memory used by a Message is freed, you must delete it. - virtual void Clear() = 0; - - // Quickly check if all required fields have values set. - virtual bool IsInitialized() const = 0; - - // This is not implemented for Lite messages -- it just returns "(cannot - // determine missing fields for lite message)". However, it is implemented - // for full messages. See message.h. - virtual std::string InitializationErrorString() const; - - // If |other| is the exact same class as this, calls MergeFrom(). Otherwise, - // results are undefined (probably crash). - virtual void CheckTypeAndMergeFrom(const MessageLite& other) = 0; - - // These methods return a human-readable summary of the message. Note that - // since the MessageLite interface does not support reflection, there is very - // little information that these methods can provide. They are shadowed by - // methods of the same name on the Message interface which provide much more - // information. The methods here are intended primarily to facilitate code - // reuse for logic that needs to interoperate with both full and lite protos. - // - // The format of the returned string is subject to change, so please do not - // assume it will remain stable over time. - std::string DebugString() const; - std::string ShortDebugString() const { return DebugString(); } - // MessageLite::DebugString is already Utf8 Safe. This is to add compatibility - // with Message. - std::string Utf8DebugString() const { return DebugString(); } - - // Parsing --------------------------------------------------------- - // Methods for parsing in protocol buffer format. Most of these are - // just simple wrappers around MergeFromCodedStream(). Clear() will be - // called before merging the input. - - // Fill the message with a protocol buffer parsed from the given input - // stream. Returns false on a read error or if the input is in the wrong - // format. A successful return does not indicate the entire input is - // consumed, ensure you call ConsumedEntireMessage() to check that if - // applicable. - PROTOBUF_ATTRIBUTE_REINITIALIZES bool ParseFromCodedStream( - io::CodedInputStream* input); - // Like ParseFromCodedStream(), but accepts messages that are missing - // required fields. - PROTOBUF_ATTRIBUTE_REINITIALIZES bool ParsePartialFromCodedStream( - io::CodedInputStream* input); - // Read a protocol buffer from the given zero-copy input stream. If - // successful, the entire input will be consumed. - PROTOBUF_ATTRIBUTE_REINITIALIZES bool ParseFromZeroCopyStream( - io::ZeroCopyInputStream* input); - // Like ParseFromZeroCopyStream(), but accepts messages that are missing - // required fields. - PROTOBUF_ATTRIBUTE_REINITIALIZES bool ParsePartialFromZeroCopyStream( - io::ZeroCopyInputStream* input); - // Parse a protocol buffer from a file descriptor. If successful, the entire - // input will be consumed. - PROTOBUF_ATTRIBUTE_REINITIALIZES bool ParseFromFileDescriptor( - int file_descriptor); - // Like ParseFromFileDescriptor(), but accepts messages that are missing - // required fields. - PROTOBUF_ATTRIBUTE_REINITIALIZES bool ParsePartialFromFileDescriptor( - int file_descriptor); - // Parse a protocol buffer from a C++ istream. If successful, the entire - // input will be consumed. - PROTOBUF_ATTRIBUTE_REINITIALIZES bool ParseFromIstream(std::istream* input); - // Like ParseFromIstream(), but accepts messages that are missing - // required fields. - PROTOBUF_ATTRIBUTE_REINITIALIZES bool ParsePartialFromIstream( - std::istream* input); - // Read a protocol buffer from the given zero-copy input stream, expecting - // the message to be exactly "size" bytes long. If successful, exactly - // this many bytes will have been consumed from the input. - bool MergePartialFromBoundedZeroCopyStream(io::ZeroCopyInputStream* input, - int size); - // Like ParseFromBoundedZeroCopyStream(), but accepts messages that are - // missing required fields. - bool MergeFromBoundedZeroCopyStream(io::ZeroCopyInputStream* input, int size); - PROTOBUF_ATTRIBUTE_REINITIALIZES bool ParseFromBoundedZeroCopyStream( - io::ZeroCopyInputStream* input, int size); - // Like ParseFromBoundedZeroCopyStream(), but accepts messages that are - // missing required fields. - PROTOBUF_ATTRIBUTE_REINITIALIZES bool ParsePartialFromBoundedZeroCopyStream( - io::ZeroCopyInputStream* input, int size); - // Parses a protocol buffer contained in a string. Returns true on success. - // This function takes a string in the (non-human-readable) binary wire - // format, matching the encoding output by MessageLite::SerializeToString(). - // If you'd like to convert a human-readable string into a protocol buffer - // object, see google::protobuf::TextFormat::ParseFromString(). - PROTOBUF_ATTRIBUTE_REINITIALIZES bool ParseFromString(ConstStringParam data); - // Like ParseFromString(), but accepts messages that are missing - // required fields. - PROTOBUF_ATTRIBUTE_REINITIALIZES bool ParsePartialFromString( - ConstStringParam data); - // Parse a protocol buffer contained in an array of bytes. - PROTOBUF_ATTRIBUTE_REINITIALIZES bool ParseFromArray(const void* data, - int size); - // Like ParseFromArray(), but accepts messages that are missing - // required fields. - PROTOBUF_ATTRIBUTE_REINITIALIZES bool ParsePartialFromArray(const void* data, - int size); - - - // Reads a protocol buffer from the stream and merges it into this - // Message. Singular fields read from the what is - // already in the Message and repeated fields are appended to those - // already present. - // - // It is the responsibility of the caller to call input->LastTagWas() - // (for groups) or input->ConsumedEntireMessage() (for non-groups) after - // this returns to verify that the message's end was delimited correctly. - // - // ParseFromCodedStream() is implemented as Clear() followed by - // MergeFromCodedStream(). - bool MergeFromCodedStream(io::CodedInputStream* input); - - // Like MergeFromCodedStream(), but succeeds even if required fields are - // missing in the input. - // - // MergeFromCodedStream() is just implemented as MergePartialFromCodedStream() - // followed by IsInitialized(). - bool MergePartialFromCodedStream(io::CodedInputStream* input); - - // Merge a protocol buffer contained in a string. - bool MergeFromString(ConstStringParam data); - - - // Serialization --------------------------------------------------- - // Methods for serializing in protocol buffer format. Most of these - // are just simple wrappers around ByteSize() and SerializeWithCachedSizes(). - - // Write a protocol buffer of this message to the given output. Returns - // false on a write error. If the message is missing required fields, - // this may GOOGLE_CHECK-fail. - bool SerializeToCodedStream(io::CodedOutputStream* output) const; - // Like SerializeToCodedStream(), but allows missing required fields. - bool SerializePartialToCodedStream(io::CodedOutputStream* output) const; - // Write the message to the given zero-copy output stream. All required - // fields must be set. - bool SerializeToZeroCopyStream(io::ZeroCopyOutputStream* output) const; - // Like SerializeToZeroCopyStream(), but allows missing required fields. - bool SerializePartialToZeroCopyStream(io::ZeroCopyOutputStream* output) const; - // Serialize the message and store it in the given string. All required - // fields must be set. - bool SerializeToString(std::string* output) const; - // Like SerializeToString(), but allows missing required fields. - bool SerializePartialToString(std::string* output) const; - // Serialize the message and store it in the given byte array. All required - // fields must be set. - bool SerializeToArray(void* data, int size) const; - // Like SerializeToArray(), but allows missing required fields. - bool SerializePartialToArray(void* data, int size) const; - - // Make a string encoding the message. Is equivalent to calling - // SerializeToString() on a string and using that. Returns the empty - // string if SerializeToString() would have returned an error. - // Note: If you intend to generate many such strings, you may - // reduce heap fragmentation by instead re-using the same string - // object with calls to SerializeToString(). - std::string SerializeAsString() const; - // Like SerializeAsString(), but allows missing required fields. - std::string SerializePartialAsString() const; - - // Serialize the message and write it to the given file descriptor. All - // required fields must be set. - bool SerializeToFileDescriptor(int file_descriptor) const; - // Like SerializeToFileDescriptor(), but allows missing required fields. - bool SerializePartialToFileDescriptor(int file_descriptor) const; - // Serialize the message and write it to the given C++ ostream. All - // required fields must be set. - bool SerializeToOstream(std::ostream* output) const; - // Like SerializeToOstream(), but allows missing required fields. - bool SerializePartialToOstream(std::ostream* output) const; - - // Like SerializeToString(), but appends to the data to the string's - // existing contents. All required fields must be set. - bool AppendToString(std::string* output) const; - // Like AppendToString(), but allows missing required fields. - bool AppendPartialToString(std::string* output) const; - - - // Computes the serialized size of the message. This recursively calls - // ByteSizeLong() on all embedded messages. - // - // ByteSizeLong() is generally linear in the number of fields defined for the - // proto. - virtual size_t ByteSizeLong() const = 0; - - // Legacy ByteSize() API. - PROTOBUF_DEPRECATED_MSG("Please use ByteSizeLong() instead") - int ByteSize() const { return internal::ToIntSize(ByteSizeLong()); } - - // Serializes the message without recomputing the size. The message must not - // have changed since the last call to ByteSize(), and the value returned by - // ByteSize must be non-negative. Otherwise the results are undefined. - void SerializeWithCachedSizes(io::CodedOutputStream* output) const { - output->SetCur(_InternalSerialize(output->Cur(), output->EpsCopy())); - } - - // Functions below here are not part of the public interface. It isn't - // enforced, but they should be treated as private, and will be private - // at some future time. Unfortunately the implementation of the "friend" - // keyword in GCC is broken at the moment, but we expect it will be fixed. - - // Like SerializeWithCachedSizes, but writes directly to *target, returning - // a pointer to the byte immediately after the last byte written. "target" - // must point at a byte array of at least ByteSize() bytes. Whether to use - // deterministic serialization, e.g., maps in sorted order, is determined by - // CodedOutputStream::IsDefaultSerializationDeterministic(). - uint8_t* SerializeWithCachedSizesToArray(uint8_t* target) const; - - // Returns the result of the last call to ByteSize(). An embedded message's - // size is needed both to serialize it (because embedded messages are - // length-delimited) and to compute the outer message's size. Caching - // the size avoids computing it multiple times. - // - // ByteSize() does not automatically use the cached size when available - // because this would require invalidating it every time the message was - // modified, which would be too hard and expensive. (E.g. if a deeply-nested - // sub-message is changed, all of its parents' cached sizes would need to be - // invalidated, which is too much work for an otherwise inlined setter - // method.) - virtual int GetCachedSize() const = 0; - - virtual const char* _InternalParse(const char* /*ptr*/, - internal::ParseContext* /*ctx*/) { - return nullptr; - } - - virtual void OnDemandRegisterArenaDtor(Arena* /*arena*/) {} - - protected: - template <typename T> - static T* CreateMaybeMessage(Arena* arena) { - return Arena::CreateMaybeMessage<T>(arena); - } - - inline explicit MessageLite(Arena* arena, bool is_message_owned = false) - : _internal_metadata_(arena, is_message_owned) {} - - // Returns the arena, if any, that directly owns this message and its internal - // memory (Arena::Own is different in that the arena doesn't directly own the - // internal memory). This method is used in proto's implementation for - // swapping, moving and setting allocated, for deciding whether the ownership - // of this message or its internal memory could be changed. - Arena* GetOwningArena() const { return _internal_metadata_.owning_arena(); } - - // Returns the arena, used for allocating internal objects(e.g., child - // messages, etc), or owning incoming objects (e.g., set allocated). - Arena* GetArenaForAllocation() const { return _internal_metadata_.arena(); } - - // Returns true if this message is enabled for message-owned arena (MOA) - // trials. No lite messages are eligible for MOA. - static bool InMoaTrial() { return false; } - - internal::InternalMetadata _internal_metadata_; - - public: - enum ParseFlags { - kMerge = 0, - kParse = 1, - kMergePartial = 2, - kParsePartial = 3, - kMergeWithAliasing = 4, - kParseWithAliasing = 5, - kMergePartialWithAliasing = 6, - kParsePartialWithAliasing = 7 - }; - - template <ParseFlags flags, typename T> - bool ParseFrom(const T& input); - - // Fast path when conditions match (ie. non-deterministic) - // uint8_t* _InternalSerialize(uint8_t* ptr) const; - virtual uint8_t* _InternalSerialize( - uint8_t* ptr, io::EpsCopyOutputStream* stream) const = 0; - - // Identical to IsInitialized() except that it logs an error message. - bool IsInitializedWithErrors() const { - if (IsInitialized()) return true; - LogInitializationErrorMessage(); - return false; - } - - private: - friend class FastReflectionMessageMutator; - friend class FastReflectionStringSetter; - friend class Message; - friend class Reflection; - friend class internal::ExtensionSet; - friend class internal::LazyField; - friend class internal::SwapFieldHelper; - friend class internal::TcParser; - friend class internal::WeakFieldMap; - friend class internal::WireFormatLite; - - template <typename Type> - friend class Arena::InternalHelper; - template <typename Type> - friend class internal::GenericTypeHandler; - - void LogInitializationErrorMessage() const; - - bool MergeFromImpl(io::CodedInputStream* input, ParseFlags parse_flags); - - GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(MessageLite); -}; - -namespace internal { - -template <bool alias> -bool MergeFromImpl(StringPiece input, MessageLite* msg, - MessageLite::ParseFlags parse_flags); -extern template bool MergeFromImpl<false>(StringPiece input, - MessageLite* msg, - MessageLite::ParseFlags parse_flags); -extern template bool MergeFromImpl<true>(StringPiece input, - MessageLite* msg, - MessageLite::ParseFlags parse_flags); - -template <bool alias> -bool MergeFromImpl(io::ZeroCopyInputStream* input, MessageLite* msg, - MessageLite::ParseFlags parse_flags); -extern template bool MergeFromImpl<false>(io::ZeroCopyInputStream* input, - MessageLite* msg, - MessageLite::ParseFlags parse_flags); -extern template bool MergeFromImpl<true>(io::ZeroCopyInputStream* input, - MessageLite* msg, - MessageLite::ParseFlags parse_flags); - -struct BoundedZCIS { - io::ZeroCopyInputStream* zcis; - int limit; -}; - -template <bool alias> -bool MergeFromImpl(BoundedZCIS input, MessageLite* msg, - MessageLite::ParseFlags parse_flags); -extern template bool MergeFromImpl<false>(BoundedZCIS input, MessageLite* msg, - MessageLite::ParseFlags parse_flags); -extern template bool MergeFromImpl<true>(BoundedZCIS input, MessageLite* msg, - MessageLite::ParseFlags parse_flags); - -template <typename T> -struct SourceWrapper; - -template <bool alias, typename T> -bool MergeFromImpl(const SourceWrapper<T>& input, MessageLite* msg, - MessageLite::ParseFlags parse_flags) { - return input.template MergeInto<alias>(msg, parse_flags); -} - -} // namespace internal - -template <MessageLite::ParseFlags flags, typename T> -bool MessageLite::ParseFrom(const T& input) { - if (flags & kParse) Clear(); - constexpr bool alias = (flags & kMergeWithAliasing) != 0; - return internal::MergeFromImpl<alias>(input, this, flags); -} - -// =================================================================== -// Shutdown support. - - -// Shut down the entire protocol buffers library, deleting all static-duration -// objects allocated by the library or by generated .pb.cc files. -// -// There are two reasons you might want to call this: -// * You use a draconian definition of "memory leak" in which you expect -// every single malloc() to have a corresponding free(), even for objects -// which live until program exit. -// * You are writing a dynamically-loaded library which needs to clean up -// after itself when the library is unloaded. -// -// It is safe to call this multiple times. However, it is not safe to use -// any other part of the protocol buffers library after -// ShutdownProtobufLibrary() has been called. Furthermore this call is not -// thread safe, user needs to synchronize multiple calls. -PROTOBUF_EXPORT void ShutdownProtobufLibrary(); - -namespace internal { - -// Register a function to be called when ShutdownProtocolBuffers() is called. -PROTOBUF_EXPORT void OnShutdown(void (*func)()); -// Run an arbitrary function on an arg -PROTOBUF_EXPORT void OnShutdownRun(void (*f)(const void*), const void* arg); - -template <typename T> -T* OnShutdownDelete(T* p) { - OnShutdownRun([](const void* pp) { delete static_cast<const T*>(pp); }, p); - return p; -} - -} // namespace internal -} // namespace protobuf -} // namespace google - -#include <google/protobuf/port_undef.inc> - -#endif // GOOGLE_PROTOBUF_MESSAGE_LITE_H__ diff --git a/include/google/protobuf/metadata.h b/include/google/protobuf/metadata.h deleted file mode 100644 index 4e89648ee6..0000000000 --- a/include/google/protobuf/metadata.h +++ /dev/null @@ -1,36 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// 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 -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -#ifndef GOOGLE_PROTOBUF_METADATA_H__ -#define GOOGLE_PROTOBUF_METADATA_H__ - -// TODO(b/151117630): Remove this file and all instances where it gets imported. - -#endif // GOOGLE_PROTOBUF_METADATA_H__ diff --git a/include/google/protobuf/metadata_lite.h b/include/google/protobuf/metadata_lite.h deleted file mode 100644 index 0c31517f08..0000000000 --- a/include/google/protobuf/metadata_lite.h +++ /dev/null @@ -1,316 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// 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 -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -#ifndef GOOGLE_PROTOBUF_METADATA_LITE_H__ -#define GOOGLE_PROTOBUF_METADATA_LITE_H__ - -#include <string> -#include <google/protobuf/stubs/common.h> -#include <google/protobuf/arena.h> -#include <google/protobuf/port.h> - -// Must be included last. -#include <google/protobuf/port_def.inc> - -#ifdef SWIG -#error "You cannot SWIG proto headers" -#endif - -namespace google { -namespace protobuf { -namespace internal { - -// This is the representation for messages that support arena allocation. It -// uses a tagged pointer to either store the owning Arena pointer, if there are -// no unknown fields, or a pointer to a block of memory with both the owning -// Arena pointer and the UnknownFieldSet, if there are unknown fields. Besides, -// it also uses the tag to distinguish whether the owning Arena pointer is also -// used by sub-structure allocation. This optimization allows for -// "zero-overhead" storage of the Arena pointer, relative to the above baseline -// implementation. -// -// The tagged pointer uses the least two significant bits to disambiguate cases. -// It uses bit 0 == 0 to indicate an arena pointer and bit 0 == 1 to indicate a -// UFS+Arena-container pointer. Besides it uses bit 1 == 0 to indicate arena -// allocation and bit 1 == 1 to indicate heap allocation. -class PROTOBUF_EXPORT InternalMetadata { - public: - constexpr InternalMetadata() : ptr_(0) {} - explicit InternalMetadata(Arena* arena, bool is_message_owned = false) { - SetArena(arena, is_message_owned); - } - - void SetArena(Arena* arena, bool is_message_owned) { - ptr_ = is_message_owned - ? reinterpret_cast<intptr_t>(arena) | kMessageOwnedArenaTagMask - : reinterpret_cast<intptr_t>(arena); - GOOGLE_DCHECK(!is_message_owned || arena != nullptr); - } - - // To keep the ABI identical between debug and non-debug builds, - // the destructor is always defined here even though it may delegate - // to a non-inline private method. - // (see https://github.com/protocolbuffers/protobuf/issues/9947) - ~InternalMetadata() { -#if defined(NDEBUG) || defined(_MSC_VER) - if (HasMessageOwnedArenaTag()) { - delete reinterpret_cast<Arena*>(ptr_ - kMessageOwnedArenaTagMask); - } -#else - CheckedDestruct(); -#endif - } - - template <typename T> - void Delete() { - // Note that Delete<> should be called not more than once. - if (have_unknown_fields()) { - DeleteOutOfLineHelper<T>(); - } - } - - // DeleteReturnArena will delete the unknown fields only if they weren't - // allocated on an arena. Then it updates the flags so that if you call - // have_unknown_fields(), it will return false. Finally, it returns the - // current value of arena(). It is designed to be used as part of a - // Message class's destructor call, so that when control eventually gets - // to ~InternalMetadata(), we don't need to check for have_unknown_fields() - // again. - template <typename T> - Arena* DeleteReturnArena() { - if (have_unknown_fields()) { - return DeleteOutOfLineHelper<T>(); - } else { - return PtrValue<Arena>(); - } - } - - PROTOBUF_NDEBUG_INLINE Arena* owning_arena() const { - return HasMessageOwnedArenaTag() ? nullptr : arena(); - } - - PROTOBUF_NDEBUG_INLINE Arena* user_arena() const { - Arena* a = arena(); - return a && !a->IsMessageOwned() ? a : nullptr; - } - - PROTOBUF_NDEBUG_INLINE Arena* arena() const { - if (PROTOBUF_PREDICT_FALSE(have_unknown_fields())) { - return PtrValue<ContainerBase>()->arena; - } else { - return PtrValue<Arena>(); - } - } - - PROTOBUF_NDEBUG_INLINE bool have_unknown_fields() const { - return HasUnknownFieldsTag(); - } - - PROTOBUF_NDEBUG_INLINE void* raw_arena_ptr() const { - return reinterpret_cast<void*>(ptr_); - } - - template <typename T> - PROTOBUF_NDEBUG_INLINE const T& unknown_fields( - const T& (*default_instance)()) const { - if (PROTOBUF_PREDICT_FALSE(have_unknown_fields())) { - return PtrValue<Container<T>>()->unknown_fields; - } else { - return default_instance(); - } - } - - template <typename T> - PROTOBUF_NDEBUG_INLINE T* mutable_unknown_fields() { - if (PROTOBUF_PREDICT_TRUE(have_unknown_fields())) { - return &PtrValue<Container<T>>()->unknown_fields; - } else { - return mutable_unknown_fields_slow<T>(); - } - } - - template <typename T> - PROTOBUF_NDEBUG_INLINE void Swap(InternalMetadata* other) { - // Semantics here are that we swap only the unknown fields, not the arena - // pointer. We cannot simply swap ptr_ with other->ptr_ because we need to - // maintain our own arena ptr. Also, our ptr_ and other's ptr_ may be in - // different states (direct arena pointer vs. container with UFS) so we - // cannot simply swap ptr_ and then restore the arena pointers. We reuse - // UFS's swap implementation instead. - if (have_unknown_fields() || other->have_unknown_fields()) { - DoSwap<T>(other->mutable_unknown_fields<T>()); - } - } - - PROTOBUF_NDEBUG_INLINE void InternalSwap(InternalMetadata* other) { - std::swap(ptr_, other->ptr_); - } - - template <typename T> - PROTOBUF_NDEBUG_INLINE void MergeFrom(const InternalMetadata& other) { - if (other.have_unknown_fields()) { - DoMergeFrom<T>(other.unknown_fields<T>(nullptr)); - } - } - - template <typename T> - PROTOBUF_NDEBUG_INLINE void Clear() { - if (have_unknown_fields()) { - DoClear<T>(); - } - } - - private: - intptr_t ptr_; - - // Tagged pointer implementation. - static constexpr intptr_t kUnknownFieldsTagMask = 1; - static constexpr intptr_t kMessageOwnedArenaTagMask = 2; - static constexpr intptr_t kPtrTagMask = - kUnknownFieldsTagMask | kMessageOwnedArenaTagMask; - static constexpr intptr_t kPtrValueMask = ~kPtrTagMask; - - // Accessors for pointer tag and pointer value. - PROTOBUF_ALWAYS_INLINE bool HasUnknownFieldsTag() const { - return ptr_ & kUnknownFieldsTagMask; - } - PROTOBUF_ALWAYS_INLINE bool HasMessageOwnedArenaTag() const { - return ptr_ & kMessageOwnedArenaTagMask; - } - - template <typename U> - U* PtrValue() const { - return reinterpret_cast<U*>(ptr_ & kPtrValueMask); - } - - // If ptr_'s tag is kTagContainer, it points to an instance of this struct. - struct ContainerBase { - Arena* arena; - }; - - template <typename T> - struct Container : public ContainerBase { - T unknown_fields; - }; - - template <typename T> - PROTOBUF_NOINLINE Arena* DeleteOutOfLineHelper() { - if (auto* a = arena()) { - // Subtle: we want to preserve the message-owned arena flag, while at the - // same time replacing the pointer to Container<T> with a pointer to the - // arena. - intptr_t message_owned_arena_tag = ptr_ & kMessageOwnedArenaTagMask; - ptr_ = reinterpret_cast<intptr_t>(a) | message_owned_arena_tag; - return a; - } else { - delete PtrValue<Container<T>>(); - ptr_ = 0; - return nullptr; - } - } - - template <typename T> - PROTOBUF_NOINLINE T* mutable_unknown_fields_slow() { - Arena* my_arena = arena(); - Container<T>* container = Arena::Create<Container<T>>(my_arena); - intptr_t message_owned_arena_tag = ptr_ & kMessageOwnedArenaTagMask; - // Two-step assignment works around a bug in clang's static analyzer: - // https://bugs.llvm.org/show_bug.cgi?id=34198. - ptr_ = reinterpret_cast<intptr_t>(container); - ptr_ |= kUnknownFieldsTagMask | message_owned_arena_tag; - container->arena = my_arena; - return &(container->unknown_fields); - } - - // Templated functions. - - template <typename T> - PROTOBUF_NOINLINE void DoClear() { - mutable_unknown_fields<T>()->Clear(); - } - - template <typename T> - PROTOBUF_NOINLINE void DoMergeFrom(const T& other) { - mutable_unknown_fields<T>()->MergeFrom(other); - } - - template <typename T> - PROTOBUF_NOINLINE void DoSwap(T* other) { - mutable_unknown_fields<T>()->Swap(other); - } - - // Private helper with debug checks for ~InternalMetadata() - void CheckedDestruct(); -}; - -// String Template specializations. - -template <> -PROTOBUF_EXPORT void InternalMetadata::DoClear<std::string>(); -template <> -PROTOBUF_EXPORT void InternalMetadata::DoMergeFrom<std::string>( - const std::string& other); -template <> -PROTOBUF_EXPORT void InternalMetadata::DoSwap<std::string>(std::string* other); - -// This helper RAII class is needed to efficiently parse unknown fields. We -// should only call mutable_unknown_fields if there are actual unknown fields. -// The obvious thing to just use a stack string and swap it at the end of -// the parse won't work, because the destructor of StringOutputStream needs to -// be called before we can modify the string (it check-fails). Using -// LiteUnknownFieldSetter setter(&_internal_metadata_); -// StringOutputStream stream(setter.buffer()); -// guarantees that the string is only swapped after stream is destroyed. -class PROTOBUF_EXPORT LiteUnknownFieldSetter { - public: - explicit LiteUnknownFieldSetter(InternalMetadata* metadata) - : metadata_(metadata) { - if (metadata->have_unknown_fields()) { - buffer_.swap(*metadata->mutable_unknown_fields<std::string>()); - } - } - ~LiteUnknownFieldSetter() { - if (!buffer_.empty()) - metadata_->mutable_unknown_fields<std::string>()->swap(buffer_); - } - std::string* buffer() { return &buffer_; } - - private: - InternalMetadata* metadata_; - std::string buffer_; -}; - -} // namespace internal -} // namespace protobuf -} // namespace google - -#include <google/protobuf/port_undef.inc> - -#endif // GOOGLE_PROTOBUF_METADATA_LITE_H__ diff --git a/include/google/protobuf/parse_context.h b/include/google/protobuf/parse_context.h deleted file mode 100644 index 7aea50cdc3..0000000000 --- a/include/google/protobuf/parse_context.h +++ /dev/null @@ -1,1025 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// 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 -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -#ifndef GOOGLE_PROTOBUF_PARSE_CONTEXT_H__ -#define GOOGLE_PROTOBUF_PARSE_CONTEXT_H__ - -#include <cstdint> -#include <cstring> -#include <string> -#include <type_traits> - -#include <google/protobuf/io/coded_stream.h> -#include <google/protobuf/io/zero_copy_stream.h> -#include <google/protobuf/arena.h> -#include <google/protobuf/port.h> -#include <google/protobuf/stubs/strutil.h> -#include <google/protobuf/arenastring.h> -#include <google/protobuf/endian.h> -#include <google/protobuf/implicit_weak_message.h> -#include <google/protobuf/inlined_string_field.h> -#include <google/protobuf/metadata_lite.h> -#include <google/protobuf/repeated_field.h> -#include <google/protobuf/wire_format_lite.h> - -// Must be included last. -#include <google/protobuf/port_def.inc> - - -namespace google { -namespace protobuf { - -class UnknownFieldSet; -class DescriptorPool; -class MessageFactory; - -namespace internal { - -// Template code below needs to know about the existence of these functions. -PROTOBUF_EXPORT void WriteVarint(uint32_t num, uint64_t val, std::string* s); -PROTOBUF_EXPORT void WriteLengthDelimited(uint32_t num, StringPiece val, - std::string* s); -// Inline because it is just forwarding to s->WriteVarint -inline void WriteVarint(uint32_t num, uint64_t val, UnknownFieldSet* s); -inline void WriteLengthDelimited(uint32_t num, StringPiece val, - UnknownFieldSet* s); - - -// The basic abstraction the parser is designed for is a slight modification -// of the ZeroCopyInputStream (ZCIS) abstraction. A ZCIS presents a serialized -// stream as a series of buffers that concatenate to the full stream. -// Pictorially a ZCIS presents a stream in chunks like so -// [---------------------------------------------------------------] -// [---------------------] chunk 1 -// [----------------------------] chunk 2 -// chunk 3 [--------------] -// -// Where the '-' represent the bytes which are vertically lined up with the -// bytes of the stream. The proto parser requires its input to be presented -// similarly with the extra -// property that each chunk has kSlopBytes past its end that overlaps with the -// first kSlopBytes of the next chunk, or if there is no next chunk at least its -// still valid to read those bytes. Again, pictorially, we now have -// -// [---------------------------------------------------------------] -// [-------------------....] chunk 1 -// [------------------------....] chunk 2 -// chunk 3 [------------------..**] -// chunk 4 [--****] -// Here '-' mean the bytes of the stream or chunk and '.' means bytes past the -// chunk that match up with the start of the next chunk. Above each chunk has -// 4 '.' after the chunk. In the case these 'overflow' bytes represents bytes -// past the stream, indicated by '*' above, their values are unspecified. It is -// still legal to read them (ie. should not segfault). Reading past the -// end should be detected by the user and indicated as an error. -// -// The reason for this, admittedly, unconventional invariant is to ruthlessly -// optimize the protobuf parser. Having an overlap helps in two important ways. -// Firstly it alleviates having to performing bounds checks if a piece of code -// is guaranteed to not read more than kSlopBytes. Secondly, and more -// importantly, the protobuf wireformat is such that reading a key/value pair is -// always less than 16 bytes. This removes the need to change to next buffer in -// the middle of reading primitive values. Hence there is no need to store and -// load the current position. - -class PROTOBUF_EXPORT EpsCopyInputStream { - public: - enum { kSlopBytes = 16, kMaxCordBytesToCopy = 512 }; - - explicit EpsCopyInputStream(bool enable_aliasing) - : aliasing_(enable_aliasing ? kOnPatch : kNoAliasing) {} - - void BackUp(const char* ptr) { - GOOGLE_DCHECK(ptr <= buffer_end_ + kSlopBytes); - int count; - if (next_chunk_ == buffer_) { - count = static_cast<int>(buffer_end_ + kSlopBytes - ptr); - } else { - count = size_ + static_cast<int>(buffer_end_ - ptr); - } - if (count > 0) StreamBackUp(count); - } - - // If return value is negative it's an error - PROTOBUF_NODISCARD int PushLimit(const char* ptr, int limit) { - GOOGLE_DCHECK(limit >= 0 && limit <= INT_MAX - kSlopBytes); - // This add is safe due to the invariant above, because - // ptr - buffer_end_ <= kSlopBytes. - limit += static_cast<int>(ptr - buffer_end_); - limit_end_ = buffer_end_ + (std::min)(0, limit); - auto old_limit = limit_; - limit_ = limit; - return old_limit - limit; - } - - PROTOBUF_NODISCARD bool PopLimit(int delta) { - if (PROTOBUF_PREDICT_FALSE(!EndedAtLimit())) return false; - limit_ = limit_ + delta; - // TODO(gerbens) We could remove this line and hoist the code to - // DoneFallback. Study the perf/bin-size effects. - limit_end_ = buffer_end_ + (std::min)(0, limit_); - return true; - } - - PROTOBUF_NODISCARD const char* Skip(const char* ptr, int size) { - if (size <= buffer_end_ + kSlopBytes - ptr) { - return ptr + size; - } - return SkipFallback(ptr, size); - } - PROTOBUF_NODISCARD const char* ReadString(const char* ptr, int size, - std::string* s) { - if (size <= buffer_end_ + kSlopBytes - ptr) { - s->assign(ptr, size); - return ptr + size; - } - return ReadStringFallback(ptr, size, s); - } - PROTOBUF_NODISCARD const char* AppendString(const char* ptr, int size, - std::string* s) { - if (size <= buffer_end_ + kSlopBytes - ptr) { - s->append(ptr, size); - return ptr + size; - } - return AppendStringFallback(ptr, size, s); - } - // Implemented in arenastring.cc - PROTOBUF_NODISCARD const char* ReadArenaString(const char* ptr, - ArenaStringPtr* s, - Arena* arena); - - template <typename Tag, typename T> - PROTOBUF_NODISCARD const char* ReadRepeatedFixed(const char* ptr, - Tag expected_tag, - RepeatedField<T>* out); - - template <typename T> - PROTOBUF_NODISCARD const char* ReadPackedFixed(const char* ptr, int size, - RepeatedField<T>* out); - template <typename Add> - PROTOBUF_NODISCARD const char* ReadPackedVarint(const char* ptr, Add add); - - uint32_t LastTag() const { return last_tag_minus_1_ + 1; } - bool ConsumeEndGroup(uint32_t start_tag) { - bool res = last_tag_minus_1_ == start_tag; - last_tag_minus_1_ = 0; - return res; - } - bool EndedAtLimit() const { return last_tag_minus_1_ == 0; } - bool EndedAtEndOfStream() const { return last_tag_minus_1_ == 1; } - void SetLastTag(uint32_t tag) { last_tag_minus_1_ = tag - 1; } - void SetEndOfStream() { last_tag_minus_1_ = 1; } - bool IsExceedingLimit(const char* ptr) { - return ptr > limit_end_ && - (next_chunk_ == nullptr || ptr - buffer_end_ > limit_); - } - bool AliasingEnabled() const { return aliasing_ != kNoAliasing; } - int BytesUntilLimit(const char* ptr) const { - return limit_ + static_cast<int>(buffer_end_ - ptr); - } - // Returns true if more data is available, if false is returned one has to - // call Done for further checks. - bool DataAvailable(const char* ptr) { return ptr < limit_end_; } - - protected: - // Returns true is limit (either an explicit limit or end of stream) is - // reached. It aligns *ptr across buffer seams. - // If limit is exceeded it returns true and ptr is set to null. - bool DoneWithCheck(const char** ptr, int d) { - GOOGLE_DCHECK(*ptr); - if (PROTOBUF_PREDICT_TRUE(*ptr < limit_end_)) return false; - int overrun = static_cast<int>(*ptr - buffer_end_); - GOOGLE_DCHECK_LE(overrun, kSlopBytes); // Guaranteed by parse loop. - if (overrun == - limit_) { // No need to flip buffers if we ended on a limit. - // If we actually overrun the buffer and next_chunk_ is null. It means - // the stream ended and we passed the stream end. - if (overrun > 0 && next_chunk_ == nullptr) *ptr = nullptr; - return true; - } - auto res = DoneFallback(overrun, d); - *ptr = res.first; - return res.second; - } - - const char* InitFrom(StringPiece flat) { - overall_limit_ = 0; - if (flat.size() > kSlopBytes) { - limit_ = kSlopBytes; - limit_end_ = buffer_end_ = flat.data() + flat.size() - kSlopBytes; - next_chunk_ = buffer_; - if (aliasing_ == kOnPatch) aliasing_ = kNoDelta; - return flat.data(); - } else { - std::memcpy(buffer_, flat.data(), flat.size()); - limit_ = 0; - limit_end_ = buffer_end_ = buffer_ + flat.size(); - next_chunk_ = nullptr; - if (aliasing_ == kOnPatch) { - aliasing_ = reinterpret_cast<std::uintptr_t>(flat.data()) - - reinterpret_cast<std::uintptr_t>(buffer_); - } - return buffer_; - } - } - - const char* InitFrom(io::ZeroCopyInputStream* zcis); - - const char* InitFrom(io::ZeroCopyInputStream* zcis, int limit) { - if (limit == -1) return InitFrom(zcis); - overall_limit_ = limit; - auto res = InitFrom(zcis); - limit_ = limit - static_cast<int>(buffer_end_ - res); - limit_end_ = buffer_end_ + (std::min)(0, limit_); - return res; - } - - private: - const char* limit_end_; // buffer_end_ + min(limit_, 0) - const char* buffer_end_; - const char* next_chunk_; - int size_; - int limit_; // relative to buffer_end_; - io::ZeroCopyInputStream* zcis_ = nullptr; - char buffer_[2 * kSlopBytes] = {}; - enum { kNoAliasing = 0, kOnPatch = 1, kNoDelta = 2 }; - std::uintptr_t aliasing_ = kNoAliasing; - // This variable is used to communicate how the parse ended, in order to - // completely verify the parsed data. A wire-format parse can end because of - // one of the following conditions: - // 1) A parse can end on a pushed limit. - // 2) A parse can end on End Of Stream (EOS). - // 3) A parse can end on 0 tag (only valid for toplevel message). - // 4) A parse can end on an end-group tag. - // This variable should always be set to 0, which indicates case 1. If the - // parse terminated due to EOS (case 2), it's set to 1. In case the parse - // ended due to a terminating tag (case 3 and 4) it's set to (tag - 1). - // This var doesn't really belong in EpsCopyInputStream and should be part of - // the ParseContext, but case 2 is most easily and optimally implemented in - // DoneFallback. - uint32_t last_tag_minus_1_ = 0; - int overall_limit_ = INT_MAX; // Overall limit independent of pushed limits. - // Pretty random large number that seems like a safe allocation on most - // systems. TODO(gerbens) do we need to set this as build flag? - enum { kSafeStringSize = 50000000 }; - - // Advances to next buffer chunk returns a pointer to the same logical place - // in the stream as set by overrun. Overrun indicates the position in the slop - // region the parse was left (0 <= overrun <= kSlopBytes). Returns true if at - // limit, at which point the returned pointer maybe null if there was an - // error. The invariant of this function is that it's guaranteed that - // kSlopBytes bytes can be accessed from the returned ptr. This function might - // advance more buffers than one in the underlying ZeroCopyInputStream. - std::pair<const char*, bool> DoneFallback(int overrun, int depth); - // Advances to the next buffer, at most one call to Next() on the underlying - // ZeroCopyInputStream is made. This function DOES NOT match the returned - // pointer to where in the slop region the parse ends, hence no overrun - // parameter. This is useful for string operations where you always copy - // to the end of the buffer (including the slop region). - const char* Next(); - // overrun is the location in the slop region the stream currently is - // (0 <= overrun <= kSlopBytes). To prevent flipping to the next buffer of - // the ZeroCopyInputStream in the case the parse will end in the last - // kSlopBytes of the current buffer. depth is the current depth of nested - // groups (or negative if the use case does not need careful tracking). - inline const char* NextBuffer(int overrun, int depth); - const char* SkipFallback(const char* ptr, int size); - const char* AppendStringFallback(const char* ptr, int size, std::string* str); - const char* ReadStringFallback(const char* ptr, int size, std::string* str); - bool StreamNext(const void** data) { - bool res = zcis_->Next(data, &size_); - if (res) overall_limit_ -= size_; - return res; - } - void StreamBackUp(int count) { - zcis_->BackUp(count); - overall_limit_ += count; - } - - template <typename A> - const char* AppendSize(const char* ptr, int size, const A& append) { - int chunk_size = buffer_end_ + kSlopBytes - ptr; - do { - GOOGLE_DCHECK(size > chunk_size); - if (next_chunk_ == nullptr) return nullptr; - append(ptr, chunk_size); - ptr += chunk_size; - size -= chunk_size; - // TODO(gerbens) Next calls NextBuffer which generates buffers with - // overlap and thus incurs cost of copying the slop regions. This is not - // necessary for reading strings. We should just call Next buffers. - if (limit_ <= kSlopBytes) return nullptr; - ptr = Next(); - if (ptr == nullptr) return nullptr; // passed the limit - ptr += kSlopBytes; - chunk_size = buffer_end_ + kSlopBytes - ptr; - } while (size > chunk_size); - append(ptr, size); - return ptr + size; - } - - // AppendUntilEnd appends data until a limit (either a PushLimit or end of - // stream. Normal payloads are from length delimited fields which have an - // explicit size. Reading until limit only comes when the string takes - // the place of a protobuf, ie RawMessage/StringRawMessage, lazy fields and - // implicit weak messages. We keep these methods private and friend them. - template <typename A> - const char* AppendUntilEnd(const char* ptr, const A& append) { - if (ptr - buffer_end_ > limit_) return nullptr; - while (limit_ > kSlopBytes) { - size_t chunk_size = buffer_end_ + kSlopBytes - ptr; - append(ptr, chunk_size); - ptr = Next(); - if (ptr == nullptr) return limit_end_; - ptr += kSlopBytes; - } - auto end = buffer_end_ + limit_; - GOOGLE_DCHECK(end >= ptr); - append(ptr, end - ptr); - return end; - } - - PROTOBUF_NODISCARD const char* AppendString(const char* ptr, - std::string* str) { - return AppendUntilEnd( - ptr, [str](const char* p, ptrdiff_t s) { str->append(p, s); }); - } - friend class ImplicitWeakMessage; -}; - -using LazyEagerVerifyFnType = const char* (*)(const char* ptr, - ParseContext* ctx); -using LazyEagerVerifyFnRef = std::remove_pointer<LazyEagerVerifyFnType>::type&; - -// ParseContext holds all data that is global to the entire parse. Most -// importantly it contains the input stream, but also recursion depth and also -// stores the end group tag, in case a parser ended on a endgroup, to verify -// matching start/end group tags. -class PROTOBUF_EXPORT ParseContext : public EpsCopyInputStream { - public: - struct Data { - const DescriptorPool* pool = nullptr; - MessageFactory* factory = nullptr; - Arena* arena = nullptr; - }; - - template <typename... T> - ParseContext(int depth, bool aliasing, const char** start, T&&... args) - : EpsCopyInputStream(aliasing), depth_(depth) { - *start = InitFrom(std::forward<T>(args)...); - } - - void TrackCorrectEnding() { group_depth_ = 0; } - - bool Done(const char** ptr) { return DoneWithCheck(ptr, group_depth_); } - - int depth() const { return depth_; } - - Data& data() { return data_; } - const Data& data() const { return data_; } - - const char* ParseMessage(MessageLite* msg, const char* ptr); - - // Spawns a child parsing context that inherits key properties. New context - // inherits the following: - // --depth_, data_, check_required_fields_, lazy_parse_mode_ - // The spawned context always disables aliasing (different input). - template <typename... T> - ParseContext Spawn(const char** start, T&&... args) { - ParseContext spawned(depth_, false, start, std::forward<T>(args)...); - // Transfer key context states. - spawned.data_ = data_; - return spawned; - } - - // This overload supports those few cases where ParseMessage is called - // on a class that is not actually a proto message. - // TODO(jorg): Eliminate this use case. - template <typename T, - typename std::enable_if<!std::is_base_of<MessageLite, T>::value, - bool>::type = true> - PROTOBUF_NODISCARD const char* ParseMessage(T* msg, const char* ptr); - - template <typename T> - PROTOBUF_NODISCARD PROTOBUF_NDEBUG_INLINE const char* ParseGroup( - T* msg, const char* ptr, uint32_t tag) { - if (--depth_ < 0) return nullptr; - group_depth_++; - ptr = msg->_InternalParse(ptr, this); - group_depth_--; - depth_++; - if (PROTOBUF_PREDICT_FALSE(!ConsumeEndGroup(tag))) return nullptr; - return ptr; - } - - private: - // Out-of-line routine to save space in ParseContext::ParseMessage<T> - // int old; - // ptr = ReadSizeAndPushLimitAndDepth(ptr, &old) - // is equivalent to: - // int size = ReadSize(&ptr); - // if (!ptr) return nullptr; - // int old = PushLimit(ptr, size); - // if (--depth_ < 0) return nullptr; - PROTOBUF_NODISCARD const char* ReadSizeAndPushLimitAndDepth(const char* ptr, - int* old_limit); - - // The context keeps an internal stack to keep track of the recursive - // part of the parse state. - // Current depth of the active parser, depth counts down. - // This is used to limit recursion depth (to prevent overflow on malicious - // data), but is also used to index in stack_ to store the current state. - int depth_; - // Unfortunately necessary for the fringe case of ending on 0 or end-group tag - // in the last kSlopBytes of a ZeroCopyInputStream chunk. - int group_depth_ = INT_MIN; - Data data_; -}; - -template <uint32_t tag> -bool ExpectTag(const char* ptr) { - if (tag < 128) { - return *ptr == static_cast<char>(tag); - } else { - static_assert(tag < 128 * 128, "We only expect tags for 1 or 2 bytes"); - char buf[2] = {static_cast<char>(tag | 0x80), static_cast<char>(tag >> 7)}; - return std::memcmp(ptr, buf, 2) == 0; - } -} - -template <int> -struct EndianHelper; - -template <> -struct EndianHelper<1> { - static uint8_t Load(const void* p) { return *static_cast<const uint8_t*>(p); } -}; - -template <> -struct EndianHelper<2> { - static uint16_t Load(const void* p) { - uint16_t tmp; - std::memcpy(&tmp, p, 2); - return little_endian::ToHost(tmp); - } -}; - -template <> -struct EndianHelper<4> { - static uint32_t Load(const void* p) { - uint32_t tmp; - std::memcpy(&tmp, p, 4); - return little_endian::ToHost(tmp); - } -}; - -template <> -struct EndianHelper<8> { - static uint64_t Load(const void* p) { - uint64_t tmp; - std::memcpy(&tmp, p, 8); - return little_endian::ToHost(tmp); - } -}; - -template <typename T> -T UnalignedLoad(const char* p) { - auto tmp = EndianHelper<sizeof(T)>::Load(p); - T res; - memcpy(&res, &tmp, sizeof(T)); - return res; -} - -PROTOBUF_EXPORT -std::pair<const char*, uint32_t> VarintParseSlow32(const char* p, uint32_t res); -PROTOBUF_EXPORT -std::pair<const char*, uint64_t> VarintParseSlow64(const char* p, uint32_t res); - -inline const char* VarintParseSlow(const char* p, uint32_t res, uint32_t* out) { - auto tmp = VarintParseSlow32(p, res); - *out = tmp.second; - return tmp.first; -} - -inline const char* VarintParseSlow(const char* p, uint32_t res, uint64_t* out) { - auto tmp = VarintParseSlow64(p, res); - *out = tmp.second; - return tmp.first; -} - -template <typename T> -PROTOBUF_NODISCARD const char* VarintParse(const char* p, T* out) { - auto ptr = reinterpret_cast<const uint8_t*>(p); - uint32_t res = ptr[0]; - if (!(res & 0x80)) { - *out = res; - return p + 1; - } - uint32_t byte = ptr[1]; - res += (byte - 1) << 7; - if (!(byte & 0x80)) { - *out = res; - return p + 2; - } - return VarintParseSlow(p, res, out); -} - -// Used for tags, could read up to 5 bytes which must be available. -// Caller must ensure its safe to call. - -PROTOBUF_EXPORT -std::pair<const char*, uint32_t> ReadTagFallback(const char* p, uint32_t res); - -// Same as ParseVarint but only accept 5 bytes at most. -inline const char* ReadTag(const char* p, uint32_t* out, - uint32_t /*max_tag*/ = 0) { - uint32_t res = static_cast<uint8_t>(p[0]); - if (res < 128) { - *out = res; - return p + 1; - } - uint32_t second = static_cast<uint8_t>(p[1]); - res += (second - 1) << 7; - if (second < 128) { - *out = res; - return p + 2; - } - auto tmp = ReadTagFallback(p, res); - *out = tmp.second; - return tmp.first; -} - -// As above, but optimized to consume very few registers while still being fast, -// ReadTagInlined is useful for callers that don't mind the extra code but would -// like to avoid an extern function call causing spills into the stack. -// -// Two support routines for ReadTagInlined come first... -template <class T> -PROTOBUF_NODISCARD PROTOBUF_ALWAYS_INLINE constexpr T RotateLeft( - T x, int s) noexcept { - return static_cast<T>(x << (s & (std::numeric_limits<T>::digits - 1))) | - static_cast<T>(x >> ((-s) & (std::numeric_limits<T>::digits - 1))); -} - -PROTOBUF_NODISCARD inline PROTOBUF_ALWAYS_INLINE uint64_t -RotRight7AndReplaceLowByte(uint64_t res, const char& byte) { -#if defined(__x86_64__) && defined(__GNUC__) - // This will only use one register for `res`. - // `byte` comes as a reference to allow the compiler to generate code like: - // - // rorq $7, %rcx - // movb 1(%rax), %cl - // - // which avoids loading the incoming bytes into a separate register first. - asm("ror $7,%0\n\t" - "movb %1,%b0" - : "+r"(res) - : "m"(byte)); -#else - res = RotateLeft(res, -7); - res = res & ~0xFF; - res |= 0xFF & byte; -#endif - return res; -}; - -inline PROTOBUF_ALWAYS_INLINE -const char* ReadTagInlined(const char* ptr, uint32_t* out) { - uint64_t res = 0xFF & ptr[0]; - if (PROTOBUF_PREDICT_FALSE(res >= 128)) { - res = RotRight7AndReplaceLowByte(res, ptr[1]); - if (PROTOBUF_PREDICT_FALSE(res & 0x80)) { - res = RotRight7AndReplaceLowByte(res, ptr[2]); - if (PROTOBUF_PREDICT_FALSE(res & 0x80)) { - res = RotRight7AndReplaceLowByte(res, ptr[3]); - if (PROTOBUF_PREDICT_FALSE(res & 0x80)) { - // Note: this wouldn't work if res were 32-bit, - // because then replacing the low byte would overwrite - // the bottom 4 bits of the result. - res = RotRight7AndReplaceLowByte(res, ptr[4]); - if (PROTOBUF_PREDICT_FALSE(res & 0x80)) { - // The proto format does not permit longer than 5-byte encodings for - // tags. - *out = 0; - return nullptr; - } - *out = static_cast<uint32_t>(RotateLeft(res, 28)); -#if defined(__GNUC__) - // Note: this asm statement prevents the compiler from - // trying to share the "return ptr + constant" among all - // branches. - asm("" : "+r"(ptr)); -#endif - return ptr + 5; - } - *out = static_cast<uint32_t>(RotateLeft(res, 21)); - return ptr + 4; - } - *out = static_cast<uint32_t>(RotateLeft(res, 14)); - return ptr + 3; - } - *out = static_cast<uint32_t>(RotateLeft(res, 7)); - return ptr + 2; - } - *out = static_cast<uint32_t>(res); - return ptr + 1; -} - -// Decode 2 consecutive bytes of a varint and returns the value, shifted left -// by 1. It simultaneous updates *ptr to *ptr + 1 or *ptr + 2 depending if the -// first byte's continuation bit is set. -// If bit 15 of return value is set (equivalent to the continuation bits of both -// bytes being set) the varint continues, otherwise the parse is done. On x86 -// movsx eax, dil -// and edi, eax -// add eax, edi -// adc [rsi], 1 -inline uint32_t DecodeTwoBytes(const char** ptr) { - uint32_t value = UnalignedLoad<uint16_t>(*ptr); - // Sign extend the low byte continuation bit - uint32_t x = static_cast<int8_t>(value); - value &= x; // Mask out the high byte iff no continuation - // This add is an amazing operation, it cancels the low byte continuation bit - // from y transferring it to the carry. Simultaneously it also shifts the 7 - // LSB left by one tightly against high byte varint bits. Hence value now - // contains the unpacked value shifted left by 1. - value += x; - // Use the carry to update the ptr appropriately. - *ptr += value < x ? 2 : 1; - return value; -} - -// More efficient varint parsing for big varints -inline const char* ParseBigVarint(const char* p, uint64_t* out) { - auto pnew = p; - auto tmp = DecodeTwoBytes(&pnew); - uint64_t res = tmp >> 1; - if (PROTOBUF_PREDICT_TRUE(static_cast<std::int16_t>(tmp) >= 0)) { - *out = res; - return pnew; - } - for (std::uint32_t i = 1; i < 5; i++) { - pnew = p + 2 * i; - tmp = DecodeTwoBytes(&pnew); - res += (static_cast<std::uint64_t>(tmp) - 2) << (14 * i - 1); - if (PROTOBUF_PREDICT_TRUE(static_cast<std::int16_t>(tmp) >= 0)) { - *out = res; - return pnew; - } - } - return nullptr; -} - -PROTOBUF_EXPORT -std::pair<const char*, int32_t> ReadSizeFallback(const char* p, uint32_t first); -// Used for tags, could read up to 5 bytes which must be available. Additionally -// it makes sure the unsigned value fits a int32_t, otherwise returns nullptr. -// Caller must ensure its safe to call. -inline uint32_t ReadSize(const char** pp) { - auto p = *pp; - uint32_t res = static_cast<uint8_t>(p[0]); - if (res < 128) { - *pp = p + 1; - return res; - } - auto x = ReadSizeFallback(p, res); - *pp = x.first; - return x.second; -} - -// Some convenience functions to simplify the generated parse loop code. -// Returning the value and updating the buffer pointer allows for nicer -// function composition. We rely on the compiler to inline this. -// Also in debug compiles having local scoped variables tend to generated -// stack frames that scale as O(num fields). -inline uint64_t ReadVarint64(const char** p) { - uint64_t tmp; - *p = VarintParse(*p, &tmp); - return tmp; -} - -inline uint32_t ReadVarint32(const char** p) { - uint32_t tmp; - *p = VarintParse(*p, &tmp); - return tmp; -} - -inline int64_t ReadVarintZigZag64(const char** p) { - uint64_t tmp; - *p = VarintParse(*p, &tmp); - return WireFormatLite::ZigZagDecode64(tmp); -} - -inline int32_t ReadVarintZigZag32(const char** p) { - uint64_t tmp; - *p = VarintParse(*p, &tmp); - return WireFormatLite::ZigZagDecode32(static_cast<uint32_t>(tmp)); -} - -template <typename T, typename std::enable_if< - !std::is_base_of<MessageLite, T>::value, bool>::type> -PROTOBUF_NODISCARD const char* ParseContext::ParseMessage(T* msg, - const char* ptr) { - int old; - ptr = ReadSizeAndPushLimitAndDepth(ptr, &old); - ptr = ptr ? msg->_InternalParse(ptr, this) : nullptr; - depth_++; - if (!PopLimit(old)) return nullptr; - return ptr; -} - -template <typename Tag, typename T> -const char* EpsCopyInputStream::ReadRepeatedFixed(const char* ptr, - Tag expected_tag, - RepeatedField<T>* out) { - do { - out->Add(UnalignedLoad<T>(ptr)); - ptr += sizeof(T); - if (PROTOBUF_PREDICT_FALSE(ptr >= limit_end_)) return ptr; - } while (UnalignedLoad<Tag>(ptr) == expected_tag && (ptr += sizeof(Tag))); - return ptr; -} - -// Add any of the following lines to debug which parse function is failing. - -#define GOOGLE_PROTOBUF_ASSERT_RETURN(predicate, ret) \ - if (!(predicate)) { \ - /* ::raise(SIGINT); */ \ - /* GOOGLE_LOG(ERROR) << "Parse failure"; */ \ - return ret; \ - } - -#define GOOGLE_PROTOBUF_PARSER_ASSERT(predicate) \ - GOOGLE_PROTOBUF_ASSERT_RETURN(predicate, nullptr) - -template <typename T> -const char* EpsCopyInputStream::ReadPackedFixed(const char* ptr, int size, - RepeatedField<T>* out) { - GOOGLE_PROTOBUF_PARSER_ASSERT(ptr); - int nbytes = buffer_end_ + kSlopBytes - ptr; - while (size > nbytes) { - int num = nbytes / sizeof(T); - int old_entries = out->size(); - out->Reserve(old_entries + num); - int block_size = num * sizeof(T); - auto dst = out->AddNAlreadyReserved(num); -#ifdef PROTOBUF_LITTLE_ENDIAN - std::memcpy(dst, ptr, block_size); -#else - for (int i = 0; i < num; i++) - dst[i] = UnalignedLoad<T>(ptr + i * sizeof(T)); -#endif - size -= block_size; - if (limit_ <= kSlopBytes) return nullptr; - ptr = Next(); - if (ptr == nullptr) return nullptr; - ptr += kSlopBytes - (nbytes - block_size); - nbytes = buffer_end_ + kSlopBytes - ptr; - } - int num = size / sizeof(T); - int old_entries = out->size(); - out->Reserve(old_entries + num); - int block_size = num * sizeof(T); - auto dst = out->AddNAlreadyReserved(num); -#ifdef PROTOBUF_LITTLE_ENDIAN - std::memcpy(dst, ptr, block_size); -#else - for (int i = 0; i < num; i++) dst[i] = UnalignedLoad<T>(ptr + i * sizeof(T)); -#endif - ptr += block_size; - if (size != block_size) return nullptr; - return ptr; -} - -template <typename Add> -const char* ReadPackedVarintArray(const char* ptr, const char* end, Add add) { - while (ptr < end) { - uint64_t varint; - ptr = VarintParse(ptr, &varint); - if (ptr == nullptr) return nullptr; - add(varint); - } - return ptr; -} - -template <typename Add> -const char* EpsCopyInputStream::ReadPackedVarint(const char* ptr, Add add) { - int size = ReadSize(&ptr); - GOOGLE_PROTOBUF_PARSER_ASSERT(ptr); - int chunk_size = buffer_end_ - ptr; - while (size > chunk_size) { - ptr = ReadPackedVarintArray(ptr, buffer_end_, add); - if (ptr == nullptr) return nullptr; - int overrun = ptr - buffer_end_; - GOOGLE_DCHECK(overrun >= 0 && overrun <= kSlopBytes); - if (size - chunk_size <= kSlopBytes) { - // The current buffer contains all the information needed, we don't need - // to flip buffers. However we must parse from a buffer with enough space - // so we are not prone to a buffer overflow. - char buf[kSlopBytes + 10] = {}; - std::memcpy(buf, buffer_end_, kSlopBytes); - GOOGLE_CHECK_LE(size - chunk_size, kSlopBytes); - auto end = buf + (size - chunk_size); - auto res = ReadPackedVarintArray(buf + overrun, end, add); - if (res == nullptr || res != end) return nullptr; - return buffer_end_ + (res - buf); - } - size -= overrun + chunk_size; - GOOGLE_DCHECK_GT(size, 0); - // We must flip buffers - if (limit_ <= kSlopBytes) return nullptr; - ptr = Next(); - if (ptr == nullptr) return nullptr; - ptr += overrun; - chunk_size = buffer_end_ - ptr; - } - auto end = ptr + size; - ptr = ReadPackedVarintArray(ptr, end, add); - return end == ptr ? ptr : nullptr; -} - -// Helper for verification of utf8 -PROTOBUF_EXPORT -bool VerifyUTF8(StringPiece s, const char* field_name); - -inline bool VerifyUTF8(const std::string* s, const char* field_name) { - return VerifyUTF8(*s, field_name); -} - -// All the string parsers with or without UTF checking and for all CTypes. -PROTOBUF_NODISCARD PROTOBUF_EXPORT const char* InlineGreedyStringParser( - std::string* s, const char* ptr, ParseContext* ctx); - - -template <typename T> -PROTOBUF_NODISCARD const char* FieldParser(uint64_t tag, T& field_parser, - const char* ptr, ParseContext* ctx) { - uint32_t number = tag >> 3; - GOOGLE_PROTOBUF_PARSER_ASSERT(number != 0); - using WireType = internal::WireFormatLite::WireType; - switch (tag & 7) { - case WireType::WIRETYPE_VARINT: { - uint64_t value; - ptr = VarintParse(ptr, &value); - GOOGLE_PROTOBUF_PARSER_ASSERT(ptr); - field_parser.AddVarint(number, value); - break; - } - case WireType::WIRETYPE_FIXED64: { - uint64_t value = UnalignedLoad<uint64_t>(ptr); - ptr += 8; - field_parser.AddFixed64(number, value); - break; - } - case WireType::WIRETYPE_LENGTH_DELIMITED: { - ptr = field_parser.ParseLengthDelimited(number, ptr, ctx); - GOOGLE_PROTOBUF_PARSER_ASSERT(ptr); - break; - } - case WireType::WIRETYPE_START_GROUP: { - ptr = field_parser.ParseGroup(number, ptr, ctx); - GOOGLE_PROTOBUF_PARSER_ASSERT(ptr); - break; - } - case WireType::WIRETYPE_END_GROUP: { - GOOGLE_LOG(FATAL) << "Can't happen"; - break; - } - case WireType::WIRETYPE_FIXED32: { - uint32_t value = UnalignedLoad<uint32_t>(ptr); - ptr += 4; - field_parser.AddFixed32(number, value); - break; - } - default: - return nullptr; - } - return ptr; -} - -template <typename T> -PROTOBUF_NODISCARD const char* WireFormatParser(T& field_parser, - const char* ptr, - ParseContext* ctx) { - while (!ctx->Done(&ptr)) { - uint32_t tag; - ptr = ReadTag(ptr, &tag); - GOOGLE_PROTOBUF_PARSER_ASSERT(ptr != nullptr); - if (tag == 0 || (tag & 7) == 4) { - ctx->SetLastTag(tag); - return ptr; - } - ptr = FieldParser(tag, field_parser, ptr, ctx); - GOOGLE_PROTOBUF_PARSER_ASSERT(ptr != nullptr); - } - return ptr; -} - -// The packed parsers parse repeated numeric primitives directly into the -// corresponding field - -// These are packed varints -PROTOBUF_NODISCARD PROTOBUF_EXPORT const char* PackedInt32Parser( - void* object, const char* ptr, ParseContext* ctx); -PROTOBUF_NODISCARD PROTOBUF_EXPORT const char* PackedUInt32Parser( - void* object, const char* ptr, ParseContext* ctx); -PROTOBUF_NODISCARD PROTOBUF_EXPORT const char* PackedInt64Parser( - void* object, const char* ptr, ParseContext* ctx); -PROTOBUF_NODISCARD PROTOBUF_EXPORT const char* PackedUInt64Parser( - void* object, const char* ptr, ParseContext* ctx); -PROTOBUF_NODISCARD PROTOBUF_EXPORT const char* PackedSInt32Parser( - void* object, const char* ptr, ParseContext* ctx); -PROTOBUF_NODISCARD PROTOBUF_EXPORT const char* PackedSInt64Parser( - void* object, const char* ptr, ParseContext* ctx); -PROTOBUF_NODISCARD PROTOBUF_EXPORT const char* PackedEnumParser( - void* object, const char* ptr, ParseContext* ctx); - -template <typename T> -PROTOBUF_NODISCARD const char* PackedEnumParser(void* object, const char* ptr, - ParseContext* ctx, - bool (*is_valid)(int), - InternalMetadata* metadata, - int field_num) { - return ctx->ReadPackedVarint( - ptr, [object, is_valid, metadata, field_num](uint64_t val) { - if (is_valid(val)) { - static_cast<RepeatedField<int>*>(object)->Add(val); - } else { - WriteVarint(field_num, val, metadata->mutable_unknown_fields<T>()); - } - }); -} - -template <typename T> -PROTOBUF_NODISCARD const char* PackedEnumParserArg( - void* object, const char* ptr, ParseContext* ctx, - bool (*is_valid)(const void*, int), const void* data, - InternalMetadata* metadata, int field_num) { - return ctx->ReadPackedVarint( - ptr, [object, is_valid, data, metadata, field_num](uint64_t val) { - if (is_valid(data, val)) { - static_cast<RepeatedField<int>*>(object)->Add(val); - } else { - WriteVarint(field_num, val, metadata->mutable_unknown_fields<T>()); - } - }); -} - -PROTOBUF_NODISCARD PROTOBUF_EXPORT const char* PackedBoolParser( - void* object, const char* ptr, ParseContext* ctx); -PROTOBUF_NODISCARD PROTOBUF_EXPORT const char* PackedFixed32Parser( - void* object, const char* ptr, ParseContext* ctx); -PROTOBUF_NODISCARD PROTOBUF_EXPORT const char* PackedSFixed32Parser( - void* object, const char* ptr, ParseContext* ctx); -PROTOBUF_NODISCARD PROTOBUF_EXPORT const char* PackedFixed64Parser( - void* object, const char* ptr, ParseContext* ctx); -PROTOBUF_NODISCARD PROTOBUF_EXPORT const char* PackedSFixed64Parser( - void* object, const char* ptr, ParseContext* ctx); -PROTOBUF_NODISCARD PROTOBUF_EXPORT const char* PackedFloatParser( - void* object, const char* ptr, ParseContext* ctx); -PROTOBUF_NODISCARD PROTOBUF_EXPORT const char* PackedDoubleParser( - void* object, const char* ptr, ParseContext* ctx); - -// This is the only recursive parser. -PROTOBUF_NODISCARD PROTOBUF_EXPORT const char* UnknownGroupLiteParse( - std::string* unknown, const char* ptr, ParseContext* ctx); -// This is a helper to for the UnknownGroupLiteParse but is actually also -// useful in the generated code. It uses overload on std::string* vs -// UnknownFieldSet* to make the generated code isomorphic between full and lite. -PROTOBUF_NODISCARD PROTOBUF_EXPORT const char* UnknownFieldParse( - uint32_t tag, std::string* unknown, const char* ptr, ParseContext* ctx); - -} // namespace internal -} // namespace protobuf -} // namespace google - -#include <google/protobuf/port_undef.inc> - -#endif // GOOGLE_PROTOBUF_PARSE_CONTEXT_H__ diff --git a/include/google/protobuf/port.h b/include/google/protobuf/port.h deleted file mode 100644 index a5c060b6f6..0000000000 --- a/include/google/protobuf/port.h +++ /dev/null @@ -1,80 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// 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 -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -// A common header that is included across all protobuf headers. We do our best -// to avoid #defining any macros here; instead we generally put macros in -// port_def.inc and port_undef.inc so they are not visible from outside of -// protobuf. - -#ifndef GOOGLE_PROTOBUF_PORT_H__ -#define GOOGLE_PROTOBUF_PORT_H__ - -#include <cstddef> -#include <new> - - -namespace google { -namespace protobuf { -namespace internal { -inline void SizedDelete(void* p, size_t size) { -#if defined(__cpp_sized_deallocation) - ::operator delete(p, size); -#else - ::operator delete(p); -#endif -} -inline void SizedArrayDelete(void* p, size_t size) { -#if defined(__cpp_sized_deallocation) - ::operator delete[](p, size); -#else - ::operator delete[](p); -#endif -} - -// Tag type used to invoke the constinit constructor overload of classes -// such as ArenaStringPtr and MapFieldBase. Such constructors are internal -// implementation details of the library. -struct ConstantInitialized { - explicit ConstantInitialized() = default; -}; - -// Tag type used to invoke the arena constructor overload of classes such -// as ExtensionSet and MapFieldLite in aggregate initialization. These -// classes typically don't have move/copy constructors, which rules out -// explicit initialization in pre-C++17. -struct ArenaInitialized { - explicit ArenaInitialized() = default; -}; - -} // namespace internal -} // namespace protobuf -} // namespace google - -#endif // GOOGLE_PROTOBUF_PORT_H__ diff --git a/include/google/protobuf/port_def.inc b/include/google/protobuf/port_def.inc deleted file mode 100644 index b7af7807f0..0000000000 --- a/include/google/protobuf/port_def.inc +++ /dev/null @@ -1,928 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// 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 -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (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 file defines common macros that are used in protobuf. -// -// To hide these definitions from the outside world (and to prevent collisions -// if more than one version of protobuf is #included in the same project) you -// must follow this pattern when #including port_def.inc in a header file: -// -// #include "other_header.h" -// #include "message.h" -// // etc. -// -// #include "port_def.inc" // MUST be last header included -// -// // Definitions for this header. -// -// #include "port_undef.inc" -// -// This is a textual header with no include guard, because we want to -// detect/prohibit anytime it is #included twice without a corresponding -// #undef. - -// The definitions in this file are intended to be portable across Clang, -// GCC, and MSVC. Function-like macros are usable without an #ifdef guard. -// Syntax macros (for example, attributes) are always defined, although -// they may be empty. -// -// Some definitions rely on the NDEBUG macro and/or (in MSVC) _DEBUG: -// - https://en.cppreference.com/w/c/error/assert -// - https://docs.microsoft.com/en-us/cpp/preprocessor/predefined-macros#microsoft-specific-predefined-macros -// -// References for predefined macros: -// - Standard: https://en.cppreference.com/w/cpp/preprocessor/replace -// - Clang: https://clang.llvm.org/docs/LanguageExtensions.html -// (see also GCC predefined macros) -// - GCC: https://gcc.gnu.org/onlinedocs/cpp/Predefined-Macros.html -// - MSVC: https://docs.microsoft.com/en-us/cpp/preprocessor/predefined-macros -// - Interactive (Clang/GCC only): https://www.compiler-explorer.com/z/hc6jKd3sj -// -// References for attributes (and extension attributes): -// - Standard: https://en.cppreference.com/w/cpp/language/attributes -// - Clang: https://clang.llvm.org/docs/AttributeReference.html -// - GCC: https://gcc.gnu.org/onlinedocs/gcc/Attribute-Syntax.html -// (see Clang attribute docs as well) -// -// References for standard C++ language conformance (and minimum versions): -// - Clang: https://clang.llvm.org/cxx_status.html -// - GCC: https://gcc.gnu.org/projects/cxx-status.html -// - MSVC: https://docs.microsoft.com/en-us/cpp/overview/visual-cpp-language-conformance -// -// Historical release notes (which can help to determine minimum versions): -// - Clang: https://releases.llvm.org/ -// - GCC: https://gcc.gnu.org/releases.html -// - MSVC: https://docs.microsoft.com/en-us/visualstudio/releases/2019/release-notes-history -// https://docs.microsoft.com/en-us/visualstudio/releasenotes/vs2017-relnotes-history - -// Portable fallbacks for C++20 feature test macros: -// https://en.cppreference.com/w/cpp/feature_test -#ifndef __has_cpp_attribute -#define __has_cpp_attribute(x) 0 -#define PROTOBUF_has_cpp_attribute_DEFINED_ -#endif - -// Portable fallback for Clang's __has_feature macro: -// https://clang.llvm.org/docs/LanguageExtensions.html#has-feature-and-has-extension -#ifndef __has_feature -#define __has_feature(x) 0 -#define PROTOBUF_has_feature_DEFINED_ -#endif - -// Portable fallback for Clang's __has_warning macro: -#ifndef __has_warning -#define __has_warning(x) 0 -#define PROTOBUF_has_warning_DEFINED_ -#endif - -// Portable fallbacks for the __has_attribute macro (GCC and Clang): -// https://clang.llvm.org/docs/LanguageExtensions.html#has-attribute -// https://gcc.gnu.org/onlinedocs/cpp/_005f_005fhas_005fattribute.html -#ifndef __has_attribute -#define __has_attribute(x) 0 -#define PROTOBUF_has_attribute_DEFINED_ -#endif - -// Portable fallback for __has_builtin (GCC and Clang): -// https://clang.llvm.org/docs/LanguageExtensions.html#has-builtin -// https://gcc.gnu.org/onlinedocs/cpp/_005f_005fhas_005fbuiltin.html -#ifndef __has_builtin -#define __has_builtin(x) 0 -#define PROTOBUF_has_builtin_DEFINED_ -#endif - -// Portable PROTOBUF_BUILTIN_BSWAPxx definitions -// Code must check for availability, e.g.: `defined(PROTOBUF_BUILTIN_BSWAP32)` -#ifdef PROTOBUF_BUILTIN_BSWAP16 -#error PROTOBUF_BUILTIN_BSWAP16 was previously defined -#endif -#ifdef PROTOBUF_BUILTIN_BSWAP32 -#error PROTOBUF_BUILTIN_BSWAP32 was previously defined -#endif -#ifdef PROTOBUF_BUILTIN_BSWAP64 -#error PROTOBUF_BUILTIN_BSWAP64 was previously defined -#endif -#if defined(__GNUC__) || __has_builtin(__builtin_bswap16) -#define PROTOBUF_BUILTIN_BSWAP16(x) __builtin_bswap16(x) -#endif -#if defined(__GNUC__) || __has_builtin(__builtin_bswap32) -#define PROTOBUF_BUILTIN_BSWAP32(x) __builtin_bswap32(x) -#endif -#if defined(__GNUC__) || __has_builtin(__builtin_bswap64) -#define PROTOBUF_BUILTIN_BSWAP64(x) __builtin_bswap64(x) -#endif - -// Portable check for GCC minimum version: -// https://gcc.gnu.org/onlinedocs/cpp/Common-Predefined-Macros.html -#if defined(__GNUC__) && defined(__GNUC_MINOR__) \ - && defined(__GNUC_PATCHLEVEL__) -# define PROTOBUF_GNUC_MIN(x, y) \ - (__GNUC__ > (x) || __GNUC__ == (x) && __GNUC_MINOR__ >= (y)) -#else -# define PROTOBUF_GNUC_MIN(x, y) 0 -#endif - -// Portable check for MSVC minimum version: -// https://docs.microsoft.com/en-us/cpp/preprocessor/predefined-macros -#if defined(_MSC_VER) -#define PROTOBUF_MSC_VER_MIN(x) (_MSC_VER >= x) -#else -#define PROTOBUF_MSC_VER_MIN(x) 0 -#endif - -// Portable check for minimum C++ language version: -// https://en.cppreference.com/w/cpp/preprocessor/replace -// https://docs.microsoft.com/en-us/cpp/preprocessor/predefined-macros -#if !defined(_MSVC_LANG) -#define PROTOBUF_CPLUSPLUS_MIN(x) (__cplusplus >= x) -#else -#define PROTOBUF_CPLUSPLUS_MIN(x) (_MSVC_LANG >= x) -#endif - -// Future versions of protobuf will include breaking changes to some APIs. -// This macro can be set to enable these API changes ahead of time, so that -// user code can be updated before upgrading versions of protobuf. -// PROTOBUF_FUTURE_FINAL is used on classes that are historically not marked as -// final, but that may be marked final in future (breaking) releases. -// #define PROTOBUF_FUTURE_BREAKING_CHANGES 1 -// #define PROTOBUF_FUTURE_FINAL final -#define PROTOBUF_FUTURE_FINAL - -#ifdef PROTOBUF_VERSION -#error PROTOBUF_VERSION was previously defined -#endif -#define PROTOBUF_VERSION 3021004 - -#ifdef PROTOBUF_MIN_HEADER_VERSION_FOR_PROTOC -#error PROTOBUF_MIN_HEADER_VERSION_FOR_PROTOC was previously defined -#endif -#define PROTOBUF_MIN_HEADER_VERSION_FOR_PROTOC 3021000 - -#ifdef PROTOBUF_MIN_PROTOC_VERSION -#error PROTOBUF_MIN_PROTOC_VERSION was previously defined -#endif -#define PROTOBUF_MIN_PROTOC_VERSION 3021000 - -#ifdef PROTOBUF_VERSION_SUFFIX -#error PROTOBUF_VERSION_SUFFIX was previously defined -#endif -#define PROTOBUF_VERSION_SUFFIX "" - -#if defined(PROTOBUF_NAMESPACE) || defined(PROTOBUF_NAMESPACE_ID) -#error PROTOBUF_NAMESPACE or PROTOBUF_NAMESPACE_ID was previously defined -#endif -#define PROTOBUF_NAMESPACE "google::protobuf" -#define PROTOBUF_NAMESPACE_ID google::protobuf -#define PROTOBUF_NAMESPACE_OPEN \ - namespace google { \ - namespace protobuf { -#define PROTOBUF_NAMESPACE_CLOSE \ - } /* namespace protobuf */ \ - } /* namespace google */ - -#ifdef PROTOBUF_ALWAYS_INLINE -#error PROTOBUF_ALWAYS_INLINE was previously defined -#endif -// For functions we want to force inline. -#if defined(PROTOBUF_NO_INLINE) -# define PROTOBUF_ALWAYS_INLINE -#elif PROTOBUF_GNUC_MIN(3, 1) -# define PROTOBUF_ALWAYS_INLINE __attribute__((always_inline)) -#elif defined(_MSC_VER) -# define PROTOBUF_ALWAYS_INLINE __forceinline -#else -# define PROTOBUF_ALWAYS_INLINE -#endif - -#ifdef PROTOBUF_NDEBUG_INLINE -#error PROTOBUF_NDEBUG_INLINE was previously defined -#endif -// Avoid excessive inlining in non-optimized builds. Without other optimizations -// the inlining is not going to provide benefits anyway and the huge resulting -// functions, especially in the proto-generated serialization functions, produce -// stack frames so large that many tests run into stack overflows (b/32192897). -#if defined(NDEBUG) || (defined(_MSC_VER) && !defined(_DEBUG)) -# define PROTOBUF_NDEBUG_INLINE PROTOBUF_ALWAYS_INLINE -#else -# define PROTOBUF_NDEBUG_INLINE -#endif - -// Note that PROTOBUF_NOINLINE is an attribute applied to functions, to prevent -// them from being inlined by the compiler. This is different from -// PROTOBUF_NO_INLINE, which is a user-supplied macro that disables forced -// inlining by PROTOBUF_(ALWAYS|NDEBUG)_INLINE. -#ifdef PROTOBUF_NOINLINE -#error PROTOBUF_NOINLINE was previously defined -#endif -#if PROTOBUF_GNUC_MIN(3, 1) -# define PROTOBUF_NOINLINE __attribute__((noinline)) -#elif defined(_MSC_VER) -// Seems to have been around since at least Visual Studio 2005 -# define PROTOBUF_NOINLINE __declspec(noinline) -#endif - -#ifdef PROTOBUF_MUSTTAIL -#error PROTOBUF_MUSTTAIL was previously defined -#endif -#ifdef PROTOBUF_TAILCALL -#error PROTOBUF_TAILCALL was previously defined -#endif -#if __has_cpp_attribute(clang::musttail) && !defined(__arm__) && \ - !defined(_ARCH_PPC) && !defined(__wasm__) && \ - !(defined(_MSC_VER) && defined(_M_IX86)) && \ - !(defined(__NDK_MAJOR__) && __NDK_MAJOR <= 24) -# ifndef PROTO2_OPENSOURCE -// Compilation fails on ARM32: b/195943306 -// Compilation fails on powerpc64le: b/187985113 -// Compilation fails on X86 Windows: -// https://github.com/llvm/llvm-project/issues/53271 -# endif -#define PROTOBUF_MUSTTAIL [[clang::musttail]] -#define PROTOBUF_TAILCALL true -#else -#define PROTOBUF_MUSTTAIL -#define PROTOBUF_TAILCALL false -#endif - -#ifdef PROTOBUF_EXCLUSIVE_LOCKS_REQUIRED -#error PROTOBUF_EXCLUSIVE_LOCKS_REQUIRED was previously defined -#endif -#if __has_attribute(exclusive_locks_required) -#define PROTOBUF_EXCLUSIVE_LOCKS_REQUIRED(...) \ - __attribute__((exclusive_locks_required(__VA_ARGS__))) -#else -#define PROTOBUF_EXCLUSIVE_LOCKS_REQUIRED(...) -#endif - -#ifdef PROTOBUF_NO_THREAD_SAFETY_ANALYSIS -#error PROTOBUF_NO_THREAD_SAFETY_ANALYSIS was previously defined -#endif -#if __has_attribute(no_thread_safety_analysis) -#define PROTOBUF_NO_THREAD_SAFETY_ANALYSIS \ - __attribute__((no_thread_safety_analysis)) -#else -#define PROTOBUF_NO_THREAD_SAFETY_ANALYSIS -#endif - -#ifdef PROTOBUF_GUARDED_BY -#error PROTOBUF_GUARDED_BY was previously defined -#endif -#if __has_attribute(guarded_by) -#define PROTOBUF_GUARDED_BY(x) __attribute__((guarded_by(x))) -#else -#define PROTOBUF_GUARDED_BY(x) -#endif - -#ifdef PROTOBUF_LOCKS_EXCLUDED -#error PROTOBUF_LOCKS_EXCLUDED was previously defined -#endif -#if __has_attribute(locks_excluded) -#define PROTOBUF_LOCKS_EXCLUDED(...) \ - __attribute__((locks_excluded(__VA_ARGS__))) -#else -#define PROTOBUF_LOCKS_EXCLUDED(...) -#endif - -#ifdef PROTOBUF_COLD -#error PROTOBUF_COLD was previously defined -#endif -#if __has_attribute(cold) || PROTOBUF_GNUC_MIN(4, 3) -# define PROTOBUF_COLD __attribute__((cold)) -#else -# define PROTOBUF_COLD -#endif - -#ifdef PROTOBUF_SECTION_VARIABLE -#error PROTOBUF_SECTION_VARIABLE was previously defined -#endif -#if (__has_attribute(section) || defined(__GNUC__)) && defined(__ELF__) -// Place a variable in the given ELF section. -# define PROTOBUF_SECTION_VARIABLE(x) __attribute__((section(#x))) -#else -# define PROTOBUF_SECTION_VARIABLE(x) -#endif - -#if defined(PROTOBUF_DEPRECATED) -#error PROTOBUF_DEPRECATED was previously defined -#endif -#if defined(PROTOBUF_DEPRECATED_MSG) -#error PROTOBUF_DEPRECATED_MSG was previously defined -#endif -#if __has_attribute(deprecated) || PROTOBUF_GNUC_MIN(3, 0) -# define PROTOBUF_DEPRECATED __attribute__((deprecated)) -# define PROTOBUF_DEPRECATED_MSG(msg) __attribute__((deprecated(msg))) -#elif defined(_MSC_VER) -# define PROTOBUF_DEPRECATED __declspec(deprecated) -# define PROTOBUF_DEPRECATED_MSG(msg) __declspec(deprecated(msg)) -#else -# define PROTOBUF_DEPRECATED -# define PROTOBUF_DEPRECATED_MSG(msg) -#endif - -#if defined(PROTOBUF_DEPRECATED_ENUM) -#error PROTOBUF_DEPRECATED_ENUM was previously defined -#endif -#if defined(__clang__) || PROTOBUF_GNUC_MIN(6, 0) -// https://gcc.gnu.org/gcc-6/changes.html -# define PROTOBUF_DEPRECATED_ENUM __attribute__((deprecated)) -#else -# define PROTOBUF_DEPRECATED_ENUM -#endif - -#ifdef PROTOBUF_FUNC_ALIGN -#error PROTOBUF_FUNC_ALIGN was previously defined -#endif -#if __has_attribute(aligned) || PROTOBUF_GNUC_MIN(4, 3) -#define PROTOBUF_FUNC_ALIGN(bytes) __attribute__((aligned(bytes))) -#else -#define PROTOBUF_FUNC_ALIGN(bytes) -#endif - -#ifdef PROTOBUF_RETURNS_NONNULL -#error PROTOBUF_RETURNS_NONNULL was previously defined -#endif -#if __has_attribute(returns_nonnull) || PROTOBUF_GNUC_MIN(4, 9) -#define PROTOBUF_RETURNS_NONNULL __attribute__((returns_nonnull)) -#else -#define PROTOBUF_RETURNS_NONNULL -#endif - -#ifdef PROTOBUF_ATTRIBUTE_REINITIALIZES -#error PROTOBUF_ATTRIBUTE_REINITIALIZES was previously defined -#endif -#if __has_cpp_attribute(clang::reinitializes) -#define PROTOBUF_ATTRIBUTE_REINITIALIZES [[clang::reinitializes]] -#else -#define PROTOBUF_ATTRIBUTE_REINITIALIZES -#endif - -// The minimum library version which works with the current version of the -// headers. -#define GOOGLE_PROTOBUF_MIN_LIBRARY_VERSION 3021000 - -#ifdef PROTOBUF_RTTI -#error PROTOBUF_RTTI was previously defined -#endif -#if defined(GOOGLE_PROTOBUF_NO_RTTI) && GOOGLE_PROTOBUF_NO_RTTI -// A user-provided definition GOOGLE_PROTOBUF_NO_RTTI=1 disables RTTI. -#define PROTOBUF_RTTI 0 -#elif defined(__cpp_rtti) -// https://en.cppreference.com/w/cpp/feature_test -#define PROTOBUF_RTTI 1 -#elif __has_feature(cxx_rtti) -// https://clang.llvm.org/docs/LanguageExtensions.html#c-rtti -#define PROTOBUF_RTTI 1 -#elif defined(__GXX_RTTI) -// https://gcc.gnu.org/onlinedocs/cpp/Common-Predefined-Macros.html -#define PROTOBUF_RTTI 1 -#elif defined(_CPPRTTI) -// https://docs.microsoft.com/en-us/cpp/build/reference/gr-enable-run-time-type-information -#define PROTOBUF_RTTI 1 -#else -#define PROTOBUF_RTTI 0 -#endif - -// Returns the offset of the given field within the given aggregate type. -// This is equivalent to the ANSI C offsetof() macro. However, according -// to the C++ standard, offsetof() only works on POD types, and GCC -// enforces this requirement with a warning. In practice, this rule is -// unnecessarily strict; there is probably no compiler or platform on -// which the offsets of the direct fields of a class are non-constant. -// Fields inherited from superclasses *can* have non-constant offsets, -// but that's not what this macro will be used for. -#ifdef PROTOBUF_FIELD_OFFSET -#error PROTOBUF_FIELD_OFFSET was previously defined -#endif -#if defined(__clang__) -// For Clang we use __builtin_offsetof() and suppress the warning, -// to avoid Control Flow Integrity and UBSan vptr sanitizers from -// crashing while trying to validate the invalid reinterpret_casts. -#define PROTOBUF_FIELD_OFFSET(TYPE, FIELD) \ - _Pragma("clang diagnostic push") \ - _Pragma("clang diagnostic ignored \"-Winvalid-offsetof\"") \ - __builtin_offsetof(TYPE, FIELD) \ - _Pragma("clang diagnostic pop") -#elif PROTOBUF_GNUC_MIN(4, 8) -#define PROTOBUF_FIELD_OFFSET(TYPE, FIELD) __builtin_offsetof(TYPE, FIELD) -#else // defined(__clang__) -// Note that we calculate relative to the pointer value 16 here since if we -// just use zero, GCC complains about dereferencing a NULL pointer. We -// choose 16 rather than some other number just in case the compiler would -// be confused by an unaligned pointer. -#define PROTOBUF_FIELD_OFFSET(TYPE, FIELD) \ - static_cast< ::uint32_t>(reinterpret_cast<const char*>( \ - &reinterpret_cast<const TYPE*>(16)->FIELD) - \ - reinterpret_cast<const char*>(16)) -#endif - -#ifdef PROTOBUF_EXPORT -#error PROTOBUF_EXPORT was previously defined -#endif - -#if defined(PROTOBUF_USE_DLLS) && defined(_MSC_VER) -# if defined(LIBPROTOBUF_EXPORTS) -# define PROTOBUF_EXPORT __declspec(dllexport) -# define PROTOBUF_EXPORT_TEMPLATE_DECLARE -# define PROTOBUF_EXPORT_TEMPLATE_DEFINE __declspec(dllexport) -# else -# define PROTOBUF_EXPORT __declspec(dllimport) -# define PROTOBUF_EXPORT_TEMPLATE_DECLARE -# define PROTOBUF_EXPORT_TEMPLATE_DEFINE __declspec(dllimport) -# endif // defined(LIBPROTOBUF_EXPORTS) -#elif defined(PROTOBUF_USE_DLLS) && defined(LIBPROTOBUF_EXPORTS) -# define PROTOBUF_EXPORT __attribute__((visibility("default"))) -# define PROTOBUF_EXPORT_TEMPLATE_DECLARE __attribute__((visibility("default"))) -# define PROTOBUF_EXPORT_TEMPLATE_DEFINE -#else -# define PROTOBUF_EXPORT -# define PROTOBUF_EXPORT_TEMPLATE_DECLARE -# define PROTOBUF_EXPORT_TEMPLATE_DEFINE -#endif - -#ifdef PROTOC_EXPORT -#error PROTOC_EXPORT was previously defined -#endif - -#if defined(PROTOBUF_USE_DLLS) && defined(_MSC_VER) -# if defined(LIBPROTOC_EXPORTS) -# define PROTOC_EXPORT __declspec(dllexport) -# else -# define PROTOC_EXPORT __declspec(dllimport) -# endif // defined(LIBPROTOC_EXPORTS) -#elif defined(PROTOBUF_USE_DLLS) && defined(LIBPROTOC_EXPORTS) -# define PROTOC_EXPORT __attribute__((visibility("default"))) -#else -# define PROTOC_EXPORT -#endif - -#if defined(PROTOBUF_PREDICT_TRUE) || defined(PROTOBUF_PREDICT_FALSE) -#error PROTOBUF_PREDICT_(TRUE|FALSE) was previously defined -#endif -#if PROTOBUF_GNUC_MIN(3, 0) -# define PROTOBUF_PREDICT_TRUE(x) (__builtin_expect(false || (x), true)) -# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false)) -#else -# define PROTOBUF_PREDICT_TRUE(x) (x) -# define PROTOBUF_PREDICT_FALSE(x) (x) -#endif - -#ifdef PROTOBUF_NODISCARD -#error PROTOBUF_NODISCARD was previously defined -#endif -#if __has_cpp_attribute(nodiscard) && PROTOBUF_CPLUSPLUS_MIN(201703L) -#define PROTOBUF_NODISCARD [[nodiscard]] -#elif __has_attribute(warn_unused_result) || PROTOBUF_GNUC_MIN(4, 8) -#define PROTOBUF_NODISCARD __attribute__((warn_unused_result)) -#else -#define PROTOBUF_NODISCARD -#endif - -// Enable all stable experiments if this flag is set. This allows us to group -// all of these experiments under a single build flag, which can be enabled in -// the protobuf.stable-experiments TAP project. -#ifdef PROTOBUF_ENABLE_STABLE_EXPERIMENTS -#define PROTOBUF_FORCE_MESSAGE_OWNED_ARENA -#endif // !PROTOBUF_ENABLE_STABLE_EXPERIMENTS - -#ifdef PROTOBUF_FORCE_COPY_IN_RELEASE -#error PROTOBUF_FORCE_COPY_IN_RELEASE was previously defined -#endif - -#ifdef PROTOBUF_FORCE_COPY_IN_SWAP -#error PROTOBUF_FORCE_COPY_IN_SWAP was previously defined -#endif - -#ifdef PROTOBUF_FORCE_COPY_IN_MOVE -#error PROTOBUF_FORCE_COPY_IN_MOVE was previously defined -#endif - -#ifdef PROTOBUF_FORCE_RESET_IN_CLEAR -#error PROTOBUF_FORCE_RESET_IN_CLEAR was previously defined -#endif - -// Force copy the default string to a string field so that non-optimized builds -// have harder-to-rely-on address stability. -#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING -#error PROTOBUF_FORCE_COPY_DEFAULT_STRING was previously defined -#endif - -#ifdef PROTOBUF_FALLTHROUGH_INTENDED -#error PROTOBUF_FALLTHROUGH_INTENDED was previously defined -#endif -#if __has_cpp_attribute(fallthrough) -#define PROTOBUF_FALLTHROUGH_INTENDED [[fallthrough]] -#elif __has_feature(cxx_attributes) && __has_warning("-Wimplicit-fallthrough") -#define PROTOBUF_FALLTHROUGH_INTENDED [[clang::fallthrough]] -#elif PROTOBUF_GNUC_MIN(7, 0) -#define PROTOBUF_FALLTHROUGH_INTENDED [[gnu::fallthrough]] -#else -#define PROTOBUF_FALLTHROUGH_INTENDED -#endif - -// PROTOBUF_ASSUME(pred) tells the compiler that it can assume pred is true. To -// be safe, we also validate the assumption with a GOOGLE_DCHECK in unoptimized -// builds. The macro does not do anything useful if the compiler does not -// support __builtin_assume. -#ifdef PROTOBUF_ASSUME -#error PROTOBUF_ASSUME was previously defined -#endif -#if __has_builtin(__builtin_assume) -#define PROTOBUF_ASSUME(pred) \ - GOOGLE_DCHECK(pred); \ - __builtin_assume(pred) -#else -#define PROTOBUF_ASSUME(pred) GOOGLE_DCHECK(pred) -#endif - -// Specify memory alignment for structs, classes, etc. -// Use like: -// class PROTOBUF_ALIGNAS(16) MyClass { ... } -// PROTOBUF_ALIGNAS(16) int array[4]; -// -// In most places you can use the C++11 keyword "alignas", which is preferred. -// -// But compilers have trouble mixing __attribute__((...)) syntax with -// alignas(...) syntax. -// -// Doesn't work in clang or gcc: -// struct alignas(16) __attribute__((packed)) S { char c; }; -// Works in clang but not gcc: -// struct __attribute__((packed)) alignas(16) S2 { char c; }; -// Works in clang and gcc: -// struct alignas(16) S3 { char c; } __attribute__((packed)); -// -// There are also some attributes that must be specified *before* a class -// definition: visibility (used for exporting functions/classes) is one of -// these attributes. This means that it is not possible to use alignas() with a -// class that is marked as exported. -#ifdef PROTOBUF_ALIGNAS -#error PROTOBUF_ALIGNAS was previously defined -#endif -#if defined(_MSC_VER) -#define PROTOBUF_ALIGNAS(byte_alignment) __declspec(align(byte_alignment)) -#elif PROTOBUF_GNUC_MIN(3, 0) -#define PROTOBUF_ALIGNAS(byte_alignment) \ - __attribute__((aligned(byte_alignment))) -#else -#define PROTOBUF_ALIGNAS(byte_alignment) alignas(byte_alignment) -#endif - -#ifdef PROTOBUF_FINAL -#error PROTOBUF_FINAL was previously defined -#endif -#define PROTOBUF_FINAL final - -#ifdef PROTOBUF_THREAD_LOCAL -#error PROTOBUF_THREAD_LOCAL was previously defined -#endif -#if defined(_MSC_VER) -#define PROTOBUF_THREAD_LOCAL __declspec(thread) -#else -#define PROTOBUF_THREAD_LOCAL __thread -#endif - -// TODO(b/228173843): cleanup PROTOBUF_LITTLE_ENDIAN in various 3p forks. -#if (defined(__BYTE_ORDER__) && defined(__ORDER_LITTLE_ENDIAN__) && \ - __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__) -#define PROTOBUF_LITTLE_ENDIAN 1 -#ifdef PROTOBUF_BIG_ENDIAN -#error Conflicting PROTOBUF_BIG_ENDIAN was previously defined -#endif -#elif defined(__BYTE_ORDER__) && defined(__ORDER_BIG_ENDIAN__) && \ - __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__ -#define PROTOBUF_BIG_ENDIAN 1 -#elif defined(_WIN32) || defined(__x86_64__) || defined(__aarch64__) -#define PROTOBUF_LITTLE_ENDIAN 1 -#else -#error "endian detection failed for current compiler" -#endif - -// For enabling message owned arena, one major blocker is semantic change from -// moving to copying when there is ownership transfer (e.g., move ctor, swap, -// set allocated, release). This change not only causes performance regression -// but also breaks users code (e.g., dangling reference). For top-level -// messages, since it owns the arena, we can mitigate the issue by transferring -// ownership of arena. However, we cannot do that for nested messages. In order -// to tell how many usages of nested messages affected by message owned arena, -// we need to simulate the arena ownership. -// This experiment is purely for the purpose of gathering data. All code guarded -// by this flag is supposed to be removed after this experiment. -#define PROTOBUF_MESSAGE_OWNED_ARENA_EXPERIMENT -#ifdef PROTOBUF_CONSTINIT -#error PROTOBUF_CONSTINIT was previously defined -#endif -#if defined(__cpp_constinit) && !defined(_MSC_VER) -#define PROTOBUF_CONSTINIT constinit -#define PROTOBUF_CONSTEXPR constexpr -// Some older Clang versions incorrectly raise an error about -// constant-initializing weak default instance pointers. Versions 12.0 and -// higher seem to work, except that XCode 12.5.1 shows the error even though it -// uses Clang 12.0.5. -// Clang-cl on Windows raises error also. -#elif !defined(_MSC_VER) && __has_cpp_attribute(clang::require_constant_initialization) && \ - ((defined(__APPLE__) && __clang_major__ >= 13) || \ - (!defined(__APPLE__) && __clang_major__ >= 12)) -#define PROTOBUF_CONSTINIT [[clang::require_constant_initialization]] -#define PROTOBUF_CONSTEXPR constexpr -#elif PROTOBUF_GNUC_MIN(12, 2) -#define PROTOBUF_CONSTINIT __constinit -#define PROTOBUF_CONSTEXPR constexpr -// MSVC 17 currently seems to raise an error about constant-initialized pointers. -#elif defined(_MSC_VER) && _MSC_VER >= 1930 -#define PROTOBUF_CONSTINIT -#define PROTOBUF_CONSTEXPR constexpr -#else -#define PROTOBUF_CONSTINIT -#define PROTOBUF_CONSTEXPR -#endif - -// Some globals with an empty non-trivial destructor are annotated with -// no_destroy for performance reasons. It reduces the cost of these globals in -// non-opt mode and under sanitizers. -#ifdef PROTOBUF_ATTRIBUTE_NO_DESTROY -#error PROTOBUF_ATTRIBUTE_NO_DESTROY was previously defined -#endif -#if __has_cpp_attribute(clang::no_destroy) -#define PROTOBUF_ATTRIBUTE_NO_DESTROY [[clang::no_destroy]] -#else -#define PROTOBUF_ATTRIBUTE_NO_DESTROY -#endif - -// Force clang to always emit complete debug info for a type. -// Clang uses constructor homing to determine when to emit debug info for a -// type. If the constructor of a type is never used, which can happen in some -// cases where member variables are constructed in place for optimization -// purposes (see b/208803175 for an example), the type will have incomplete -// debug info unless this attribute is used. -#ifdef PROTOBUF_ATTRIBUTE_STANDALONE_DEBUG -#error PROTOBUF_ATTRIBUTE_STANDALONE_DEBUG was previously defined -#endif -#if __has_cpp_attribute(clang::standalone_debug) -#define PROTOBUF_ATTRIBUTE_STANDALONE_DEBUG [[clang::standalone_debug]] -#else -#define PROTOBUF_ATTRIBUTE_STANDALONE_DEBUG -#endif - -// Protobuf extensions and reflection require registration of the protos linked -// in the binary. Not until everything is registered does the runtime have a -// complete view on all protos. When code is using reflection or extensions -// in between registration calls this can lead to surprising behavior. By -// having the registration run first we mitigate this scenario. -// Highest priority is 101. We use 102 for registration, to allow code that -// really wants to higher priority to still beat us. Some initialization happens -// at higher priority, though, since it is needed before registration. -#ifdef PROTOBUF_ATTRIBUTE_INIT_PRIORITY1 -#error PROTOBUF_ATTRIBUTE_INIT_PRIORITY1 was previously defined -#endif -#ifdef PROTOBUF_ATTRIBUTE_INIT_PRIORITY2 -#error PROTOBUF_ATTRIBUTE_INIT_PRIORITY2 was previously defined -#endif -#if PROTOBUF_GNUC_MIN(3, 0) && (!defined(__APPLE__) || defined(__clang__)) && \ - !((defined(sun) || defined(__sun)) && \ - (defined(__SVR4) || defined(__svr4__))) -#define PROTOBUF_ATTRIBUTE_INIT_PRIORITY1 __attribute__((init_priority((101)))) -#define PROTOBUF_ATTRIBUTE_INIT_PRIORITY2 __attribute__((init_priority((102)))) -#else -#define PROTOBUF_ATTRIBUTE_INIT_PRIORITY1 -#define PROTOBUF_ATTRIBUTE_INIT_PRIORITY2 -#endif - -#ifdef PROTOBUF_PRAGMA_INIT_SEG -#error PROTOBUF_PRAGMA_INIT_SEG was previously defined -#endif -#ifdef _MSC_VER -#define PROTOBUF_PRAGMA_INIT_SEG __pragma(init_seg(lib)) -#else -#define PROTOBUF_PRAGMA_INIT_SEG -#endif - -#ifdef PROTOBUF_ATTRIBUTE_WEAK -#error PROTOBUF_ATTRIBUTE_WEAK was previously defined -#endif -#if __has_attribute(weak) && \ - !defined(__APPLE__) && \ - (!defined(_WIN32) || __clang_major__ < 9) && \ - !defined(__MINGW32__) -#define PROTOBUF_ATTRIBUTE_WEAK __attribute__((weak)) -#define PROTOBUF_HAVE_ATTRIBUTE_WEAK 1 -#else -#define PROTOBUF_ATTRIBUTE_WEAK -#define PROTOBUF_HAVE_ATTRIBUTE_WEAK 0 -#endif - -// Macros to detect sanitizers. -#ifdef PROTOBUF_ASAN -#error PROTOBUF_ASAN was previously defined -#endif -#ifdef PROTOBUF_MSAN -#error PROTOBUF_MSAN was previously defined -#endif -#ifdef PROTOBUF_TSAN -#error PROTOBUF_TSAN was previously defined -#endif -#if defined(__clang__) -# if __has_feature(address_sanitizer) -# define PROTOBUF_ASAN 1 -# endif -# if __has_feature(thread_sanitizer) -# define PROTOBUF_TSAN 1 -# endif -# if __has_feature(memory_sanitizer) -# define PROTOBUF_MSAN 1 -# endif -#elif PROTOBUF_GNUC_MIN(3, 0) -// Double-guard is needed for -Wundef: -# ifdef __SANITIZE_ADDRESS__ -# if __SANITIZE_ADDRESS__ -# define PROTOBUF_ASAN 1 -# endif -# endif -# ifdef __SANITIZE_THREAD__ -# if __SANITIZE_THREAD__ -# define PROTOBUF_TSAN 1 -# endif -# endif -#endif - -// Tail call table-driven parsing can be enabled by defining -// PROTOBUF_EXPERIMENTAL_USE_TAIL_CALL_TABLE_PARSER at compilation time. Note -// that this macro is for small-scale testing only, and is not supported. -#ifdef PROTOBUF_TAIL_CALL_TABLE_PARSER_ENABLED -#error PROTOBUF_TAIL_CALL_TABLE_PARSER_ENABLED was previously declared -#endif -#if defined(PROTOBUF_EXPERIMENTAL_USE_TAIL_CALL_TABLE_PARSER) -#define PROTOBUF_TAIL_CALL_TABLE_PARSER_ENABLED 1 -#endif - -#define PROTOBUF_TC_PARAM_DECL \ - ::google::protobuf::MessageLite *msg, const char *ptr, \ - ::google::protobuf::internal::ParseContext *ctx, \ - const ::google::protobuf::internal::TcParseTableBase *table, \ - uint64_t hasbits, ::google::protobuf::internal::TcFieldData data - -#ifdef PROTOBUF_UNUSED -#error PROTOBUF_UNUSED was previously defined -#endif -#if __has_cpp_attribute(maybe_unused) || \ - (PROTOBUF_MSC_VER_MIN(1911) && PROTOBUF_CPLUSPLUS_MIN(201703L)) -#define PROTOBUF_UNUSED [[maybe_unused]] -#elif __has_attribute(unused) || PROTOBUF_GNUC_MIN(3, 0) -#define PROTOBUF_UNUSED __attribute__((__unused__)) -#else -#define PROTOBUF_UNUSED -#endif - -// ThreadSafeArenaz is turned off completely in opensource builds. - -// Windows declares several inconvenient macro names. We #undef them and then -// restore them in port_undef.inc. -#ifdef _MSC_VER -#pragma push_macro("CREATE_NEW") -#undef CREATE_NEW -#pragma push_macro("DELETE") -#undef DELETE -#pragma push_macro("DOUBLE_CLICK") -#undef DOUBLE_CLICK -#pragma push_macro("ERROR") -#undef ERROR -#pragma push_macro("ERROR_BUSY") -#undef ERROR_BUSY -#pragma push_macro("ERROR_INSTALL_FAILED") -#undef ERROR_INSTALL_FAILED -#pragma push_macro("ERROR_NOT_FOUND") -#undef ERROR_NOT_FOUND -#pragma push_macro("GetClassName") -#undef GetClassName -#pragma push_macro("GetMessage") -#undef GetMessage -#pragma push_macro("GetObject") -#undef GetObject -#pragma push_macro("IGNORE") -#undef IGNORE -#pragma push_macro("IN") -#undef IN -#pragma push_macro("INPUT_KEYBOARD") -#undef INPUT_KEYBOARD -#pragma push_macro("NO_ERROR") -#undef NO_ERROR -#pragma push_macro("OUT") -#undef OUT -#pragma push_macro("OPTIONAL") -#undef OPTIONAL -#pragma push_macro("min") -#undef min -#pragma push_macro("max") -#undef max -#pragma push_macro("NEAR") -#undef NEAR -#pragma push_macro("NO_DATA") -#undef NO_DATA -#pragma push_macro("REASON_UNKNOWN") -#undef REASON_UNKNOWN -#pragma push_macro("SERVICE_DISABLED") -#undef SERVICE_DISABLED -#pragma push_macro("SEVERITY_ERROR") -#undef SEVERITY_ERROR -#pragma push_macro("STATUS_PENDING") -#undef STATUS_PENDING -#pragma push_macro("STRICT") -#undef STRICT -#pragma push_macro("timezone") -#undef timezone -#endif // _MSC_VER - -#ifdef __APPLE__ -// Inconvenient macro names from usr/include/math.h in some macOS SDKs. -#pragma push_macro("DOMAIN") -#undef DOMAIN -// Inconvenient macro names from /usr/include/mach/boolean.h in some macOS SDKs. -#pragma push_macro("TRUE") -#undef TRUE -#pragma push_macro("FALSE") -#undef FALSE -// Inconvenient macro names from usr/include/sys/syslimits.h in some macOS SDKs. -#pragma push_macro("UID_MAX") -#undef UID_MAX -#endif // __APPLE__ - -#if defined(__clang__) || PROTOBUF_GNUC_MIN(3, 0) || defined(_MSC_VER) -// Don't let Objective-C Macros interfere with proto identifiers with the same -// name. -#pragma push_macro("DEBUG") -#undef DEBUG -#endif // defined(__clang__) || PROTOBUF_GNUC_MIN(3, 0) || defined(_MSC_VER) - -#if PROTOBUF_GNUC_MIN(3, 0) -// GCC does not allow disabling diagnostics within an expression: -// https://gcc.gnu.org/bugzilla/show_bug.cgi?id=60875, so we disable this one -// globally even though it's only used for PROTOBUF_FIELD_OFFSET. -#pragma GCC diagnostic push -#pragma GCC diagnostic ignored "-Winvalid-offsetof" -#endif - -// Silence some MSVC warnings in all our code. -#ifdef _MSC_VER -#pragma warning(push) -// For non-trivial unions -#pragma warning(disable : 4582) -#pragma warning(disable : 4583) -// For init_seg(lib) -#pragma warning(disable : 4073) -// To silence the fact that we will pop this push from another file -#pragma warning(disable : 5031) -// Conditional expression is constant -#pragma warning(disable: 4127) -// decimal digit terminates octal escape sequence -#pragma warning(disable: 4125) -#endif - -// We don't want code outside port_def doing complex testing, so -// remove our portable condition test macros to nudge folks away from -// using it themselves. -#ifdef PROTOBUF_has_cpp_attribute_DEFINED_ -# undef __has_cpp_attribute -# undef PROTOBUF_has_cpp_attribute_DEFINED_ -#endif -#ifdef PROTOBUF_has_feature_DEFINED_ -# undef __has_feature -# undef PROTOBUF_has_feature_DEFINED_ -#endif -#ifdef PROTOBUF_has_warning_DEFINED_ -# undef __has_warning -# undef PROTOBUF_has_warning_DEFINED_ -#endif -#ifdef PROTOBUF_has_attribute_DEFINED_ -# undef __has_attribute -# undef PROTOBUF_has_attribute_DEFINED_ -#endif -#ifdef PROTOBUF_has_builtin_DEFINED_ -# undef __has_builtin -# undef PROTOBUF_has_builtin_DEFINED_ -#endif diff --git a/include/google/protobuf/port_undef.inc b/include/google/protobuf/port_undef.inc deleted file mode 100644 index e880fa5c59..0000000000 --- a/include/google/protobuf/port_undef.inc +++ /dev/null @@ -1,160 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// 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 -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -// #undefs all macros defined in port_def.inc. See comments in port_def.inc -// for more info. - -#ifndef PROTOBUF_NAMESPACE -#error "port_undef.inc must be included after port_def.inc" -#endif - -#undef PROTOBUF_BUILTIN_BSWAP16 -#undef PROTOBUF_BUILTIN_BSWAP32 -#undef PROTOBUF_BUILTIN_BSWAP64 -#undef PROTOBUF_GNUC_MIN -#undef PROTOBUF_MSC_VER_MIN -#undef PROTOBUF_CPLUSPLUS_MIN -#undef PROTOBUF_NAMESPACE -#undef PROTOBUF_NAMESPACE_ID -#undef PROTOBUF_ALWAYS_INLINE -#undef PROTOBUF_NDEBUG_INLINE -#undef PROTOBUF_MUSTTAIL -#undef PROTOBUF_TAILCALL -#undef PROTOBUF_COLD -#undef PROTOBUF_NOINLINE -#undef PROTOBUF_SECTION_VARIABLE -#undef PROTOBUF_DEPRECATED -#undef PROTOBUF_DEPRECATED_ENUM -#undef PROTOBUF_DEPRECATED_MSG -#undef PROTOBUF_FUNC_ALIGN -#undef PROTOBUF_RETURNS_NONNULL -#undef PROTOBUF_ATTRIBUTE_REINITIALIZES -#undef PROTOBUF_RTTI -#undef PROTOBUF_VERSION -#undef PROTOBUF_VERSION_SUFFIX -#undef PROTOBUF_FIELD_OFFSET -#undef PROTOBUF_MIN_HEADER_VERSION_FOR_PROTOC -#undef PROTOBUF_MIN_PROTOC_VERSION -#undef PROTOBUF_PREDICT_TRUE -#undef PROTOBUF_PREDICT_FALSE -#undef PROTOBUF_FALLTHROUGH_INTENDED -#undef PROTOBUF_EXPORT -#undef PROTOC_EXPORT -#undef PROTOBUF_NODISCARD -#undef PROTOBUF_FORCE_COPY_IN_RELEASE -#undef PROTOBUF_FORCE_COPY_IN_SWAP -#undef PROTOBUF_FORCE_COPY_IN_MOVE -#undef PROTOBUF_FORCE_RESET_IN_CLEAR -#undef PROTOBUF_FORCE_COPY_DEFAULT_STRING -#undef PROTOBUF_NAMESPACE_OPEN -#undef PROTOBUF_NAMESPACE_CLOSE -#undef PROTOBUF_UNUSED -#undef PROTOBUF_ASSUME -#undef PROTOBUF_EXPORT_TEMPLATE_DECLARE -#undef PROTOBUF_EXPORT_TEMPLATE_DEFINE -#undef PROTOBUF_ALIGNAS -#undef PROTOBUF_FINAL -#undef PROTOBUF_FUTURE_FINAL -#undef PROTOBUF_THREAD_LOCAL -#undef PROTOBUF_LITTLE_ENDIAN -#undef PROTOBUF_BIG_ENDIAN -#undef PROTOBUF_MESSAGE_OWNED_ARENA_EXPERIMENT -#undef PROTOBUF_CONSTINIT -#undef PROTOBUF_CONSTEXPR -#undef PROTOBUF_ATTRIBUTE_WEAK -#undef PROTOBUF_HAVE_ATTRIBUTE_WEAK -#undef PROTOBUF_ATTRIBUTE_NO_DESTROY -#undef PROTOBUF_ATTRIBUTE_STANDALONE_DEBUG -#undef PROTOBUF_ATTRIBUTE_INIT_PRIORITY1 -#undef PROTOBUF_ATTRIBUTE_INIT_PRIORITY2 -#undef PROTOBUF_PRAGMA_INIT_SEG -#undef PROTOBUF_ASAN -#undef PROTOBUF_MSAN -#undef PROTOBUF_TSAN -#undef PROTOBUF_TAIL_CALL_TABLE_PARSER_ENABLED -#undef PROTOBUF_TC_PARAM_DECL -#undef PROTOBUF_EXCLUSIVE_LOCKS_REQUIRED -#undef PROTOBUF_LOCKS_EXCLUDED -#undef PROTOBUF_NO_THREAD_SAFETY_ANALYSIS -#undef PROTOBUF_GUARDED_BY - -#ifdef PROTOBUF_FUTURE_BREAKING_CHANGES -#undef PROTOBUF_FUTURE_BREAKING_CHANGES -#endif - -// Restore macro that may have been #undef'd in port_def.inc. -#ifdef _MSC_VER -#pragma pop_macro("CREATE_NEW") -#pragma pop_macro("DELETE") -#pragma pop_macro("DOUBLE_CLICK") -#pragma pop_macro("ERROR") -#pragma pop_macro("ERROR_BUSY") -#pragma pop_macro("ERROR_INSTALL_FAILED") -#pragma pop_macro("ERROR_NOT_FOUND") -#pragma pop_macro("GetClassName") -#pragma pop_macro("GetMessage") -#pragma pop_macro("GetObject") -#pragma pop_macro("IGNORE") -#pragma pop_macro("IN") -#pragma pop_macro("INPUT_KEYBOARD") -#pragma pop_macro("OUT") -#pragma pop_macro("OPTIONAL") -#pragma pop_macro("min") -#pragma pop_macro("max") -#pragma pop_macro("NEAR") -#pragma pop_macro("NO_DATA") -#pragma pop_macro("NO_ERROR") -#pragma pop_macro("REASON_UNKNOWN") -#pragma pop_macro("SERVICE_DISABLED") -#pragma pop_macro("SEVERITY_ERROR") -#pragma pop_macro("STRICT") -#pragma pop_macro("STATUS_PENDING") -#pragma pop_macro("timezone") -#endif - -#ifdef __APPLE__ -#pragma pop_macro("DOMAIN") -#pragma pop_macro("TRUE") -#pragma pop_macro("FALSE") -#pragma pop_macro("UID_MAX") -#endif // __APPLE__ - -#if defined(__clang__) || defined(__GNUC__) || defined(_MSC_VER) -#pragma pop_macro("DEBUG") -#endif // defined(__clang__) || defined(__GNUC__) || defined(_MSC_VER) - -#if defined(__GNUC__) -#pragma GCC diagnostic pop -#endif - -// Pop the warning(push) from port_def.inc -#ifdef _MSC_VER -#pragma warning(pop) -#endif diff --git a/include/google/protobuf/reflection.h b/include/google/protobuf/reflection.h deleted file mode 100644 index 7b75a43f22..0000000000 --- a/include/google/protobuf/reflection.h +++ /dev/null @@ -1,570 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// 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 -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (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__ - - -#include <memory> - -#include <google/protobuf/message.h> -#include <google/protobuf/generated_enum_util.h> - -#ifdef SWIG -#error "You cannot SWIG proto headers" -#endif - -// Must be included last. -#include <google/protobuf/port_def.inc> - -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 std::enable_if<!std::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, - nullptr); - accessor_ = reflection->RepeatedFieldAccessor(field); - } - - const void* data_; - const AccessorType* accessor_; -}; - -// MutableRepeatedFieldRef definition for non-message types. -template <typename T> -class MutableRepeatedFieldRef< - T, typename std::enable_if<!std::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, nullptr); - accessor_ = reflection->RepeatedFieldAccessor(field); - } - - void* data_; - const AccessorType* accessor_; -}; - -// RepeatedFieldRef definition for message types. -template <typename T> -class RepeatedFieldRef< - T, typename std::enable_if<std::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, nullptr); - } - - 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 std::enable_if<std::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. -// -// This interface passes/returns values using void pointers. The actual type -// of the value depends on the field's cpp_type. Following is a mapping from -// cpp_type to the type that should be used in this interface: -// -// field->cpp_type() T Actual type of void* -// CPPTYPE_INT32 int32_t int32_t -// CPPTYPE_UINT32 uint32_t uint32_t -// CPPTYPE_INT64 int64_t int64_t -// CPPTYPE_UINT64 uint64_t uint64_t -// CPPTYPE_DOUBLE double double -// CPPTYPE_FLOAT float float -// CPPTYPE_BOOL bool bool -// CPPTYPE_ENUM generated enum type int32_t -// CPPTYPE_STRING string std::string -// CPPTYPE_MESSAGE generated message type google::protobuf::Message -// or google::protobuf::Message -// -// Note that for enums we use int32_t in the interface. -// -// You can map from T to the actual type using RefTypeTraits: -// typedef RefTypeTraits<T>::AccessorValueType ActualType; -class PROTOBUF_EXPORT RepeatedFieldAccessor { - public: - // Typedefs for clarity. - typedef void Field; - typedef void Value; - typedef void Iterator; - - virtual bool IsEmpty(const Field* data) const = 0; - virtual int Size(const Field* data) const = 0; - // Depends on the underlying representation of the repeated field, this - // method can return a pointer to the underlying object if such an object - // exists, or fill the data into scratch_space and return scratch_space. - // Callers of this method must ensure scratch_space is a valid pointer - // to a mutable object of the correct type. - virtual const Value* Get(const Field* data, int index, - Value* scratch_space) const = 0; - - virtual void Clear(Field* data) const = 0; - virtual void Set(Field* data, int index, const Value* value) const = 0; - virtual void Add(Field* data, const Value* value) const = 0; - virtual void RemoveLast(Field* data) const = 0; - virtual void SwapElements(Field* data, int index1, int index2) const = 0; - 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. - 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; - // Make a copy of an iterator and return the new copy. - virtual Iterator* CopyIterator(const Field* data, - const Iterator* iterator) const = 0; - // Move an iterator to point to the next element. - virtual Iterator* AdvanceIterator(const Field* data, - Iterator* iterator) const = 0; - // Compare whether two iterators point to the same element. - virtual bool EqualsIterator(const Field* data, const Iterator* a, - const Iterator* b) const = 0; - // Delete an iterator created by BeginIterator(), EndIterator() and - // CopyIterator(). - virtual void DeleteIterator(const Field* data, Iterator* iterator) const = 0; - // Like Get() but for iterators. - virtual const Value* GetIteratorValue(const Field* data, - const Iterator* iterator, - Value* scratch_space) const = 0; - - // Templated methods that make using this interface easier for non-message - // types. - template <typename T> - T Get(const Field* data, int index) const { - typedef typename RefTypeTraits<T>::AccessorValueType ActualType; - ActualType scratch_space; - return static_cast<T>(*reinterpret_cast<const ActualType*>( - Get(data, index, static_cast<Value*>(&scratch_space)))); - } - - template <typename T, typename ValueType> - void Set(Field* data, int index, const ValueType& value) const { - typedef typename RefTypeTraits<T>::AccessorValueType ActualType; - // In this RepeatedFieldAccessor interface we pass/return data using - // raw pointers. Type of the data these raw pointers point to should - // be ActualType. Here we have a ValueType object and want a ActualType - // pointer. We can't cast a ValueType pointer to an ActualType pointer - // directly because their type might be different (for enums ValueType - // may be a generated enum type while ActualType is int32_t). To be safe - // we make a copy to get a temporary ActualType object and use it. - ActualType tmp = static_cast<ActualType>(value); - Set(data, index, static_cast<const Value*>(&tmp)); - } - - template <typename T, typename ValueType> - void Add(Field* data, const ValueType& value) const { - typedef typename RefTypeTraits<T>::AccessorValueType ActualType; - // In this RepeatedFieldAccessor interface we pass/return data using - // raw pointers. Type of the data these raw pointers point to should - // be ActualType. Here we have a ValueType object and want a ActualType - // pointer. We can't cast a ValueType pointer to an ActualType pointer - // directly because their type might be different (for enums ValueType - // may be a generated enum type while ActualType is int32_t). To be safe - // we make a copy to get a temporary ActualType object and use it. - ActualType tmp = static_cast<ActualType>(value); - Add(data, static_cast<const Value*>(&tmp)); - } - - protected: - // We want the destructor to be completely trivial as to allow it to be - // a function local static. Hence we make it non-virtual and protected, - // this class only live as part of a global singleton and should not be - // deleted. - ~RepeatedFieldAccessor() = default; -}; - -// Implement (Mutable)RepeatedFieldRef::iterator -template <typename T> -class RepeatedFieldRefIterator { - typedef typename RefTypeTraits<T>::AccessorValueType AccessorValueType; - typedef typename RefTypeTraits<T>::IteratorValueType IteratorValueType; - typedef typename RefTypeTraits<T>::IteratorPointerType IteratorPointerType; - - public: - using iterator_category = std::forward_iterator_tag; - using value_type = T; - using pointer = T*; - using reference = T&; - using difference_type = std::ptrdiff_t; - - // 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 : nullptr) {} - // Constructor for message fields. - RepeatedFieldRefIterator(const void* data, - const RepeatedFieldAccessor* accessor, bool begin, - AccessorValueType* scratch_space) - : data_(data), - accessor_(accessor), - iterator_(begin ? accessor->BeginIterator(data) - : accessor->EndIterator(data)), - scratch_space_(scratch_space) {} - ~RepeatedFieldRefIterator() { accessor_->DeleteIterator(data_, iterator_); } - RepeatedFieldRefIterator operator++(int) { - RepeatedFieldRefIterator tmp(*this); - iterator_ = accessor_->AdvanceIterator(data_, iterator_); - return tmp; - } - RepeatedFieldRefIterator& operator++() { - iterator_ = accessor_->AdvanceIterator(data_, iterator_); - return *this; - } - IteratorValueType operator*() const { - return static_cast<IteratorValueType>( - *static_cast<const AccessorValueType*>(accessor_->GetIteratorValue( - data_, iterator_, scratch_space_.get()))); - } - IteratorPointerType operator->() const { - return static_cast<IteratorPointerType>( - accessor_->GetIteratorValue(data_, iterator_, scratch_space_.get())); - } - bool operator!=(const RepeatedFieldRefIterator& other) const { - assert(data_ == other.data_); - assert(accessor_ == other.accessor_); - return !accessor_->EqualsIterator(data_, iterator_, other.iterator_); - } - bool operator==(const RepeatedFieldRefIterator& other) const { - return !this->operator!=(other); - } - - RepeatedFieldRefIterator(const RepeatedFieldRefIterator& other) - : data_(other.data_), - accessor_(other.accessor_), - iterator_(accessor_->CopyIterator(data_, other.iterator_)) {} - RepeatedFieldRefIterator& operator=(const RepeatedFieldRefIterator& other) { - if (this != &other) { - accessor_->DeleteIterator(data_, iterator_); - data_ = other.data_; - accessor_ = other.accessor_; - iterator_ = accessor_->CopyIterator(data_, other.iterator_); - } - return *this; - } - - protected: - const void* data_; - const RepeatedFieldAccessor* accessor_; - void* iterator_; - std::unique_ptr<AccessorValueType> scratch_space_; -}; - -// TypeTraits that maps the type parameter T of RepeatedFieldRef or -// MutableRepeatedFieldRef to corresponding iterator type, -// RepeatedFieldAccessor type, etc. -template <typename T> -struct PrimitiveTraits { - static constexpr bool is_primitive = false; -}; -#define DEFINE_PRIMITIVE(TYPE, type) \ - template <> \ - struct PrimitiveTraits<type> { \ - static const bool is_primitive = true; \ - static const FieldDescriptor::CppType cpp_type = \ - FieldDescriptor::CPPTYPE_##TYPE; \ - }; -DEFINE_PRIMITIVE(INT32, int32_t) -DEFINE_PRIMITIVE(UINT32, uint32_t) -DEFINE_PRIMITIVE(INT64, int64_t) -DEFINE_PRIMITIVE(UINT64, uint64_t) -DEFINE_PRIMITIVE(FLOAT, float) -DEFINE_PRIMITIVE(DOUBLE, double) -DEFINE_PRIMITIVE(BOOL, bool) -#undef DEFINE_PRIMITIVE - -template <typename T> -struct RefTypeTraits< - T, typename std::enable_if<PrimitiveTraits<T>::is_primitive>::type> { - typedef RepeatedFieldRefIterator<T> iterator; - typedef RepeatedFieldAccessor AccessorType; - typedef T AccessorValueType; - typedef T IteratorValueType; - typedef T* IteratorPointerType; - static constexpr FieldDescriptor::CppType cpp_type = - PrimitiveTraits<T>::cpp_type; - static const Descriptor* GetMessageFieldDescriptor() { return nullptr; } -}; - -template <typename T> -struct RefTypeTraits< - T, typename std::enable_if<is_proto_enum<T>::value>::type> { - typedef RepeatedFieldRefIterator<T> iterator; - typedef RepeatedFieldAccessor AccessorType; - // We use int32_t for repeated enums in RepeatedFieldAccessor. - typedef int32_t AccessorValueType; - typedef T IteratorValueType; - typedef int32_t* IteratorPointerType; - static constexpr FieldDescriptor::CppType cpp_type = - FieldDescriptor::CPPTYPE_ENUM; - static const Descriptor* GetMessageFieldDescriptor() { return nullptr; } -}; - -template <typename T> -struct RefTypeTraits< - T, typename std::enable_if<std::is_same<std::string, T>::value>::type> { - typedef RepeatedFieldRefIterator<T> iterator; - typedef RepeatedFieldAccessor AccessorType; - typedef std::string AccessorValueType; - typedef const std::string IteratorValueType; - typedef const std::string* IteratorPointerType; - static constexpr FieldDescriptor::CppType cpp_type = - FieldDescriptor::CPPTYPE_STRING; - static const Descriptor* GetMessageFieldDescriptor() { return nullptr; } -}; - -template <typename T> -struct MessageDescriptorGetter { - static const Descriptor* get() { - return T::default_instance().GetDescriptor(); - } -}; -template <> -struct MessageDescriptorGetter<Message> { - static const Descriptor* get() { return nullptr; } -}; - -template <typename T> -struct RefTypeTraits< - T, typename std::enable_if<std::is_base_of<Message, T>::value>::type> { - typedef RepeatedFieldRefIterator<T> iterator; - typedef RepeatedFieldAccessor AccessorType; - typedef Message AccessorValueType; - typedef const T& IteratorValueType; - typedef const T* IteratorPointerType; - static constexpr FieldDescriptor::CppType cpp_type = - FieldDescriptor::CPPTYPE_MESSAGE; - static const Descriptor* GetMessageFieldDescriptor() { - return MessageDescriptorGetter<T>::get(); - } -}; -} // namespace internal -} // namespace protobuf -} // namespace google - -#include <google/protobuf/port_undef.inc> - -#endif // GOOGLE_PROTOBUF_REFLECTION_H__ diff --git a/include/google/protobuf/reflection_ops.h b/include/google/protobuf/reflection_ops.h deleted file mode 100644 index 0a45702f9b..0000000000 --- a/include/google/protobuf/reflection_ops.h +++ /dev/null @@ -1,92 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// 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 -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -// Author: kenton@google.com (Kenton Varda) -// Based on original Protocol Buffers design by -// Sanjay Ghemawat, Jeff Dean, and others. -// -// This header is logically internal, but is made public because it is used -// from protocol-compiler-generated code, which may reside in other components. - -#ifndef GOOGLE_PROTOBUF_REFLECTION_OPS_H__ -#define GOOGLE_PROTOBUF_REFLECTION_OPS_H__ - -#include <google/protobuf/stubs/common.h> -#include <google/protobuf/message.h> - -#ifdef SWIG -#error "You cannot SWIG proto headers" -#endif - -// Must be included last. -#include <google/protobuf/port_def.inc> - -namespace google { -namespace protobuf { -namespace internal { - -// Basic operations that can be performed using reflection. -// These can be used as a cheap way to implement the corresponding -// methods of the Message interface, though they are likely to be -// slower than implementations tailored for the specific message type. -// -// This class should stay limited to operations needed to implement -// the Message interface. -// -// This class is really a namespace that contains only static methods. -class PROTOBUF_EXPORT ReflectionOps { - public: - static void Copy(const Message& from, Message* to); - static void Merge(const Message& from, Message* to); - static void Clear(Message* message); - static bool IsInitialized(const Message& message); - static bool IsInitialized(const Message& message, bool check_fields, - bool check_descendants); - static void DiscardUnknownFields(Message* message); - - // Finds all unset required fields in the message and adds their full - // paths (e.g. "foo.bar[5].baz") to *names. "prefix" will be attached to - // the front of each name. - static void FindInitializationErrors(const Message& message, - const std::string& prefix, - std::vector<std::string>* errors); - - private: - // All methods are static. No need to construct. - GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(ReflectionOps); -}; - -} // namespace internal -} // namespace protobuf -} // namespace google - -#include <google/protobuf/port_undef.inc> - -#endif // GOOGLE_PROTOBUF_REFLECTION_OPS_H__ diff --git a/include/google/protobuf/repeated_field.h b/include/google/protobuf/repeated_field.h deleted file mode 100644 index 3fb734e5cb..0000000000 --- a/include/google/protobuf/repeated_field.h +++ /dev/null @@ -1,1219 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// 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 -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -// Author: kenton@google.com (Kenton Varda) -// Based on original Protocol Buffers design by -// Sanjay Ghemawat, Jeff Dean, and others. -// -// RepeatedField and RepeatedPtrField are used by generated protocol message -// classes to manipulate repeated fields. These classes are very similar to -// STL's vector, but include a number of optimizations found to be useful -// specifically in the case of Protocol Buffers. RepeatedPtrField is -// particularly different from STL vector as it manages ownership of the -// pointers that it contains. -// -// This header covers RepeatedField. - -#ifndef GOOGLE_PROTOBUF_REPEATED_FIELD_H__ -#define GOOGLE_PROTOBUF_REPEATED_FIELD_H__ - - -#include <algorithm> -#include <iterator> -#include <limits> -#include <string> -#include <type_traits> -#include <utility> - -#include <google/protobuf/stubs/logging.h> -#include <google/protobuf/stubs/common.h> -#include <google/protobuf/arena.h> -#include <google/protobuf/port.h> -#include <google/protobuf/message_lite.h> -#include <google/protobuf/repeated_ptr_field.h> - - -// Must be included last. -#include <google/protobuf/port_def.inc> - -#ifdef SWIG -#error "You cannot SWIG proto headers" -#endif - -namespace google { -namespace protobuf { - -class Message; - -namespace internal { - -template <typename T, int kRepHeaderSize> -constexpr int RepeatedFieldLowerClampLimit() { - // The header is padded to be at least `sizeof(T)` when it would be smaller - // otherwise. - static_assert(sizeof(T) <= kRepHeaderSize, ""); - // We want to pad the minimum size to be a power of two bytes, including the - // header. - // The first allocation is kRepHeaderSize bytes worth of elements for a total - // of 2*kRepHeaderSize bytes. - // For an 8-byte header, we allocate 8 bool, 2 ints, or 1 int64. - return kRepHeaderSize / sizeof(T); -} - -// kRepeatedFieldUpperClampLimit is the lowest signed integer value that -// overflows when multiplied by 2 (which is undefined behavior). Sizes above -// this will clamp to the maximum int value instead of following exponential -// growth when growing a repeated field. -constexpr int kRepeatedFieldUpperClampLimit = - (std::numeric_limits<int>::max() / 2) + 1; - -template <typename Iter> -inline int CalculateReserve(Iter begin, Iter end, std::forward_iterator_tag) { - return static_cast<int>(std::distance(begin, end)); -} - -template <typename Iter> -inline int CalculateReserve(Iter /*begin*/, Iter /*end*/, - std::input_iterator_tag /*unused*/) { - return -1; -} - -template <typename Iter> -inline int CalculateReserve(Iter begin, Iter end) { - typedef typename std::iterator_traits<Iter>::iterator_category Category; - return CalculateReserve(begin, end, Category()); -} - -// Swaps two blocks of memory of size sizeof(T). -template <typename T> -inline void SwapBlock(char* p, char* q) { - T tmp; - memcpy(&tmp, p, sizeof(T)); - memcpy(p, q, sizeof(T)); - memcpy(q, &tmp, sizeof(T)); -} - -// Swaps two blocks of memory of size kSize: -// template <int kSize> void memswap(char* p, char* q); -template <int kSize> -inline typename std::enable_if<(kSize == 0), void>::type memswap(char*, char*) { -} - -#define PROTO_MEMSWAP_DEF_SIZE(reg_type, max_size) \ - template <int kSize> \ - typename std::enable_if<(kSize >= sizeof(reg_type) && kSize < (max_size)), \ - void>::type \ - memswap(char* p, char* q) { \ - SwapBlock<reg_type>(p, q); \ - memswap<kSize - sizeof(reg_type)>(p + sizeof(reg_type), \ - q + sizeof(reg_type)); \ - } - -PROTO_MEMSWAP_DEF_SIZE(uint8_t, 2) -PROTO_MEMSWAP_DEF_SIZE(uint16_t, 4) -PROTO_MEMSWAP_DEF_SIZE(uint32_t, 8) - -#ifdef __SIZEOF_INT128__ -PROTO_MEMSWAP_DEF_SIZE(uint64_t, 16) -PROTO_MEMSWAP_DEF_SIZE(__uint128_t, (1u << 31)) -#else -PROTO_MEMSWAP_DEF_SIZE(uint64_t, (1u << 31)) -#endif - -#undef PROTO_MEMSWAP_DEF_SIZE - -template <typename Element> -class RepeatedIterator; - -} // namespace internal - -// RepeatedField is used to represent repeated fields of a primitive type (in -// other words, everything except strings and nested Messages). Most users will -// not ever use a RepeatedField directly; they will use the get-by-index, -// set-by-index, and add accessors that are generated for all repeated fields. -template <typename Element> -class RepeatedField final { - static_assert( - alignof(Arena) >= alignof(Element), - "We only support types that have an alignment smaller than Arena"); - - public: - constexpr RepeatedField(); - explicit RepeatedField(Arena* arena); - - RepeatedField(const RepeatedField& other); - - template <typename Iter, - typename = typename std::enable_if<std::is_constructible< - Element, decltype(*std::declval<Iter>())>::value>::type> - RepeatedField(Iter begin, Iter end); - - ~RepeatedField(); - - RepeatedField& operator=(const RepeatedField& other); - - RepeatedField(RepeatedField&& other) noexcept; - RepeatedField& operator=(RepeatedField&& other) noexcept; - - bool empty() const; - int size() const; - - const Element& Get(int index) const; - Element* Mutable(int index); - - const Element& operator[](int index) const { return Get(index); } - Element& operator[](int index) { return *Mutable(index); } - - const Element& at(int index) const; - Element& at(int index); - - void Set(int index, const Element& value); - void Add(const Element& value); - // Appends a new element and returns a pointer to it. - // The new element is uninitialized if |Element| is a POD type. - Element* Add(); - // Appends elements in the range [begin, end) after reserving - // the appropriate number of elements. - template <typename Iter> - void Add(Iter begin, Iter end); - - // Removes the last element in the array. - void RemoveLast(); - - // Extracts elements with indices in "[start .. start+num-1]". - // Copies them into "elements[0 .. num-1]" if "elements" is not nullptr. - // Caution: also moves elements with indices [start+num ..]. - // Calling this routine inside a loop can cause quadratic behavior. - void ExtractSubrange(int start, int num, Element* elements); - - PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear(); - void MergeFrom(const RepeatedField& other); - PROTOBUF_ATTRIBUTE_REINITIALIZES void CopyFrom(const RepeatedField& other); - - // Replaces the contents with RepeatedField(begin, end). - template <typename Iter> - PROTOBUF_ATTRIBUTE_REINITIALIZES void Assign(Iter begin, Iter end); - - // Reserves 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. - void Reserve(int new_size); - - // Resizes the RepeatedField to a new, smaller size. This is O(1). - void Truncate(int new_size); - - void AddAlreadyReserved(const Element& value); - // Appends a new element and return a pointer to it. - // The new element is uninitialized if |Element| is a POD type. - // Should be called only if Capacity() > Size(). - Element* AddAlreadyReserved(); - Element* AddNAlreadyReserved(int elements); - int Capacity() const; - - // Like STL resize. Uses value to fill appended elements. - // Like Truncate() if new_size <= size(), otherwise this is - // O(new_size - size()). - void Resize(int new_size, const Element& value); - - // Gets the underlying array. This pointer is possibly invalidated by - // any add or remove operation. - Element* mutable_data(); - const Element* data() const; - - // Swaps entire contents with "other". If they are separate arenas then, - // copies data between each other. - void Swap(RepeatedField* other); - - // Swaps entire contents with "other". Should be called only if the caller can - // guarantee that both repeated fields are on the same arena or are on the - // heap. Swapping between different arenas is disallowed and caught by a - // GOOGLE_DCHECK (see API docs for details). - void UnsafeArenaSwap(RepeatedField* other); - - // Swaps two elements. - void SwapElements(int index1, int index2); - - // STL-like iterator support - typedef internal::RepeatedIterator<Element> iterator; - typedef internal::RepeatedIterator<const Element> const_iterator; - typedef Element value_type; - typedef value_type& reference; - typedef const value_type& const_reference; - typedef value_type* pointer; - typedef const value_type* const_pointer; - typedef int size_type; - typedef ptrdiff_t difference_type; - - iterator begin(); - const_iterator begin() const; - const_iterator cbegin() const; - iterator end(); - const_iterator end() const; - const_iterator cend() const; - - // Reverse iterator support - typedef std::reverse_iterator<const_iterator> const_reverse_iterator; - typedef std::reverse_iterator<iterator> reverse_iterator; - reverse_iterator rbegin() { return reverse_iterator(end()); } - const_reverse_iterator rbegin() const { - return const_reverse_iterator(end()); - } - reverse_iterator rend() { return reverse_iterator(begin()); } - const_reverse_iterator rend() const { - return const_reverse_iterator(begin()); - } - - // Returns the number of bytes used by the repeated field, excluding - // sizeof(*this) - size_t SpaceUsedExcludingSelfLong() const; - - int SpaceUsedExcludingSelf() const { - return internal::ToIntSize(SpaceUsedExcludingSelfLong()); - } - - // Removes the element referenced by position. - // - // Returns an iterator to the element immediately following the removed - // element. - // - // Invalidates all iterators at or after the removed element, including end(). - iterator erase(const_iterator position); - - // Removes the elements in the range [first, last). - // - // Returns an iterator to the element immediately following the removed range. - // - // Invalidates all iterators at or after the removed range, including end(). - iterator erase(const_iterator first, const_iterator last); - - // Gets the Arena on which this RepeatedField stores its elements. - inline Arena* GetArena() const { - return GetOwningArena(); - } - - // For internal use only. - // - // This is public due to it being called by generated code. - inline void InternalSwap(RepeatedField* other); - - private: - template <typename T> friend class Arena::InternalHelper; - - // Gets the Arena on which this RepeatedField stores its elements. - inline Arena* GetOwningArena() const { - return (total_size_ == 0) ? static_cast<Arena*>(arena_or_elements_) - : rep()->arena; - } - - static constexpr int kInitialSize = 0; - // A note on the representation here (see also comment below for - // RepeatedPtrFieldBase's struct Rep): - // - // We maintain the same sizeof(RepeatedField) as before we added arena support - // so that we do not degrade performance by bloating memory usage. Directly - // adding an arena_ element to RepeatedField is quite costly. By using - // indirection in this way, we keep the same size when the RepeatedField is - // empty (common case), and add only an 8-byte header to the elements array - // when non-empty. We make sure to place the size fields directly in the - // RepeatedField class to avoid costly cache misses due to the indirection. - int current_size_; - int total_size_; - // Pad the Rep after arena allow for power-of-two byte sizes when - // sizeof(Element) > sizeof(Arena*). eg for 16-byte objects. - static PROTOBUF_CONSTEXPR const size_t kRepHeaderSize = - sizeof(Arena*) < sizeof(Element) ? sizeof(Element) : sizeof(Arena*); - struct Rep { - Arena* arena; - Element* elements() { - return reinterpret_cast<Element*>(reinterpret_cast<char*>(this) + - kRepHeaderSize); - } - }; - - // If total_size_ == 0 this points to an Arena otherwise it points to the - // elements member of a Rep struct. Using this invariant allows the storage of - // the arena pointer without an extra allocation in the constructor. - void* arena_or_elements_; - - // Returns a pointer to elements array. - // pre-condition: the array must have been allocated. - Element* elements() const { - GOOGLE_DCHECK_GT(total_size_, 0); - // Because of above pre-condition this cast is safe. - return unsafe_elements(); - } - - // Returns a pointer to elements array if it exists; otherwise either null or - // an invalid pointer is returned. This only happens for empty repeated - // fields, where you can't dereference this pointer anyway (it's empty). - Element* unsafe_elements() const { - return static_cast<Element*>(arena_or_elements_); - } - - // Returns a pointer to the Rep struct. - // pre-condition: the Rep must have been allocated, ie elements() is safe. - Rep* rep() const { - return reinterpret_cast<Rep*>(reinterpret_cast<char*>(elements()) - - kRepHeaderSize); - } - - friend class Arena; - typedef void InternalArenaConstructable_; - - // Moves the contents of |from| into |to|, possibly clobbering |from| in the - // process. For primitive types this is just a memcpy(), but it could be - // specialized for non-primitive types to, say, swap each element instead. - void MoveArray(Element* to, Element* from, int size); - - // Copies the elements of |from| into |to|. - void CopyArray(Element* to, const Element* from, int size); - - // Internal helper to delete all elements and deallocate the storage. - void InternalDeallocate(Rep* rep, int size, bool in_destructor) { - if (rep != nullptr) { - Element* e = &rep->elements()[0]; - if (!std::is_trivial<Element>::value) { - Element* limit = &rep->elements()[size]; - for (; e < limit; e++) { - e->~Element(); - } - } - const size_t bytes = size * sizeof(*e) + kRepHeaderSize; - if (rep->arena == nullptr) { - internal::SizedDelete(rep, bytes); - } else if (!in_destructor) { - // If we are in the destructor, we might be being destroyed as part of - // the arena teardown. We can't try and return blocks to the arena then. - rep->arena->ReturnArrayMemory(rep, bytes); - } - } - } - - // This class is a performance wrapper around RepeatedField::Add(const T&) - // function. In general unless a RepeatedField is a local stack variable LLVM - // has a hard time optimizing Add. The machine code tends to be - // loop: - // mov %size, dword ptr [%repeated_field] // load - // cmp %size, dword ptr [%repeated_field + 4] - // jae fallback - // mov %buffer, qword ptr [%repeated_field + 8] - // mov dword [%buffer + %size * 4], %value - // inc %size // increment - // mov dword ptr [%repeated_field], %size // store - // jmp loop - // - // This puts a load/store in each iteration of the important loop variable - // size. It's a pretty bad compile that happens even in simple cases, but - // largely the presence of the fallback path disturbs the compilers mem-to-reg - // analysis. - // - // This class takes ownership of a repeated field for the duration of its - // lifetime. The repeated field should not be accessed during this time, ie. - // only access through this class is allowed. This class should always be a - // function local stack variable. Intended use - // - // void AddSequence(const int* begin, const int* end, RepeatedField<int>* out) - // { - // RepeatedFieldAdder<int> adder(out); // Take ownership of out - // for (auto it = begin; it != end; ++it) { - // adder.Add(*it); - // } - // } - // - // Typically, due to the fact that adder is a local stack variable, the - // compiler will be successful in mem-to-reg transformation and the machine - // code will be loop: cmp %size, %capacity jae fallback mov dword ptr [%buffer - // + %size * 4], %val inc %size jmp loop - // - // The first version executes at 7 cycles per iteration while the second - // version executes at only 1 or 2 cycles. - template <int = 0, bool = std::is_trivial<Element>::value> - class FastAdderImpl { - public: - explicit FastAdderImpl(RepeatedField* rf) : repeated_field_(rf) { - index_ = repeated_field_->current_size_; - capacity_ = repeated_field_->total_size_; - buffer_ = repeated_field_->unsafe_elements(); - } - ~FastAdderImpl() { repeated_field_->current_size_ = index_; } - - void Add(Element val) { - if (index_ == capacity_) { - repeated_field_->current_size_ = index_; - repeated_field_->Reserve(index_ + 1); - capacity_ = repeated_field_->total_size_; - buffer_ = repeated_field_->unsafe_elements(); - } - buffer_[index_++] = val; - } - - private: - RepeatedField* repeated_field_; - int index_; - int capacity_; - Element* buffer_; - - GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(FastAdderImpl); - }; - - // FastAdder is a wrapper for adding fields. The specialization above handles - // POD types more efficiently than RepeatedField. - template <int I> - class FastAdderImpl<I, false> { - public: - explicit FastAdderImpl(RepeatedField* rf) : repeated_field_(rf) {} - void Add(const Element& val) { repeated_field_->Add(val); } - - private: - RepeatedField* repeated_field_; - GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(FastAdderImpl); - }; - - using FastAdder = FastAdderImpl<>; - - friend class TestRepeatedFieldHelper; - friend class ::google::protobuf::internal::ParseContext; -}; - -namespace internal { - -// This is a helper template to copy an array of elements efficiently when they -// have a trivial copy constructor, and correctly otherwise. This really -// shouldn't be necessary, but our compiler doesn't optimize std::copy very -// effectively. -template <typename Element, - bool HasTrivialCopy = std::is_trivial<Element>::value> -struct ElementCopier { - void operator()(Element* to, const Element* from, int array_size); -}; - -} // namespace internal - -// implementation ==================================================== - -template <typename Element> -constexpr RepeatedField<Element>::RepeatedField() - : current_size_(0), total_size_(0), arena_or_elements_(nullptr) {} - -template <typename Element> -inline RepeatedField<Element>::RepeatedField(Arena* arena) - : current_size_(0), total_size_(0), arena_or_elements_(arena) {} - -template <typename Element> -inline RepeatedField<Element>::RepeatedField(const RepeatedField& other) - : current_size_(0), total_size_(0), arena_or_elements_(nullptr) { - if (other.current_size_ != 0) { - Reserve(other.size()); - AddNAlreadyReserved(other.size()); - CopyArray(Mutable(0), &other.Get(0), other.size()); - } -} - -template <typename Element> -template <typename Iter, typename> -RepeatedField<Element>::RepeatedField(Iter begin, Iter end) - : current_size_(0), total_size_(0), arena_or_elements_(nullptr) { - Add(begin, end); -} - -template <typename Element> -RepeatedField<Element>::~RepeatedField() { -#ifndef NDEBUG - // Try to trigger segfault / asan failure in non-opt builds if arena_ - // lifetime has ended before the destructor. - auto arena = GetOwningArena(); - if (arena) (void)arena->SpaceAllocated(); -#endif - if (total_size_ > 0) { - InternalDeallocate(rep(), total_size_, true); - } -} - -template <typename Element> -inline RepeatedField<Element>& RepeatedField<Element>::operator=( - const RepeatedField& other) { - if (this != &other) CopyFrom(other); - return *this; -} - -template <typename Element> -inline RepeatedField<Element>::RepeatedField(RepeatedField&& other) noexcept - : RepeatedField() { -#ifdef PROTOBUF_FORCE_COPY_IN_MOVE - CopyFrom(other); -#else // PROTOBUF_FORCE_COPY_IN_MOVE - // We don't just call Swap(&other) here because it would perform 3 copies if - // other is on an arena. This field can't be on an arena because arena - // construction always uses the Arena* accepting constructor. - if (other.GetOwningArena()) { - CopyFrom(other); - } else { - InternalSwap(&other); - } -#endif // !PROTOBUF_FORCE_COPY_IN_MOVE -} - -template <typename Element> -inline RepeatedField<Element>& RepeatedField<Element>::operator=( - RepeatedField&& other) noexcept { - // We don't just call Swap(&other) here because it would perform 3 copies if - // the two fields are on different arenas. - if (this != &other) { - if (GetOwningArena() != other.GetOwningArena() -#ifdef PROTOBUF_FORCE_COPY_IN_MOVE - || GetOwningArena() == nullptr -#endif // !PROTOBUF_FORCE_COPY_IN_MOVE - ) { - CopyFrom(other); - } else { - InternalSwap(&other); - } - } - return *this; -} - -template <typename Element> -inline bool RepeatedField<Element>::empty() const { - return current_size_ == 0; -} - -template <typename Element> -inline int RepeatedField<Element>::size() const { - return current_size_; -} - -template <typename Element> -inline int RepeatedField<Element>::Capacity() const { - return total_size_; -} - -template <typename Element> -inline void RepeatedField<Element>::AddAlreadyReserved(const Element& value) { - GOOGLE_DCHECK_LT(current_size_, total_size_); - elements()[current_size_++] = value; -} - -template <typename Element> -inline Element* RepeatedField<Element>::AddAlreadyReserved() { - GOOGLE_DCHECK_LT(current_size_, total_size_); - return &elements()[current_size_++]; -} - -template <typename Element> -inline Element* RepeatedField<Element>::AddNAlreadyReserved(int elements) { - GOOGLE_DCHECK_GE(total_size_ - current_size_, elements) - << total_size_ << ", " << current_size_; - // Warning: sometimes people call this when elements == 0 and - // total_size_ == 0. In this case the return pointer points to a zero size - // array (n == 0). Hence we can just use unsafe_elements(), because the user - // cannot dereference the pointer anyway. - Element* ret = unsafe_elements() + current_size_; - current_size_ += elements; - return ret; -} - -template <typename Element> -inline void RepeatedField<Element>::Resize(int new_size, const Element& value) { - GOOGLE_DCHECK_GE(new_size, 0); - if (new_size > current_size_) { - Reserve(new_size); - std::fill(&elements()[current_size_], &elements()[new_size], value); - } - current_size_ = new_size; -} - -template <typename Element> -inline const Element& RepeatedField<Element>::Get(int index) const { - GOOGLE_DCHECK_GE(index, 0); - GOOGLE_DCHECK_LT(index, current_size_); - return elements()[index]; -} - -template <typename Element> -inline const Element& RepeatedField<Element>::at(int index) const { - GOOGLE_CHECK_GE(index, 0); - GOOGLE_CHECK_LT(index, current_size_); - return elements()[index]; -} - -template <typename Element> -inline Element& RepeatedField<Element>::at(int index) { - GOOGLE_CHECK_GE(index, 0); - GOOGLE_CHECK_LT(index, current_size_); - return elements()[index]; -} - -template <typename Element> -inline Element* RepeatedField<Element>::Mutable(int index) { - GOOGLE_DCHECK_GE(index, 0); - GOOGLE_DCHECK_LT(index, current_size_); - return &elements()[index]; -} - -template <typename Element> -inline void RepeatedField<Element>::Set(int index, const Element& value) { - GOOGLE_DCHECK_GE(index, 0); - GOOGLE_DCHECK_LT(index, current_size_); - elements()[index] = value; -} - -template <typename Element> -inline void RepeatedField<Element>::Add(const Element& value) { - uint32_t size = current_size_; - if (static_cast<int>(size) == total_size_) { - // value could reference an element of the array. Reserving new space will - // invalidate the reference. So we must make a copy first. - auto tmp = value; - Reserve(total_size_ + 1); - elements()[size] = std::move(tmp); - } else { - elements()[size] = value; - } - current_size_ = size + 1; -} - -template <typename Element> -inline Element* RepeatedField<Element>::Add() { - uint32_t size = current_size_; - if (static_cast<int>(size) == total_size_) Reserve(total_size_ + 1); - auto ptr = &elements()[size]; - current_size_ = size + 1; - return ptr; -} - -template <typename Element> -template <typename Iter> -inline void RepeatedField<Element>::Add(Iter begin, Iter end) { - int reserve = internal::CalculateReserve(begin, end); - if (reserve != -1) { - if (reserve == 0) { - return; - } - - Reserve(reserve + size()); - // TODO(ckennelly): The compiler loses track of the buffer freshly - // allocated by Reserve() by the time we call elements, so it cannot - // guarantee that elements does not alias [begin(), end()). - // - // If restrict is available, annotating the pointer obtained from elements() - // causes this to lower to memcpy instead of memmove. - std::copy(begin, end, elements() + size()); - current_size_ = reserve + size(); - } else { - FastAdder fast_adder(this); - for (; begin != end; ++begin) fast_adder.Add(*begin); - } -} - -template <typename Element> -inline void RepeatedField<Element>::RemoveLast() { - GOOGLE_DCHECK_GT(current_size_, 0); - current_size_--; -} - -template <typename Element> -void RepeatedField<Element>::ExtractSubrange(int start, int num, - Element* elements) { - GOOGLE_DCHECK_GE(start, 0); - GOOGLE_DCHECK_GE(num, 0); - GOOGLE_DCHECK_LE(start + num, this->current_size_); - - // Save the values of the removed elements if requested. - if (elements != nullptr) { - for (int i = 0; i < num; ++i) elements[i] = this->Get(i + start); - } - - // Slide remaining elements down to fill the gap. - if (num > 0) { - for (int i = start + num; i < this->current_size_; ++i) - this->Set(i - num, this->Get(i)); - this->Truncate(this->current_size_ - num); - } -} - -template <typename Element> -inline void RepeatedField<Element>::Clear() { - current_size_ = 0; -} - -template <typename Element> -inline void RepeatedField<Element>::MergeFrom(const RepeatedField& other) { - GOOGLE_DCHECK_NE(&other, this); - if (other.current_size_ != 0) { - int existing_size = size(); - Reserve(existing_size + other.size()); - AddNAlreadyReserved(other.size()); - CopyArray(Mutable(existing_size), &other.Get(0), other.size()); - } -} - -template <typename Element> -inline void RepeatedField<Element>::CopyFrom(const RepeatedField& other) { - if (&other == this) return; - Clear(); - MergeFrom(other); -} - -template <typename Element> -template <typename Iter> -inline void RepeatedField<Element>::Assign(Iter begin, Iter end) { - Clear(); - Add(begin, end); -} - -template <typename Element> -inline typename RepeatedField<Element>::iterator RepeatedField<Element>::erase( - const_iterator position) { - return erase(position, position + 1); -} - -template <typename Element> -inline typename RepeatedField<Element>::iterator RepeatedField<Element>::erase( - const_iterator first, const_iterator last) { - size_type first_offset = first - cbegin(); - if (first != last) { - Truncate(std::copy(last, cend(), begin() + first_offset) - cbegin()); - } - return begin() + first_offset; -} - -template <typename Element> -inline Element* RepeatedField<Element>::mutable_data() { - return unsafe_elements(); -} - -template <typename Element> -inline const Element* RepeatedField<Element>::data() const { - return unsafe_elements(); -} - -template <typename Element> -inline void RepeatedField<Element>::InternalSwap(RepeatedField* other) { - GOOGLE_DCHECK(this != other); - - // Swap all fields at once. - static_assert(std::is_standard_layout<RepeatedField<Element>>::value, - "offsetof() requires standard layout before c++17"); - internal::memswap<offsetof(RepeatedField, arena_or_elements_) + - sizeof(this->arena_or_elements_) - - offsetof(RepeatedField, current_size_)>( - reinterpret_cast<char*>(this) + offsetof(RepeatedField, current_size_), - reinterpret_cast<char*>(other) + offsetof(RepeatedField, current_size_)); -} - -template <typename Element> -void RepeatedField<Element>::Swap(RepeatedField* other) { - if (this == other) return; -#ifdef PROTOBUF_FORCE_COPY_IN_SWAP - if (GetOwningArena() != nullptr && - GetOwningArena() == other->GetOwningArena()) { -#else // PROTOBUF_FORCE_COPY_IN_SWAP - if (GetOwningArena() == other->GetOwningArena()) { -#endif // !PROTOBUF_FORCE_COPY_IN_SWAP - InternalSwap(other); - } else { - RepeatedField<Element> temp(other->GetOwningArena()); - temp.MergeFrom(*this); - CopyFrom(*other); - other->UnsafeArenaSwap(&temp); - } -} - -template <typename Element> -void RepeatedField<Element>::UnsafeArenaSwap(RepeatedField* other) { - if (this == other) return; - GOOGLE_DCHECK_EQ(GetOwningArena(), other->GetOwningArena()); - InternalSwap(other); -} - -template <typename Element> -void RepeatedField<Element>::SwapElements(int index1, int index2) { - using std::swap; // enable ADL with fallback - swap(elements()[index1], elements()[index2]); -} - -template <typename Element> -inline typename RepeatedField<Element>::iterator -RepeatedField<Element>::begin() { - return iterator(unsafe_elements()); -} -template <typename Element> -inline typename RepeatedField<Element>::const_iterator -RepeatedField<Element>::begin() const { - return const_iterator(unsafe_elements()); -} -template <typename Element> -inline typename RepeatedField<Element>::const_iterator -RepeatedField<Element>::cbegin() const { - return const_iterator(unsafe_elements()); -} -template <typename Element> -inline typename RepeatedField<Element>::iterator RepeatedField<Element>::end() { - return iterator(unsafe_elements() + current_size_); -} -template <typename Element> -inline typename RepeatedField<Element>::const_iterator -RepeatedField<Element>::end() const { - return const_iterator(unsafe_elements() + current_size_); -} -template <typename Element> -inline typename RepeatedField<Element>::const_iterator -RepeatedField<Element>::cend() const { - return const_iterator(unsafe_elements() + current_size_); -} - -template <typename Element> -inline size_t RepeatedField<Element>::SpaceUsedExcludingSelfLong() const { - return total_size_ > 0 ? (total_size_ * sizeof(Element) + kRepHeaderSize) : 0; -} - -namespace internal { -// Returns the new size for a reserved field based on its 'total_size' and the -// requested 'new_size'. The result is clamped to the closed interval: -// [internal::kMinRepeatedFieldAllocationSize, -// std::numeric_limits<int>::max()] -// Requires: -// new_size > total_size && -// (total_size == 0 || -// total_size >= kRepeatedFieldLowerClampLimit) -template <typename T, int kRepHeaderSize> -inline int CalculateReserveSize(int total_size, int new_size) { - constexpr int lower_limit = RepeatedFieldLowerClampLimit<T, kRepHeaderSize>(); - if (new_size < lower_limit) { - // Clamp to smallest allowed size. - return lower_limit; - } - constexpr int kMaxSizeBeforeClamp = - (std::numeric_limits<int>::max() - kRepHeaderSize) / 2; - if (PROTOBUF_PREDICT_FALSE(total_size > kMaxSizeBeforeClamp)) { - return std::numeric_limits<int>::max(); - } - // We want to double the number of bytes, not the number of elements, to try - // to stay within power-of-two allocations. - // The allocation has kRepHeaderSize + sizeof(T) * capacity. - int doubled_size = 2 * total_size + kRepHeaderSize / sizeof(T); - return std::max(doubled_size, new_size); -} -} // namespace internal - -// Avoid inlining of Reserve(): new, copy, and delete[] lead to a significant -// amount of code bloat. -template <typename Element> -void RepeatedField<Element>::Reserve(int new_size) { - if (total_size_ >= new_size) return; - Rep* old_rep = total_size_ > 0 ? rep() : nullptr; - Rep* new_rep; - Arena* arena = GetOwningArena(); - - new_size = internal::CalculateReserveSize<Element, kRepHeaderSize>( - total_size_, new_size); - - GOOGLE_DCHECK_LE( - static_cast<size_t>(new_size), - (std::numeric_limits<size_t>::max() - kRepHeaderSize) / sizeof(Element)) - << "Requested size is too large to fit into size_t."; - size_t bytes = - kRepHeaderSize + sizeof(Element) * static_cast<size_t>(new_size); - if (arena == nullptr) { - new_rep = static_cast<Rep*>(::operator new(bytes)); - } else { - new_rep = reinterpret_cast<Rep*>(Arena::CreateArray<char>(arena, bytes)); - } - new_rep->arena = arena; - int old_total_size = total_size_; - // Already known: new_size >= internal::kMinRepeatedFieldAllocationSize - // Maintain invariant: - // total_size_ == 0 || - // total_size_ >= internal::kMinRepeatedFieldAllocationSize - total_size_ = new_size; - arena_or_elements_ = new_rep->elements(); - // Invoke placement-new on newly allocated elements. We shouldn't have to do - // this, since Element is supposed to be POD, but a previous version of this - // code allocated storage with "new Element[size]" and some code uses - // RepeatedField with non-POD types, relying on constructor invocation. If - // Element has a trivial constructor (e.g., int32_t), gcc (tested with -O2) - // completely removes this loop because the loop body is empty, so this has no - // effect unless its side-effects are required for correctness. - // Note that we do this before MoveArray() below because Element's copy - // assignment implementation will want an initialized instance first. - Element* e = &elements()[0]; - Element* limit = e + total_size_; - for (; e < limit; e++) { - new (e) Element; - } - if (current_size_ > 0) { - MoveArray(&elements()[0], old_rep->elements(), current_size_); - } - - // Likewise, we need to invoke destructors on the old array. - InternalDeallocate(old_rep, old_total_size, false); - -} - -template <typename Element> -inline void RepeatedField<Element>::Truncate(int new_size) { - GOOGLE_DCHECK_LE(new_size, current_size_); - if (current_size_ > 0) { - current_size_ = new_size; - } -} - -template <typename Element> -inline void RepeatedField<Element>::MoveArray(Element* to, Element* from, - int array_size) { - CopyArray(to, from, array_size); -} - -template <typename Element> -inline void RepeatedField<Element>::CopyArray(Element* to, const Element* from, - int array_size) { - internal::ElementCopier<Element>()(to, from, array_size); -} - -namespace internal { - -template <typename Element, bool HasTrivialCopy> -void ElementCopier<Element, HasTrivialCopy>::operator()(Element* to, - const Element* from, - int array_size) { - std::copy(from, from + array_size, to); -} - -template <typename Element> -struct ElementCopier<Element, true> { - void operator()(Element* to, const Element* from, int array_size) { - memcpy(to, from, static_cast<size_t>(array_size) * sizeof(Element)); - } -}; - -} // namespace internal - - -// ------------------------------------------------------------------- - -// Iterators and helper functions that follow the spirit of the STL -// std::back_insert_iterator and std::back_inserter but are tailor-made -// for RepeatedField and RepeatedPtrField. Typical usage would be: -// -// std::copy(some_sequence.begin(), some_sequence.end(), -// RepeatedFieldBackInserter(proto.mutable_sequence())); -// -// Ported by johannes from util/gtl/proto-array-iterators.h - -namespace internal { - -// STL-like iterator implementation for RepeatedField. You should not -// refer to this class directly; use RepeatedField<T>::iterator instead. -// -// Note: All of the iterator operators *must* be inlined to avoid performance -// regressions. This is caused by the extern template declarations below (which -// are required because of the RepeatedField extern template declarations). If -// any of these functions aren't explicitly inlined (e.g. defined in the class), -// the compiler isn't allowed to inline them. -template <typename Element> -class RepeatedIterator { - public: - using iterator_category = std::random_access_iterator_tag; - // Note: remove_const is necessary for std::partial_sum, which uses value_type - // to determine the summation variable type. - using value_type = typename std::remove_const<Element>::type; - using difference_type = std::ptrdiff_t; - using pointer = Element*; - using reference = Element&; - - constexpr RepeatedIterator() noexcept : it_(nullptr) {} - - // Allows "upcasting" from RepeatedIterator<T**> to - // RepeatedIterator<const T*const*>. - template <typename OtherElement, - typename std::enable_if<std::is_convertible< - OtherElement*, pointer>::value>::type* = nullptr> - constexpr RepeatedIterator( - const RepeatedIterator<OtherElement>& other) noexcept - : it_(other.it_) {} - - // dereferenceable - constexpr reference operator*() const noexcept { return *it_; } - constexpr pointer operator->() const noexcept { return it_; } - - private: - // Helper alias to hide the internal type. - using iterator = RepeatedIterator<Element>; - - public: - // {inc,dec}rementable - iterator& operator++() noexcept { - ++it_; - return *this; - } - iterator operator++(int) noexcept { return iterator(it_++); } - iterator& operator--() noexcept { - --it_; - return *this; - } - iterator operator--(int) noexcept { return iterator(it_--); } - - // equality_comparable - friend constexpr bool operator==(const iterator& x, - const iterator& y) noexcept { - return x.it_ == y.it_; - } - friend constexpr bool operator!=(const iterator& x, - const iterator& y) noexcept { - return x.it_ != y.it_; - } - - // less_than_comparable - friend constexpr bool operator<(const iterator& x, - const iterator& y) noexcept { - return x.it_ < y.it_; - } - friend constexpr bool operator<=(const iterator& x, - const iterator& y) noexcept { - return x.it_ <= y.it_; - } - friend constexpr bool operator>(const iterator& x, - const iterator& y) noexcept { - return x.it_ > y.it_; - } - friend constexpr bool operator>=(const iterator& x, - const iterator& y) noexcept { - return x.it_ >= y.it_; - } - - // addable, subtractable - iterator& operator+=(difference_type d) noexcept { - it_ += d; - return *this; - } - constexpr iterator operator+(difference_type d) const noexcept { - return iterator(it_ + d); - } - friend constexpr iterator operator+(const difference_type d, - iterator it) noexcept { - return it + d; - } - - iterator& operator-=(difference_type d) noexcept { - it_ -= d; - return *this; - } - iterator constexpr operator-(difference_type d) const noexcept { - return iterator(it_ - d); - } - - // indexable - constexpr reference operator[](difference_type d) const noexcept { - return it_[d]; - } - - // random access iterator - friend constexpr difference_type operator-(iterator it1, - iterator it2) noexcept { - return it1.it_ - it2.it_; - } - - private: - template <typename OtherElement> - friend class RepeatedIterator; - - // Allow construction from RepeatedField. - friend class RepeatedField<value_type>; - explicit RepeatedIterator(Element* it) noexcept : it_(it) {} - - // The internal iterator. - Element* it_; -}; - -// A back inserter for RepeatedField objects. -template <typename T> -class RepeatedFieldBackInsertIterator { - public: - using iterator_category = std::output_iterator_tag; - using value_type = T; - using pointer = void; - using reference = void; - using difference_type = std::ptrdiff_t; - - explicit RepeatedFieldBackInsertIterator( - RepeatedField<T>* const mutable_field) - : field_(mutable_field) {} - RepeatedFieldBackInsertIterator<T>& operator=(const T& value) { - field_->Add(value); - return *this; - } - RepeatedFieldBackInsertIterator<T>& operator*() { return *this; } - RepeatedFieldBackInsertIterator<T>& operator++() { return *this; } - RepeatedFieldBackInsertIterator<T>& operator++(int /* unused */) { - return *this; - } - - private: - RepeatedField<T>* field_; -}; - -} // namespace internal - -// Provides a back insert iterator for RepeatedField instances, -// similar to std::back_inserter(). -template <typename T> -internal::RepeatedFieldBackInsertIterator<T> RepeatedFieldBackInserter( - RepeatedField<T>* const mutable_field) { - return internal::RepeatedFieldBackInsertIterator<T>(mutable_field); -} - -// Extern declarations of common instantiations to reduce library bloat. -extern template class PROTOBUF_EXPORT_TEMPLATE_DECLARE RepeatedField<bool>; -extern template class PROTOBUF_EXPORT_TEMPLATE_DECLARE RepeatedField<int32_t>; -extern template class PROTOBUF_EXPORT_TEMPLATE_DECLARE RepeatedField<uint32_t>; -extern template class PROTOBUF_EXPORT_TEMPLATE_DECLARE RepeatedField<int64_t>; -extern template class PROTOBUF_EXPORT_TEMPLATE_DECLARE RepeatedField<uint64_t>; -extern template class PROTOBUF_EXPORT_TEMPLATE_DECLARE RepeatedField<float>; -extern template class PROTOBUF_EXPORT_TEMPLATE_DECLARE RepeatedField<double>; - -namespace internal { -extern template class PROTOBUF_EXPORT_TEMPLATE_DECLARE RepeatedIterator<bool>; -extern template class PROTOBUF_EXPORT_TEMPLATE_DECLARE - RepeatedIterator<int32_t>; -extern template class PROTOBUF_EXPORT_TEMPLATE_DECLARE - RepeatedIterator<uint32_t>; -extern template class PROTOBUF_EXPORT_TEMPLATE_DECLARE - RepeatedIterator<int64_t>; -extern template class PROTOBUF_EXPORT_TEMPLATE_DECLARE - RepeatedIterator<uint64_t>; -extern template class PROTOBUF_EXPORT_TEMPLATE_DECLARE RepeatedIterator<float>; -extern template class PROTOBUF_EXPORT_TEMPLATE_DECLARE RepeatedIterator<double>; -} // namespace internal - -} // namespace protobuf -} // namespace google - -#include <google/protobuf/port_undef.inc> - -#endif // GOOGLE_PROTOBUF_REPEATED_FIELD_H__ diff --git a/include/google/protobuf/repeated_ptr_field.h b/include/google/protobuf/repeated_ptr_field.h deleted file mode 100644 index 401230bf51..0000000000 --- a/include/google/protobuf/repeated_ptr_field.h +++ /dev/null @@ -1,1970 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// 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 -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -// Author: kenton@google.com (Kenton Varda) -// Based on original Protocol Buffers design by -// Sanjay Ghemawat, Jeff Dean, and others. -// -// RepeatedField and RepeatedPtrField are used by generated protocol message -// classes to manipulate repeated fields. These classes are very similar to -// STL's vector, but include a number of optimizations found to be useful -// specifically in the case of Protocol Buffers. RepeatedPtrField is -// particularly different from STL vector as it manages ownership of the -// pointers that it contains. -// -// This header covers RepeatedPtrField. - -// IWYU pragma: private, include "net/proto2/public/repeated_field.h" - -#ifndef GOOGLE_PROTOBUF_REPEATED_PTR_FIELD_H__ -#define GOOGLE_PROTOBUF_REPEATED_PTR_FIELD_H__ - -#include <utility> - -#ifdef _MSC_VER -// This is required for min/max on VS2013 only. -#include <algorithm> -#endif - -#include <iterator> -#include <limits> -#include <string> -#include <type_traits> - -#include <google/protobuf/stubs/logging.h> -#include <google/protobuf/stubs/common.h> -#include <google/protobuf/arena.h> -#include <google/protobuf/port.h> -#include <google/protobuf/message_lite.h> - - -// Must be included last. -#include <google/protobuf/port_def.inc> - -#ifdef SWIG -#error "You cannot SWIG proto headers" -#endif - -namespace google { -namespace protobuf { - -class Message; -class Reflection; - -template <typename T> -struct WeakRepeatedPtrField; - -namespace internal { - -class MergePartialFromCodedStreamHelper; -class SwapFieldHelper; - - -} // namespace internal - -namespace internal { -template <typename It> -class RepeatedPtrIterator; -template <typename It, typename VoidPtr> -class RepeatedPtrOverPtrsIterator; -} // namespace internal - -namespace internal { - -// type-traits helper for RepeatedPtrFieldBase: we only want to invoke -// arena-related "copy if on different arena" behavior if the necessary methods -// exist on the contained type. In particular, we rely on MergeFrom() existing -// as a general proxy for the fact that a copy will work, and we also provide a -// specific override for std::string*. -template <typename T> -struct TypeImplementsMergeBehaviorProbeForMergeFrom { - typedef char HasMerge; - typedef long HasNoMerge; - - // We accept either of: - // - void MergeFrom(const T& other) - // - bool MergeFrom(const T& other) - // - // We mangle these names a bit to avoid compatibility issues in 'unclean' - // include environments that may have, e.g., "#define test ..." (yes, this - // exists). - template <typename U, typename RetType, RetType (U::*)(const U& arg)> - struct CheckType; - template <typename U> - static HasMerge Check(CheckType<U, void, &U::MergeFrom>*); - template <typename U> - static HasMerge Check(CheckType<U, bool, &U::MergeFrom>*); - template <typename U> - static HasNoMerge Check(...); - - // Resolves to either std::true_type or std::false_type. - typedef std::integral_constant<bool, - (sizeof(Check<T>(0)) == sizeof(HasMerge))> - type; -}; - -template <typename T, typename = void> -struct TypeImplementsMergeBehavior - : TypeImplementsMergeBehaviorProbeForMergeFrom<T> {}; - - -template <> -struct TypeImplementsMergeBehavior<std::string> { - typedef std::true_type type; -}; - -template <typename T> -struct IsMovable - : std::integral_constant<bool, std::is_move_constructible<T>::value && - std::is_move_assignable<T>::value> {}; - -// This is the common base class for RepeatedPtrFields. It deals only in void* -// pointers. Users should not use this interface directly. -// -// The methods of this interface correspond to the methods of RepeatedPtrField, -// but may have a template argument called TypeHandler. Its signature is: -// class TypeHandler { -// public: -// typedef MyType Type; -// static Type* New(); -// static Type* NewFromPrototype(const Type* prototype, -// Arena* arena); -// static void Delete(Type*); -// static void Clear(Type*); -// static void Merge(const Type& from, Type* to); -// -// // Only needs to be implemented if SpaceUsedExcludingSelf() is called. -// static int SpaceUsedLong(const Type&); -// }; -class PROTOBUF_EXPORT RepeatedPtrFieldBase { - protected: - constexpr RepeatedPtrFieldBase() - : arena_(nullptr), current_size_(0), total_size_(0), rep_(nullptr) {} - explicit RepeatedPtrFieldBase(Arena* arena) - : arena_(arena), current_size_(0), total_size_(0), rep_(nullptr) {} - - RepeatedPtrFieldBase(const RepeatedPtrFieldBase&) = delete; - RepeatedPtrFieldBase& operator=(const RepeatedPtrFieldBase&) = delete; - - ~RepeatedPtrFieldBase() { -#ifndef NDEBUG - // Try to trigger segfault / asan failure in non-opt builds. If arena_ - // lifetime has ended before the destructor. - if (arena_) (void)arena_->SpaceAllocated(); -#endif - } - - bool empty() const { return current_size_ == 0; } - int size() const { return current_size_; } - int Capacity() const { return total_size_; } - - template <typename TypeHandler> - const typename TypeHandler::Type& at(int index) const { - GOOGLE_CHECK_GE(index, 0); - GOOGLE_CHECK_LT(index, current_size_); - return *cast<TypeHandler>(rep_->elements[index]); - } - - template <typename TypeHandler> - typename TypeHandler::Type& at(int index) { - GOOGLE_CHECK_GE(index, 0); - GOOGLE_CHECK_LT(index, current_size_); - return *cast<TypeHandler>(rep_->elements[index]); - } - - template <typename TypeHandler> - typename TypeHandler::Type* Mutable(int index) { - GOOGLE_DCHECK_GE(index, 0); - GOOGLE_DCHECK_LT(index, current_size_); - return cast<TypeHandler>(rep_->elements[index]); - } - - template <typename TypeHandler> - typename TypeHandler::Type* Add( - const typename TypeHandler::Type* prototype = nullptr) { - if (rep_ != nullptr && current_size_ < rep_->allocated_size) { - return cast<TypeHandler>(rep_->elements[current_size_++]); - } - typename TypeHandler::Type* result = - TypeHandler::NewFromPrototype(prototype, arena_); - return reinterpret_cast<typename TypeHandler::Type*>( - AddOutOfLineHelper(result)); - } - - template < - typename TypeHandler, - typename std::enable_if<TypeHandler::Movable::value>::type* = nullptr> - inline void Add(typename TypeHandler::Type&& value) { - if (rep_ != nullptr && current_size_ < rep_->allocated_size) { - *cast<TypeHandler>(rep_->elements[current_size_++]) = std::move(value); - return; - } - if (!rep_ || rep_->allocated_size == total_size_) { - Reserve(total_size_ + 1); - } - ++rep_->allocated_size; - typename TypeHandler::Type* result = - TypeHandler::New(arena_, std::move(value)); - rep_->elements[current_size_++] = result; - } - - template <typename TypeHandler> - void Delete(int index) { - GOOGLE_DCHECK_GE(index, 0); - GOOGLE_DCHECK_LT(index, current_size_); - TypeHandler::Delete(cast<TypeHandler>(rep_->elements[index]), arena_); - } - - // Must be called from destructor. - template <typename TypeHandler> - void Destroy() { - if (rep_ != nullptr && arena_ == nullptr) { - int n = rep_->allocated_size; - void* const* elements = rep_->elements; - for (int i = 0; i < n; i++) { - TypeHandler::Delete(cast<TypeHandler>(elements[i]), nullptr); - } - const size_t size = total_size_ * sizeof(elements[0]) + kRepHeaderSize; - internal::SizedDelete(rep_, size); - } - rep_ = nullptr; - } - - bool NeedsDestroy() const { return rep_ != nullptr && arena_ == nullptr; } - void DestroyProtos(); // implemented in the cc file - - public: - // The next few methods are public so that they can be called from generated - // code when implicit weak fields are used, but they should never be called by - // application code. - - template <typename TypeHandler> - const typename TypeHandler::Type& Get(int index) const { - GOOGLE_DCHECK_GE(index, 0); - GOOGLE_DCHECK_LT(index, current_size_); - return *cast<TypeHandler>(rep_->elements[index]); - } - - // Creates and adds an element using the given prototype, without introducing - // a link-time dependency on the concrete message type. This method is used to - // implement implicit weak fields. The prototype may be nullptr, in which case - // an ImplicitWeakMessage will be used as a placeholder. - MessageLite* AddWeak(const MessageLite* prototype); - - template <typename TypeHandler> - void Clear() { - const int n = current_size_; - GOOGLE_DCHECK_GE(n, 0); - if (n > 0) { - void* const* elements = rep_->elements; - int i = 0; - do { - TypeHandler::Clear(cast<TypeHandler>(elements[i++])); - } while (i < n); - current_size_ = 0; - } - } - - template <typename TypeHandler> - void MergeFrom(const RepeatedPtrFieldBase& other) { - // To avoid unnecessary code duplication and reduce binary size, we use a - // layered approach to implementing MergeFrom(). The toplevel method is - // templated, so we get a small thunk per concrete message type in the - // binary. This calls a shared implementation with most of the logic, - // passing a function pointer to another type-specific piece of code that - // calls the object-allocate and merge handlers. - GOOGLE_DCHECK_NE(&other, this); - if (other.current_size_ == 0) return; - MergeFromInternal(other, - &RepeatedPtrFieldBase::MergeFromInnerLoop<TypeHandler>); - } - - inline void InternalSwap(RepeatedPtrFieldBase* rhs) { - GOOGLE_DCHECK(this != rhs); - - // Swap all fields at once. - auto temp = std::make_tuple(rhs->arena_, rhs->current_size_, - rhs->total_size_, rhs->rep_); - std::tie(rhs->arena_, rhs->current_size_, rhs->total_size_, rhs->rep_) = - std::make_tuple(arena_, current_size_, total_size_, rep_); - std::tie(arena_, current_size_, total_size_, rep_) = temp; - } - - protected: - template <typename TypeHandler> - void RemoveLast() { - GOOGLE_DCHECK_GT(current_size_, 0); - TypeHandler::Clear(cast<TypeHandler>(rep_->elements[--current_size_])); - } - - template <typename TypeHandler> - void CopyFrom(const RepeatedPtrFieldBase& other) { - if (&other == this) return; - RepeatedPtrFieldBase::Clear<TypeHandler>(); - RepeatedPtrFieldBase::MergeFrom<TypeHandler>(other); - } - - void CloseGap(int start, int num); // implemented in the cc file - - void Reserve(int new_size); // implemented in the cc file - - template <typename TypeHandler> - static inline typename TypeHandler::Type* copy( - typename TypeHandler::Type* value) { - auto* new_value = TypeHandler::NewFromPrototype(value, nullptr); - TypeHandler::Merge(*value, new_value); - return new_value; - } - - // Used for constructing iterators. - void* const* raw_data() const { return rep_ ? rep_->elements : nullptr; } - void** raw_mutable_data() const { - return rep_ ? const_cast<void**>(rep_->elements) : nullptr; - } - - template <typename TypeHandler> - typename TypeHandler::Type** mutable_data() { - // TODO(kenton): Breaks C++ aliasing rules. We should probably remove this - // method entirely. - return reinterpret_cast<typename TypeHandler::Type**>(raw_mutable_data()); - } - - template <typename TypeHandler> - const typename TypeHandler::Type* const* data() const { - // TODO(kenton): Breaks C++ aliasing rules. We should probably remove this - // method entirely. - return reinterpret_cast<const typename TypeHandler::Type* const*>( - raw_data()); - } - - template <typename TypeHandler> - PROTOBUF_NDEBUG_INLINE void Swap(RepeatedPtrFieldBase* other) { -#ifdef PROTOBUF_FORCE_COPY_IN_SWAP - if (GetOwningArena() != nullptr && - GetOwningArena() == other->GetOwningArena()) -#else // PROTOBUF_FORCE_COPY_IN_SWAP - if (GetOwningArena() == other->GetOwningArena()) -#endif // !PROTOBUF_FORCE_COPY_IN_SWAP - { - InternalSwap(other); - } else { - SwapFallback<TypeHandler>(other); - } - } - - void SwapElements(int index1, int index2) { - using std::swap; // enable ADL with fallback - swap(rep_->elements[index1], rep_->elements[index2]); - } - - template <typename TypeHandler> - size_t SpaceUsedExcludingSelfLong() const { - size_t allocated_bytes = static_cast<size_t>(total_size_) * sizeof(void*); - if (rep_ != nullptr) { - for (int i = 0; i < rep_->allocated_size; ++i) { - allocated_bytes += - TypeHandler::SpaceUsedLong(*cast<TypeHandler>(rep_->elements[i])); - } - allocated_bytes += kRepHeaderSize; - } - return allocated_bytes; - } - - // Advanced memory management -------------------------------------- - - // Like Add(), but if there are no cleared objects to use, returns nullptr. - template <typename TypeHandler> - typename TypeHandler::Type* AddFromCleared() { - if (rep_ != nullptr && current_size_ < rep_->allocated_size) { - return cast<TypeHandler>(rep_->elements[current_size_++]); - } else { - return nullptr; - } - } - - template <typename TypeHandler> - void AddAllocated(typename TypeHandler::Type* value) { - typename TypeImplementsMergeBehavior<typename TypeHandler::Type>::type t; - AddAllocatedInternal<TypeHandler>(value, t); - } - - template <typename TypeHandler> - void UnsafeArenaAddAllocated(typename TypeHandler::Type* value) { - // Make room for the new pointer. - if (!rep_ || current_size_ == total_size_) { - // The array is completely full with no cleared objects, so grow it. - Reserve(total_size_ + 1); - ++rep_->allocated_size; - } else if (rep_->allocated_size == total_size_) { - // There is no more space in the pointer array because it contains some - // cleared objects awaiting reuse. We don't want to grow the array in - // this case because otherwise a loop calling AddAllocated() followed by - // Clear() would leak memory. - TypeHandler::Delete(cast<TypeHandler>(rep_->elements[current_size_]), - arena_); - } else if (current_size_ < rep_->allocated_size) { - // We have some cleared objects. We don't care about their order, so we - // can just move the first one to the end to make space. - rep_->elements[rep_->allocated_size] = rep_->elements[current_size_]; - ++rep_->allocated_size; - } else { - // There are no cleared objects. - ++rep_->allocated_size; - } - - rep_->elements[current_size_++] = value; - } - - template <typename TypeHandler> - PROTOBUF_NODISCARD typename TypeHandler::Type* ReleaseLast() { - typename TypeImplementsMergeBehavior<typename TypeHandler::Type>::type t; - return ReleaseLastInternal<TypeHandler>(t); - } - - // Releases and returns the last element, but does not do out-of-arena copy. - // Instead, just returns the raw pointer to the contained element in the - // arena. - template <typename TypeHandler> - typename TypeHandler::Type* UnsafeArenaReleaseLast() { - GOOGLE_DCHECK_GT(current_size_, 0); - typename TypeHandler::Type* result = - cast<TypeHandler>(rep_->elements[--current_size_]); - --rep_->allocated_size; - if (current_size_ < rep_->allocated_size) { - // There are cleared elements on the end; replace the removed element - // with the last allocated element. - rep_->elements[current_size_] = rep_->elements[rep_->allocated_size]; - } - return result; - } - - int ClearedCount() const { - return rep_ ? (rep_->allocated_size - current_size_) : 0; - } - - template <typename TypeHandler> - void AddCleared(typename TypeHandler::Type* value) { - GOOGLE_DCHECK(GetOwningArena() == nullptr) << "AddCleared() can only be used on a " - "RepeatedPtrField not on an arena."; - GOOGLE_DCHECK(TypeHandler::GetOwningArena(value) == nullptr) - << "AddCleared() can only accept values not on an arena."; - if (!rep_ || rep_->allocated_size == total_size_) { - Reserve(total_size_ + 1); - } - rep_->elements[rep_->allocated_size++] = value; - } - - template <typename TypeHandler> - PROTOBUF_NODISCARD typename TypeHandler::Type* ReleaseCleared() { - GOOGLE_DCHECK(GetOwningArena() == nullptr) - << "ReleaseCleared() can only be used on a RepeatedPtrField not on " - << "an arena."; - GOOGLE_DCHECK(GetOwningArena() == nullptr); - GOOGLE_DCHECK(rep_ != nullptr); - GOOGLE_DCHECK_GT(rep_->allocated_size, current_size_); - return cast<TypeHandler>(rep_->elements[--rep_->allocated_size]); - } - - template <typename TypeHandler> - void AddAllocatedInternal(typename TypeHandler::Type* value, std::true_type) { - // AddAllocated version that implements arena-safe copying behavior. - Arena* element_arena = - reinterpret_cast<Arena*>(TypeHandler::GetOwningArena(value)); - Arena* arena = GetOwningArena(); - if (arena == element_arena && rep_ && rep_->allocated_size < total_size_) { - // Fast path: underlying arena representation (tagged pointer) is equal to - // our arena pointer, and we can add to array without resizing it (at - // least one slot that is not allocated). - void** elems = rep_->elements; - if (current_size_ < rep_->allocated_size) { - // Make space at [current] by moving first allocated element to end of - // allocated list. - elems[rep_->allocated_size] = elems[current_size_]; - } - elems[current_size_] = value; - current_size_ = current_size_ + 1; - rep_->allocated_size = rep_->allocated_size + 1; - } else { - AddAllocatedSlowWithCopy<TypeHandler>(value, element_arena, arena); - } - } - - template <typename TypeHandler> - void AddAllocatedInternal( - // AddAllocated version that does not implement arena-safe copying - // behavior. - typename TypeHandler::Type* value, std::false_type) { - if (rep_ && rep_->allocated_size < total_size_) { - // Fast path: underlying arena representation (tagged pointer) is equal to - // our arena pointer, and we can add to array without resizing it (at - // least one slot that is not allocated). - void** elems = rep_->elements; - if (current_size_ < rep_->allocated_size) { - // Make space at [current] by moving first allocated element to end of - // allocated list. - elems[rep_->allocated_size] = elems[current_size_]; - } - elems[current_size_] = value; - current_size_ = current_size_ + 1; - ++rep_->allocated_size; - } else { - UnsafeArenaAddAllocated<TypeHandler>(value); - } - } - - // Slowpath handles all cases, copying if necessary. - template <typename TypeHandler> - PROTOBUF_NOINLINE void AddAllocatedSlowWithCopy( - // Pass value_arena and my_arena to avoid duplicate virtual call (value) - // or load (mine). - typename TypeHandler::Type* value, Arena* value_arena, Arena* my_arena) { - // Ensure that either the value is in the same arena, or if not, we do the - // appropriate thing: Own() it (if it's on heap and we're in an arena) or - // copy it to our arena/heap (otherwise). - if (my_arena != nullptr && value_arena == nullptr) { - my_arena->Own(value); - } else if (my_arena != value_arena) { - typename TypeHandler::Type* new_value = - TypeHandler::NewFromPrototype(value, my_arena); - TypeHandler::Merge(*value, new_value); - TypeHandler::Delete(value, value_arena); - value = new_value; - } - - UnsafeArenaAddAllocated<TypeHandler>(value); - } - - template <typename TypeHandler> - typename TypeHandler::Type* ReleaseLastInternal(std::true_type) { - // ReleaseLast() for types that implement merge/copy behavior. - // First, release an element. - typename TypeHandler::Type* result = UnsafeArenaReleaseLast<TypeHandler>(); - // Now perform a copy if we're on an arena. - Arena* arena = GetOwningArena(); - - typename TypeHandler::Type* new_result; -#ifdef PROTOBUF_FORCE_COPY_IN_RELEASE - new_result = copy<TypeHandler>(result); - if (arena == nullptr) delete result; -#else // PROTOBUF_FORCE_COPY_IN_RELEASE - new_result = (arena == nullptr) ? result : copy<TypeHandler>(result); -#endif // !PROTOBUF_FORCE_COPY_IN_RELEASE - return new_result; - } - - template <typename TypeHandler> - typename TypeHandler::Type* ReleaseLastInternal(std::false_type) { - // ReleaseLast() for types that *do not* implement merge/copy behavior -- - // this is the same as UnsafeArenaReleaseLast(). Note that we GOOGLE_DCHECK-fail if - // we're on an arena, since the user really should implement the copy - // operation in this case. - GOOGLE_DCHECK(GetOwningArena() == nullptr) - << "ReleaseLast() called on a RepeatedPtrField that is on an arena, " - << "with a type that does not implement MergeFrom. This is unsafe; " - << "please implement MergeFrom for your type."; - return UnsafeArenaReleaseLast<TypeHandler>(); - } - - template <typename TypeHandler> - PROTOBUF_NOINLINE void SwapFallback(RepeatedPtrFieldBase* other) { -#ifdef PROTOBUF_FORCE_COPY_IN_SWAP - GOOGLE_DCHECK(GetOwningArena() == nullptr || - other->GetOwningArena() != GetOwningArena()); -#else // PROTOBUF_FORCE_COPY_IN_SWAP - GOOGLE_DCHECK(other->GetOwningArena() != GetOwningArena()); -#endif // !PROTOBUF_FORCE_COPY_IN_SWAP - - // Copy semantics in this case. We try to improve efficiency by placing the - // temporary on |other|'s arena so that messages are copied twice rather - // than three times. - RepeatedPtrFieldBase temp(other->GetOwningArena()); - temp.MergeFrom<TypeHandler>(*this); - this->Clear<TypeHandler>(); - this->MergeFrom<TypeHandler>(*other); - other->InternalSwap(&temp); - temp.Destroy<TypeHandler>(); // Frees rep_ if `other` had no arena. - } - - inline Arena* GetArena() const { return arena_; } - - protected: - inline Arena* GetOwningArena() const { return arena_; } - - private: - template <typename T> friend class Arena::InternalHelper; - - static constexpr int kInitialSize = 0; - // A few notes on internal representation: - // - // We use an indirected approach, with struct Rep, to keep - // sizeof(RepeatedPtrFieldBase) equivalent to what it was before arena support - // was added; namely, 3 8-byte machine words on x86-64. An instance of Rep is - // allocated only when the repeated field is non-empty, and it is a - // dynamically-sized struct (the header is directly followed by elements[]). - // We place arena_ and current_size_ directly in the object to avoid cache - // misses due to the indirection, because these fields are checked frequently. - // Placing all fields directly in the RepeatedPtrFieldBase instance would cost - // significant performance for memory-sensitive workloads. - Arena* arena_; - int current_size_; - int total_size_; - struct Rep { - int allocated_size; - // Here we declare a huge array as a way of approximating C's "flexible - // array member" feature without relying on undefined behavior. - void* elements[(std::numeric_limits<int>::max() - 2 * sizeof(int)) / - sizeof(void*)]; - }; - static constexpr size_t kRepHeaderSize = offsetof(Rep, elements); - Rep* rep_; - - template <typename TypeHandler> - static inline typename TypeHandler::Type* cast(void* element) { - return reinterpret_cast<typename TypeHandler::Type*>(element); - } - template <typename TypeHandler> - static inline const typename TypeHandler::Type* cast(const void* element) { - return reinterpret_cast<const typename TypeHandler::Type*>(element); - } - - // Non-templated inner function to avoid code duplication. Takes a function - // pointer to the type-specific (templated) inner allocate/merge loop. - void MergeFromInternal(const RepeatedPtrFieldBase& other, - void (RepeatedPtrFieldBase::*inner_loop)(void**, - void**, int, - int)) { - // Note: wrapper has already guaranteed that other.rep_ != nullptr here. - int other_size = other.current_size_; - void** other_elements = other.rep_->elements; - void** new_elements = InternalExtend(other_size); - int allocated_elems = rep_->allocated_size - current_size_; - (this->*inner_loop)(new_elements, other_elements, other_size, - allocated_elems); - current_size_ += other_size; - if (rep_->allocated_size < current_size_) { - rep_->allocated_size = current_size_; - } - } - - // Merges other_elems to our_elems. - template <typename TypeHandler> - PROTOBUF_NOINLINE void MergeFromInnerLoop(void** our_elems, - void** other_elems, int length, - int already_allocated) { - if (already_allocated < length) { - Arena* arena = GetOwningArena(); - typename TypeHandler::Type* elem_prototype = - reinterpret_cast<typename TypeHandler::Type*>(other_elems[0]); - for (int i = already_allocated; i < length; i++) { - // Allocate a new empty element that we'll merge into below - typename TypeHandler::Type* new_elem = - TypeHandler::NewFromPrototype(elem_prototype, arena); - our_elems[i] = new_elem; - } - } - // Main loop that does the actual merging - for (int i = 0; i < length; i++) { - // Already allocated: use existing element. - typename TypeHandler::Type* other_elem = - reinterpret_cast<typename TypeHandler::Type*>(other_elems[i]); - typename TypeHandler::Type* new_elem = - reinterpret_cast<typename TypeHandler::Type*>(our_elems[i]); - TypeHandler::Merge(*other_elem, new_elem); - } - } - - // Internal helper: extends array space if necessary to contain - // |extend_amount| more elements, and returns a pointer to the element - // immediately following the old list of elements. This interface factors out - // common behavior from Reserve() and MergeFrom() to reduce code size. - // |extend_amount| must be > 0. - void** InternalExtend(int extend_amount); - - // Internal helper for Add: adds "obj" as the next element in the - // array, including potentially resizing the array with Reserve if - // needed - void* AddOutOfLineHelper(void* obj); - - // The reflection implementation needs to call protected methods directly, - // reinterpreting pointers as being to Message instead of a specific Message - // subclass. - friend class ::PROTOBUF_NAMESPACE_ID::Reflection; - friend class ::PROTOBUF_NAMESPACE_ID::internal::SwapFieldHelper; - - // ExtensionSet stores repeated message extensions as - // RepeatedPtrField<MessageLite>, but non-lite ExtensionSets need to implement - // SpaceUsedLong(), and thus need to call SpaceUsedExcludingSelfLong() - // reinterpreting MessageLite as Message. ExtensionSet also needs to make use - // of AddFromCleared(), which is not part of the public interface. - friend class ExtensionSet; - - // The MapFieldBase implementation needs to call protected methods directly, - // reinterpreting pointers as being to Message instead of a specific Message - // subclass. - friend class MapFieldBase; - friend class MapFieldBaseStub; - - // The table-driven MergePartialFromCodedStream implementation needs to - // operate on RepeatedPtrField<MessageLite>. - friend class MergePartialFromCodedStreamHelper; - friend class AccessorHelper; - template <typename T> - friend struct google::protobuf::WeakRepeatedPtrField; - friend class internal::TcParser; // TODO(jorg): Remove this friend. -}; - -template <typename GenericType> -class GenericTypeHandler { - public: - typedef GenericType Type; - using Movable = IsMovable<GenericType>; - - static inline GenericType* New(Arena* arena) { - return Arena::CreateMaybeMessage<Type>(arena); - } - static inline GenericType* New(Arena* arena, GenericType&& value) { - return Arena::Create<GenericType>(arena, std::move(value)); - } - static inline GenericType* NewFromPrototype(const GenericType* /*prototype*/, - Arena* arena = nullptr) { - return New(arena); - } - static inline void Delete(GenericType* value, Arena* arena) { - if (arena == nullptr) { - delete value; - } - } - static inline Arena* GetOwningArena(GenericType* value) { - return Arena::GetOwningArena<Type>(value); - } - - static inline void Clear(GenericType* value) { value->Clear(); } - static void Merge(const GenericType& from, GenericType* to); - static inline size_t SpaceUsedLong(const GenericType& value) { - return value.SpaceUsedLong(); - } -}; - -// NewFromPrototypeHelper() is not defined inline here, as we will need to do a -// virtual function dispatch anyways to go from Message* to call New/Merge. (The -// additional helper is needed as a workaround for MSVC.) -MessageLite* NewFromPrototypeHelper(const MessageLite* prototype, Arena* arena); - -template <> -inline MessageLite* GenericTypeHandler<MessageLite>::NewFromPrototype( - const MessageLite* prototype, Arena* arena) { - return NewFromPrototypeHelper(prototype, arena); -} -template <> -inline Arena* GenericTypeHandler<MessageLite>::GetOwningArena( - MessageLite* value) { - return value->GetOwningArena(); -} - -template <typename GenericType> -PROTOBUF_NOINLINE inline void GenericTypeHandler<GenericType>::Merge( - const GenericType& from, GenericType* to) { - to->MergeFrom(from); -} -template <> -void GenericTypeHandler<MessageLite>::Merge(const MessageLite& from, - MessageLite* to); - -template <> -inline void GenericTypeHandler<std::string>::Clear(std::string* value) { - value->clear(); -} -template <> -void GenericTypeHandler<std::string>::Merge(const std::string& from, - std::string* to); - -// Message specialization bodies defined in message.cc. This split is necessary -// to allow proto2-lite (which includes this header) to be independent of -// Message. -template <> -PROTOBUF_EXPORT Message* GenericTypeHandler<Message>::NewFromPrototype( - const Message* prototype, Arena* arena); -template <> -PROTOBUF_EXPORT Arena* GenericTypeHandler<Message>::GetOwningArena( - Message* value); - -class StringTypeHandler { - public: - typedef std::string Type; - using Movable = IsMovable<Type>; - - static inline std::string* New(Arena* arena) { - return Arena::Create<std::string>(arena); - } - static inline std::string* New(Arena* arena, std::string&& value) { - return Arena::Create<std::string>(arena, std::move(value)); - } - static inline std::string* NewFromPrototype(const std::string*, - Arena* arena) { - return New(arena); - } - static inline Arena* GetOwningArena(std::string*) { return nullptr; } - static inline void Delete(std::string* value, Arena* arena) { - if (arena == nullptr) { - delete value; - } - } - static inline void Clear(std::string* value) { value->clear(); } - static inline void Merge(const std::string& from, std::string* to) { - *to = from; - } - static size_t SpaceUsedLong(const std::string& value) { - return sizeof(value) + StringSpaceUsedExcludingSelfLong(value); - } -}; - -} // namespace internal - -// RepeatedPtrField is like RepeatedField, but used for repeated strings or -// Messages. -template <typename Element> -class RepeatedPtrField final : private internal::RepeatedPtrFieldBase { - - public: - constexpr RepeatedPtrField(); - explicit RepeatedPtrField(Arena* arena); - - RepeatedPtrField(const RepeatedPtrField& other); - - template <typename Iter, - typename = typename std::enable_if<std::is_constructible< - Element, decltype(*std::declval<Iter>())>::value>::type> - RepeatedPtrField(Iter begin, Iter end); - - ~RepeatedPtrField(); - - RepeatedPtrField& operator=(const RepeatedPtrField& other); - - RepeatedPtrField(RepeatedPtrField&& other) noexcept; - RepeatedPtrField& operator=(RepeatedPtrField&& other) noexcept; - - bool empty() const; - int size() const; - - const Element& Get(int index) const; - Element* Mutable(int index); - - // Unlike std::vector, adding an element to a RepeatedPtrField doesn't always - // make a new element; it might re-use an element left over from when the - // field was Clear()'d or reize()'d smaller. For this reason, Add() is the - // fastest API for adding a new element. - Element* Add(); - - // `Add(std::move(value));` is equivalent to `*Add() = std::move(value);` - // It will either move-construct to the end of this field, or swap value - // with the new-or-recycled element at the end of this field. Note that - // this operation is very slow if this RepeatedPtrField is not on the - // same Arena, if any, as `value`. - void Add(Element&& value); - - // Copying to the end of this RepeatedPtrField is slowest of all; it can't - // reliably copy-construct to the last element of this RepeatedPtrField, for - // example (unlike std::vector). - // We currently block this API. The right way to add to the end is to call - // Add() and modify the element it points to. - // If you must add an existing value, call `*Add() = value;` - void Add(const Element& value) = delete; - - // Append elements in the range [begin, end) after reserving - // the appropriate number of elements. - template <typename Iter> - void Add(Iter begin, Iter end); - - const Element& operator[](int index) const { return Get(index); } - Element& operator[](int index) { return *Mutable(index); } - - const Element& at(int index) const; - Element& at(int index); - - // Removes the last element in the array. - // Ownership of the element is retained by the array. - void RemoveLast(); - - // Deletes elements with indices in the range [start .. start+num-1]. - // Caution: moves all elements with indices [start+num .. ]. - // Calling this routine inside a loop can cause quadratic behavior. - void DeleteSubrange(int start, int num); - - PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear(); - void MergeFrom(const RepeatedPtrField& other); - PROTOBUF_ATTRIBUTE_REINITIALIZES void CopyFrom(const RepeatedPtrField& other); - - // Replaces the contents with RepeatedPtrField(begin, end). - template <typename Iter> - PROTOBUF_ATTRIBUTE_REINITIALIZES void Assign(Iter begin, Iter end); - - // Reserves 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 - // array is grown, it will always be at least doubled in size. - void Reserve(int new_size); - - int Capacity() const; - - // Gets the underlying array. This pointer is possibly invalidated by - // any add or remove operation. - // - // This API is deprecated. Instead of directly working with element array, - // use APIs in repeated_field_util.h; e.g. sorting, etc. - PROTOBUF_DEPRECATED_MSG("Use APIs in repeated_field_util.h") - Element** mutable_data(); - const Element* const* data() const; - - // Swaps entire contents with "other". If they are on separate arenas, then - // copies data. - void Swap(RepeatedPtrField* other); - - // Swaps entire contents with "other". Caller should guarantee that either - // both fields are on the same arena or both are on the heap. Swapping between - // different arenas with this function is disallowed and is caught via - // GOOGLE_DCHECK. - void UnsafeArenaSwap(RepeatedPtrField* other); - - // Swaps two elements. - void SwapElements(int index1, int index2); - - // STL-like iterator support - typedef internal::RepeatedPtrIterator<Element> iterator; - typedef internal::RepeatedPtrIterator<const Element> const_iterator; - typedef Element value_type; - typedef value_type& reference; - typedef const value_type& const_reference; - typedef value_type* pointer; - typedef const value_type* const_pointer; - typedef int size_type; - typedef ptrdiff_t difference_type; - - iterator begin(); - const_iterator begin() const; - const_iterator cbegin() const; - iterator end(); - const_iterator end() const; - const_iterator cend() const; - - // Reverse iterator support - typedef std::reverse_iterator<const_iterator> const_reverse_iterator; - typedef std::reverse_iterator<iterator> reverse_iterator; - reverse_iterator rbegin() { return reverse_iterator(end()); } - const_reverse_iterator rbegin() const { - return const_reverse_iterator(end()); - } - reverse_iterator rend() { return reverse_iterator(begin()); } - const_reverse_iterator rend() const { - return const_reverse_iterator(begin()); - } - - // Custom STL-like iterator that iterates over and returns the underlying - // pointers to Element rather than Element itself. - typedef internal::RepeatedPtrOverPtrsIterator<Element*, void*> - pointer_iterator; - typedef internal::RepeatedPtrOverPtrsIterator<const Element* const, - const void* const> - const_pointer_iterator; - pointer_iterator pointer_begin(); - const_pointer_iterator pointer_begin() const; - pointer_iterator pointer_end(); - const_pointer_iterator pointer_end() const; - - // Returns (an estimate of) the number of bytes used by the repeated field, - // excluding sizeof(*this). - size_t SpaceUsedExcludingSelfLong() const; - - int SpaceUsedExcludingSelf() const { - return internal::ToIntSize(SpaceUsedExcludingSelfLong()); - } - - // Advanced memory management -------------------------------------- - // When hardcore memory management becomes necessary -- as it sometimes - // does here at Google -- the following methods may be useful. - - // Adds an already-allocated object, passing ownership to the - // RepeatedPtrField. - // - // Note that some special behavior occurs with respect to arenas: - // - // (i) if this field holds submessages, the new submessage will be copied if - // the original is in an arena and this RepeatedPtrField is either in a - // different arena, or on the heap. - // (ii) if this field holds strings, the passed-in string *must* be - // heap-allocated, not arena-allocated. There is no way to dynamically check - // this at runtime, so User Beware. - void AddAllocated(Element* value); - - // Removes and returns the last element, passing ownership to the caller. - // Requires: size() > 0 - // - // If this RepeatedPtrField is on an arena, an object copy is required to pass - // ownership back to the user (for compatible semantics). Use - // UnsafeArenaReleaseLast() if this behavior is undesired. - PROTOBUF_NODISCARD Element* ReleaseLast(); - - // Adds an already-allocated object, skipping arena-ownership checks. The user - // must guarantee that the given object is in the same arena as this - // RepeatedPtrField. - // It is also useful in legacy code that uses temporary ownership to avoid - // copies. Example: - // RepeatedPtrField<T> temp_field; - // temp_field.UnsafeArenaAddAllocated(new T); - // ... // Do something with temp_field - // temp_field.UnsafeArenaExtractSubrange(0, temp_field.size(), nullptr); - // If you put temp_field on the arena this fails, because the ownership - // transfers to the arena at the "AddAllocated" call and is not released - // anymore, causing a double delete. UnsafeArenaAddAllocated prevents this. - void UnsafeArenaAddAllocated(Element* value); - - // Removes and returns the last element. Unlike ReleaseLast, the returned - // pointer is always to the original object. This may be in an arena, in - // which case it would have the arena's lifetime. - // Requires: current_size_ > 0 - Element* UnsafeArenaReleaseLast(); - - // Extracts elements with indices in the range "[start .. start+num-1]". - // The caller assumes ownership of the extracted elements and is responsible - // for deleting them when they are no longer needed. - // If "elements" is non-nullptr, then pointers to the extracted elements - // are stored in "elements[0 .. num-1]" for the convenience of the caller. - // If "elements" is nullptr, then the caller must use some other mechanism - // to perform any further operations (like deletion) on these elements. - // Caution: implementation also moves elements with indices [start+num ..]. - // Calling this routine inside a loop can cause quadratic behavior. - // - // Memory copying behavior is identical to ReleaseLast(), described above: if - // this RepeatedPtrField is on an arena, an object copy is performed for each - // returned element, so that all returned element pointers are to - // heap-allocated copies. If this copy is not desired, the user should call - // UnsafeArenaExtractSubrange(). - void ExtractSubrange(int start, int num, Element** elements); - - // Identical to ExtractSubrange() described above, except that no object - // copies are ever performed. Instead, the raw object pointers are returned. - // Thus, if on an arena, the returned objects must not be freed, because they - // will not be heap-allocated objects. - void UnsafeArenaExtractSubrange(int start, int num, Element** elements); - - // When elements are removed by calls to RemoveLast() or Clear(), they - // are not actually freed. Instead, they are cleared and kept so that - // they can be reused later. This can save lots of CPU time when - // repeatedly reusing a protocol message for similar purposes. - // - // Hardcore programs may choose to manipulate these cleared objects - // to better optimize memory management using the following routines. - - // Gets the number of cleared objects that are currently being kept - // around for reuse. - int ClearedCount() const; -#ifndef PROTOBUF_FUTURE_BREAKING_CHANGES - // Adds an element to the pool of cleared objects, passing ownership to - // the RepeatedPtrField. The element must be cleared prior to calling - // this method. - // - // This method cannot be called when either the repeated field or |value| is - // on an arena; both cases will trigger a GOOGLE_DCHECK-failure. - void AddCleared(Element* value); - // Removes and returns a single element from the cleared pool, passing - // ownership to the caller. The element is guaranteed to be cleared. - // Requires: ClearedCount() > 0 - // - // This method cannot be called when the repeated field is on an arena; doing - // so will trigger a GOOGLE_DCHECK-failure. - PROTOBUF_NODISCARD Element* ReleaseCleared(); -#endif // !PROTOBUF_FUTURE_BREAKING_CHANGES - - // Removes the element referenced by position. - // - // Returns an iterator to the element immediately following the removed - // element. - // - // Invalidates all iterators at or after the removed element, including end(). - iterator erase(const_iterator position); - - // Removes the elements in the range [first, last). - // - // Returns an iterator to the element immediately following the removed range. - // - // Invalidates all iterators at or after the removed range, including end(). - iterator erase(const_iterator first, const_iterator last); - - // Gets the arena on which this RepeatedPtrField stores its elements. - inline Arena* GetArena() const; - - // For internal use only. - // - // This is public due to it being called by generated code. - void InternalSwap(RepeatedPtrField* other) { - internal::RepeatedPtrFieldBase::InternalSwap(other); - } - - private: - // Note: RepeatedPtrField SHOULD NOT be subclassed by users. - class TypeHandler; - - // Internal version of GetArena(). - inline Arena* GetOwningArena() const; - - // Implementations for ExtractSubrange(). The copying behavior must be - // included only if the type supports the necessary operations (e.g., - // MergeFrom()), so we must resolve this at compile time. ExtractSubrange() - // uses SFINAE to choose one of the below implementations. - void ExtractSubrangeInternal(int start, int num, Element** elements, - std::true_type); - void ExtractSubrangeInternal(int start, int num, Element** elements, - std::false_type); - - friend class Arena; - - template <typename T> - friend struct WeakRepeatedPtrField; - - typedef void InternalArenaConstructable_; - -}; - -// ------------------------------------------------------------------- - -template <typename Element> -class RepeatedPtrField<Element>::TypeHandler - : public internal::GenericTypeHandler<Element> {}; - -template <> -class RepeatedPtrField<std::string>::TypeHandler - : public internal::StringTypeHandler {}; - -template <typename Element> -constexpr RepeatedPtrField<Element>::RepeatedPtrField() - : RepeatedPtrFieldBase() {} - -template <typename Element> -inline RepeatedPtrField<Element>::RepeatedPtrField(Arena* arena) - : RepeatedPtrFieldBase(arena) {} - -template <typename Element> -inline RepeatedPtrField<Element>::RepeatedPtrField( - const RepeatedPtrField& other) - : RepeatedPtrFieldBase() { - MergeFrom(other); -} - -template <typename Element> -template <typename Iter, typename> -inline RepeatedPtrField<Element>::RepeatedPtrField(Iter begin, Iter end) { - Add(begin, end); -} - -template <typename Element> -RepeatedPtrField<Element>::~RepeatedPtrField() { -#ifdef __cpp_if_constexpr - if constexpr (std::is_base_of<MessageLite, Element>::value) { -#else - if (std::is_base_of<MessageLite, Element>::value) { -#endif - if (NeedsDestroy()) DestroyProtos(); - } else { - Destroy<TypeHandler>(); - } -} - -template <typename Element> -inline RepeatedPtrField<Element>& RepeatedPtrField<Element>::operator=( - const RepeatedPtrField& other) { - if (this != &other) CopyFrom(other); - return *this; -} - -template <typename Element> -inline RepeatedPtrField<Element>::RepeatedPtrField( - RepeatedPtrField&& other) noexcept - : RepeatedPtrField() { -#ifdef PROTOBUF_FORCE_COPY_IN_MOVE - CopyFrom(other); -#else // PROTOBUF_FORCE_COPY_IN_MOVE - // We don't just call Swap(&other) here because it would perform 3 copies if - // other is on an arena. This field can't be on an arena because arena - // construction always uses the Arena* accepting constructor. - if (other.GetOwningArena()) { - CopyFrom(other); - } else { - InternalSwap(&other); - } -#endif // !PROTOBUF_FORCE_COPY_IN_MOVE -} - -template <typename Element> -inline RepeatedPtrField<Element>& RepeatedPtrField<Element>::operator=( - RepeatedPtrField&& other) noexcept { - // We don't just call Swap(&other) here because it would perform 3 copies if - // the two fields are on different arenas. - if (this != &other) { - if (GetOwningArena() != other.GetOwningArena() -#ifdef PROTOBUF_FORCE_COPY_IN_MOVE - || GetOwningArena() == nullptr -#endif // !PROTOBUF_FORCE_COPY_IN_MOVE - ) { - CopyFrom(other); - } else { - InternalSwap(&other); - } - } - return *this; -} - -template <typename Element> -inline bool RepeatedPtrField<Element>::empty() const { - return RepeatedPtrFieldBase::empty(); -} - -template <typename Element> -inline int RepeatedPtrField<Element>::size() const { - return RepeatedPtrFieldBase::size(); -} - -template <typename Element> -inline const Element& RepeatedPtrField<Element>::Get(int index) const { - return RepeatedPtrFieldBase::Get<TypeHandler>(index); -} - -template <typename Element> -inline const Element& RepeatedPtrField<Element>::at(int index) const { - return RepeatedPtrFieldBase::at<TypeHandler>(index); -} - -template <typename Element> -inline Element& RepeatedPtrField<Element>::at(int index) { - return RepeatedPtrFieldBase::at<TypeHandler>(index); -} - - -template <typename Element> -inline Element* RepeatedPtrField<Element>::Mutable(int index) { - return RepeatedPtrFieldBase::Mutable<TypeHandler>(index); -} - -template <typename Element> -inline Element* RepeatedPtrField<Element>::Add() { - return RepeatedPtrFieldBase::Add<TypeHandler>(); -} - -template <typename Element> -inline void RepeatedPtrField<Element>::Add(Element&& value) { - RepeatedPtrFieldBase::Add<TypeHandler>(std::move(value)); -} - -template <typename Element> -template <typename Iter> -inline void RepeatedPtrField<Element>::Add(Iter begin, Iter end) { - if (std::is_base_of< - std::forward_iterator_tag, - typename std::iterator_traits<Iter>::iterator_category>::value) { - int reserve = std::distance(begin, end); - Reserve(size() + reserve); - } - for (; begin != end; ++begin) { - *Add() = *begin; - } -} - -template <typename Element> -inline void RepeatedPtrField<Element>::RemoveLast() { - RepeatedPtrFieldBase::RemoveLast<TypeHandler>(); -} - -template <typename Element> -inline void RepeatedPtrField<Element>::DeleteSubrange(int start, int num) { - GOOGLE_DCHECK_GE(start, 0); - GOOGLE_DCHECK_GE(num, 0); - GOOGLE_DCHECK_LE(start + num, size()); - for (int i = 0; i < num; ++i) { - RepeatedPtrFieldBase::Delete<TypeHandler>(start + i); - } - UnsafeArenaExtractSubrange(start, num, nullptr); -} - -template <typename Element> -inline void RepeatedPtrField<Element>::ExtractSubrange(int start, int num, - Element** elements) { - typename internal::TypeImplementsMergeBehavior< - typename TypeHandler::Type>::type t; - ExtractSubrangeInternal(start, num, elements, t); -} - -// ExtractSubrange() implementation for types that implement merge/copy -// behavior. -template <typename Element> -inline void RepeatedPtrField<Element>::ExtractSubrangeInternal( - int start, int num, Element** elements, std::true_type) { - GOOGLE_DCHECK_GE(start, 0); - GOOGLE_DCHECK_GE(num, 0); - GOOGLE_DCHECK_LE(start + num, size()); - - if (num == 0) return; - - GOOGLE_DCHECK_NE(elements, nullptr) - << "Releasing elements without transferring ownership is an unsafe " - "operation. Use UnsafeArenaExtractSubrange."; - if (elements == nullptr) { - CloseGap(start, num); - return; - } - - Arena* arena = GetOwningArena(); -#ifdef PROTOBUF_FORCE_COPY_IN_RELEASE - // Always copy. - for (int i = 0; i < num; ++i) { - elements[i] = copy<TypeHandler>( - RepeatedPtrFieldBase::Mutable<TypeHandler>(i + start)); - } - if (arena == nullptr) { - for (int i = 0; i < num; ++i) { - delete RepeatedPtrFieldBase::Mutable<TypeHandler>(i + start); - } - } -#else // PROTOBUF_FORCE_COPY_IN_RELEASE - // If we're on an arena, we perform a copy for each element so that the - // returned elements are heap-allocated. Otherwise, just forward it. - if (arena != nullptr) { - for (int i = 0; i < num; ++i) { - elements[i] = copy<TypeHandler>( - RepeatedPtrFieldBase::Mutable<TypeHandler>(i + start)); - } - } else { - for (int i = 0; i < num; ++i) { - elements[i] = RepeatedPtrFieldBase::Mutable<TypeHandler>(i + start); - } - } -#endif // !PROTOBUF_FORCE_COPY_IN_RELEASE - CloseGap(start, num); -} - -// ExtractSubrange() implementation for types that do not implement merge/copy -// behavior. -template <typename Element> -inline void RepeatedPtrField<Element>::ExtractSubrangeInternal( - int start, int num, Element** elements, std::false_type) { - // This case is identical to UnsafeArenaExtractSubrange(). However, since - // ExtractSubrange() must return heap-allocated objects by contract, and we - // cannot fulfill this contract if we are an on arena, we must GOOGLE_DCHECK() that - // we are not on an arena. - GOOGLE_DCHECK(GetOwningArena() == nullptr) - << "ExtractSubrange() when arena is non-nullptr is only supported when " - << "the Element type supplies a MergeFrom() operation to make copies."; - UnsafeArenaExtractSubrange(start, num, elements); -} - -template <typename Element> -inline void RepeatedPtrField<Element>::UnsafeArenaExtractSubrange( - int start, int num, Element** elements) { - GOOGLE_DCHECK_GE(start, 0); - GOOGLE_DCHECK_GE(num, 0); - GOOGLE_DCHECK_LE(start + num, size()); - - if (num > 0) { - // Save the values of the removed elements if requested. - if (elements != nullptr) { - for (int i = 0; i < num; ++i) { - elements[i] = RepeatedPtrFieldBase::Mutable<TypeHandler>(i + start); - } - } - CloseGap(start, num); - } -} - -template <typename Element> -inline void RepeatedPtrField<Element>::Clear() { - RepeatedPtrFieldBase::Clear<TypeHandler>(); -} - -template <typename Element> -inline void RepeatedPtrField<Element>::MergeFrom( - const RepeatedPtrField& other) { - RepeatedPtrFieldBase::MergeFrom<TypeHandler>(other); -} - -template <typename Element> -inline void RepeatedPtrField<Element>::CopyFrom(const RepeatedPtrField& other) { - RepeatedPtrFieldBase::CopyFrom<TypeHandler>(other); -} - -template <typename Element> -template <typename Iter> -inline void RepeatedPtrField<Element>::Assign(Iter begin, Iter end) { - Clear(); - Add(begin, end); -} - -template <typename Element> -inline typename RepeatedPtrField<Element>::iterator -RepeatedPtrField<Element>::erase(const_iterator position) { - return erase(position, position + 1); -} - -template <typename Element> -inline typename RepeatedPtrField<Element>::iterator -RepeatedPtrField<Element>::erase(const_iterator first, const_iterator last) { - size_type pos_offset = std::distance(cbegin(), first); - size_type last_offset = std::distance(cbegin(), last); - DeleteSubrange(pos_offset, last_offset - pos_offset); - return begin() + pos_offset; -} - -template <typename Element> -inline Element** RepeatedPtrField<Element>::mutable_data() { - return RepeatedPtrFieldBase::mutable_data<TypeHandler>(); -} - -template <typename Element> -inline const Element* const* RepeatedPtrField<Element>::data() const { - return RepeatedPtrFieldBase::data<TypeHandler>(); -} - -template <typename Element> -inline void RepeatedPtrField<Element>::Swap(RepeatedPtrField* other) { - if (this == other) return; - RepeatedPtrFieldBase::Swap<TypeHandler>(other); -} - -template <typename Element> -inline void RepeatedPtrField<Element>::UnsafeArenaSwap( - RepeatedPtrField* other) { - if (this == other) return; - GOOGLE_DCHECK_EQ(GetOwningArena(), other->GetOwningArena()); - RepeatedPtrFieldBase::InternalSwap(other); -} - -template <typename Element> -inline void RepeatedPtrField<Element>::SwapElements(int index1, int index2) { - RepeatedPtrFieldBase::SwapElements(index1, index2); -} - -template <typename Element> -inline Arena* RepeatedPtrField<Element>::GetArena() const { - return RepeatedPtrFieldBase::GetArena(); -} - -template <typename Element> -inline Arena* RepeatedPtrField<Element>::GetOwningArena() const { - return RepeatedPtrFieldBase::GetOwningArena(); -} - -template <typename Element> -inline size_t RepeatedPtrField<Element>::SpaceUsedExcludingSelfLong() const { - return RepeatedPtrFieldBase::SpaceUsedExcludingSelfLong<TypeHandler>(); -} - -template <typename Element> -inline void RepeatedPtrField<Element>::AddAllocated(Element* value) { - RepeatedPtrFieldBase::AddAllocated<TypeHandler>(value); -} - -template <typename Element> -inline void RepeatedPtrField<Element>::UnsafeArenaAddAllocated(Element* value) { - RepeatedPtrFieldBase::UnsafeArenaAddAllocated<TypeHandler>(value); -} - -template <typename Element> -inline Element* RepeatedPtrField<Element>::ReleaseLast() { - return RepeatedPtrFieldBase::ReleaseLast<TypeHandler>(); -} - -template <typename Element> -inline Element* RepeatedPtrField<Element>::UnsafeArenaReleaseLast() { - return RepeatedPtrFieldBase::UnsafeArenaReleaseLast<TypeHandler>(); -} - -template <typename Element> -inline int RepeatedPtrField<Element>::ClearedCount() const { - return RepeatedPtrFieldBase::ClearedCount(); -} - -#ifndef PROTOBUF_FUTURE_BREAKING_CHANGES -template <typename Element> -inline void RepeatedPtrField<Element>::AddCleared(Element* value) { - return RepeatedPtrFieldBase::AddCleared<TypeHandler>(value); -} - -template <typename Element> -inline Element* RepeatedPtrField<Element>::ReleaseCleared() { - return RepeatedPtrFieldBase::ReleaseCleared<TypeHandler>(); -} -#endif // !PROTOBUF_FUTURE_BREAKING_CHANGES - -template <typename Element> -inline void RepeatedPtrField<Element>::Reserve(int new_size) { - return RepeatedPtrFieldBase::Reserve(new_size); -} - -template <typename Element> -inline int RepeatedPtrField<Element>::Capacity() const { - return RepeatedPtrFieldBase::Capacity(); -} - -// ------------------------------------------------------------------- - -namespace internal { - -// STL-like iterator implementation for RepeatedPtrField. You should not -// refer to this class directly; use RepeatedPtrField<T>::iterator instead. -// -// The iterator for RepeatedPtrField<T>, RepeatedPtrIterator<T>, is -// very similar to iterator_ptr<T**> in util/gtl/iterator_adaptors.h, -// but adds random-access operators and is modified to wrap a void** base -// iterator (since RepeatedPtrField stores its array as a void* array and -// casting void** to T** would violate C++ aliasing rules). -// -// This code based on net/proto/proto-array-internal.h by Jeffrey Yasskin -// (jyasskin@google.com). -template <typename Element> -class RepeatedPtrIterator { - public: - using iterator = RepeatedPtrIterator<Element>; - using iterator_category = std::random_access_iterator_tag; - using value_type = typename std::remove_const<Element>::type; - using difference_type = std::ptrdiff_t; - using pointer = Element*; - using reference = Element&; - - RepeatedPtrIterator() : it_(nullptr) {} - explicit RepeatedPtrIterator(void* const* it) : it_(it) {} - - // Allows "upcasting" from RepeatedPtrIterator<T**> to - // RepeatedPtrIterator<const T*const*>. - template <typename OtherElement, - typename std::enable_if<std::is_convertible< - OtherElement*, pointer>::value>::type* = nullptr> - RepeatedPtrIterator(const RepeatedPtrIterator<OtherElement>& other) - : it_(other.it_) {} - - // dereferenceable - reference operator*() const { return *reinterpret_cast<Element*>(*it_); } - pointer operator->() const { return &(operator*()); } - - // {inc,dec}rementable - iterator& operator++() { - ++it_; - return *this; - } - iterator operator++(int) { return iterator(it_++); } - iterator& operator--() { - --it_; - return *this; - } - iterator operator--(int) { return iterator(it_--); } - - // equality_comparable - friend bool operator==(const iterator& x, const iterator& y) { - return x.it_ == y.it_; - } - friend bool operator!=(const iterator& x, const iterator& y) { - return x.it_ != y.it_; - } - - // less_than_comparable - friend bool operator<(const iterator& x, const iterator& y) { - return x.it_ < y.it_; - } - friend bool operator<=(const iterator& x, const iterator& y) { - return x.it_ <= y.it_; - } - friend bool operator>(const iterator& x, const iterator& y) { - return x.it_ > y.it_; - } - friend bool operator>=(const iterator& x, const iterator& y) { - return x.it_ >= y.it_; - } - - // addable, subtractable - iterator& operator+=(difference_type d) { - it_ += d; - return *this; - } - friend iterator operator+(iterator it, const difference_type d) { - it += d; - return it; - } - friend iterator operator+(const difference_type d, iterator it) { - it += d; - return it; - } - iterator& operator-=(difference_type d) { - it_ -= d; - return *this; - } - friend iterator operator-(iterator it, difference_type d) { - it -= d; - return it; - } - - // indexable - reference operator[](difference_type d) const { return *(*this + d); } - - // random access iterator - friend difference_type operator-(iterator it1, iterator it2) { - return it1.it_ - it2.it_; - } - - private: - template <typename OtherElement> - friend class RepeatedPtrIterator; - - // The internal iterator. - void* const* it_; -}; - -// Provides an iterator that operates on pointers to the underlying objects -// rather than the objects themselves as RepeatedPtrIterator does. -// Consider using this when working with stl algorithms that change -// the array. -// The VoidPtr template parameter holds the type-agnostic pointer value -// referenced by the iterator. It should either be "void *" for a mutable -// iterator, or "const void* const" for a constant iterator. -template <typename Element, typename VoidPtr> -class RepeatedPtrOverPtrsIterator { - public: - using iterator = RepeatedPtrOverPtrsIterator<Element, VoidPtr>; - using iterator_category = std::random_access_iterator_tag; - using value_type = typename std::remove_const<Element>::type; - using difference_type = std::ptrdiff_t; - using pointer = Element*; - using reference = Element&; - - RepeatedPtrOverPtrsIterator() : it_(nullptr) {} - explicit RepeatedPtrOverPtrsIterator(VoidPtr* it) : it_(it) {} - - // Allows "upcasting" from RepeatedPtrOverPtrsIterator<T**> to - // RepeatedPtrOverPtrsIterator<const T*const*>. - template < - typename OtherElement, typename OtherVoidPtr, - typename std::enable_if< - std::is_convertible<OtherElement*, pointer>::value && - std::is_convertible<OtherVoidPtr*, VoidPtr>::value>::type* = nullptr> - RepeatedPtrOverPtrsIterator( - const RepeatedPtrOverPtrsIterator<OtherElement, OtherVoidPtr>& other) - : it_(other.it_) {} - - // dereferenceable - reference operator*() const { return *reinterpret_cast<Element*>(it_); } - pointer operator->() const { return &(operator*()); } - - // {inc,dec}rementable - iterator& operator++() { - ++it_; - return *this; - } - iterator operator++(int) { return iterator(it_++); } - iterator& operator--() { - --it_; - return *this; - } - iterator operator--(int) { return iterator(it_--); } - - // equality_comparable - friend bool operator==(const iterator& x, const iterator& y) { - return x.it_ == y.it_; - } - friend bool operator!=(const iterator& x, const iterator& y) { - return x.it_ != y.it_; - } - - // less_than_comparable - friend bool operator<(const iterator& x, const iterator& y) { - return x.it_ < y.it_; - } - friend bool operator<=(const iterator& x, const iterator& y) { - return x.it_ <= y.it_; - } - friend bool operator>(const iterator& x, const iterator& y) { - return x.it_ > y.it_; - } - friend bool operator>=(const iterator& x, const iterator& y) { - return x.it_ >= y.it_; - } - - // addable, subtractable - iterator& operator+=(difference_type d) { - it_ += d; - return *this; - } - friend iterator operator+(iterator it, difference_type d) { - it += d; - return it; - } - friend iterator operator+(difference_type d, iterator it) { - it += d; - return it; - } - iterator& operator-=(difference_type d) { - it_ -= d; - return *this; - } - friend iterator operator-(iterator it, difference_type d) { - it -= d; - return it; - } - - // indexable - reference operator[](difference_type d) const { return *(*this + d); } - - // random access iterator - friend difference_type operator-(iterator it1, iterator it2) { - return it1.it_ - it2.it_; - } - - private: - template <typename OtherElement, typename OtherVoidPtr> - friend class RepeatedPtrOverPtrsIterator; - - // The internal iterator. - VoidPtr* it_; -}; - -} // namespace internal - -template <typename Element> -inline typename RepeatedPtrField<Element>::iterator -RepeatedPtrField<Element>::begin() { - return iterator(raw_data()); -} -template <typename Element> -inline typename RepeatedPtrField<Element>::const_iterator -RepeatedPtrField<Element>::begin() const { - return iterator(raw_data()); -} -template <typename Element> -inline typename RepeatedPtrField<Element>::const_iterator -RepeatedPtrField<Element>::cbegin() const { - return begin(); -} -template <typename Element> -inline typename RepeatedPtrField<Element>::iterator -RepeatedPtrField<Element>::end() { - return iterator(raw_data() + size()); -} -template <typename Element> -inline typename RepeatedPtrField<Element>::const_iterator -RepeatedPtrField<Element>::end() const { - return iterator(raw_data() + size()); -} -template <typename Element> -inline typename RepeatedPtrField<Element>::const_iterator -RepeatedPtrField<Element>::cend() const { - return end(); -} - -template <typename Element> -inline typename RepeatedPtrField<Element>::pointer_iterator -RepeatedPtrField<Element>::pointer_begin() { - return pointer_iterator(raw_mutable_data()); -} -template <typename Element> -inline typename RepeatedPtrField<Element>::const_pointer_iterator -RepeatedPtrField<Element>::pointer_begin() const { - return const_pointer_iterator(const_cast<const void* const*>(raw_data())); -} -template <typename Element> -inline typename RepeatedPtrField<Element>::pointer_iterator -RepeatedPtrField<Element>::pointer_end() { - return pointer_iterator(raw_mutable_data() + size()); -} -template <typename Element> -inline typename RepeatedPtrField<Element>::const_pointer_iterator -RepeatedPtrField<Element>::pointer_end() const { - return const_pointer_iterator( - const_cast<const void* const*>(raw_data() + size())); -} - -// Iterators and helper functions that follow the spirit of the STL -// std::back_insert_iterator and std::back_inserter but are tailor-made -// for RepeatedField and RepeatedPtrField. Typical usage would be: -// -// std::copy(some_sequence.begin(), some_sequence.end(), -// RepeatedFieldBackInserter(proto.mutable_sequence())); -// -// Ported by johannes from util/gtl/proto-array-iterators.h - -namespace internal { - -// A back inserter for RepeatedPtrField objects. -template <typename T> -class RepeatedPtrFieldBackInsertIterator { - public: - using iterator_category = std::output_iterator_tag; - using value_type = T; - using pointer = void; - using reference = void; - using difference_type = std::ptrdiff_t; - - RepeatedPtrFieldBackInsertIterator(RepeatedPtrField<T>* const mutable_field) - : field_(mutable_field) {} - RepeatedPtrFieldBackInsertIterator<T>& operator=(const T& value) { - *field_->Add() = value; - return *this; - } - RepeatedPtrFieldBackInsertIterator<T>& operator=( - const T* const ptr_to_value) { - *field_->Add() = *ptr_to_value; - return *this; - } - RepeatedPtrFieldBackInsertIterator<T>& operator=(T&& value) { - *field_->Add() = std::move(value); - return *this; - } - RepeatedPtrFieldBackInsertIterator<T>& operator*() { return *this; } - RepeatedPtrFieldBackInsertIterator<T>& operator++() { return *this; } - RepeatedPtrFieldBackInsertIterator<T>& operator++(int /* unused */) { - return *this; - } - - private: - RepeatedPtrField<T>* field_; -}; - -// A back inserter for RepeatedPtrFields that inserts by transferring ownership -// of a pointer. -template <typename T> -class AllocatedRepeatedPtrFieldBackInsertIterator { - public: - using iterator_category = std::output_iterator_tag; - using value_type = T; - using pointer = void; - using reference = void; - using difference_type = std::ptrdiff_t; - - explicit AllocatedRepeatedPtrFieldBackInsertIterator( - RepeatedPtrField<T>* const mutable_field) - : field_(mutable_field) {} - AllocatedRepeatedPtrFieldBackInsertIterator<T>& operator=( - T* const ptr_to_value) { - field_->AddAllocated(ptr_to_value); - return *this; - } - AllocatedRepeatedPtrFieldBackInsertIterator<T>& operator*() { return *this; } - AllocatedRepeatedPtrFieldBackInsertIterator<T>& operator++() { return *this; } - AllocatedRepeatedPtrFieldBackInsertIterator<T>& operator++(int /* unused */) { - return *this; - } - - private: - RepeatedPtrField<T>* field_; -}; - -// Almost identical to AllocatedRepeatedPtrFieldBackInsertIterator. This one -// uses the UnsafeArenaAddAllocated instead. -template <typename T> -class UnsafeArenaAllocatedRepeatedPtrFieldBackInsertIterator { - public: - using iterator_category = std::output_iterator_tag; - using value_type = T; - using pointer = void; - using reference = void; - using difference_type = std::ptrdiff_t; - - explicit UnsafeArenaAllocatedRepeatedPtrFieldBackInsertIterator( - RepeatedPtrField<T>* const mutable_field) - : field_(mutable_field) {} - UnsafeArenaAllocatedRepeatedPtrFieldBackInsertIterator<T>& operator=( - T const* const ptr_to_value) { - field_->UnsafeArenaAddAllocated(const_cast<T*>(ptr_to_value)); - return *this; - } - UnsafeArenaAllocatedRepeatedPtrFieldBackInsertIterator<T>& operator*() { - return *this; - } - UnsafeArenaAllocatedRepeatedPtrFieldBackInsertIterator<T>& operator++() { - return *this; - } - UnsafeArenaAllocatedRepeatedPtrFieldBackInsertIterator<T>& operator++( - int /* unused */) { - return *this; - } - - private: - RepeatedPtrField<T>* field_; -}; - -} // namespace internal - -// Provides a back insert iterator for RepeatedPtrField instances, -// similar to std::back_inserter(). -template <typename T> -internal::RepeatedPtrFieldBackInsertIterator<T> RepeatedPtrFieldBackInserter( - RepeatedPtrField<T>* const mutable_field) { - return internal::RepeatedPtrFieldBackInsertIterator<T>(mutable_field); -} - -// Special back insert iterator for RepeatedPtrField instances, just in -// case someone wants to write generic template code that can access both -// RepeatedFields and RepeatedPtrFields using a common name. -template <typename T> -internal::RepeatedPtrFieldBackInsertIterator<T> RepeatedFieldBackInserter( - RepeatedPtrField<T>* const mutable_field) { - return internal::RepeatedPtrFieldBackInsertIterator<T>(mutable_field); -} - -// Provides a back insert iterator for RepeatedPtrField instances -// similar to std::back_inserter() which transfers the ownership while -// copying elements. -template <typename T> -internal::AllocatedRepeatedPtrFieldBackInsertIterator<T> -AllocatedRepeatedPtrFieldBackInserter( - RepeatedPtrField<T>* const mutable_field) { - return internal::AllocatedRepeatedPtrFieldBackInsertIterator<T>( - mutable_field); -} - -// Similar to AllocatedRepeatedPtrFieldBackInserter, using -// UnsafeArenaAddAllocated instead of AddAllocated. -// This is slightly faster if that matters. It is also useful in legacy code -// that uses temporary ownership to avoid copies. Example: -// RepeatedPtrField<T> temp_field; -// temp_field.UnsafeArenaAddAllocated(new T); -// ... // Do something with temp_field -// temp_field.UnsafeArenaExtractSubrange(0, temp_field.size(), nullptr); -// Putting temp_field on the arena fails because the ownership transfers to the -// arena at the "AddAllocated" call and is not released anymore causing a -// double delete. This function uses UnsafeArenaAddAllocated to prevent this. -template <typename T> -internal::UnsafeArenaAllocatedRepeatedPtrFieldBackInsertIterator<T> -UnsafeArenaAllocatedRepeatedPtrFieldBackInserter( - RepeatedPtrField<T>* const mutable_field) { - return internal::UnsafeArenaAllocatedRepeatedPtrFieldBackInsertIterator<T>( - mutable_field); -} - -extern template class PROTOBUF_EXPORT_TEMPLATE_DECLARE - RepeatedPtrField<std::string>; - -} // namespace protobuf -} // namespace google - -#include <google/protobuf/port_undef.inc> - -#endif // GOOGLE_PROTOBUF_REPEATED_PTR_FIELD_H__ diff --git a/include/google/protobuf/service.h b/include/google/protobuf/service.h deleted file mode 100644 index d288eb554a..0000000000 --- a/include/google/protobuf/service.h +++ /dev/null @@ -1,295 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// 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 -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -// Author: kenton@google.com (Kenton Varda) -// Based on original Protocol Buffers design by -// Sanjay Ghemawat, Jeff Dean, and others. -// -// DEPRECATED: This module declares the abstract interfaces underlying proto2 -// RPC services. These are intended to be independent of any particular RPC -// implementation, so that proto2 services can be used on top of a variety -// of implementations. Starting with version 2.3.0, RPC implementations should -// not try to build on these, but should instead provide code generator plugins -// which generate code specific to the particular RPC implementation. This way -// the generated code can be more appropriate for the implementation in use -// and can avoid unnecessary layers of indirection. -// -// -// When you use the protocol compiler to compile a service definition, it -// generates two classes: An abstract interface for the service (with -// methods matching the service definition) and a "stub" implementation. -// A stub is just a type-safe wrapper around an RpcChannel which emulates a -// local implementation of the service. -// -// For example, the service definition: -// service MyService { -// rpc Foo(MyRequest) returns(MyResponse); -// } -// will generate abstract interface "MyService" and class "MyService::Stub". -// You could implement a MyService as follows: -// class MyServiceImpl : public MyService { -// public: -// MyServiceImpl() {} -// ~MyServiceImpl() {} -// -// // implements MyService --------------------------------------- -// -// void Foo(google::protobuf::RpcController* controller, -// const MyRequest* request, -// MyResponse* response, -// Closure* done) { -// // ... read request and fill in response ... -// done->Run(); -// } -// }; -// You would then register an instance of MyServiceImpl with your RPC server -// implementation. (How to do that depends on the implementation.) -// -// To call a remote MyServiceImpl, first you need an RpcChannel connected to it. -// How to construct a channel depends, again, on your RPC implementation. -// Here we use a hypothetical "MyRpcChannel" as an example: -// MyRpcChannel channel("rpc:hostname:1234/myservice"); -// MyRpcController controller; -// MyServiceImpl::Stub stub(&channel); -// FooRequest request; -// FooResponse response; -// -// // ... fill in request ... -// -// stub.Foo(&controller, request, &response, NewCallback(HandleResponse)); -// -// On Thread-Safety: -// -// Different RPC implementations may make different guarantees about what -// threads they may run callbacks on, and what threads the application is -// allowed to use to call the RPC system. Portable software should be ready -// for callbacks to be called on any thread, but should not try to call the -// RPC system from any thread except for the ones on which it received the -// callbacks. Realistically, though, simple software will probably want to -// use a single-threaded RPC system while high-end software will want to -// use multiple threads. RPC implementations should provide multiple -// choices. - -#ifndef GOOGLE_PROTOBUF_SERVICE_H__ -#define GOOGLE_PROTOBUF_SERVICE_H__ - - -#include <string> -#include <google/protobuf/stubs/callback.h> -#include <google/protobuf/stubs/common.h> - -#ifdef SWIG -#error "You cannot SWIG proto headers" -#endif - -// Must be included last. -#include <google/protobuf/port_def.inc> - -namespace google { -namespace protobuf { - -// Defined in this file. -class Service; -class RpcController; -class RpcChannel; - -// Defined in other files. -class Descriptor; // descriptor.h -class ServiceDescriptor; // descriptor.h -class MethodDescriptor; // descriptor.h -class Message; // message.h - -// Abstract base interface for protocol-buffer-based RPC services. Services -// themselves are abstract interfaces (implemented either by servers or as -// stubs), but they subclass this base interface. The methods of this -// interface can be used to call the methods of the Service without knowing -// its exact type at compile time (analogous to Reflection). -class PROTOBUF_EXPORT Service { - public: - inline Service() {} - virtual ~Service(); - - // When constructing a stub, you may pass STUB_OWNS_CHANNEL as the second - // parameter to the constructor to tell it to delete its RpcChannel when - // destroyed. - enum ChannelOwnership { STUB_OWNS_CHANNEL, STUB_DOESNT_OWN_CHANNEL }; - - // Get the ServiceDescriptor describing this service and its methods. - virtual const ServiceDescriptor* GetDescriptor() = 0; - - // Call a method of the service specified by MethodDescriptor. This is - // normally implemented as a simple switch() that calls the standard - // definitions of the service's methods. - // - // Preconditions: - // * method->service() == GetDescriptor() - // * request and response are of the exact same classes as the objects - // returned by GetRequestPrototype(method) and - // GetResponsePrototype(method). - // * After the call has started, the request must not be modified and the - // response must not be accessed at all until "done" is called. - // * "controller" is of the correct type for the RPC implementation being - // used by this Service. For stubs, the "correct type" depends on the - // RpcChannel which the stub is using. Server-side Service - // implementations are expected to accept whatever type of RpcController - // the server-side RPC implementation uses. - // - // Postconditions: - // * "done" will be called when the method is complete. This may be - // before CallMethod() returns or it may be at some point in the future. - // * If the RPC succeeded, "response" contains the response returned by - // the server. - // * If the RPC failed, "response"'s contents are undefined. The - // RpcController can be queried to determine if an error occurred and - // possibly to get more information about the error. - virtual void CallMethod(const MethodDescriptor* method, - RpcController* controller, const Message* request, - Message* response, Closure* done) = 0; - - // CallMethod() requires that the request and response passed in are of a - // particular subclass of Message. GetRequestPrototype() and - // GetResponsePrototype() get the default instances of these required types. - // You can then call Message::New() on these instances to construct mutable - // objects which you can then pass to CallMethod(). - // - // Example: - // const MethodDescriptor* method = - // service->GetDescriptor()->FindMethodByName("Foo"); - // Message* request = stub->GetRequestPrototype (method)->New(); - // Message* response = stub->GetResponsePrototype(method)->New(); - // request->ParseFromString(input); - // service->CallMethod(method, *request, response, callback); - virtual const Message& GetRequestPrototype( - const MethodDescriptor* method) const = 0; - virtual const Message& GetResponsePrototype( - const MethodDescriptor* method) const = 0; - - private: - GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(Service); -}; - -// An RpcController mediates a single method call. The primary purpose of -// the controller is to provide a way to manipulate settings specific to the -// RPC implementation and to find out about RPC-level errors. -// -// The methods provided by the RpcController interface are intended to be a -// "least common denominator" set of features which we expect all -// implementations to support. Specific implementations may provide more -// advanced features (e.g. deadline propagation). -class PROTOBUF_EXPORT RpcController { - public: - inline RpcController() {} - virtual ~RpcController(); - - // Client-side methods --------------------------------------------- - // These calls may be made from the client side only. Their results - // are undefined on the server side (may crash). - - // Resets the RpcController to its initial state so that it may be reused in - // a new call. Must not be called while an RPC is in progress. - virtual void Reset() = 0; - - // After a call has finished, returns true if the call failed. The possible - // reasons for failure depend on the RPC implementation. Failed() must not - // be called before a call has finished. If Failed() returns true, the - // contents of the response message are undefined. - virtual bool Failed() const = 0; - - // If Failed() is true, returns a human-readable description of the error. - virtual std::string ErrorText() const = 0; - - // Advises the RPC system that the caller desires that the RPC call be - // canceled. The RPC system may cancel it immediately, may wait awhile and - // then cancel it, or may not even cancel the call at all. If the call is - // canceled, the "done" callback will still be called and the RpcController - // will indicate that the call failed at that time. - virtual void StartCancel() = 0; - - // Server-side methods --------------------------------------------- - // These calls may be made from the server side only. Their results - // are undefined on the client side (may crash). - - // Causes Failed() to return true on the client side. "reason" will be - // incorporated into the message returned by ErrorText(). If you find - // you need to return machine-readable information about failures, you - // should incorporate it into your response protocol buffer and should - // NOT call SetFailed(). - virtual void SetFailed(const std::string& reason) = 0; - - // If true, indicates that the client canceled the RPC, so the server may - // as well give up on replying to it. The server should still call the - // final "done" callback. - virtual bool IsCanceled() const = 0; - - // Asks that the given callback be called when the RPC is canceled. The - // callback will always be called exactly once. If the RPC completes without - // being canceled, the callback will be called after completion. If the RPC - // has already been canceled when NotifyOnCancel() is called, the callback - // will be called immediately. - // - // NotifyOnCancel() must be called no more than once per request. - virtual void NotifyOnCancel(Closure* callback) = 0; - - private: - GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(RpcController); -}; - -// Abstract interface for an RPC channel. An RpcChannel represents a -// communication line to a Service which can be used to call that Service's -// methods. The Service may be running on another machine. Normally, you -// should not call an RpcChannel directly, but instead construct a stub Service -// wrapping it. Example: -// RpcChannel* channel = new MyRpcChannel("remotehost.example.com:1234"); -// MyService* service = new MyService::Stub(channel); -// service->MyMethod(request, &response, callback); -class PROTOBUF_EXPORT RpcChannel { - public: - inline RpcChannel() {} - virtual ~RpcChannel(); - - // Call the given method of the remote service. The signature of this - // procedure looks the same as Service::CallMethod(), but the requirements - // are less strict in one important way: the request and response objects - // need not be of any specific class as long as their descriptors are - // method->input_type() and method->output_type(). - virtual void CallMethod(const MethodDescriptor* method, - RpcController* controller, const Message* request, - Message* response, Closure* done) = 0; - - private: - GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(RpcChannel); -}; - -} // namespace protobuf -} // namespace google - -#include <google/protobuf/port_undef.inc> - -#endif // GOOGLE_PROTOBUF_SERVICE_H__ diff --git a/include/google/protobuf/source_context.pb.h b/include/google/protobuf/source_context.pb.h deleted file mode 100644 index 899cfb0122..0000000000 --- a/include/google/protobuf/source_context.pb.h +++ /dev/null @@ -1,282 +0,0 @@ -// Generated by the protocol buffer compiler. DO NOT EDIT! -// source: google/protobuf/source_context.proto - -#ifndef GOOGLE_PROTOBUF_INCLUDED_google_2fprotobuf_2fsource_5fcontext_2eproto -#define GOOGLE_PROTOBUF_INCLUDED_google_2fprotobuf_2fsource_5fcontext_2eproto - -#include <limits> -#include <string> - -#include <google/protobuf/port_def.inc> -#if PROTOBUF_VERSION < 3021000 -#error This file was generated by a newer version of protoc which is -#error incompatible with your Protocol Buffer headers. Please update -#error your headers. -#endif -#if 3021004 < PROTOBUF_MIN_PROTOC_VERSION -#error This file was generated by an older version of protoc which is -#error incompatible with your Protocol Buffer headers. Please -#error regenerate this file with a newer version of protoc. -#endif - -#include <google/protobuf/port_undef.inc> -#include <google/protobuf/io/coded_stream.h> -#include <google/protobuf/arena.h> -#include <google/protobuf/arenastring.h> -#include <google/protobuf/generated_message_util.h> -#include <google/protobuf/metadata_lite.h> -#include <google/protobuf/generated_message_reflection.h> -#include <google/protobuf/message.h> -#include <google/protobuf/repeated_field.h> // IWYU pragma: export -#include <google/protobuf/extension_set.h> // IWYU pragma: export -#include <google/protobuf/unknown_field_set.h> -// @@protoc_insertion_point(includes) -#include <google/protobuf/port_def.inc> -#define PROTOBUF_INTERNAL_EXPORT_google_2fprotobuf_2fsource_5fcontext_2eproto PROTOBUF_EXPORT -PROTOBUF_NAMESPACE_OPEN -namespace internal { -class AnyMetadata; -} // namespace internal -PROTOBUF_NAMESPACE_CLOSE - -// Internal implementation detail -- do not use these members. -struct PROTOBUF_EXPORT TableStruct_google_2fprotobuf_2fsource_5fcontext_2eproto { - static const uint32_t offsets[]; -}; -PROTOBUF_EXPORT extern const ::PROTOBUF_NAMESPACE_ID::internal::DescriptorTable descriptor_table_google_2fprotobuf_2fsource_5fcontext_2eproto; -PROTOBUF_NAMESPACE_OPEN -class SourceContext; -struct SourceContextDefaultTypeInternal; -PROTOBUF_EXPORT extern SourceContextDefaultTypeInternal _SourceContext_default_instance_; -PROTOBUF_NAMESPACE_CLOSE -PROTOBUF_NAMESPACE_OPEN -template<> PROTOBUF_EXPORT ::PROTOBUF_NAMESPACE_ID::SourceContext* Arena::CreateMaybeMessage<::PROTOBUF_NAMESPACE_ID::SourceContext>(Arena*); -PROTOBUF_NAMESPACE_CLOSE -PROTOBUF_NAMESPACE_OPEN - -// =================================================================== - -class PROTOBUF_EXPORT SourceContext final : - public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:google.protobuf.SourceContext) */ { - public: - inline SourceContext() : SourceContext(nullptr) {} - ~SourceContext() override; - explicit PROTOBUF_CONSTEXPR SourceContext(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized); - - SourceContext(const SourceContext& from); - SourceContext(SourceContext&& from) noexcept - : SourceContext() { - *this = ::std::move(from); - } - - inline SourceContext& operator=(const SourceContext& from) { - CopyFrom(from); - return *this; - } - inline SourceContext& operator=(SourceContext&& from) noexcept { - if (this == &from) return *this; - if (GetOwningArena() == from.GetOwningArena() - #ifdef PROTOBUF_FORCE_COPY_IN_MOVE - && GetOwningArena() != nullptr - #endif // !PROTOBUF_FORCE_COPY_IN_MOVE - ) { - InternalSwap(&from); - } else { - CopyFrom(from); - } - return *this; - } - - static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() { - return GetDescriptor(); - } - static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() { - return default_instance().GetMetadata().descriptor; - } - static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() { - return default_instance().GetMetadata().reflection; - } - static const SourceContext& default_instance() { - return *internal_default_instance(); - } - static inline const SourceContext* internal_default_instance() { - return reinterpret_cast<const SourceContext*>( - &_SourceContext_default_instance_); - } - static constexpr int kIndexInFileMessages = - 0; - - friend void swap(SourceContext& a, SourceContext& b) { - a.Swap(&b); - } - inline void Swap(SourceContext* other) { - if (other == this) return; - #ifdef PROTOBUF_FORCE_COPY_IN_SWAP - if (GetOwningArena() != nullptr && - GetOwningArena() == other->GetOwningArena()) { - #else // PROTOBUF_FORCE_COPY_IN_SWAP - if (GetOwningArena() == other->GetOwningArena()) { - #endif // !PROTOBUF_FORCE_COPY_IN_SWAP - InternalSwap(other); - } else { - ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other); - } - } - void UnsafeArenaSwap(SourceContext* other) { - if (other == this) return; - GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena()); - InternalSwap(other); - } - - // implements Message ---------------------------------------------- - - SourceContext* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final { - return CreateMaybeMessage<SourceContext>(arena); - } - using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom; - void CopyFrom(const SourceContext& from); - using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom; - void MergeFrom( const SourceContext& from) { - SourceContext::MergeImpl(*this, from); - } - private: - static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message& to_msg, const ::PROTOBUF_NAMESPACE_ID::Message& from_msg); - public: - PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final; - bool IsInitialized() const final; - - size_t ByteSizeLong() const final; - const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final; - uint8_t* _InternalSerialize( - uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final; - int GetCachedSize() const final { return _impl_._cached_size_.Get(); } - - private: - void SharedCtor(::PROTOBUF_NAMESPACE_ID::Arena* arena, bool is_message_owned); - void SharedDtor(); - void SetCachedSize(int size) const final; - void InternalSwap(SourceContext* other); - - private: - friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata; - static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() { - return "google.protobuf.SourceContext"; - } - protected: - explicit SourceContext(::PROTOBUF_NAMESPACE_ID::Arena* arena, - bool is_message_owned = false); - public: - - static const ClassData _class_data_; - const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final; - - ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final; - - // nested types ---------------------------------------------------- - - // accessors ------------------------------------------------------- - - enum : int { - kFileNameFieldNumber = 1, - }; - // string file_name = 1; - void clear_file_name(); - const std::string& file_name() const; - template <typename ArgT0 = const std::string&, typename... ArgT> - void set_file_name(ArgT0&& arg0, ArgT... args); - std::string* mutable_file_name(); - PROTOBUF_NODISCARD std::string* release_file_name(); - void set_allocated_file_name(std::string* file_name); - private: - const std::string& _internal_file_name() const; - inline PROTOBUF_ALWAYS_INLINE void _internal_set_file_name(const std::string& value); - std::string* _internal_mutable_file_name(); - public: - - // @@protoc_insertion_point(class_scope:google.protobuf.SourceContext) - private: - class _Internal; - - template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper; - typedef void InternalArenaConstructable_; - typedef void DestructorSkippable_; - struct Impl_ { - ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr file_name_; - mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_; - }; - union { Impl_ _impl_; }; - friend struct ::TableStruct_google_2fprotobuf_2fsource_5fcontext_2eproto; -}; -// =================================================================== - - -// =================================================================== - -#ifdef __GNUC__ - #pragma GCC diagnostic push - #pragma GCC diagnostic ignored "-Wstrict-aliasing" -#endif // __GNUC__ -// SourceContext - -// string file_name = 1; -inline void SourceContext::clear_file_name() { - _impl_.file_name_.ClearToEmpty(); -} -inline const std::string& SourceContext::file_name() const { - // @@protoc_insertion_point(field_get:google.protobuf.SourceContext.file_name) - return _internal_file_name(); -} -template <typename ArgT0, typename... ArgT> -inline PROTOBUF_ALWAYS_INLINE -void SourceContext::set_file_name(ArgT0&& arg0, ArgT... args) { - - _impl_.file_name_.Set(static_cast<ArgT0 &&>(arg0), args..., GetArenaForAllocation()); - // @@protoc_insertion_point(field_set:google.protobuf.SourceContext.file_name) -} -inline std::string* SourceContext::mutable_file_name() { - std::string* _s = _internal_mutable_file_name(); - // @@protoc_insertion_point(field_mutable:google.protobuf.SourceContext.file_name) - return _s; -} -inline const std::string& SourceContext::_internal_file_name() const { - return _impl_.file_name_.Get(); -} -inline void SourceContext::_internal_set_file_name(const std::string& value) { - - _impl_.file_name_.Set(value, GetArenaForAllocation()); -} -inline std::string* SourceContext::_internal_mutable_file_name() { - - return _impl_.file_name_.Mutable(GetArenaForAllocation()); -} -inline std::string* SourceContext::release_file_name() { - // @@protoc_insertion_point(field_release:google.protobuf.SourceContext.file_name) - return _impl_.file_name_.Release(); -} -inline void SourceContext::set_allocated_file_name(std::string* file_name) { - if (file_name != nullptr) { - - } else { - - } - _impl_.file_name_.SetAllocated(file_name, GetArenaForAllocation()); -#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING - if (_impl_.file_name_.IsDefault()) { - _impl_.file_name_.Set("", GetArenaForAllocation()); - } -#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING - // @@protoc_insertion_point(field_set_allocated:google.protobuf.SourceContext.file_name) -} - -#ifdef __GNUC__ - #pragma GCC diagnostic pop -#endif // __GNUC__ - -// @@protoc_insertion_point(namespace_scope) - -PROTOBUF_NAMESPACE_CLOSE - -// @@protoc_insertion_point(global_scope) - -#include <google/protobuf/port_undef.inc> -#endif // GOOGLE_PROTOBUF_INCLUDED_GOOGLE_PROTOBUF_INCLUDED_google_2fprotobuf_2fsource_5fcontext_2eproto diff --git a/include/google/protobuf/source_context.proto b/include/google/protobuf/source_context.proto deleted file mode 100644 index 06bfc43a78..0000000000 --- a/include/google/protobuf/source_context.proto +++ /dev/null @@ -1,48 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// 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 -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -syntax = "proto3"; - -package google.protobuf; - -option csharp_namespace = "Google.Protobuf.WellKnownTypes"; -option java_package = "com.google.protobuf"; -option java_outer_classname = "SourceContextProto"; -option java_multiple_files = true; -option objc_class_prefix = "GPB"; -option go_package = "google.golang.org/protobuf/types/known/sourcecontextpb"; - -// `SourceContext` represents information about the source of a -// protobuf element, like the file in which it is defined. -message SourceContext { - // The path-qualified name of the .proto file that contained the associated - // protobuf element. For example: `"google/protobuf/source_context.proto"`. - string file_name = 1; -} diff --git a/include/google/protobuf/struct.pb.h b/include/google/protobuf/struct.pb.h deleted file mode 100644 index 3f7db0f90f..0000000000 --- a/include/google/protobuf/struct.pb.h +++ /dev/null @@ -1,1177 +0,0 @@ -// Generated by the protocol buffer compiler. DO NOT EDIT! -// source: google/protobuf/struct.proto - -#ifndef GOOGLE_PROTOBUF_INCLUDED_google_2fprotobuf_2fstruct_2eproto -#define GOOGLE_PROTOBUF_INCLUDED_google_2fprotobuf_2fstruct_2eproto - -#include <limits> -#include <string> - -#include <google/protobuf/port_def.inc> -#if PROTOBUF_VERSION < 3021000 -#error This file was generated by a newer version of protoc which is -#error incompatible with your Protocol Buffer headers. Please update -#error your headers. -#endif -#if 3021004 < PROTOBUF_MIN_PROTOC_VERSION -#error This file was generated by an older version of protoc which is -#error incompatible with your Protocol Buffer headers. Please -#error regenerate this file with a newer version of protoc. -#endif - -#include <google/protobuf/port_undef.inc> -#include <google/protobuf/io/coded_stream.h> -#include <google/protobuf/arena.h> -#include <google/protobuf/arenastring.h> -#include <google/protobuf/generated_message_util.h> -#include <google/protobuf/metadata_lite.h> -#include <google/protobuf/generated_message_reflection.h> -#include <google/protobuf/message.h> -#include <google/protobuf/repeated_field.h> // IWYU pragma: export -#include <google/protobuf/extension_set.h> // IWYU pragma: export -#include <google/protobuf/map.h> // IWYU pragma: export -#include <google/protobuf/map_entry.h> -#include <google/protobuf/map_field_inl.h> -#include <google/protobuf/generated_enum_reflection.h> -#include <google/protobuf/unknown_field_set.h> -// @@protoc_insertion_point(includes) -#include <google/protobuf/port_def.inc> -#define PROTOBUF_INTERNAL_EXPORT_google_2fprotobuf_2fstruct_2eproto PROTOBUF_EXPORT -PROTOBUF_NAMESPACE_OPEN -namespace internal { -class AnyMetadata; -} // namespace internal -PROTOBUF_NAMESPACE_CLOSE - -// Internal implementation detail -- do not use these members. -struct PROTOBUF_EXPORT TableStruct_google_2fprotobuf_2fstruct_2eproto { - static const uint32_t offsets[]; -}; -PROTOBUF_EXPORT extern const ::PROTOBUF_NAMESPACE_ID::internal::DescriptorTable descriptor_table_google_2fprotobuf_2fstruct_2eproto; -PROTOBUF_NAMESPACE_OPEN -class ListValue; -struct ListValueDefaultTypeInternal; -PROTOBUF_EXPORT extern ListValueDefaultTypeInternal _ListValue_default_instance_; -class Struct; -struct StructDefaultTypeInternal; -PROTOBUF_EXPORT extern StructDefaultTypeInternal _Struct_default_instance_; -class Struct_FieldsEntry_DoNotUse; -struct Struct_FieldsEntry_DoNotUseDefaultTypeInternal; -PROTOBUF_EXPORT extern Struct_FieldsEntry_DoNotUseDefaultTypeInternal _Struct_FieldsEntry_DoNotUse_default_instance_; -class Value; -struct ValueDefaultTypeInternal; -PROTOBUF_EXPORT extern ValueDefaultTypeInternal _Value_default_instance_; -PROTOBUF_NAMESPACE_CLOSE -PROTOBUF_NAMESPACE_OPEN -template<> PROTOBUF_EXPORT ::PROTOBUF_NAMESPACE_ID::ListValue* Arena::CreateMaybeMessage<::PROTOBUF_NAMESPACE_ID::ListValue>(Arena*); -template<> PROTOBUF_EXPORT ::PROTOBUF_NAMESPACE_ID::Struct* Arena::CreateMaybeMessage<::PROTOBUF_NAMESPACE_ID::Struct>(Arena*); -template<> PROTOBUF_EXPORT ::PROTOBUF_NAMESPACE_ID::Struct_FieldsEntry_DoNotUse* Arena::CreateMaybeMessage<::PROTOBUF_NAMESPACE_ID::Struct_FieldsEntry_DoNotUse>(Arena*); -template<> PROTOBUF_EXPORT ::PROTOBUF_NAMESPACE_ID::Value* Arena::CreateMaybeMessage<::PROTOBUF_NAMESPACE_ID::Value>(Arena*); -PROTOBUF_NAMESPACE_CLOSE -PROTOBUF_NAMESPACE_OPEN - -enum NullValue : int { - NULL_VALUE = 0, - NullValue_INT_MIN_SENTINEL_DO_NOT_USE_ = std::numeric_limits<int32_t>::min(), - NullValue_INT_MAX_SENTINEL_DO_NOT_USE_ = std::numeric_limits<int32_t>::max() -}; -PROTOBUF_EXPORT bool NullValue_IsValid(int value); -constexpr NullValue NullValue_MIN = NULL_VALUE; -constexpr NullValue NullValue_MAX = NULL_VALUE; -constexpr int NullValue_ARRAYSIZE = NullValue_MAX + 1; - -PROTOBUF_EXPORT const ::PROTOBUF_NAMESPACE_ID::EnumDescriptor* NullValue_descriptor(); -template<typename T> -inline const std::string& NullValue_Name(T enum_t_value) { - static_assert(::std::is_same<T, NullValue>::value || - ::std::is_integral<T>::value, - "Incorrect type passed to function NullValue_Name."); - return ::PROTOBUF_NAMESPACE_ID::internal::NameOfEnum( - NullValue_descriptor(), enum_t_value); -} -inline bool NullValue_Parse( - ::PROTOBUF_NAMESPACE_ID::ConstStringParam name, NullValue* value) { - return ::PROTOBUF_NAMESPACE_ID::internal::ParseNamedEnum<NullValue>( - NullValue_descriptor(), name, value); -} -// =================================================================== - -class Struct_FieldsEntry_DoNotUse : public ::PROTOBUF_NAMESPACE_ID::internal::MapEntry<Struct_FieldsEntry_DoNotUse, - std::string, ::PROTOBUF_NAMESPACE_ID::Value, - ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::TYPE_STRING, - ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::TYPE_MESSAGE> { -public: - typedef ::PROTOBUF_NAMESPACE_ID::internal::MapEntry<Struct_FieldsEntry_DoNotUse, - std::string, ::PROTOBUF_NAMESPACE_ID::Value, - ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::TYPE_STRING, - ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::TYPE_MESSAGE> SuperType; - Struct_FieldsEntry_DoNotUse(); - explicit PROTOBUF_CONSTEXPR Struct_FieldsEntry_DoNotUse( - ::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized); - explicit Struct_FieldsEntry_DoNotUse(::PROTOBUF_NAMESPACE_ID::Arena* arena); - void MergeFrom(const Struct_FieldsEntry_DoNotUse& other); - static const Struct_FieldsEntry_DoNotUse* internal_default_instance() { return reinterpret_cast<const Struct_FieldsEntry_DoNotUse*>(&_Struct_FieldsEntry_DoNotUse_default_instance_); } - static bool ValidateKey(std::string* s) { - return ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String(s->data(), static_cast<int>(s->size()), ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::PARSE, "google.protobuf.Struct.FieldsEntry.key"); - } - static bool ValidateValue(void*) { return true; } - using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom; - ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final; - friend struct ::TableStruct_google_2fprotobuf_2fstruct_2eproto; -}; - -// ------------------------------------------------------------------- - -class PROTOBUF_EXPORT Struct final : - public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:google.protobuf.Struct) */ { - public: - inline Struct() : Struct(nullptr) {} - ~Struct() override; - explicit PROTOBUF_CONSTEXPR Struct(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized); - - Struct(const Struct& from); - Struct(Struct&& from) noexcept - : Struct() { - *this = ::std::move(from); - } - - inline Struct& operator=(const Struct& from) { - CopyFrom(from); - return *this; - } - inline Struct& operator=(Struct&& from) noexcept { - if (this == &from) return *this; - if (GetOwningArena() == from.GetOwningArena() - #ifdef PROTOBUF_FORCE_COPY_IN_MOVE - && GetOwningArena() != nullptr - #endif // !PROTOBUF_FORCE_COPY_IN_MOVE - ) { - InternalSwap(&from); - } else { - CopyFrom(from); - } - return *this; - } - - static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() { - return GetDescriptor(); - } - static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() { - return default_instance().GetMetadata().descriptor; - } - static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() { - return default_instance().GetMetadata().reflection; - } - static const Struct& default_instance() { - return *internal_default_instance(); - } - static inline const Struct* internal_default_instance() { - return reinterpret_cast<const Struct*>( - &_Struct_default_instance_); - } - static constexpr int kIndexInFileMessages = - 1; - - friend void swap(Struct& a, Struct& b) { - a.Swap(&b); - } - inline void Swap(Struct* other) { - if (other == this) return; - #ifdef PROTOBUF_FORCE_COPY_IN_SWAP - if (GetOwningArena() != nullptr && - GetOwningArena() == other->GetOwningArena()) { - #else // PROTOBUF_FORCE_COPY_IN_SWAP - if (GetOwningArena() == other->GetOwningArena()) { - #endif // !PROTOBUF_FORCE_COPY_IN_SWAP - InternalSwap(other); - } else { - ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other); - } - } - void UnsafeArenaSwap(Struct* other) { - if (other == this) return; - GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena()); - InternalSwap(other); - } - - // implements Message ---------------------------------------------- - - Struct* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final { - return CreateMaybeMessage<Struct>(arena); - } - using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom; - void CopyFrom(const Struct& from); - using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom; - void MergeFrom( const Struct& from) { - Struct::MergeImpl(*this, from); - } - private: - static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message& to_msg, const ::PROTOBUF_NAMESPACE_ID::Message& from_msg); - public: - PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final; - bool IsInitialized() const final; - - size_t ByteSizeLong() const final; - const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final; - uint8_t* _InternalSerialize( - uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final; - int GetCachedSize() const final { return _impl_._cached_size_.Get(); } - - private: - void SharedCtor(::PROTOBUF_NAMESPACE_ID::Arena* arena, bool is_message_owned); - void SharedDtor(); - void SetCachedSize(int size) const final; - void InternalSwap(Struct* other); - - private: - friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata; - static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() { - return "google.protobuf.Struct"; - } - protected: - explicit Struct(::PROTOBUF_NAMESPACE_ID::Arena* arena, - bool is_message_owned = false); - private: - static void ArenaDtor(void* object); - public: - - static const ClassData _class_data_; - const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final; - - ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final; - - // nested types ---------------------------------------------------- - - - // accessors ------------------------------------------------------- - - enum : int { - kFieldsFieldNumber = 1, - }; - // map<string, .google.protobuf.Value> fields = 1; - int fields_size() const; - private: - int _internal_fields_size() const; - public: - void clear_fields(); - private: - const ::PROTOBUF_NAMESPACE_ID::Map< std::string, ::PROTOBUF_NAMESPACE_ID::Value >& - _internal_fields() const; - ::PROTOBUF_NAMESPACE_ID::Map< std::string, ::PROTOBUF_NAMESPACE_ID::Value >* - _internal_mutable_fields(); - public: - const ::PROTOBUF_NAMESPACE_ID::Map< std::string, ::PROTOBUF_NAMESPACE_ID::Value >& - fields() const; - ::PROTOBUF_NAMESPACE_ID::Map< std::string, ::PROTOBUF_NAMESPACE_ID::Value >* - mutable_fields(); - - // @@protoc_insertion_point(class_scope:google.protobuf.Struct) - private: - class _Internal; - - template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper; - typedef void InternalArenaConstructable_; - typedef void DestructorSkippable_; - struct Impl_ { - ::PROTOBUF_NAMESPACE_ID::internal::MapField< - Struct_FieldsEntry_DoNotUse, - std::string, ::PROTOBUF_NAMESPACE_ID::Value, - ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::TYPE_STRING, - ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::TYPE_MESSAGE> fields_; - mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_; - }; - union { Impl_ _impl_; }; - friend struct ::TableStruct_google_2fprotobuf_2fstruct_2eproto; -}; -// ------------------------------------------------------------------- - -class PROTOBUF_EXPORT Value final : - public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:google.protobuf.Value) */ { - public: - inline Value() : Value(nullptr) {} - ~Value() override; - explicit PROTOBUF_CONSTEXPR Value(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized); - - Value(const Value& from); - Value(Value&& from) noexcept - : Value() { - *this = ::std::move(from); - } - - inline Value& operator=(const Value& from) { - CopyFrom(from); - return *this; - } - inline Value& operator=(Value&& from) noexcept { - if (this == &from) return *this; - if (GetOwningArena() == from.GetOwningArena() - #ifdef PROTOBUF_FORCE_COPY_IN_MOVE - && GetOwningArena() != nullptr - #endif // !PROTOBUF_FORCE_COPY_IN_MOVE - ) { - InternalSwap(&from); - } else { - CopyFrom(from); - } - return *this; - } - - static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() { - return GetDescriptor(); - } - static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() { - return default_instance().GetMetadata().descriptor; - } - static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() { - return default_instance().GetMetadata().reflection; - } - static const Value& default_instance() { - return *internal_default_instance(); - } - enum KindCase { - kNullValue = 1, - kNumberValue = 2, - kStringValue = 3, - kBoolValue = 4, - kStructValue = 5, - kListValue = 6, - KIND_NOT_SET = 0, - }; - - static inline const Value* internal_default_instance() { - return reinterpret_cast<const Value*>( - &_Value_default_instance_); - } - static constexpr int kIndexInFileMessages = - 2; - - friend void swap(Value& a, Value& b) { - a.Swap(&b); - } - inline void Swap(Value* other) { - if (other == this) return; - #ifdef PROTOBUF_FORCE_COPY_IN_SWAP - if (GetOwningArena() != nullptr && - GetOwningArena() == other->GetOwningArena()) { - #else // PROTOBUF_FORCE_COPY_IN_SWAP - if (GetOwningArena() == other->GetOwningArena()) { - #endif // !PROTOBUF_FORCE_COPY_IN_SWAP - InternalSwap(other); - } else { - ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other); - } - } - void UnsafeArenaSwap(Value* other) { - if (other == this) return; - GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena()); - InternalSwap(other); - } - - // implements Message ---------------------------------------------- - - Value* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final { - return CreateMaybeMessage<Value>(arena); - } - using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom; - void CopyFrom(const Value& from); - using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom; - void MergeFrom( const Value& from) { - Value::MergeImpl(*this, from); - } - private: - static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message& to_msg, const ::PROTOBUF_NAMESPACE_ID::Message& from_msg); - public: - PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final; - bool IsInitialized() const final; - - size_t ByteSizeLong() const final; - const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final; - uint8_t* _InternalSerialize( - uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final; - int GetCachedSize() const final { return _impl_._cached_size_.Get(); } - - private: - void SharedCtor(::PROTOBUF_NAMESPACE_ID::Arena* arena, bool is_message_owned); - void SharedDtor(); - void SetCachedSize(int size) const final; - void InternalSwap(Value* other); - - private: - friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata; - static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() { - return "google.protobuf.Value"; - } - protected: - explicit Value(::PROTOBUF_NAMESPACE_ID::Arena* arena, - bool is_message_owned = false); - public: - - static const ClassData _class_data_; - const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final; - - ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final; - - // nested types ---------------------------------------------------- - - // accessors ------------------------------------------------------- - - enum : int { - kNullValueFieldNumber = 1, - kNumberValueFieldNumber = 2, - kStringValueFieldNumber = 3, - kBoolValueFieldNumber = 4, - kStructValueFieldNumber = 5, - kListValueFieldNumber = 6, - }; - // .google.protobuf.NullValue null_value = 1; - bool has_null_value() const; - private: - bool _internal_has_null_value() const; - public: - void clear_null_value(); - ::PROTOBUF_NAMESPACE_ID::NullValue null_value() const; - void set_null_value(::PROTOBUF_NAMESPACE_ID::NullValue value); - private: - ::PROTOBUF_NAMESPACE_ID::NullValue _internal_null_value() const; - void _internal_set_null_value(::PROTOBUF_NAMESPACE_ID::NullValue value); - public: - - // double number_value = 2; - bool has_number_value() const; - private: - bool _internal_has_number_value() const; - public: - void clear_number_value(); - double number_value() const; - void set_number_value(double value); - private: - double _internal_number_value() const; - void _internal_set_number_value(double value); - public: - - // string string_value = 3; - bool has_string_value() const; - private: - bool _internal_has_string_value() const; - public: - void clear_string_value(); - const std::string& string_value() const; - template <typename ArgT0 = const std::string&, typename... ArgT> - void set_string_value(ArgT0&& arg0, ArgT... args); - std::string* mutable_string_value(); - PROTOBUF_NODISCARD std::string* release_string_value(); - void set_allocated_string_value(std::string* string_value); - private: - const std::string& _internal_string_value() const; - inline PROTOBUF_ALWAYS_INLINE void _internal_set_string_value(const std::string& value); - std::string* _internal_mutable_string_value(); - public: - - // bool bool_value = 4; - bool has_bool_value() const; - private: - bool _internal_has_bool_value() const; - public: - void clear_bool_value(); - bool bool_value() const; - void set_bool_value(bool value); - private: - bool _internal_bool_value() const; - void _internal_set_bool_value(bool value); - public: - - // .google.protobuf.Struct struct_value = 5; - bool has_struct_value() const; - private: - bool _internal_has_struct_value() const; - public: - void clear_struct_value(); - const ::PROTOBUF_NAMESPACE_ID::Struct& struct_value() const; - PROTOBUF_NODISCARD ::PROTOBUF_NAMESPACE_ID::Struct* release_struct_value(); - ::PROTOBUF_NAMESPACE_ID::Struct* mutable_struct_value(); - void set_allocated_struct_value(::PROTOBUF_NAMESPACE_ID::Struct* struct_value); - private: - const ::PROTOBUF_NAMESPACE_ID::Struct& _internal_struct_value() const; - ::PROTOBUF_NAMESPACE_ID::Struct* _internal_mutable_struct_value(); - public: - void unsafe_arena_set_allocated_struct_value( - ::PROTOBUF_NAMESPACE_ID::Struct* struct_value); - ::PROTOBUF_NAMESPACE_ID::Struct* unsafe_arena_release_struct_value(); - - // .google.protobuf.ListValue list_value = 6; - bool has_list_value() const; - private: - bool _internal_has_list_value() const; - public: - void clear_list_value(); - const ::PROTOBUF_NAMESPACE_ID::ListValue& list_value() const; - PROTOBUF_NODISCARD ::PROTOBUF_NAMESPACE_ID::ListValue* release_list_value(); - ::PROTOBUF_NAMESPACE_ID::ListValue* mutable_list_value(); - void set_allocated_list_value(::PROTOBUF_NAMESPACE_ID::ListValue* list_value); - private: - const ::PROTOBUF_NAMESPACE_ID::ListValue& _internal_list_value() const; - ::PROTOBUF_NAMESPACE_ID::ListValue* _internal_mutable_list_value(); - public: - void unsafe_arena_set_allocated_list_value( - ::PROTOBUF_NAMESPACE_ID::ListValue* list_value); - ::PROTOBUF_NAMESPACE_ID::ListValue* unsafe_arena_release_list_value(); - - void clear_kind(); - KindCase kind_case() const; - // @@protoc_insertion_point(class_scope:google.protobuf.Value) - private: - class _Internal; - void set_has_null_value(); - void set_has_number_value(); - void set_has_string_value(); - void set_has_bool_value(); - void set_has_struct_value(); - void set_has_list_value(); - - inline bool has_kind() const; - inline void clear_has_kind(); - - template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper; - typedef void InternalArenaConstructable_; - typedef void DestructorSkippable_; - struct Impl_ { - union KindUnion { - constexpr KindUnion() : _constinit_{} {} - ::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized _constinit_; - int null_value_; - double number_value_; - ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr string_value_; - bool bool_value_; - ::PROTOBUF_NAMESPACE_ID::Struct* struct_value_; - ::PROTOBUF_NAMESPACE_ID::ListValue* list_value_; - } kind_; - mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_; - uint32_t _oneof_case_[1]; - - }; - union { Impl_ _impl_; }; - friend struct ::TableStruct_google_2fprotobuf_2fstruct_2eproto; -}; -// ------------------------------------------------------------------- - -class PROTOBUF_EXPORT ListValue final : - public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:google.protobuf.ListValue) */ { - public: - inline ListValue() : ListValue(nullptr) {} - ~ListValue() override; - explicit PROTOBUF_CONSTEXPR ListValue(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized); - - ListValue(const ListValue& from); - ListValue(ListValue&& from) noexcept - : ListValue() { - *this = ::std::move(from); - } - - inline ListValue& operator=(const ListValue& from) { - CopyFrom(from); - return *this; - } - inline ListValue& operator=(ListValue&& from) noexcept { - if (this == &from) return *this; - if (GetOwningArena() == from.GetOwningArena() - #ifdef PROTOBUF_FORCE_COPY_IN_MOVE - && GetOwningArena() != nullptr - #endif // !PROTOBUF_FORCE_COPY_IN_MOVE - ) { - InternalSwap(&from); - } else { - CopyFrom(from); - } - return *this; - } - - static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() { - return GetDescriptor(); - } - static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() { - return default_instance().GetMetadata().descriptor; - } - static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() { - return default_instance().GetMetadata().reflection; - } - static const ListValue& default_instance() { - return *internal_default_instance(); - } - static inline const ListValue* internal_default_instance() { - return reinterpret_cast<const ListValue*>( - &_ListValue_default_instance_); - } - static constexpr int kIndexInFileMessages = - 3; - - friend void swap(ListValue& a, ListValue& b) { - a.Swap(&b); - } - inline void Swap(ListValue* other) { - if (other == this) return; - #ifdef PROTOBUF_FORCE_COPY_IN_SWAP - if (GetOwningArena() != nullptr && - GetOwningArena() == other->GetOwningArena()) { - #else // PROTOBUF_FORCE_COPY_IN_SWAP - if (GetOwningArena() == other->GetOwningArena()) { - #endif // !PROTOBUF_FORCE_COPY_IN_SWAP - InternalSwap(other); - } else { - ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other); - } - } - void UnsafeArenaSwap(ListValue* other) { - if (other == this) return; - GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena()); - InternalSwap(other); - } - - // implements Message ---------------------------------------------- - - ListValue* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final { - return CreateMaybeMessage<ListValue>(arena); - } - using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom; - void CopyFrom(const ListValue& from); - using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom; - void MergeFrom( const ListValue& from) { - ListValue::MergeImpl(*this, from); - } - private: - static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message& to_msg, const ::PROTOBUF_NAMESPACE_ID::Message& from_msg); - public: - PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final; - bool IsInitialized() const final; - - size_t ByteSizeLong() const final; - const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final; - uint8_t* _InternalSerialize( - uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final; - int GetCachedSize() const final { return _impl_._cached_size_.Get(); } - - private: - void SharedCtor(::PROTOBUF_NAMESPACE_ID::Arena* arena, bool is_message_owned); - void SharedDtor(); - void SetCachedSize(int size) const final; - void InternalSwap(ListValue* other); - - private: - friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata; - static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() { - return "google.protobuf.ListValue"; - } - protected: - explicit ListValue(::PROTOBUF_NAMESPACE_ID::Arena* arena, - bool is_message_owned = false); - public: - - static const ClassData _class_data_; - const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final; - - ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final; - - // nested types ---------------------------------------------------- - - // accessors ------------------------------------------------------- - - enum : int { - kValuesFieldNumber = 1, - }; - // repeated .google.protobuf.Value values = 1; - int values_size() const; - private: - int _internal_values_size() const; - public: - void clear_values(); - ::PROTOBUF_NAMESPACE_ID::Value* mutable_values(int index); - ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::Value >* - mutable_values(); - private: - const ::PROTOBUF_NAMESPACE_ID::Value& _internal_values(int index) const; - ::PROTOBUF_NAMESPACE_ID::Value* _internal_add_values(); - public: - const ::PROTOBUF_NAMESPACE_ID::Value& values(int index) const; - ::PROTOBUF_NAMESPACE_ID::Value* add_values(); - const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::Value >& - values() const; - - // @@protoc_insertion_point(class_scope:google.protobuf.ListValue) - private: - class _Internal; - - template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper; - typedef void InternalArenaConstructable_; - typedef void DestructorSkippable_; - struct Impl_ { - ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::Value > values_; - mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_; - }; - union { Impl_ _impl_; }; - friend struct ::TableStruct_google_2fprotobuf_2fstruct_2eproto; -}; -// =================================================================== - - -// =================================================================== - -#ifdef __GNUC__ - #pragma GCC diagnostic push - #pragma GCC diagnostic ignored "-Wstrict-aliasing" -#endif // __GNUC__ -// ------------------------------------------------------------------- - -// Struct - -// map<string, .google.protobuf.Value> fields = 1; -inline int Struct::_internal_fields_size() const { - return _impl_.fields_.size(); -} -inline int Struct::fields_size() const { - return _internal_fields_size(); -} -inline void Struct::clear_fields() { - _impl_.fields_.Clear(); -} -inline const ::PROTOBUF_NAMESPACE_ID::Map< std::string, ::PROTOBUF_NAMESPACE_ID::Value >& -Struct::_internal_fields() const { - return _impl_.fields_.GetMap(); -} -inline const ::PROTOBUF_NAMESPACE_ID::Map< std::string, ::PROTOBUF_NAMESPACE_ID::Value >& -Struct::fields() const { - // @@protoc_insertion_point(field_map:google.protobuf.Struct.fields) - return _internal_fields(); -} -inline ::PROTOBUF_NAMESPACE_ID::Map< std::string, ::PROTOBUF_NAMESPACE_ID::Value >* -Struct::_internal_mutable_fields() { - return _impl_.fields_.MutableMap(); -} -inline ::PROTOBUF_NAMESPACE_ID::Map< std::string, ::PROTOBUF_NAMESPACE_ID::Value >* -Struct::mutable_fields() { - // @@protoc_insertion_point(field_mutable_map:google.protobuf.Struct.fields) - return _internal_mutable_fields(); -} - -// ------------------------------------------------------------------- - -// Value - -// .google.protobuf.NullValue null_value = 1; -inline bool Value::_internal_has_null_value() const { - return kind_case() == kNullValue; -} -inline bool Value::has_null_value() const { - return _internal_has_null_value(); -} -inline void Value::set_has_null_value() { - _impl_._oneof_case_[0] = kNullValue; -} -inline void Value::clear_null_value() { - if (_internal_has_null_value()) { - _impl_.kind_.null_value_ = 0; - clear_has_kind(); - } -} -inline ::PROTOBUF_NAMESPACE_ID::NullValue Value::_internal_null_value() const { - if (_internal_has_null_value()) { - return static_cast< ::PROTOBUF_NAMESPACE_ID::NullValue >(_impl_.kind_.null_value_); - } - return static_cast< ::PROTOBUF_NAMESPACE_ID::NullValue >(0); -} -inline ::PROTOBUF_NAMESPACE_ID::NullValue Value::null_value() const { - // @@protoc_insertion_point(field_get:google.protobuf.Value.null_value) - return _internal_null_value(); -} -inline void Value::_internal_set_null_value(::PROTOBUF_NAMESPACE_ID::NullValue value) { - if (!_internal_has_null_value()) { - clear_kind(); - set_has_null_value(); - } - _impl_.kind_.null_value_ = value; -} -inline void Value::set_null_value(::PROTOBUF_NAMESPACE_ID::NullValue value) { - _internal_set_null_value(value); - // @@protoc_insertion_point(field_set:google.protobuf.Value.null_value) -} - -// double number_value = 2; -inline bool Value::_internal_has_number_value() const { - return kind_case() == kNumberValue; -} -inline bool Value::has_number_value() const { - return _internal_has_number_value(); -} -inline void Value::set_has_number_value() { - _impl_._oneof_case_[0] = kNumberValue; -} -inline void Value::clear_number_value() { - if (_internal_has_number_value()) { - _impl_.kind_.number_value_ = 0; - clear_has_kind(); - } -} -inline double Value::_internal_number_value() const { - if (_internal_has_number_value()) { - return _impl_.kind_.number_value_; - } - return 0; -} -inline void Value::_internal_set_number_value(double value) { - if (!_internal_has_number_value()) { - clear_kind(); - set_has_number_value(); - } - _impl_.kind_.number_value_ = value; -} -inline double Value::number_value() const { - // @@protoc_insertion_point(field_get:google.protobuf.Value.number_value) - return _internal_number_value(); -} -inline void Value::set_number_value(double value) { - _internal_set_number_value(value); - // @@protoc_insertion_point(field_set:google.protobuf.Value.number_value) -} - -// string string_value = 3; -inline bool Value::_internal_has_string_value() const { - return kind_case() == kStringValue; -} -inline bool Value::has_string_value() const { - return _internal_has_string_value(); -} -inline void Value::set_has_string_value() { - _impl_._oneof_case_[0] = kStringValue; -} -inline void Value::clear_string_value() { - if (_internal_has_string_value()) { - _impl_.kind_.string_value_.Destroy(); - clear_has_kind(); - } -} -inline const std::string& Value::string_value() const { - // @@protoc_insertion_point(field_get:google.protobuf.Value.string_value) - return _internal_string_value(); -} -template <typename ArgT0, typename... ArgT> -inline void Value::set_string_value(ArgT0&& arg0, ArgT... args) { - if (!_internal_has_string_value()) { - clear_kind(); - set_has_string_value(); - _impl_.kind_.string_value_.InitDefault(); - } - _impl_.kind_.string_value_.Set( static_cast<ArgT0 &&>(arg0), args..., GetArenaForAllocation()); - // @@protoc_insertion_point(field_set:google.protobuf.Value.string_value) -} -inline std::string* Value::mutable_string_value() { - std::string* _s = _internal_mutable_string_value(); - // @@protoc_insertion_point(field_mutable:google.protobuf.Value.string_value) - return _s; -} -inline const std::string& Value::_internal_string_value() const { - if (_internal_has_string_value()) { - return _impl_.kind_.string_value_.Get(); - } - return ::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(); -} -inline void Value::_internal_set_string_value(const std::string& value) { - if (!_internal_has_string_value()) { - clear_kind(); - set_has_string_value(); - _impl_.kind_.string_value_.InitDefault(); - } - _impl_.kind_.string_value_.Set(value, GetArenaForAllocation()); -} -inline std::string* Value::_internal_mutable_string_value() { - if (!_internal_has_string_value()) { - clear_kind(); - set_has_string_value(); - _impl_.kind_.string_value_.InitDefault(); - } - return _impl_.kind_.string_value_.Mutable( GetArenaForAllocation()); -} -inline std::string* Value::release_string_value() { - // @@protoc_insertion_point(field_release:google.protobuf.Value.string_value) - if (_internal_has_string_value()) { - clear_has_kind(); - return _impl_.kind_.string_value_.Release(); - } else { - return nullptr; - } -} -inline void Value::set_allocated_string_value(std::string* string_value) { - if (has_kind()) { - clear_kind(); - } - if (string_value != nullptr) { - set_has_string_value(); - _impl_.kind_.string_value_.InitAllocated(string_value, GetArenaForAllocation()); - } - // @@protoc_insertion_point(field_set_allocated:google.protobuf.Value.string_value) -} - -// bool bool_value = 4; -inline bool Value::_internal_has_bool_value() const { - return kind_case() == kBoolValue; -} -inline bool Value::has_bool_value() const { - return _internal_has_bool_value(); -} -inline void Value::set_has_bool_value() { - _impl_._oneof_case_[0] = kBoolValue; -} -inline void Value::clear_bool_value() { - if (_internal_has_bool_value()) { - _impl_.kind_.bool_value_ = false; - clear_has_kind(); - } -} -inline bool Value::_internal_bool_value() const { - if (_internal_has_bool_value()) { - return _impl_.kind_.bool_value_; - } - return false; -} -inline void Value::_internal_set_bool_value(bool value) { - if (!_internal_has_bool_value()) { - clear_kind(); - set_has_bool_value(); - } - _impl_.kind_.bool_value_ = value; -} -inline bool Value::bool_value() const { - // @@protoc_insertion_point(field_get:google.protobuf.Value.bool_value) - return _internal_bool_value(); -} -inline void Value::set_bool_value(bool value) { - _internal_set_bool_value(value); - // @@protoc_insertion_point(field_set:google.protobuf.Value.bool_value) -} - -// .google.protobuf.Struct struct_value = 5; -inline bool Value::_internal_has_struct_value() const { - return kind_case() == kStructValue; -} -inline bool Value::has_struct_value() const { - return _internal_has_struct_value(); -} -inline void Value::set_has_struct_value() { - _impl_._oneof_case_[0] = kStructValue; -} -inline void Value::clear_struct_value() { - if (_internal_has_struct_value()) { - if (GetArenaForAllocation() == nullptr) { - delete _impl_.kind_.struct_value_; - } - clear_has_kind(); - } -} -inline ::PROTOBUF_NAMESPACE_ID::Struct* Value::release_struct_value() { - // @@protoc_insertion_point(field_release:google.protobuf.Value.struct_value) - if (_internal_has_struct_value()) { - clear_has_kind(); - ::PROTOBUF_NAMESPACE_ID::Struct* temp = _impl_.kind_.struct_value_; - if (GetArenaForAllocation() != nullptr) { - temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp); - } - _impl_.kind_.struct_value_ = nullptr; - return temp; - } else { - return nullptr; - } -} -inline const ::PROTOBUF_NAMESPACE_ID::Struct& Value::_internal_struct_value() const { - return _internal_has_struct_value() - ? *_impl_.kind_.struct_value_ - : reinterpret_cast< ::PROTOBUF_NAMESPACE_ID::Struct&>(::PROTOBUF_NAMESPACE_ID::_Struct_default_instance_); -} -inline const ::PROTOBUF_NAMESPACE_ID::Struct& Value::struct_value() const { - // @@protoc_insertion_point(field_get:google.protobuf.Value.struct_value) - return _internal_struct_value(); -} -inline ::PROTOBUF_NAMESPACE_ID::Struct* Value::unsafe_arena_release_struct_value() { - // @@protoc_insertion_point(field_unsafe_arena_release:google.protobuf.Value.struct_value) - if (_internal_has_struct_value()) { - clear_has_kind(); - ::PROTOBUF_NAMESPACE_ID::Struct* temp = _impl_.kind_.struct_value_; - _impl_.kind_.struct_value_ = nullptr; - return temp; - } else { - return nullptr; - } -} -inline void Value::unsafe_arena_set_allocated_struct_value(::PROTOBUF_NAMESPACE_ID::Struct* struct_value) { - clear_kind(); - if (struct_value) { - set_has_struct_value(); - _impl_.kind_.struct_value_ = struct_value; - } - // @@protoc_insertion_point(field_unsafe_arena_set_allocated:google.protobuf.Value.struct_value) -} -inline ::PROTOBUF_NAMESPACE_ID::Struct* Value::_internal_mutable_struct_value() { - if (!_internal_has_struct_value()) { - clear_kind(); - set_has_struct_value(); - _impl_.kind_.struct_value_ = CreateMaybeMessage< ::PROTOBUF_NAMESPACE_ID::Struct >(GetArenaForAllocation()); - } - return _impl_.kind_.struct_value_; -} -inline ::PROTOBUF_NAMESPACE_ID::Struct* Value::mutable_struct_value() { - ::PROTOBUF_NAMESPACE_ID::Struct* _msg = _internal_mutable_struct_value(); - // @@protoc_insertion_point(field_mutable:google.protobuf.Value.struct_value) - return _msg; -} - -// .google.protobuf.ListValue list_value = 6; -inline bool Value::_internal_has_list_value() const { - return kind_case() == kListValue; -} -inline bool Value::has_list_value() const { - return _internal_has_list_value(); -} -inline void Value::set_has_list_value() { - _impl_._oneof_case_[0] = kListValue; -} -inline void Value::clear_list_value() { - if (_internal_has_list_value()) { - if (GetArenaForAllocation() == nullptr) { - delete _impl_.kind_.list_value_; - } - clear_has_kind(); - } -} -inline ::PROTOBUF_NAMESPACE_ID::ListValue* Value::release_list_value() { - // @@protoc_insertion_point(field_release:google.protobuf.Value.list_value) - if (_internal_has_list_value()) { - clear_has_kind(); - ::PROTOBUF_NAMESPACE_ID::ListValue* temp = _impl_.kind_.list_value_; - if (GetArenaForAllocation() != nullptr) { - temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp); - } - _impl_.kind_.list_value_ = nullptr; - return temp; - } else { - return nullptr; - } -} -inline const ::PROTOBUF_NAMESPACE_ID::ListValue& Value::_internal_list_value() const { - return _internal_has_list_value() - ? *_impl_.kind_.list_value_ - : reinterpret_cast< ::PROTOBUF_NAMESPACE_ID::ListValue&>(::PROTOBUF_NAMESPACE_ID::_ListValue_default_instance_); -} -inline const ::PROTOBUF_NAMESPACE_ID::ListValue& Value::list_value() const { - // @@protoc_insertion_point(field_get:google.protobuf.Value.list_value) - return _internal_list_value(); -} -inline ::PROTOBUF_NAMESPACE_ID::ListValue* Value::unsafe_arena_release_list_value() { - // @@protoc_insertion_point(field_unsafe_arena_release:google.protobuf.Value.list_value) - if (_internal_has_list_value()) { - clear_has_kind(); - ::PROTOBUF_NAMESPACE_ID::ListValue* temp = _impl_.kind_.list_value_; - _impl_.kind_.list_value_ = nullptr; - return temp; - } else { - return nullptr; - } -} -inline void Value::unsafe_arena_set_allocated_list_value(::PROTOBUF_NAMESPACE_ID::ListValue* list_value) { - clear_kind(); - if (list_value) { - set_has_list_value(); - _impl_.kind_.list_value_ = list_value; - } - // @@protoc_insertion_point(field_unsafe_arena_set_allocated:google.protobuf.Value.list_value) -} -inline ::PROTOBUF_NAMESPACE_ID::ListValue* Value::_internal_mutable_list_value() { - if (!_internal_has_list_value()) { - clear_kind(); - set_has_list_value(); - _impl_.kind_.list_value_ = CreateMaybeMessage< ::PROTOBUF_NAMESPACE_ID::ListValue >(GetArenaForAllocation()); - } - return _impl_.kind_.list_value_; -} -inline ::PROTOBUF_NAMESPACE_ID::ListValue* Value::mutable_list_value() { - ::PROTOBUF_NAMESPACE_ID::ListValue* _msg = _internal_mutable_list_value(); - // @@protoc_insertion_point(field_mutable:google.protobuf.Value.list_value) - return _msg; -} - -inline bool Value::has_kind() const { - return kind_case() != KIND_NOT_SET; -} -inline void Value::clear_has_kind() { - _impl_._oneof_case_[0] = KIND_NOT_SET; -} -inline Value::KindCase Value::kind_case() const { - return Value::KindCase(_impl_._oneof_case_[0]); -} -// ------------------------------------------------------------------- - -// ListValue - -// repeated .google.protobuf.Value values = 1; -inline int ListValue::_internal_values_size() const { - return _impl_.values_.size(); -} -inline int ListValue::values_size() const { - return _internal_values_size(); -} -inline void ListValue::clear_values() { - _impl_.values_.Clear(); -} -inline ::PROTOBUF_NAMESPACE_ID::Value* ListValue::mutable_values(int index) { - // @@protoc_insertion_point(field_mutable:google.protobuf.ListValue.values) - return _impl_.values_.Mutable(index); -} -inline ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::Value >* -ListValue::mutable_values() { - // @@protoc_insertion_point(field_mutable_list:google.protobuf.ListValue.values) - return &_impl_.values_; -} -inline const ::PROTOBUF_NAMESPACE_ID::Value& ListValue::_internal_values(int index) const { - return _impl_.values_.Get(index); -} -inline const ::PROTOBUF_NAMESPACE_ID::Value& ListValue::values(int index) const { - // @@protoc_insertion_point(field_get:google.protobuf.ListValue.values) - return _internal_values(index); -} -inline ::PROTOBUF_NAMESPACE_ID::Value* ListValue::_internal_add_values() { - return _impl_.values_.Add(); -} -inline ::PROTOBUF_NAMESPACE_ID::Value* ListValue::add_values() { - ::PROTOBUF_NAMESPACE_ID::Value* _add = _internal_add_values(); - // @@protoc_insertion_point(field_add:google.protobuf.ListValue.values) - return _add; -} -inline const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::Value >& -ListValue::values() const { - // @@protoc_insertion_point(field_list:google.protobuf.ListValue.values) - return _impl_.values_; -} - -#ifdef __GNUC__ - #pragma GCC diagnostic pop -#endif // __GNUC__ -// ------------------------------------------------------------------- - -// ------------------------------------------------------------------- - -// ------------------------------------------------------------------- - - -// @@protoc_insertion_point(namespace_scope) - -PROTOBUF_NAMESPACE_CLOSE - -PROTOBUF_NAMESPACE_OPEN - -template <> struct is_proto_enum< ::PROTOBUF_NAMESPACE_ID::NullValue> : ::std::true_type {}; -template <> -inline const EnumDescriptor* GetEnumDescriptor< ::PROTOBUF_NAMESPACE_ID::NullValue>() { - return ::PROTOBUF_NAMESPACE_ID::NullValue_descriptor(); -} - -PROTOBUF_NAMESPACE_CLOSE - -// @@protoc_insertion_point(global_scope) - -#include <google/protobuf/port_undef.inc> -#endif // GOOGLE_PROTOBUF_INCLUDED_GOOGLE_PROTOBUF_INCLUDED_google_2fprotobuf_2fstruct_2eproto diff --git a/include/google/protobuf/struct.proto b/include/google/protobuf/struct.proto deleted file mode 100644 index 0ac843ca08..0000000000 --- a/include/google/protobuf/struct.proto +++ /dev/null @@ -1,95 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// 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 -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -syntax = "proto3"; - -package google.protobuf; - -option csharp_namespace = "Google.Protobuf.WellKnownTypes"; -option cc_enable_arenas = true; -option go_package = "google.golang.org/protobuf/types/known/structpb"; -option java_package = "com.google.protobuf"; -option java_outer_classname = "StructProto"; -option java_multiple_files = true; -option objc_class_prefix = "GPB"; - -// `Struct` represents a structured data value, consisting of fields -// which map to dynamically typed values. In some languages, `Struct` -// might be supported by a native representation. For example, in -// scripting languages like JS a struct is represented as an -// object. The details of that representation are described together -// with the proto support for the language. -// -// The JSON representation for `Struct` is JSON object. -message Struct { - // Unordered map of dynamically typed values. - map<string, Value> fields = 1; -} - -// `Value` represents a dynamically typed value which can be either -// null, a number, a string, a boolean, a recursive struct value, or a -// list of values. A producer of value is expected to set one of these -// variants. Absence of any variant indicates an error. -// -// The JSON representation for `Value` is JSON value. -message Value { - // The kind of value. - oneof kind { - // Represents a null value. - NullValue null_value = 1; - // Represents a double value. - double number_value = 2; - // Represents a string value. - string string_value = 3; - // Represents a boolean value. - bool bool_value = 4; - // Represents a structured value. - Struct struct_value = 5; - // Represents a repeated `Value`. - ListValue list_value = 6; - } -} - -// `NullValue` is a singleton enumeration to represent the null value for the -// `Value` type union. -// -// The JSON representation for `NullValue` is JSON `null`. -enum NullValue { - // Null value. - NULL_VALUE = 0; -} - -// `ListValue` is a wrapper around a repeated field of values. -// -// The JSON representation for `ListValue` is JSON array. -message ListValue { - // Repeated field of dynamically typed values. - repeated Value values = 1; -} diff --git a/include/google/protobuf/stubs/bytestream.h b/include/google/protobuf/stubs/bytestream.h deleted file mode 100644 index c7a48dea54..0000000000 --- a/include/google/protobuf/stubs/bytestream.h +++ /dev/null @@ -1,351 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// 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 -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (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 file declares the ByteSink and ByteSource abstract interfaces. These -// interfaces represent objects that consume (ByteSink) or produce (ByteSource) -// a sequence of bytes. Using these abstract interfaces in your APIs can help -// make your code work with a variety of input and output types. -// -// This file also declares the following commonly used implementations of these -// interfaces. -// -// ByteSink: -// UncheckedArrayByteSink Writes to an array, without bounds checking -// CheckedArrayByteSink Writes to an array, with bounds checking -// GrowingArrayByteSink Allocates and writes to a growable buffer -// StringByteSink Writes to an STL string -// NullByteSink Consumes a never-ending stream of bytes -// -// ByteSource: -// ArrayByteSource Reads from an array or string/StringPiece -// LimitedByteSource Limits the number of bytes read from an - -#ifndef GOOGLE_PROTOBUF_STUBS_BYTESTREAM_H_ -#define GOOGLE_PROTOBUF_STUBS_BYTESTREAM_H_ - -#include <stddef.h> -#include <string> - -#include <google/protobuf/stubs/common.h> -#include <google/protobuf/stubs/stringpiece.h> - -#include <google/protobuf/port_def.inc> - -class CordByteSink; - -namespace google { -namespace protobuf { -namespace strings { - -// An abstract interface for an object that consumes a sequence of bytes. This -// interface offers a way to append data as well as a Flush() function. -// -// Example: -// -// string my_data; -// ... -// ByteSink* sink = ... -// sink->Append(my_data.data(), my_data.size()); -// sink->Flush(); -// -class PROTOBUF_EXPORT ByteSink { - public: - ByteSink() {} - virtual ~ByteSink() {} - - // Appends the "n" bytes starting at "bytes". - virtual void Append(const char* bytes, size_t n) = 0; - - // Flushes internal buffers. The default implementation does nothing. ByteSink - // subclasses may use internal buffers that require calling Flush() at the end - // of the stream. - virtual void Flush(); - - private: - GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(ByteSink); -}; - -// An abstract interface for an object that produces a fixed-size sequence of -// bytes. -// -// Example: -// -// ByteSource* source = ... -// while (source->Available() > 0) { -// StringPiece data = source->Peek(); -// ... do something with "data" ... -// source->Skip(data.length()); -// } -// -class PROTOBUF_EXPORT ByteSource { - public: - ByteSource() {} - virtual ~ByteSource() {} - - // Returns the number of bytes left to read from the source. Available() - // should decrease by N each time Skip(N) is called. Available() may not - // increase. Available() returning 0 indicates that the ByteSource is - // exhausted. - // - // Note: Size() may have been a more appropriate name as it's more - // indicative of the fixed-size nature of a ByteSource. - virtual size_t Available() const = 0; - - // Returns a StringPiece of the next contiguous region of the source. Does not - // reposition the source. The returned region is empty iff Available() == 0. - // - // The returned region is valid until the next call to Skip() or until this - // object is destroyed, whichever occurs first. - // - // The length of the returned StringPiece will be <= Available(). - virtual StringPiece Peek() = 0; - - // Skips the next n bytes. Invalidates any StringPiece returned by a previous - // call to Peek(). - // - // REQUIRES: Available() >= n - virtual void Skip(size_t n) = 0; - - // Writes the next n bytes in this ByteSource to the given ByteSink, and - // advances this ByteSource past the copied bytes. The default implementation - // of this method just copies the bytes normally, but subclasses might - // override CopyTo to optimize certain cases. - // - // REQUIRES: Available() >= n - virtual void CopyTo(ByteSink* sink, size_t n); - - private: - GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(ByteSource); -}; - -// -// Some commonly used implementations of ByteSink -// - -// Implementation of ByteSink that writes to an unsized byte array. No -// bounds-checking is performed--it is the caller's responsibility to ensure -// that the destination array is large enough. -// -// Example: -// -// char buf[10]; -// UncheckedArrayByteSink sink(buf); -// sink.Append("hi", 2); // OK -// sink.Append(data, 100); // WOOPS! Overflows buf[10]. -// -class PROTOBUF_EXPORT UncheckedArrayByteSink : public ByteSink { - public: - explicit UncheckedArrayByteSink(char* dest) : dest_(dest) {} - virtual void Append(const char* data, size_t n) override; - - // Returns the current output pointer so that a caller can see how many bytes - // were produced. - // - // Note: this method is not part of the ByteSink interface. - char* CurrentDestination() const { return dest_; } - - private: - char* dest_; - GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(UncheckedArrayByteSink); -}; - -// Implementation of ByteSink that writes to a sized byte array. This sink will -// not write more than "capacity" bytes to outbuf. Once "capacity" bytes are -// appended, subsequent bytes will be ignored and Overflowed() will return true. -// Overflowed() does not cause a runtime error (i.e., it does not CHECK fail). -// -// Example: -// -// char buf[10]; -// CheckedArrayByteSink sink(buf, 10); -// sink.Append("hi", 2); // OK -// sink.Append(data, 100); // Will only write 8 more bytes -// -class PROTOBUF_EXPORT CheckedArrayByteSink : public ByteSink { - public: - CheckedArrayByteSink(char* outbuf, size_t capacity); - virtual void Append(const char* bytes, size_t n) override; - - // Returns the number of bytes actually written to the sink. - size_t NumberOfBytesWritten() const { return size_; } - - // Returns true if any bytes were discarded, i.e., if there was an - // attempt to write more than 'capacity' bytes. - bool Overflowed() const { return overflowed_; } - - private: - char* outbuf_; - const size_t capacity_; - size_t size_; - bool overflowed_; - GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(CheckedArrayByteSink); -}; - -// Implementation of ByteSink that allocates an internal buffer (a char array) -// and expands it as needed to accommodate appended data (similar to a string), -// and allows the caller to take ownership of the internal buffer via the -// GetBuffer() method. The buffer returned from GetBuffer() must be deleted by -// the caller with delete[]. GetBuffer() also sets the internal buffer to be -// empty, and subsequent appends to the sink will create a new buffer. The -// destructor will free the internal buffer if GetBuffer() was not called. -// -// Example: -// -// GrowingArrayByteSink sink(10); -// sink.Append("hi", 2); -// sink.Append(data, n); -// const char* buf = sink.GetBuffer(); // Ownership transferred -// delete[] buf; -// -class PROTOBUF_EXPORT GrowingArrayByteSink : public strings::ByteSink { - public: - explicit GrowingArrayByteSink(size_t estimated_size); - virtual ~GrowingArrayByteSink(); - virtual void Append(const char* bytes, size_t n) override; - - // Returns the allocated buffer, and sets nbytes to its size. The caller takes - // ownership of the buffer and must delete it with delete[]. - char* GetBuffer(size_t* nbytes); - - private: - void Expand(size_t amount); - void ShrinkToFit(); - - size_t capacity_; - char* buf_; - size_t size_; - GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(GrowingArrayByteSink); -}; - -// Implementation of ByteSink that appends to the given string. -// Existing contents of "dest" are not modified; new data is appended. -// -// Example: -// -// string dest = "Hello "; -// StringByteSink sink(&dest); -// sink.Append("World", 5); -// assert(dest == "Hello World"); -// -class PROTOBUF_EXPORT StringByteSink : public ByteSink { - public: - explicit StringByteSink(std::string* dest) : dest_(dest) {} - virtual void Append(const char* data, size_t n) override; - - private: - std::string* dest_; - GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(StringByteSink); -}; - -// Implementation of ByteSink that discards all data. -// -// Example: -// -// NullByteSink sink; -// sink.Append(data, data.size()); // All data ignored. -// -class PROTOBUF_EXPORT NullByteSink : public ByteSink { - public: - NullByteSink() {} - void Append(const char* /*data*/, size_t /*n*/) override {} - - private: - GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(NullByteSink); -}; - -// -// Some commonly used implementations of ByteSource -// - -// Implementation of ByteSource that reads from a StringPiece. -// -// Example: -// -// string data = "Hello"; -// ArrayByteSource source(data); -// assert(source.Available() == 5); -// assert(source.Peek() == "Hello"); -// -class PROTOBUF_EXPORT ArrayByteSource : public ByteSource { - public: - explicit ArrayByteSource(StringPiece s) : input_(s) {} - - virtual size_t Available() const override; - virtual StringPiece Peek() override; - virtual void Skip(size_t n) override; - - private: - StringPiece input_; - GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(ArrayByteSource); -}; - -// Implementation of ByteSource that wraps another ByteSource, limiting the -// number of bytes returned. -// -// The caller maintains ownership of the underlying source, and may not use the -// underlying source while using the LimitByteSource object. The underlying -// source's pointer is advanced by n bytes every time this LimitByteSource -// object is advanced by n. -// -// Example: -// -// string data = "Hello World"; -// ArrayByteSource abs(data); -// assert(abs.Available() == data.size()); -// -// LimitByteSource limit(abs, 5); -// assert(limit.Available() == 5); -// assert(limit.Peek() == "Hello"); -// -class PROTOBUF_EXPORT LimitByteSource : public ByteSource { - public: - // Returns at most "limit" bytes from "source". - LimitByteSource(ByteSource* source, size_t limit); - - virtual size_t Available() const override; - virtual StringPiece Peek() override; - virtual void Skip(size_t n) override; - - // We override CopyTo so that we can forward to the underlying source, in - // case it has an efficient implementation of CopyTo. - virtual void CopyTo(ByteSink* sink, size_t n) override; - - private: - ByteSource* source_; - size_t limit_; -}; - -} // namespace strings -} // namespace protobuf -} // namespace google - -#include <google/protobuf/port_undef.inc> - -#endif // GOOGLE_PROTOBUF_STUBS_BYTESTREAM_H_ diff --git a/include/google/protobuf/stubs/callback.h b/include/google/protobuf/stubs/callback.h deleted file mode 100644 index 43d546d199..0000000000 --- a/include/google/protobuf/stubs/callback.h +++ /dev/null @@ -1,583 +0,0 @@ -#ifndef GOOGLE_PROTOBUF_STUBS_CALLBACK_H_ -#define GOOGLE_PROTOBUF_STUBS_CALLBACK_H_ - -#include <type_traits> - -#include <google/protobuf/stubs/macros.h> - -#include <google/protobuf/port_def.inc> - -// =================================================================== -// emulates google3/base/callback.h - -namespace google { -namespace protobuf { - -// Abstract interface for a callback. When calling an RPC, you must provide -// a Closure to call when the procedure completes. See the Service interface -// in service.h. -// -// To automatically construct a Closure which calls a particular function or -// method with a particular set of parameters, use the NewCallback() function. -// Example: -// void FooDone(const FooResponse* response) { -// ... -// } -// -// void CallFoo() { -// ... -// // When done, call FooDone() and pass it a pointer to the response. -// Closure* callback = NewCallback(&FooDone, response); -// // Make the call. -// service->Foo(controller, request, response, callback); -// } -// -// Example that calls a method: -// class Handler { -// public: -// ... -// -// void FooDone(const FooResponse* response) { -// ... -// } -// -// void CallFoo() { -// ... -// // When done, call FooDone() and pass it a pointer to the response. -// Closure* callback = NewCallback(this, &Handler::FooDone, response); -// // Make the call. -// service->Foo(controller, request, response, callback); -// } -// }; -// -// Currently NewCallback() supports binding zero, one, or two arguments. -// -// Callbacks created with NewCallback() automatically delete themselves when -// executed. They should be used when a callback is to be called exactly -// once (usually the case with RPC callbacks). If a callback may be called -// a different number of times (including zero), create it with -// NewPermanentCallback() instead. You are then responsible for deleting the -// callback (using the "delete" keyword as normal). -// -// Note that NewCallback() is a bit touchy regarding argument types. Generally, -// the values you provide for the parameter bindings must exactly match the -// types accepted by the callback function. For example: -// void Foo(std::string s); -// NewCallback(&Foo, "foo"); // WON'T WORK: const char* != string -// NewCallback(&Foo, std::string("foo")); // WORKS -// Also note that the arguments cannot be references: -// void Foo(const std::string& s); -// std::string my_str; -// NewCallback(&Foo, my_str); // WON'T WORK: Can't use references. -// However, correctly-typed pointers will work just fine. -class PROTOBUF_EXPORT Closure { - public: - Closure() {} - virtual ~Closure(); - - virtual void Run() = 0; - - private: - GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(Closure); -}; - -template<typename R> -class ResultCallback { - public: - ResultCallback() {} - virtual ~ResultCallback() {} - - virtual R Run() = 0; - - private: - GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(ResultCallback); -}; - -template <typename R, typename A1> -class PROTOBUF_EXPORT ResultCallback1 { - public: - ResultCallback1() {} - virtual ~ResultCallback1() {} - - virtual R Run(A1) = 0; - - private: - GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(ResultCallback1); -}; - -template <typename R, typename A1, typename A2> -class PROTOBUF_EXPORT ResultCallback2 { - public: - ResultCallback2() {} - virtual ~ResultCallback2() {} - - virtual R Run(A1,A2) = 0; - - private: - GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(ResultCallback2); -}; - -namespace internal { - -class PROTOBUF_EXPORT FunctionClosure0 : public Closure { - public: - typedef void (*FunctionType)(); - - FunctionClosure0(FunctionType function, bool self_deleting) - : function_(function), self_deleting_(self_deleting) {} - ~FunctionClosure0(); - - void Run() override { - bool needs_delete = self_deleting_; // read in case callback deletes - function_(); - if (needs_delete) delete this; - } - - private: - FunctionType function_; - bool self_deleting_; -}; - -template <typename Class> -class MethodClosure0 : public Closure { - public: - typedef void (Class::*MethodType)(); - - MethodClosure0(Class* object, MethodType method, bool self_deleting) - : object_(object), method_(method), self_deleting_(self_deleting) {} - ~MethodClosure0() {} - - void Run() override { - bool needs_delete = self_deleting_; // read in case callback deletes - (object_->*method_)(); - if (needs_delete) delete this; - } - - private: - Class* object_; - MethodType method_; - bool self_deleting_; -}; - -template <typename Arg1> -class FunctionClosure1 : public Closure { - public: - typedef void (*FunctionType)(Arg1 arg1); - - FunctionClosure1(FunctionType function, bool self_deleting, - Arg1 arg1) - : function_(function), self_deleting_(self_deleting), - arg1_(arg1) {} - ~FunctionClosure1() {} - - void Run() override { - bool needs_delete = self_deleting_; // read in case callback deletes - function_(arg1_); - if (needs_delete) delete this; - } - - private: - FunctionType function_; - bool self_deleting_; - Arg1 arg1_; -}; - -template <typename Class, typename Arg1> -class MethodClosure1 : public Closure { - public: - typedef void (Class::*MethodType)(Arg1 arg1); - - MethodClosure1(Class* object, MethodType method, bool self_deleting, - Arg1 arg1) - : object_(object), method_(method), self_deleting_(self_deleting), - arg1_(arg1) {} - ~MethodClosure1() {} - - void Run() override { - bool needs_delete = self_deleting_; // read in case callback deletes - (object_->*method_)(arg1_); - if (needs_delete) delete this; - } - - private: - Class* object_; - MethodType method_; - bool self_deleting_; - Arg1 arg1_; -}; - -template <typename Arg1, typename Arg2> -class FunctionClosure2 : public Closure { - public: - typedef void (*FunctionType)(Arg1 arg1, Arg2 arg2); - - FunctionClosure2(FunctionType function, bool self_deleting, - Arg1 arg1, Arg2 arg2) - : function_(function), self_deleting_(self_deleting), - arg1_(arg1), arg2_(arg2) {} - ~FunctionClosure2() {} - - void Run() override { - bool needs_delete = self_deleting_; // read in case callback deletes - function_(arg1_, arg2_); - if (needs_delete) delete this; - } - - private: - FunctionType function_; - bool self_deleting_; - Arg1 arg1_; - Arg2 arg2_; -}; - -template <typename Class, typename Arg1, typename Arg2> -class MethodClosure2 : public Closure { - public: - typedef void (Class::*MethodType)(Arg1 arg1, Arg2 arg2); - - MethodClosure2(Class* object, MethodType method, bool self_deleting, - Arg1 arg1, Arg2 arg2) - : object_(object), method_(method), self_deleting_(self_deleting), - arg1_(arg1), arg2_(arg2) {} - ~MethodClosure2() {} - - void Run() override { - bool needs_delete = self_deleting_; // read in case callback deletes - (object_->*method_)(arg1_, arg2_); - if (needs_delete) delete this; - } - - private: - Class* object_; - MethodType method_; - bool self_deleting_; - Arg1 arg1_; - Arg2 arg2_; -}; - -template<typename R> -class FunctionResultCallback_0_0 : public ResultCallback<R> { - public: - typedef R (*FunctionType)(); - - FunctionResultCallback_0_0(FunctionType function, bool self_deleting) - : function_(function), self_deleting_(self_deleting) {} - ~FunctionResultCallback_0_0() {} - - R Run() override { - bool needs_delete = self_deleting_; // read in case callback deletes - R result = function_(); - if (needs_delete) delete this; - return result; - } - - private: - FunctionType function_; - bool self_deleting_; -}; - -template<typename R, typename P1> -class FunctionResultCallback_1_0 : public ResultCallback<R> { - public: - typedef R (*FunctionType)(P1); - - FunctionResultCallback_1_0(FunctionType function, bool self_deleting, - P1 p1) - : function_(function), self_deleting_(self_deleting), p1_(p1) {} - ~FunctionResultCallback_1_0() {} - - R Run() override { - bool needs_delete = self_deleting_; // read in case callback deletes - R result = function_(p1_); - if (needs_delete) delete this; - return result; - } - - private: - FunctionType function_; - bool self_deleting_; - P1 p1_; -}; - -template<typename R, typename Arg1> -class FunctionResultCallback_0_1 : public ResultCallback1<R, Arg1> { - public: - typedef R (*FunctionType)(Arg1 arg1); - - FunctionResultCallback_0_1(FunctionType function, bool self_deleting) - : function_(function), self_deleting_(self_deleting) {} - ~FunctionResultCallback_0_1() {} - - R Run(Arg1 a1) override { - bool needs_delete = self_deleting_; // read in case callback deletes - R result = function_(a1); - if (needs_delete) delete this; - return result; - } - - private: - FunctionType function_; - bool self_deleting_; -}; - -template<typename R, typename P1, typename A1> -class FunctionResultCallback_1_1 : public ResultCallback1<R, A1> { - public: - typedef R (*FunctionType)(P1, A1); - - FunctionResultCallback_1_1(FunctionType function, bool self_deleting, - P1 p1) - : function_(function), self_deleting_(self_deleting), p1_(p1) {} - ~FunctionResultCallback_1_1() {} - - R Run(A1 a1) override { - bool needs_delete = self_deleting_; // read in case callback deletes - R result = function_(p1_, a1); - if (needs_delete) delete this; - return result; - } - - private: - FunctionType function_; - bool self_deleting_; - P1 p1_; -}; - -template <typename T> -struct InternalConstRef { - typedef typename std::remove_reference<T>::type base_type; - typedef const base_type& type; -}; - -template<typename R, typename T> -class MethodResultCallback_0_0 : public ResultCallback<R> { - public: - typedef R (T::*MethodType)(); - MethodResultCallback_0_0(T* object, MethodType method, bool self_deleting) - : object_(object), - method_(method), - self_deleting_(self_deleting) {} - ~MethodResultCallback_0_0() {} - - R Run() { - bool needs_delete = self_deleting_; - R result = (object_->*method_)(); - if (needs_delete) delete this; - return result; - } - - private: - T* object_; - MethodType method_; - bool self_deleting_; -}; - -template <typename R, typename T, typename P1, typename P2, typename P3, - typename P4, typename P5, typename P6, typename A1, typename A2> -class MethodResultCallback_6_2 : public ResultCallback2<R, A1, A2> { - public: - typedef R (T::*MethodType)(P1, P2, P3, P4, P5, P6, A1, A2); - MethodResultCallback_6_2(T* object, MethodType method, bool self_deleting, - P1 p1, P2 p2, P3 p3, P4 p4, P5 p5, P6 p6) - : object_(object), - method_(method), - self_deleting_(self_deleting), - p1_(p1), - p2_(p2), - p3_(p3), - p4_(p4), - p5_(p5), - p6_(p6) {} - ~MethodResultCallback_6_2() {} - - R Run(A1 a1, A2 a2) override { - bool needs_delete = self_deleting_; - R result = (object_->*method_)(p1_, p2_, p3_, p4_, p5_, p6_, a1, a2); - if (needs_delete) delete this; - return result; - } - - private: - T* object_; - MethodType method_; - bool self_deleting_; - typename std::remove_reference<P1>::type p1_; - typename std::remove_reference<P2>::type p2_; - typename std::remove_reference<P3>::type p3_; - typename std::remove_reference<P4>::type p4_; - typename std::remove_reference<P5>::type p5_; - typename std::remove_reference<P6>::type p6_; -}; - -} // namespace internal - -// See Closure. -inline Closure* NewCallback(void (*function)()) { - return new internal::FunctionClosure0(function, true); -} - -// See Closure. -inline Closure* NewPermanentCallback(void (*function)()) { - return new internal::FunctionClosure0(function, false); -} - -// See Closure. -template <typename Class> -inline Closure* NewCallback(Class* object, void (Class::*method)()) { - return new internal::MethodClosure0<Class>(object, method, true); -} - -// See Closure. -template <typename Class> -inline Closure* NewPermanentCallback(Class* object, void (Class::*method)()) { - return new internal::MethodClosure0<Class>(object, method, false); -} - -// See Closure. -template <typename Arg1> -inline Closure* NewCallback(void (*function)(Arg1), - Arg1 arg1) { - return new internal::FunctionClosure1<Arg1>(function, true, arg1); -} - -// See Closure. -template <typename Arg1> -inline Closure* NewPermanentCallback(void (*function)(Arg1), - Arg1 arg1) { - return new internal::FunctionClosure1<Arg1>(function, false, arg1); -} - -// See Closure. -template <typename Class, typename Arg1> -inline Closure* NewCallback(Class* object, void (Class::*method)(Arg1), - Arg1 arg1) { - return new internal::MethodClosure1<Class, Arg1>(object, method, true, arg1); -} - -// See Closure. -template <typename Class, typename Arg1> -inline Closure* NewPermanentCallback(Class* object, void (Class::*method)(Arg1), - Arg1 arg1) { - return new internal::MethodClosure1<Class, Arg1>(object, method, false, arg1); -} - -// See Closure. -template <typename Arg1, typename Arg2> -inline Closure* NewCallback(void (*function)(Arg1, Arg2), - Arg1 arg1, Arg2 arg2) { - return new internal::FunctionClosure2<Arg1, Arg2>( - function, true, arg1, arg2); -} - -// See Closure. -template <typename Arg1, typename Arg2> -inline Closure* NewPermanentCallback(void (*function)(Arg1, Arg2), - Arg1 arg1, Arg2 arg2) { - return new internal::FunctionClosure2<Arg1, Arg2>( - function, false, arg1, arg2); -} - -// See Closure. -template <typename Class, typename Arg1, typename Arg2> -inline Closure* NewCallback(Class* object, void (Class::*method)(Arg1, Arg2), - Arg1 arg1, Arg2 arg2) { - return new internal::MethodClosure2<Class, Arg1, Arg2>( - object, method, true, arg1, arg2); -} - -// See Closure. -template <typename Class, typename Arg1, typename Arg2> -inline Closure* NewPermanentCallback( - Class* object, void (Class::*method)(Arg1, Arg2), - Arg1 arg1, Arg2 arg2) { - return new internal::MethodClosure2<Class, Arg1, Arg2>( - object, method, false, arg1, arg2); -} - -// See ResultCallback -template<typename R> -inline ResultCallback<R>* NewCallback(R (*function)()) { - return new internal::FunctionResultCallback_0_0<R>(function, true); -} - -// See ResultCallback -template<typename R> -inline ResultCallback<R>* NewPermanentCallback(R (*function)()) { - return new internal::FunctionResultCallback_0_0<R>(function, false); -} - -// See ResultCallback -template<typename R, typename P1> -inline ResultCallback<R>* NewCallback(R (*function)(P1), P1 p1) { - return new internal::FunctionResultCallback_1_0<R, P1>( - function, true, p1); -} - -// See ResultCallback -template<typename R, typename P1> -inline ResultCallback<R>* NewPermanentCallback( - R (*function)(P1), P1 p1) { - return new internal::FunctionResultCallback_1_0<R, P1>( - function, false, p1); -} - -// See ResultCallback1 -template<typename R, typename A1> -inline ResultCallback1<R, A1>* NewCallback(R (*function)(A1)) { - return new internal::FunctionResultCallback_0_1<R, A1>(function, true); -} - -// See ResultCallback1 -template<typename R, typename A1> -inline ResultCallback1<R, A1>* NewPermanentCallback(R (*function)(A1)) { - return new internal::FunctionResultCallback_0_1<R, A1>(function, false); -} - -// See ResultCallback1 -template<typename R, typename P1, typename A1> -inline ResultCallback1<R, A1>* NewCallback(R (*function)(P1, A1), P1 p1) { - return new internal::FunctionResultCallback_1_1<R, P1, A1>( - function, true, p1); -} - -// See ResultCallback1 -template<typename R, typename P1, typename A1> -inline ResultCallback1<R, A1>* NewPermanentCallback( - R (*function)(P1, A1), P1 p1) { - return new internal::FunctionResultCallback_1_1<R, P1, A1>( - function, false, p1); -} - -// See MethodResultCallback_0_0 -template <typename R, typename T1, typename T2> -inline ResultCallback<R>* NewPermanentCallback( - T1* object, R (T2::*function)()) { - return new internal::MethodResultCallback_0_0<R, T1>(object, function, false); -} - -// See MethodResultCallback_6_2 -template <typename R, typename T, typename P1, typename P2, typename P3, - typename P4, typename P5, typename P6, typename A1, typename A2> -inline ResultCallback2<R, A1, A2>* NewPermanentCallback( - T* object, R (T::*function)(P1, P2, P3, P4, P5, P6, A1, A2), - typename internal::InternalConstRef<P1>::type p1, - typename internal::InternalConstRef<P2>::type p2, - typename internal::InternalConstRef<P3>::type p3, - typename internal::InternalConstRef<P4>::type p4, - typename internal::InternalConstRef<P5>::type p5, - typename internal::InternalConstRef<P6>::type p6) { - return new internal::MethodResultCallback_6_2<R, T, P1, P2, P3, P4, P5, P6, - A1, A2>(object, function, false, - p1, p2, p3, p4, p5, p6); -} - -// A function which does nothing. Useful for creating no-op callbacks, e.g.: -// Closure* nothing = NewCallback(&DoNothing); -void PROTOBUF_EXPORT DoNothing(); - -} // namespace protobuf -} // namespace google - -#include <google/protobuf/port_undef.inc> - -#endif // GOOGLE_PROTOBUF_STUBS_CALLBACK_H_ diff --git a/include/google/protobuf/stubs/casts.h b/include/google/protobuf/stubs/casts.h deleted file mode 100644 index ad29dac1f8..0000000000 --- a/include/google/protobuf/stubs/casts.h +++ /dev/null @@ -1,138 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2014 Google Inc. All rights reserved. -// 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 -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -#ifndef GOOGLE_PROTOBUF_CASTS_H__ -#define GOOGLE_PROTOBUF_CASTS_H__ - -#include <google/protobuf/stubs/common.h> - -#include <google/protobuf/port_def.inc> -#include <type_traits> - -namespace google { -namespace protobuf { -namespace internal { - -// Use implicit_cast as a safe version of static_cast or const_cast -// for upcasting in the type hierarchy (i.e. casting a pointer to Foo -// to a pointer to SuperclassOfFoo or casting a pointer to Foo to -// a const pointer to Foo). -// When you use implicit_cast, the compiler checks that the cast is safe. -// Such explicit implicit_casts are necessary in surprisingly many -// situations where C++ demands an exact type match instead of an -// argument type convertible to a target type. -// -// The From type can be inferred, so the preferred syntax for using -// implicit_cast is the same as for static_cast etc.: -// -// implicit_cast<ToType>(expr) -// -// implicit_cast would have been part of the C++ standard library, -// but the proposal was submitted too late. It will probably make -// its way into the language in the future. -template<typename To, typename From> -inline To implicit_cast(From const &f) { - return f; -} - -// When you upcast (that is, cast a pointer from type Foo to type -// SuperclassOfFoo), it's fine to use implicit_cast<>, since upcasts -// always succeed. When you downcast (that is, cast a pointer from -// type Foo to type SubclassOfFoo), static_cast<> isn't safe, because -// how do you know the pointer is really of type SubclassOfFoo? It -// could be a bare Foo, or of type DifferentSubclassOfFoo. Thus, -// when you downcast, you should use this macro. In debug mode, we -// use dynamic_cast<> to double-check the downcast is legal (we die -// if it's not). In normal mode, we do the efficient static_cast<> -// instead. Thus, it's important to test in debug mode to make sure -// the cast is legal! -// This is the only place in the code we should use dynamic_cast<>. -// In particular, you SHOULDN'T be using dynamic_cast<> in order to -// do RTTI (eg code like this: -// if (dynamic_cast<Subclass1>(foo)) HandleASubclass1Object(foo); -// if (dynamic_cast<Subclass2>(foo)) HandleASubclass2Object(foo); -// You should design the code some other way not to need this. - -template<typename To, typename From> // use like this: down_cast<T*>(foo); -inline To down_cast(From* f) { // so we only accept pointers - // Ensures that To is a sub-type of From *. This test is here only - // for compile-time type checking, and has no overhead in an - // optimized build at run-time, as it will be optimized away - // completely. - if (false) { - implicit_cast<From*, To>(0); - } - -#if !defined(NDEBUG) && PROTOBUF_RTTI - assert(f == nullptr || dynamic_cast<To>(f) != nullptr); // RTTI: debug mode only! -#endif - return static_cast<To>(f); -} - -template<typename To, typename From> // use like this: down_cast<T&>(foo); -inline To down_cast(From& f) { - typedef typename std::remove_reference<To>::type* ToAsPointer; - // Ensures that To is a sub-type of From *. This test is here only - // for compile-time type checking, and has no overhead in an - // optimized build at run-time, as it will be optimized away - // completely. - if (false) { - implicit_cast<From*, ToAsPointer>(0); - } - -#if !defined(NDEBUG) && PROTOBUF_RTTI - // RTTI: debug mode only! - assert(dynamic_cast<ToAsPointer>(&f) != nullptr); -#endif - return *static_cast<ToAsPointer>(&f); -} - -template<typename To, typename From> -inline To bit_cast(const From& from) { - static_assert(sizeof(From) == sizeof(To), "bit_cast_with_different_sizes"); - To dest; - memcpy(&dest, &from, sizeof(dest)); - return dest; -} - -} // namespace internal - -// We made these internal so that they would show up as such in the docs, -// but we don't want to stick "internal::" in front of them everywhere. -using internal::implicit_cast; -using internal::down_cast; -using internal::bit_cast; - -} // namespace protobuf -} // namespace google - -#include <google/protobuf/port_undef.inc> - -#endif // GOOGLE_PROTOBUF_CASTS_H__ diff --git a/include/google/protobuf/stubs/common.h b/include/google/protobuf/stubs/common.h deleted file mode 100644 index c4d26369a3..0000000000 --- a/include/google/protobuf/stubs/common.h +++ /dev/null @@ -1,197 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// 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 -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -// Author: kenton@google.com (Kenton Varda) and others -// -// Contains basic types and utilities used by the rest of the library. - -#ifndef GOOGLE_PROTOBUF_COMMON_H__ -#define GOOGLE_PROTOBUF_COMMON_H__ - -#include <algorithm> -#include <iostream> -#include <map> -#include <memory> -#include <set> -#include <string> -#include <vector> - -#include <google/protobuf/stubs/macros.h> -#include <google/protobuf/stubs/platform_macros.h> -#include <google/protobuf/stubs/port.h> -#include <google/protobuf/stubs/stringpiece.h> - -#ifndef PROTOBUF_USE_EXCEPTIONS -#if defined(_MSC_VER) && defined(_CPPUNWIND) - #define PROTOBUF_USE_EXCEPTIONS 1 -#elif defined(__EXCEPTIONS) - #define PROTOBUF_USE_EXCEPTIONS 1 -#else - #define PROTOBUF_USE_EXCEPTIONS 0 -#endif -#endif - -#if PROTOBUF_USE_EXCEPTIONS -#include <exception> -#endif -#if defined(__APPLE__) -#include <TargetConditionals.h> // for TARGET_OS_IPHONE -#endif - -#if defined(__ANDROID__) || defined(GOOGLE_PROTOBUF_OS_ANDROID) || (defined(TARGET_OS_IPHONE) && TARGET_OS_IPHONE) || defined(GOOGLE_PROTOBUF_OS_IPHONE) -#include <pthread.h> -#endif - -#include <google/protobuf/port_def.inc> - -namespace std {} - -namespace google { -namespace protobuf { -namespace internal { - -// Some of these constants are macros rather than const ints so that they can -// be used in #if directives. - -// The current version, represented as a single integer to make comparison -// easier: major * 10^6 + minor * 10^3 + micro -#define GOOGLE_PROTOBUF_VERSION 3021004 - -// A suffix string for alpha, beta or rc releases. Empty for stable releases. -#define GOOGLE_PROTOBUF_VERSION_SUFFIX "" - -// The minimum header version which works with the current version of -// the library. This constant should only be used by protoc's C++ code -// generator. -static const int kMinHeaderVersionForLibrary = 3021000; - -// The minimum protoc version which works with the current version of the -// headers. -#define GOOGLE_PROTOBUF_MIN_PROTOC_VERSION 3021000 - -// The minimum header version which works with the current version of -// protoc. This constant should only be used in VerifyVersion(). -static const int kMinHeaderVersionForProtoc = 3021000; - -// Verifies that the headers and libraries are compatible. Use the macro -// below to call this. -void PROTOBUF_EXPORT VerifyVersion(int headerVersion, int minLibraryVersion, - const char* filename); - -// Converts a numeric version number to a string. -std::string PROTOBUF_EXPORT VersionString(int version); - -} // namespace internal - -// Place this macro in your main() function (or somewhere before you attempt -// to use the protobuf library) to verify that the version you link against -// matches the headers you compiled against. If a version mismatch is -// detected, the process will abort. -#define GOOGLE_PROTOBUF_VERIFY_VERSION \ - ::google::protobuf::internal::VerifyVersion( \ - GOOGLE_PROTOBUF_VERSION, GOOGLE_PROTOBUF_MIN_LIBRARY_VERSION, \ - __FILE__) - - -// =================================================================== -// from google3/util/utf8/public/unilib.h - -namespace internal { - -// Checks if the buffer contains structurally-valid UTF-8. Implemented in -// structurally_valid.cc. -PROTOBUF_EXPORT bool IsStructurallyValidUTF8(const char* buf, int len); - -inline bool IsStructurallyValidUTF8(StringPiece str) { - return IsStructurallyValidUTF8(str.data(), static_cast<int>(str.length())); -} - -// Returns initial number of bytes of structurally valid UTF-8. -PROTOBUF_EXPORT int UTF8SpnStructurallyValid(StringPiece str); - -// Coerce UTF-8 byte string in src_str to be -// a structurally-valid equal-length string by selectively -// overwriting illegal bytes with replace_char (typically ' ' or '?'). -// replace_char must be legal printable 7-bit Ascii 0x20..0x7e. -// src_str is read-only. -// -// Returns pointer to output buffer, src_str.data() if no changes were made, -// or idst if some bytes were changed. idst is allocated by the caller -// and must be at least as big as src_str -// -// Optimized for: all structurally valid and no byte copying is done. -// -PROTOBUF_EXPORT char* UTF8CoerceToStructurallyValid(StringPiece str, char* dst, - char replace_char); - -} // namespace internal - -// This lives in message_lite.h now, but we leave this here for any users that -// #include common.h and not message_lite.h. -PROTOBUF_EXPORT void ShutdownProtobufLibrary(); - -namespace internal { - -// Strongly references the given variable such that the linker will be forced -// to pull in this variable's translation unit. -template <typename T> -void StrongReference(const T& var) { - auto volatile unused = &var; - (void)&unused; // Use address to avoid an extra load of "unused". -} - -} // namespace internal - -#if PROTOBUF_USE_EXCEPTIONS -class FatalException : public std::exception { - public: - FatalException(const char* filename, int line, const std::string& message) - : filename_(filename), line_(line), message_(message) {} - virtual ~FatalException() throw(); - - const char* what() const throw() override; - - const char* filename() const { return filename_; } - int line() const { return line_; } - const std::string& message() const { return message_; } - - private: - const char* filename_; - const int line_; - const std::string message_; -}; -#endif - -} // namespace protobuf -} // namespace google - -#include <google/protobuf/port_undef.inc> - -#endif // GOOGLE_PROTOBUF_COMMON_H__ diff --git a/include/google/protobuf/stubs/hash.h b/include/google/protobuf/stubs/hash.h deleted file mode 100644 index a7ec068074..0000000000 --- a/include/google/protobuf/stubs/hash.h +++ /dev/null @@ -1,114 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// 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 -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -// Author: kenton@google.com (Kenton Varda) - -#ifndef GOOGLE_PROTOBUF_STUBS_HASH_H__ -#define GOOGLE_PROTOBUF_STUBS_HASH_H__ - -#include <cstring> -#include <string> -#include <unordered_map> -#include <unordered_set> - -# define GOOGLE_PROTOBUF_HASH_NAMESPACE_DECLARATION_START \ - namespace google { \ - namespace protobuf { -# define GOOGLE_PROTOBUF_HASH_NAMESPACE_DECLARATION_END }} - -namespace google { -namespace protobuf { - -template <typename Key> -struct hash : public std::hash<Key> {}; - -template <typename Key> -struct hash<const Key*> { - inline size_t operator()(const Key* key) const { - return reinterpret_cast<size_t>(key); - } -}; - -// Unlike the old SGI version, the TR1 "hash" does not special-case char*. So, -// we go ahead and provide our own implementation. -template <> -struct hash<const char*> { - inline size_t operator()(const char* str) const { - size_t result = 0; - for (; *str != '\0'; str++) { - result = 5 * result + static_cast<size_t>(*str); - } - return result; - } -}; - -template<> -struct hash<bool> { - size_t operator()(bool x) const { - return static_cast<size_t>(x); - } -}; - -template <> -struct hash<std::string> { - inline size_t operator()(const std::string& key) const { - return hash<const char*>()(key.c_str()); - } - - static const size_t bucket_size = 4; - static const size_t min_buckets = 8; - inline bool operator()(const std::string& a, const std::string& b) const { - return a < b; - } -}; - -template <typename First, typename Second> -struct hash<std::pair<First, Second> > { - inline size_t operator()(const std::pair<First, Second>& key) const { - size_t first_hash = hash<First>()(key.first); - size_t second_hash = hash<Second>()(key.second); - - // FIXME(kenton): What is the best way to compute this hash? I have - // no idea! This seems a bit better than an XOR. - return first_hash * ((1 << 16) - 1) + second_hash; - } - - static const size_t bucket_size = 4; - static const size_t min_buckets = 8; - inline bool operator()(const std::pair<First, Second>& a, - const std::pair<First, Second>& b) const { - return a < b; - } -}; - -} // namespace protobuf -} // namespace google - -#endif // GOOGLE_PROTOBUF_STUBS_HASH_H__ diff --git a/include/google/protobuf/stubs/logging.h b/include/google/protobuf/stubs/logging.h deleted file mode 100644 index 8ecc2fa0f1..0000000000 --- a/include/google/protobuf/stubs/logging.h +++ /dev/null @@ -1,239 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// 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 -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -#ifndef GOOGLE_PROTOBUF_STUBS_LOGGING_H_ -#define GOOGLE_PROTOBUF_STUBS_LOGGING_H_ - -#include <google/protobuf/stubs/macros.h> -#include <google/protobuf/stubs/port.h> -#include <google/protobuf/stubs/status.h> -#include <google/protobuf/stubs/stringpiece.h> - -#include <google/protobuf/port_def.inc> - -// =================================================================== -// emulates google3/base/logging.h - -namespace google { -namespace protobuf { - -enum LogLevel { - LOGLEVEL_INFO, // Informational. This is never actually used by - // libprotobuf. - LOGLEVEL_WARNING, // Warns about issues that, although not technically a - // problem now, could cause problems in the future. For - // example, a // warning will be printed when parsing a - // message that is near the message size limit. - LOGLEVEL_ERROR, // An error occurred which should never happen during - // normal use. - LOGLEVEL_FATAL, // An error occurred from which the library cannot - // recover. This usually indicates a programming error - // in the code which calls the library, especially when - // compiled in debug mode. - -#ifdef NDEBUG - LOGLEVEL_DFATAL = LOGLEVEL_ERROR -#else - LOGLEVEL_DFATAL = LOGLEVEL_FATAL -#endif -}; - -class uint128; -namespace internal { - -class LogFinisher; - -class PROTOBUF_EXPORT LogMessage { - public: - LogMessage(LogLevel level, const char* filename, int line); - ~LogMessage(); - - LogMessage& operator<<(const std::string& value); - LogMessage& operator<<(const char* value); - LogMessage& operator<<(char value); - LogMessage& operator<<(int value); - LogMessage& operator<<(uint value); - LogMessage& operator<<(long value); - LogMessage& operator<<(unsigned long value); - LogMessage& operator<<(long long value); - LogMessage& operator<<(unsigned long long value); - LogMessage& operator<<(double value); - LogMessage& operator<<(void* value); - LogMessage& operator<<(const StringPiece& value); - LogMessage& operator<<(const util::Status& status); - LogMessage& operator<<(const uint128& value); - - private: - friend class LogFinisher; - void Finish(); - - LogLevel level_; - const char* filename_; - int line_; - std::string message_; -}; - -// Used to make the entire "LOG(BLAH) << etc." expression have a void return -// type and print a newline after each message. -class PROTOBUF_EXPORT LogFinisher { - public: - void operator=(LogMessage& other); -}; - -template<typename T> -bool IsOk(T status) { return status.ok(); } -template<> -inline bool IsOk(bool status) { return status; } - -} // namespace internal - -// Undef everything in case we're being mixed with some other Google library -// which already defined them itself. Presumably all Google libraries will -// support the same syntax for these so it should not be a big deal if they -// end up using our definitions instead. -#undef GOOGLE_LOG -#undef GOOGLE_LOG_IF - -#undef GOOGLE_CHECK -#undef GOOGLE_CHECK_OK -#undef GOOGLE_CHECK_EQ -#undef GOOGLE_CHECK_NE -#undef GOOGLE_CHECK_LT -#undef GOOGLE_CHECK_LE -#undef GOOGLE_CHECK_GT -#undef GOOGLE_CHECK_GE -#undef GOOGLE_CHECK_NOTNULL - -#undef GOOGLE_DLOG -#undef GOOGLE_DCHECK -#undef GOOGLE_DCHECK_OK -#undef GOOGLE_DCHECK_EQ -#undef GOOGLE_DCHECK_NE -#undef GOOGLE_DCHECK_LT -#undef GOOGLE_DCHECK_LE -#undef GOOGLE_DCHECK_GT -#undef GOOGLE_DCHECK_GE - -#define GOOGLE_LOG(LEVEL) \ - ::google::protobuf::internal::LogFinisher() = \ - ::google::protobuf::internal::LogMessage( \ - ::google::protobuf::LOGLEVEL_##LEVEL, __FILE__, __LINE__) -#define GOOGLE_LOG_IF(LEVEL, CONDITION) \ - !(CONDITION) ? (void)0 : GOOGLE_LOG(LEVEL) - -#define GOOGLE_CHECK(EXPRESSION) \ - GOOGLE_LOG_IF(FATAL, !(EXPRESSION)) << "CHECK failed: " #EXPRESSION ": " -#define GOOGLE_CHECK_OK(A) GOOGLE_CHECK(::google::protobuf::internal::IsOk(A)) -#define GOOGLE_CHECK_EQ(A, B) GOOGLE_CHECK((A) == (B)) -#define GOOGLE_CHECK_NE(A, B) GOOGLE_CHECK((A) != (B)) -#define GOOGLE_CHECK_LT(A, B) GOOGLE_CHECK((A) < (B)) -#define GOOGLE_CHECK_LE(A, B) GOOGLE_CHECK((A) <= (B)) -#define GOOGLE_CHECK_GT(A, B) GOOGLE_CHECK((A) > (B)) -#define GOOGLE_CHECK_GE(A, B) GOOGLE_CHECK((A) >= (B)) - -namespace internal { -template<typename T> -T* CheckNotNull(const char* /* file */, int /* line */, - const char* name, T* val) { - if (val == nullptr) { - GOOGLE_LOG(FATAL) << name; - } - return val; -} -} // namespace internal -#define GOOGLE_CHECK_NOTNULL(A) \ - ::google::protobuf::internal::CheckNotNull( \ - __FILE__, __LINE__, "'" #A "' must not be nullptr", (A)) - -#ifdef NDEBUG - -#define GOOGLE_DLOG(LEVEL) GOOGLE_LOG_IF(LEVEL, false) - -#define GOOGLE_DCHECK(EXPRESSION) while(false) GOOGLE_CHECK(EXPRESSION) -#define GOOGLE_DCHECK_OK(E) GOOGLE_DCHECK(::google::protobuf::internal::IsOk(E)) -#define GOOGLE_DCHECK_EQ(A, B) GOOGLE_DCHECK((A) == (B)) -#define GOOGLE_DCHECK_NE(A, B) GOOGLE_DCHECK((A) != (B)) -#define GOOGLE_DCHECK_LT(A, B) GOOGLE_DCHECK((A) < (B)) -#define GOOGLE_DCHECK_LE(A, B) GOOGLE_DCHECK((A) <= (B)) -#define GOOGLE_DCHECK_GT(A, B) GOOGLE_DCHECK((A) > (B)) -#define GOOGLE_DCHECK_GE(A, B) GOOGLE_DCHECK((A) >= (B)) - -#else // NDEBUG - -#define GOOGLE_DLOG GOOGLE_LOG - -#define GOOGLE_DCHECK GOOGLE_CHECK -#define GOOGLE_DCHECK_OK GOOGLE_CHECK_OK -#define GOOGLE_DCHECK_EQ GOOGLE_CHECK_EQ -#define GOOGLE_DCHECK_NE GOOGLE_CHECK_NE -#define GOOGLE_DCHECK_LT GOOGLE_CHECK_LT -#define GOOGLE_DCHECK_LE GOOGLE_CHECK_LE -#define GOOGLE_DCHECK_GT GOOGLE_CHECK_GT -#define GOOGLE_DCHECK_GE GOOGLE_CHECK_GE - -#endif // !NDEBUG - -typedef void LogHandler(LogLevel level, const char* filename, int line, - const std::string& message); - -// The protobuf library sometimes writes warning and error messages to -// stderr. These messages are primarily useful for developers, but may -// also help end users figure out a problem. If you would prefer that -// these messages be sent somewhere other than stderr, call SetLogHandler() -// to set your own handler. This returns the old handler. Set the handler -// to nullptr to ignore log messages (but see also LogSilencer, below). -// -// Obviously, SetLogHandler is not thread-safe. You should only call it -// at initialization time, and probably not from library code. If you -// simply want to suppress log messages temporarily (e.g. because you -// have some code that tends to trigger them frequently and you know -// the warnings are not important to you), use the LogSilencer class -// below. -PROTOBUF_EXPORT LogHandler* SetLogHandler(LogHandler* new_func); - -// Create a LogSilencer if you want to temporarily suppress all log -// messages. As long as any LogSilencer objects exist, non-fatal -// log messages will be discarded (the current LogHandler will *not* -// be called). Constructing a LogSilencer is thread-safe. You may -// accidentally suppress log messages occurring in another thread, but -// since messages are generally for debugging purposes only, this isn't -// a big deal. If you want to intercept log messages, use SetLogHandler(). -class PROTOBUF_EXPORT LogSilencer { - public: - LogSilencer(); - ~LogSilencer(); -}; - -} // namespace protobuf -} // namespace google - -#include <google/protobuf/port_undef.inc> - -#endif // GOOGLE_PROTOBUF_STUBS_LOGGING_H_ diff --git a/include/google/protobuf/stubs/macros.h b/include/google/protobuf/stubs/macros.h deleted file mode 100644 index ae9a8b987f..0000000000 --- a/include/google/protobuf/stubs/macros.h +++ /dev/null @@ -1,93 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// 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 -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -#ifndef GOOGLE_PROTOBUF_MACROS_H__ -#define GOOGLE_PROTOBUF_MACROS_H__ - -namespace google { -namespace protobuf { - -#undef GOOGLE_DISALLOW_EVIL_CONSTRUCTORS -#define GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(TypeName) \ - TypeName(const TypeName&) = delete; \ - void operator=(const TypeName&) = delete - -#undef GOOGLE_DISALLOW_IMPLICIT_CONSTRUCTORS -#define GOOGLE_DISALLOW_IMPLICIT_CONSTRUCTORS(TypeName) \ - TypeName() = delete; \ - TypeName(const TypeName&) = delete; \ - void operator=(const TypeName&) = delete - -// =================================================================== -// from google3/base/basictypes.h - -// The GOOGLE_ARRAYSIZE(arr) macro returns the # of elements in an array arr. -// The expression is a compile-time constant, and therefore can be -// used in defining new arrays, for example. -// -// GOOGLE_ARRAYSIZE catches a few type errors. If you see a compiler error -// -// "warning: division by zero in ..." -// -// when using GOOGLE_ARRAYSIZE, you are (wrongfully) giving it a pointer. -// You should only use GOOGLE_ARRAYSIZE on statically allocated arrays. -// -// The following comments are on the implementation details, and can -// be ignored by the users. -// -// ARRAYSIZE(arr) works by inspecting sizeof(arr) (the # of bytes in -// the array) and sizeof(*(arr)) (the # of bytes in one array -// element). If the former is divisible by the latter, perhaps arr is -// indeed an array, in which case the division result is the # of -// elements in the array. Otherwise, arr cannot possibly be an array, -// and we generate a compiler error to prevent the code from -// compiling. -// -// Since the size of bool is implementation-defined, we need to cast -// !(sizeof(a) & sizeof(*(a))) to size_t in order to ensure the final -// result has type size_t. -// -// This macro is not perfect as it wrongfully accepts certain -// pointers, namely where the pointer size is divisible by the pointee -// size. Since all our code has to go through a 32-bit compiler, -// where a pointer is 4 bytes, this means all pointers to a type whose -// size is 3 or greater than 4 will be (righteously) rejected. -// -// Kudos to Jorg Brown for this simple and elegant implementation. - -#undef GOOGLE_ARRAYSIZE -#define GOOGLE_ARRAYSIZE(a) \ - ((sizeof(a) / sizeof(*(a))) / \ - static_cast<size_t>(!(sizeof(a) % sizeof(*(a))))) - -} // namespace protobuf -} // namespace google - -#endif // GOOGLE_PROTOBUF_MACROS_H__ diff --git a/include/google/protobuf/stubs/map_util.h b/include/google/protobuf/stubs/map_util.h deleted file mode 100644 index 24e098ad1b..0000000000 --- a/include/google/protobuf/stubs/map_util.h +++ /dev/null @@ -1,769 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2014 Google Inc. All rights reserved. -// 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 -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -// from google3/util/gtl/map_util.h -// Author: Anton Carver - -#ifndef GOOGLE_PROTOBUF_STUBS_MAP_UTIL_H__ -#define GOOGLE_PROTOBUF_STUBS_MAP_UTIL_H__ - -#include <stddef.h> -#include <iterator> -#include <string> -#include <utility> -#include <vector> - -#include <google/protobuf/stubs/common.h> - -namespace google { -namespace protobuf { -namespace internal { -// Local implementation of RemoveConst to avoid including base/type_traits.h. -template <class T> struct RemoveConst { typedef T type; }; -template <class T> struct RemoveConst<const T> : RemoveConst<T> {}; -} // namespace internal - -// -// Find*() -// - -// Returns a const reference to the value associated with the given key if it -// exists. Crashes otherwise. -// -// This is intended as a replacement for operator[] as an rvalue (for reading) -// when the key is guaranteed to exist. -// -// operator[] for lookup is discouraged for several reasons: -// * It has a side-effect of inserting missing keys -// * It is not thread-safe (even when it is not inserting, it can still -// choose to resize the underlying storage) -// * It invalidates iterators (when it chooses to resize) -// * It default constructs a value object even if it doesn't need to -// -// This version assumes the key is printable, and includes it in the fatal log -// message. -template <class Collection> -const typename Collection::value_type::second_type& -FindOrDie(const Collection& collection, - const typename Collection::value_type::first_type& key) { - typename Collection::const_iterator it = collection.find(key); - GOOGLE_CHECK(it != collection.end()) << "Map key not found: " << key; - return it->second; -} - -// Same as above, but returns a non-const reference. -template <class Collection> -typename Collection::value_type::second_type& -FindOrDie(Collection& collection, // NOLINT - const typename Collection::value_type::first_type& key) { - typename Collection::iterator it = collection.find(key); - GOOGLE_CHECK(it != collection.end()) << "Map key not found: " << key; - return it->second; -} - -// Same as FindOrDie above, but doesn't log the key on failure. -template <class Collection> -const typename Collection::value_type::second_type& -FindOrDieNoPrint(const Collection& collection, - const typename Collection::value_type::first_type& key) { - typename Collection::const_iterator it = collection.find(key); - GOOGLE_CHECK(it != collection.end()) << "Map key not found"; - return it->second; -} - -// Same as above, but returns a non-const reference. -template <class Collection> -typename Collection::value_type::second_type& -FindOrDieNoPrint(Collection& collection, // NOLINT - const typename Collection::value_type::first_type& key) { - typename Collection::iterator it = collection.find(key); - GOOGLE_CHECK(it != collection.end()) << "Map key not found"; - return it->second; -} - -// Returns a const reference to the value associated with the given key if it -// exists, otherwise returns a const reference to the provided default value. -// -// WARNING: If a temporary object is passed as the default "value," -// this function will return a reference to that temporary object, -// which will be destroyed at the end of the statement. A common -// example: if you have a map with string values, and you pass a char* -// as the default "value," either use the returned value immediately -// or store it in a string (not string&). -// Details: http://go/findwithdefault -template <class Collection> -const typename Collection::value_type::second_type& -FindWithDefault(const Collection& collection, - const typename Collection::value_type::first_type& key, - const typename Collection::value_type::second_type& value) { - typename Collection::const_iterator it = collection.find(key); - if (it == collection.end()) { - return value; - } - return it->second; -} - -// Returns a pointer to the const value associated with the given key if it -// exists, or nullptr otherwise. -template <class Collection> -const typename Collection::value_type::second_type* -FindOrNull(const Collection& collection, - const typename Collection::value_type::first_type& key) { - typename Collection::const_iterator it = collection.find(key); - if (it == collection.end()) { - return 0; - } - return &it->second; -} - -// Same as above but returns a pointer to the non-const value. -template <class Collection> -typename Collection::value_type::second_type* -FindOrNull(Collection& collection, // NOLINT - const typename Collection::value_type::first_type& key) { - typename Collection::iterator it = collection.find(key); - if (it == collection.end()) { - return 0; - } - return &it->second; -} - -// Returns the pointer value associated with the given key. If none is found, -// nullptr is returned. The function is designed to be used with a map of keys to -// pointers. -// -// This function does not distinguish between a missing key and a key mapped -// to nullptr. -template <class Collection> -typename Collection::value_type::second_type -FindPtrOrNull(const Collection& collection, - const typename Collection::value_type::first_type& key) { - typename Collection::const_iterator it = collection.find(key); - if (it == collection.end()) { - return typename Collection::value_type::second_type(); - } - return it->second; -} - -// Same as above, except takes non-const reference to collection. -// -// This function is needed for containers that propagate constness to the -// pointee, such as boost::ptr_map. -template <class Collection> -typename Collection::value_type::second_type -FindPtrOrNull(Collection& collection, // NOLINT - const typename Collection::value_type::first_type& key) { - typename Collection::iterator it = collection.find(key); - if (it == collection.end()) { - return typename Collection::value_type::second_type(); - } - return it->second; -} - -// Finds the pointer value associated with the given key in a map whose values -// are linked_ptrs. Returns nullptr if key is not found. -template <class Collection> -typename Collection::value_type::second_type::element_type* -FindLinkedPtrOrNull(const Collection& collection, - const typename Collection::value_type::first_type& key) { - typename Collection::const_iterator it = collection.find(key); - if (it == collection.end()) { - return 0; - } - // Since linked_ptr::get() is a const member returning a non const, - // we do not need a version of this function taking a non const collection. - return it->second.get(); -} - -// Same as above, but dies if the key is not found. -template <class Collection> -typename Collection::value_type::second_type::element_type& -FindLinkedPtrOrDie(const Collection& collection, - const typename Collection::value_type::first_type& key) { - typename Collection::const_iterator it = collection.find(key); - GOOGLE_CHECK(it != collection.end()) << "key not found: " << key; - // Since linked_ptr::operator*() is a const member returning a non const, - // we do not need a version of this function taking a non const collection. - return *it->second; -} - -// Finds the value associated with the given key and copies it to *value (if not -// nullptr). Returns false if the key was not found, true otherwise. -template <class Collection, class Key, class Value> -bool FindCopy(const Collection& collection, - const Key& key, - Value* const value) { - typename Collection::const_iterator it = collection.find(key); - if (it == collection.end()) { - return false; - } - if (value) { - *value = it->second; - } - return true; -} - -// -// Contains*() -// - -// Returns true if and only if the given collection contains the given key. -template <class Collection, class Key> -bool ContainsKey(const Collection& collection, const Key& key) { - return collection.find(key) != collection.end(); -} - -// Returns true if and only if the given collection contains the given key-value -// pair. -template <class Collection, class Key, class Value> -bool ContainsKeyValuePair(const Collection& collection, - const Key& key, - const Value& value) { - typedef typename Collection::const_iterator const_iterator; - std::pair<const_iterator, const_iterator> range = collection.equal_range(key); - for (const_iterator it = range.first; it != range.second; ++it) { - if (it->second == value) { - return true; - } - } - return false; -} - -// -// Insert*() -// - -// Inserts the given key-value pair into the collection. Returns true if and -// only if the key from the given pair didn't previously exist. Otherwise, the -// value in the map is replaced with the value from the given pair. -template <class Collection> -bool InsertOrUpdate(Collection* const collection, - const typename Collection::value_type& vt) { - std::pair<typename Collection::iterator, bool> ret = collection->insert(vt); - if (!ret.second) { - // update - ret.first->second = vt.second; - return false; - } - return true; -} - -// Same as above, except that the key and value are passed separately. -template <class Collection> -bool InsertOrUpdate(Collection* const collection, - const typename Collection::value_type::first_type& key, - const typename Collection::value_type::second_type& value) { - return InsertOrUpdate( - collection, typename Collection::value_type(key, value)); -} - -// Inserts/updates all the key-value pairs from the range defined by the -// iterators "first" and "last" into the given collection. -template <class Collection, class InputIterator> -void InsertOrUpdateMany(Collection* const collection, - InputIterator first, InputIterator last) { - for (; first != last; ++first) { - InsertOrUpdate(collection, *first); - } -} - -// Change the value associated with a particular key in a map or hash_map -// of the form map<Key, Value*> which owns the objects pointed to by the -// value pointers. If there was an existing value for the key, it is deleted. -// True indicates an insert took place, false indicates an update + delete. -template <class Collection> -bool InsertAndDeleteExisting( - Collection* const collection, - const typename Collection::value_type::first_type& key, - const typename Collection::value_type::second_type& value) { - std::pair<typename Collection::iterator, bool> ret = - collection->insert(typename Collection::value_type(key, value)); - if (!ret.second) { - delete ret.first->second; - ret.first->second = value; - return false; - } - return true; -} - -// Inserts the given key and value into the given collection if and only if the -// given key did NOT already exist in the collection. If the key previously -// existed in the collection, the value is not changed. Returns true if the -// key-value pair was inserted; returns false if the key was already present. -template <class Collection> -bool InsertIfNotPresent(Collection* const collection, - const typename Collection::value_type& vt) { - return collection->insert(vt).second; -} - -// Same as above except the key and value are passed separately. -template <class Collection> -bool InsertIfNotPresent( - Collection* const collection, - const typename Collection::value_type::first_type& key, - const typename Collection::value_type::second_type& value) { - return InsertIfNotPresent( - collection, typename Collection::value_type(key, value)); -} - -// Same as above except dies if the key already exists in the collection. -template <class Collection> -void InsertOrDie(Collection* const collection, - const typename Collection::value_type& value) { - GOOGLE_CHECK(InsertIfNotPresent(collection, value)) - << "duplicate value: " << value; -} - -// Same as above except doesn't log the value on error. -template <class Collection> -void InsertOrDieNoPrint(Collection* const collection, - const typename Collection::value_type& value) { - GOOGLE_CHECK(InsertIfNotPresent(collection, value)) << "duplicate value."; -} - -// Inserts the key-value pair into the collection. Dies if key was already -// present. -template <class Collection> -void InsertOrDie(Collection* const collection, - const typename Collection::value_type::first_type& key, - const typename Collection::value_type::second_type& data) { - GOOGLE_CHECK(InsertIfNotPresent(collection, key, data)) - << "duplicate key: " << key; -} - -// Same as above except doesn't log the key on error. -template <class Collection> -void InsertOrDieNoPrint( - Collection* const collection, - const typename Collection::value_type::first_type& key, - const typename Collection::value_type::second_type& data) { - GOOGLE_CHECK(InsertIfNotPresent(collection, key, data)) << "duplicate key."; -} - -// Inserts a new key and default-initialized value. Dies if the key was already -// present. Returns a reference to the value. Example usage: -// -// map<int, SomeProto> m; -// SomeProto& proto = InsertKeyOrDie(&m, 3); -// proto.set_field("foo"); -template <class Collection> -typename Collection::value_type::second_type& InsertKeyOrDie( - Collection* const collection, - const typename Collection::value_type::first_type& key) { - typedef typename Collection::value_type value_type; - std::pair<typename Collection::iterator, bool> res = - collection->insert(value_type(key, typename value_type::second_type())); - GOOGLE_CHECK(res.second) << "duplicate key: " << key; - return res.first->second; -} - -// -// Lookup*() -// - -// Looks up a given key and value pair in a collection and inserts the key-value -// pair if it's not already present. Returns a reference to the value associated -// with the key. -template <class Collection> -typename Collection::value_type::second_type& -LookupOrInsert(Collection* const collection, - const typename Collection::value_type& vt) { - return collection->insert(vt).first->second; -} - -// Same as above except the key-value are passed separately. -template <class Collection> -typename Collection::value_type::second_type& -LookupOrInsert(Collection* const collection, - const typename Collection::value_type::first_type& key, - const typename Collection::value_type::second_type& value) { - return LookupOrInsert( - collection, typename Collection::value_type(key, value)); -} - -// Counts the number of equivalent elements in the given "sequence", and stores -// the results in "count_map" with element as the key and count as the value. -// -// Example: -// vector<string> v = {"a", "b", "c", "a", "b"}; -// map<string, int> m; -// AddTokenCounts(v, 1, &m); -// assert(m["a"] == 2); -// assert(m["b"] == 2); -// assert(m["c"] == 1); -template <typename Sequence, typename Collection> -void AddTokenCounts( - const Sequence& sequence, - const typename Collection::value_type::second_type& increment, - Collection* const count_map) { - for (typename Sequence::const_iterator it = sequence.begin(); - it != sequence.end(); ++it) { - typename Collection::value_type::second_type& value = - LookupOrInsert(count_map, *it, - typename Collection::value_type::second_type()); - value += increment; - } -} - -// Returns a reference to the value associated with key. If not found, a value -// is default constructed on the heap and added to the map. -// -// This function is useful for containers of the form map<Key, Value*>, where -// inserting a new key, value pair involves constructing a new heap-allocated -// Value, and storing a pointer to that in the collection. -template <class Collection> -typename Collection::value_type::second_type& -LookupOrInsertNew(Collection* const collection, - const typename Collection::value_type::first_type& key) { - typedef typename std::iterator_traits< - typename Collection::value_type::second_type>::value_type Element; - std::pair<typename Collection::iterator, bool> ret = - collection->insert(typename Collection::value_type( - key, - static_cast<typename Collection::value_type::second_type>(nullptr))); - if (ret.second) { - ret.first->second = new Element(); - } - return ret.first->second; -} - -// Same as above but constructs the value using the single-argument constructor -// and the given "arg". -template <class Collection, class Arg> -typename Collection::value_type::second_type& -LookupOrInsertNew(Collection* const collection, - const typename Collection::value_type::first_type& key, - const Arg& arg) { - typedef typename std::iterator_traits< - typename Collection::value_type::second_type>::value_type Element; - std::pair<typename Collection::iterator, bool> ret = - collection->insert(typename Collection::value_type( - key, - static_cast<typename Collection::value_type::second_type>(nullptr))); - if (ret.second) { - ret.first->second = new Element(arg); - } - return ret.first->second; -} - -// Lookup of linked/shared pointers is used in two scenarios: -// -// Use LookupOrInsertNewLinkedPtr if the container owns the elements. -// In this case it is fine working with the raw pointer as long as it is -// guaranteed that no other thread can delete/update an accessed element. -// A mutex will need to lock the container operation as well as the use -// of the returned elements. Finding an element may be performed using -// FindLinkedPtr*(). -// -// Use LookupOrInsertNewSharedPtr if the container does not own the elements -// for their whole lifetime. This is typically the case when a reader allows -// parallel updates to the container. In this case a Mutex only needs to lock -// container operations, but all element operations must be performed on the -// shared pointer. Finding an element must be performed using FindPtr*() and -// cannot be done with FindLinkedPtr*() even though it compiles. - -// Lookup a key in a map or hash_map whose values are linked_ptrs. If it is -// missing, set collection[key].reset(new Value::element_type) and return that. -// Value::element_type must be default constructable. -template <class Collection> -typename Collection::value_type::second_type::element_type* -LookupOrInsertNewLinkedPtr( - Collection* const collection, - const typename Collection::value_type::first_type& key) { - typedef typename Collection::value_type::second_type Value; - std::pair<typename Collection::iterator, bool> ret = - collection->insert(typename Collection::value_type(key, Value())); - if (ret.second) { - ret.first->second.reset(new typename Value::element_type); - } - return ret.first->second.get(); -} - -// A variant of LookupOrInsertNewLinkedPtr where the value is constructed using -// a single-parameter constructor. Note: the constructor argument is computed -// even if it will not be used, so only values cheap to compute should be passed -// here. On the other hand it does not matter how expensive the construction of -// the actual stored value is, as that only occurs if necessary. -template <class Collection, class Arg> -typename Collection::value_type::second_type::element_type* -LookupOrInsertNewLinkedPtr( - Collection* const collection, - const typename Collection::value_type::first_type& key, - const Arg& arg) { - typedef typename Collection::value_type::second_type Value; - std::pair<typename Collection::iterator, bool> ret = - collection->insert(typename Collection::value_type(key, Value())); - if (ret.second) { - ret.first->second.reset(new typename Value::element_type(arg)); - } - return ret.first->second.get(); -} - -// Lookup a key in a map or hash_map whose values are shared_ptrs. If it is -// missing, set collection[key].reset(new Value::element_type). Unlike -// LookupOrInsertNewLinkedPtr, this function returns the shared_ptr instead of -// the raw pointer. Value::element_type must be default constructable. -template <class Collection> -typename Collection::value_type::second_type& -LookupOrInsertNewSharedPtr( - Collection* const collection, - const typename Collection::value_type::first_type& key) { - typedef typename Collection::value_type::second_type SharedPtr; - typedef typename Collection::value_type::second_type::element_type Element; - std::pair<typename Collection::iterator, bool> ret = - collection->insert(typename Collection::value_type(key, SharedPtr())); - if (ret.second) { - ret.first->second.reset(new Element()); - } - return ret.first->second; -} - -// A variant of LookupOrInsertNewSharedPtr where the value is constructed using -// a single-parameter constructor. Note: the constructor argument is computed -// even if it will not be used, so only values cheap to compute should be passed -// here. On the other hand it does not matter how expensive the construction of -// the actual stored value is, as that only occurs if necessary. -template <class Collection, class Arg> -typename Collection::value_type::second_type& -LookupOrInsertNewSharedPtr( - Collection* const collection, - const typename Collection::value_type::first_type& key, - const Arg& arg) { - typedef typename Collection::value_type::second_type SharedPtr; - typedef typename Collection::value_type::second_type::element_type Element; - std::pair<typename Collection::iterator, bool> ret = - collection->insert(typename Collection::value_type(key, SharedPtr())); - if (ret.second) { - ret.first->second.reset(new Element(arg)); - } - return ret.first->second; -} - -// -// Misc Utility Functions -// - -// Updates the value associated with the given key. If the key was not already -// present, then the key-value pair are inserted and "previous" is unchanged. If -// the key was already present, the value is updated and "*previous" will -// contain a copy of the old value. -// -// InsertOrReturnExisting has complementary behavior that returns the -// address of an already existing value, rather than updating it. -template <class Collection> -bool UpdateReturnCopy(Collection* const collection, - const typename Collection::value_type::first_type& key, - const typename Collection::value_type::second_type& value, - typename Collection::value_type::second_type* previous) { - std::pair<typename Collection::iterator, bool> ret = - collection->insert(typename Collection::value_type(key, value)); - if (!ret.second) { - // update - if (previous) { - *previous = ret.first->second; - } - ret.first->second = value; - return true; - } - return false; -} - -// Same as above except that the key and value are passed as a pair. -template <class Collection> -bool UpdateReturnCopy(Collection* const collection, - const typename Collection::value_type& vt, - typename Collection::value_type::second_type* previous) { - std::pair<typename Collection::iterator, bool> ret = collection->insert(vt); - if (!ret.second) { - // update - if (previous) { - *previous = ret.first->second; - } - ret.first->second = vt.second; - return true; - } - return false; -} - -// Tries to insert the given key-value pair into the collection. Returns nullptr if -// the insert succeeds. Otherwise, returns a pointer to the existing value. -// -// This complements UpdateReturnCopy in that it allows to update only after -// verifying the old value and still insert quickly without having to look up -// twice. Unlike UpdateReturnCopy this also does not come with the issue of an -// undefined previous* in case new data was inserted. -template <class Collection> -typename Collection::value_type::second_type* InsertOrReturnExisting( - Collection* const collection, const typename Collection::value_type& vt) { - std::pair<typename Collection::iterator, bool> ret = collection->insert(vt); - if (ret.second) { - return nullptr; // Inserted, no existing previous value. - } else { - return &ret.first->second; // Return address of already existing value. - } -} - -// Same as above, except for explicit key and data. -template <class Collection> -typename Collection::value_type::second_type* InsertOrReturnExisting( - Collection* const collection, - const typename Collection::value_type::first_type& key, - const typename Collection::value_type::second_type& data) { - return InsertOrReturnExisting(collection, - typename Collection::value_type(key, data)); -} - -// Erases the collection item identified by the given key, and returns the value -// associated with that key. It is assumed that the value (i.e., the -// mapped_type) is a pointer. Returns nullptr if the key was not found in the -// collection. -// -// Examples: -// map<string, MyType*> my_map; -// -// One line cleanup: -// delete EraseKeyReturnValuePtr(&my_map, "abc"); -// -// Use returned value: -// std::unique_ptr<MyType> value_ptr( -// EraseKeyReturnValuePtr(&my_map, "abc")); -// if (value_ptr.get()) -// value_ptr->DoSomething(); -// -template <class Collection> -typename Collection::value_type::second_type EraseKeyReturnValuePtr( - Collection* const collection, - const typename Collection::value_type::first_type& key) { - typename Collection::iterator it = collection->find(key); - if (it == collection->end()) { - return nullptr; - } - typename Collection::value_type::second_type v = it->second; - collection->erase(it); - return v; -} - -// Inserts all the keys from map_container into key_container, which must -// support insert(MapContainer::key_type). -// -// Note: any initial contents of the key_container are not cleared. -template <class MapContainer, class KeyContainer> -void InsertKeysFromMap(const MapContainer& map_container, - KeyContainer* key_container) { - GOOGLE_CHECK(key_container != nullptr); - for (typename MapContainer::const_iterator it = map_container.begin(); - it != map_container.end(); ++it) { - key_container->insert(it->first); - } -} - -// Appends all the keys from map_container into key_container, which must -// support push_back(MapContainer::key_type). -// -// Note: any initial contents of the key_container are not cleared. -template <class MapContainer, class KeyContainer> -void AppendKeysFromMap(const MapContainer& map_container, - KeyContainer* key_container) { - GOOGLE_CHECK(key_container != nullptr); - for (typename MapContainer::const_iterator it = map_container.begin(); - it != map_container.end(); ++it) { - key_container->push_back(it->first); - } -} - -// A more specialized overload of AppendKeysFromMap to optimize reallocations -// for the common case in which we're appending keys to a vector and hence can -// (and sometimes should) call reserve() first. -// -// (It would be possible to play SFINAE games to call reserve() for any -// container that supports it, but this seems to get us 99% of what we need -// without the complexity of a SFINAE-based solution.) -template <class MapContainer, class KeyType> -void AppendKeysFromMap(const MapContainer& map_container, - std::vector<KeyType>* key_container) { - GOOGLE_CHECK(key_container != nullptr); - // We now have the opportunity to call reserve(). Calling reserve() every - // time is a bad idea for some use cases: libstdc++'s implementation of - // vector<>::reserve() resizes the vector's backing store to exactly the - // given size (unless it's already at least that big). Because of this, - // the use case that involves appending a lot of small maps (total size - // N) one by one to a vector would be O(N^2). But never calling reserve() - // loses the opportunity to improve the use case of adding from a large - // map to an empty vector (this improves performance by up to 33%). A - // number of heuristics are possible; see the discussion in - // cl/34081696. Here we use the simplest one. - if (key_container->empty()) { - key_container->reserve(map_container.size()); - } - for (typename MapContainer::const_iterator it = map_container.begin(); - it != map_container.end(); ++it) { - key_container->push_back(it->first); - } -} - -// Inserts all the values from map_container into value_container, which must -// support push_back(MapContainer::mapped_type). -// -// Note: any initial contents of the value_container are not cleared. -template <class MapContainer, class ValueContainer> -void AppendValuesFromMap(const MapContainer& map_container, - ValueContainer* value_container) { - GOOGLE_CHECK(value_container != nullptr); - for (typename MapContainer::const_iterator it = map_container.begin(); - it != map_container.end(); ++it) { - value_container->push_back(it->second); - } -} - -// A more specialized overload of AppendValuesFromMap to optimize reallocations -// for the common case in which we're appending values to a vector and hence -// can (and sometimes should) call reserve() first. -// -// (It would be possible to play SFINAE games to call reserve() for any -// container that supports it, but this seems to get us 99% of what we need -// without the complexity of a SFINAE-based solution.) -template <class MapContainer, class ValueType> -void AppendValuesFromMap(const MapContainer& map_container, - std::vector<ValueType>* value_container) { - GOOGLE_CHECK(value_container != nullptr); - // See AppendKeysFromMap for why this is done. - if (value_container->empty()) { - value_container->reserve(map_container.size()); - } - for (typename MapContainer::const_iterator it = map_container.begin(); - it != map_container.end(); ++it) { - value_container->push_back(it->second); - } -} - -} // namespace protobuf -} // namespace google - -#endif // GOOGLE_PROTOBUF_STUBS_MAP_UTIL_H__ diff --git a/include/google/protobuf/stubs/mutex.h b/include/google/protobuf/stubs/mutex.h deleted file mode 100644 index c4599913be..0000000000 --- a/include/google/protobuf/stubs/mutex.h +++ /dev/null @@ -1,218 +0,0 @@ -// Copyright (c) 2006, Google Inc. -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -#ifndef GOOGLE_PROTOBUF_STUBS_MUTEX_H_ -#define GOOGLE_PROTOBUF_STUBS_MUTEX_H_ - -#include <mutex> - -#ifdef GOOGLE_PROTOBUF_SUPPORT_WINDOWS_XP - -#include <windows.h> - -// GetMessage conflicts with GeneratedMessageReflection::GetMessage(). -#ifdef GetMessage -#undef GetMessage -#endif - -#endif - -#include <google/protobuf/stubs/macros.h> - -// Define thread-safety annotations for use below, if we are building with -// Clang. -#if defined(__clang__) && !defined(SWIG) -#define GOOGLE_PROTOBUF_ACQUIRE(...) \ - __attribute__((acquire_capability(__VA_ARGS__))) -#define GOOGLE_PROTOBUF_RELEASE(...) \ - __attribute__((release_capability(__VA_ARGS__))) -#define GOOGLE_PROTOBUF_SCOPED_CAPABILITY __attribute__((scoped_lockable)) -#define GOOGLE_PROTOBUF_CAPABILITY(x) __attribute__((capability(x))) -#else -#define GOOGLE_PROTOBUF_ACQUIRE(...) -#define GOOGLE_PROTOBUF_RELEASE(...) -#define GOOGLE_PROTOBUF_SCOPED_CAPABILITY -#define GOOGLE_PROTOBUF_CAPABILITY(x) -#endif - -#include <google/protobuf/port_def.inc> - -// =================================================================== -// emulates google3/base/mutex.h -namespace google { -namespace protobuf { -namespace internal { - -#define GOOGLE_PROTOBUF_LINKER_INITIALIZED - -#ifdef GOOGLE_PROTOBUF_SUPPORT_WINDOWS_XP - -// This class is a lightweight replacement for std::mutex on Windows platforms. -// std::mutex does not work on Windows XP SP2 with the latest VC++ libraries, -// because it utilizes the Concurrency Runtime that is only supported on Windows -// XP SP3 and above. -class PROTOBUF_EXPORT CriticalSectionLock { - public: - CriticalSectionLock() { InitializeCriticalSection(&critical_section_); } - ~CriticalSectionLock() { DeleteCriticalSection(&critical_section_); } - void lock() { EnterCriticalSection(&critical_section_); } - void unlock() { LeaveCriticalSection(&critical_section_); } - - private: - CRITICAL_SECTION critical_section_; - - GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(CriticalSectionLock); -}; - -#endif - -// In MSVC std::mutex does not have a constexpr constructor. -// This wrapper makes the constructor constexpr. -template <typename T> -class CallOnceInitializedMutex { - public: - constexpr CallOnceInitializedMutex() : flag_{}, buf_{} {} - ~CallOnceInitializedMutex() { get().~T(); } - - void lock() { get().lock(); } - void unlock() { get().unlock(); } - - private: - T& get() { - std::call_once(flag_, [&] { ::new (static_cast<void*>(&buf_)) T(); }); - return reinterpret_cast<T&>(buf_); - } - - std::once_flag flag_; - alignas(T) char buf_[sizeof(T)]; -}; - -// Mutex is a natural type to wrap. As both google and other organization have -// specialized mutexes. gRPC also provides an injection mechanism for custom -// mutexes. -class GOOGLE_PROTOBUF_CAPABILITY("mutex") PROTOBUF_EXPORT WrappedMutex { - public: -#if defined(__QNX__) - constexpr WrappedMutex() = default; -#else - constexpr WrappedMutex() {} -#endif - void Lock() GOOGLE_PROTOBUF_ACQUIRE() { mu_.lock(); } - void Unlock() GOOGLE_PROTOBUF_RELEASE() { mu_.unlock(); } - // Crash if this Mutex is not held exclusively by this thread. - // May fail to crash when it should; will never crash when it should not. - void AssertHeld() const {} - - private: -#if defined(GOOGLE_PROTOBUF_SUPPORT_WINDOWS_XP) - CallOnceInitializedMutex<CriticalSectionLock> mu_{}; -#elif defined(_WIN32) - CallOnceInitializedMutex<std::mutex> mu_{}; -#else - std::mutex mu_{}; -#endif -}; - -using Mutex = WrappedMutex; - -// MutexLock(mu) acquires mu when constructed and releases it when destroyed. -class GOOGLE_PROTOBUF_SCOPED_CAPABILITY PROTOBUF_EXPORT MutexLock { - public: - explicit MutexLock(Mutex* mu) GOOGLE_PROTOBUF_ACQUIRE(mu) : mu_(mu) { - this->mu_->Lock(); - } - ~MutexLock() GOOGLE_PROTOBUF_RELEASE() { this->mu_->Unlock(); } - - private: - Mutex *const mu_; - GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(MutexLock); -}; - -// TODO(kenton): Implement these? Hard to implement portably. -typedef MutexLock ReaderMutexLock; -typedef MutexLock WriterMutexLock; - -// MutexLockMaybe is like MutexLock, but is a no-op when mu is nullptr. -class PROTOBUF_EXPORT MutexLockMaybe { - public: - explicit MutexLockMaybe(Mutex *mu) : - mu_(mu) { if (this->mu_ != nullptr) { this->mu_->Lock(); } } - ~MutexLockMaybe() { if (this->mu_ != nullptr) { this->mu_->Unlock(); } } - private: - Mutex *const mu_; - GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(MutexLockMaybe); -}; - -#if defined(GOOGLE_PROTOBUF_NO_THREADLOCAL) -template<typename T> -class ThreadLocalStorage { - public: - ThreadLocalStorage() { - pthread_key_create(&key_, &ThreadLocalStorage::Delete); - } - ~ThreadLocalStorage() { - pthread_key_delete(key_); - } - T* Get() { - T* result = static_cast<T*>(pthread_getspecific(key_)); - if (result == nullptr) { - result = new T(); - pthread_setspecific(key_, result); - } - return result; - } - private: - static void Delete(void* value) { - delete static_cast<T*>(value); - } - pthread_key_t key_; - - GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(ThreadLocalStorage); -}; -#endif - -} // namespace internal - -// We made these internal so that they would show up as such in the docs, -// but we don't want to stick "internal::" in front of them everywhere. -using internal::Mutex; -using internal::MutexLock; -using internal::ReaderMutexLock; -using internal::WriterMutexLock; -using internal::MutexLockMaybe; - -} // namespace protobuf -} // namespace google - -#undef GOOGLE_PROTOBUF_ACQUIRE -#undef GOOGLE_PROTOBUF_RELEASE - -#include <google/protobuf/port_undef.inc> - -#endif // GOOGLE_PROTOBUF_STUBS_MUTEX_H_ diff --git a/include/google/protobuf/stubs/once.h b/include/google/protobuf/stubs/once.h deleted file mode 100644 index 070d36d193..0000000000 --- a/include/google/protobuf/stubs/once.h +++ /dev/null @@ -1,55 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// 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 -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -#ifndef GOOGLE_PROTOBUF_STUBS_ONCE_H__ -#define GOOGLE_PROTOBUF_STUBS_ONCE_H__ - -#include <mutex> -#include <utility> - -#include <google/protobuf/port_def.inc> - -namespace google { -namespace protobuf { -namespace internal { - -using once_flag = std::once_flag; -template <typename... Args> -void call_once(Args&&... args ) { - std::call_once(std::forward<Args>(args)...); -} - -} // namespace internal -} // namespace protobuf -} // namespace google - -#include <google/protobuf/port_undef.inc> - -#endif // GOOGLE_PROTOBUF_STUBS_ONCE_H__ diff --git a/include/google/protobuf/stubs/platform_macros.h b/include/google/protobuf/stubs/platform_macros.h deleted file mode 100644 index f50efdfb71..0000000000 --- a/include/google/protobuf/stubs/platform_macros.h +++ /dev/null @@ -1,142 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2012 Google Inc. All rights reserved. -// 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 -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -#ifndef GOOGLE_PROTOBUF_PLATFORM_MACROS_H_ -#define GOOGLE_PROTOBUF_PLATFORM_MACROS_H_ - -#define GOOGLE_PROTOBUF_PLATFORM_ERROR \ -#error "Host platform was not detected as supported by protobuf" - -// Processor architecture detection. For more info on what's defined, see: -// http://msdn.microsoft.com/en-us/library/b0084kay.aspx -// http://www.agner.org/optimize/calling_conventions.pdf -// or with gcc, run: "echo | gcc -E -dM -" -#if defined(_M_X64) || defined(__x86_64__) -#define GOOGLE_PROTOBUF_ARCH_X64 1 -#define GOOGLE_PROTOBUF_ARCH_64_BIT 1 -#elif defined(_M_IX86) || defined(__i386__) -#define GOOGLE_PROTOBUF_ARCH_IA32 1 -#define GOOGLE_PROTOBUF_ARCH_32_BIT 1 -#elif defined(__QNX__) -#define GOOGLE_PROTOBUF_ARCH_ARM_QNX 1 -#if defined(__aarch64__) -#define GOOGLE_PROTOBUF_ARCH_64_BIT 1 -#else -#define GOOGLE_PROTOBUF_ARCH_32_BIT 1 -#endif -#elif defined(_M_ARM) || defined(__ARMEL__) -#define GOOGLE_PROTOBUF_ARCH_ARM 1 -#define GOOGLE_PROTOBUF_ARCH_32_BIT 1 -#elif defined(_M_ARM64) -#define GOOGLE_PROTOBUF_ARCH_ARM 1 -#define GOOGLE_PROTOBUF_ARCH_64_BIT 1 -#elif defined(__aarch64__) -#define GOOGLE_PROTOBUF_ARCH_AARCH64 1 -#define GOOGLE_PROTOBUF_ARCH_64_BIT 1 -#elif defined(__mips__) -#if defined(__LP64__) -#define GOOGLE_PROTOBUF_ARCH_MIPS64 1 -#define GOOGLE_PROTOBUF_ARCH_64_BIT 1 -#else -#define GOOGLE_PROTOBUF_ARCH_MIPS 1 -#define GOOGLE_PROTOBUF_ARCH_32_BIT 1 -#endif -#elif defined(__pnacl__) -#define GOOGLE_PROTOBUF_ARCH_32_BIT 1 -#elif defined(sparc) -#define GOOGLE_PROTOBUF_ARCH_SPARC 1 -#if defined(__sparc_v9__) || defined(__sparcv9) || defined(__arch64__) -#define GOOGLE_PROTOBUF_ARCH_64_BIT 1 -#else -#define GOOGLE_PROTOBUF_ARCH_32_BIT 1 -#endif -#elif defined(_POWER) || defined(__powerpc64__) || defined(__PPC64__) -#define GOOGLE_PROTOBUF_ARCH_POWER 1 -#define GOOGLE_PROTOBUF_ARCH_64_BIT 1 -#elif defined(__PPC__) -#define GOOGLE_PROTOBUF_ARCH_PPC 1 -#define GOOGLE_PROTOBUF_ARCH_32_BIT 1 -#elif defined(__GNUC__) -# if (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 7)) || (__GNUC__ > 4)) -// We fallback to the generic Clang/GCC >= 4.7 implementation in atomicops.h -# elif defined(__clang__) -# if !__has_extension(c_atomic) -GOOGLE_PROTOBUF_PLATFORM_ERROR -# endif -// We fallback to the generic Clang/GCC >= 4.7 implementation in atomicops.h -# endif -# if __LP64__ -# define GOOGLE_PROTOBUF_ARCH_64_BIT 1 -# else -# define GOOGLE_PROTOBUF_ARCH_32_BIT 1 -# endif -#else -GOOGLE_PROTOBUF_PLATFORM_ERROR -#endif - -#if defined(__APPLE__) -#define GOOGLE_PROTOBUF_OS_APPLE -#include <Availability.h> -#include <TargetConditionals.h> -#if TARGET_OS_IPHONE -#define GOOGLE_PROTOBUF_OS_IPHONE -#endif -#elif defined(__EMSCRIPTEN__) -#define GOOGLE_PROTOBUF_OS_EMSCRIPTEN -#elif defined(__native_client__) -#define GOOGLE_PROTOBUF_OS_NACL -#elif defined(sun) -#define GOOGLE_PROTOBUF_OS_SOLARIS -#elif defined(_AIX) -#define GOOGLE_PROTOBUF_OS_AIX -#elif defined(__ANDROID__) -#define GOOGLE_PROTOBUF_OS_ANDROID -#endif - -#undef GOOGLE_PROTOBUF_PLATFORM_ERROR - -#if defined(GOOGLE_PROTOBUF_OS_ANDROID) || defined(GOOGLE_PROTOBUF_OS_IPHONE) || defined(__OpenBSD__) -// Android ndk does not support the __thread keyword very well yet. Here -// we use pthread_key_create()/pthread_getspecific()/... methods for -// TLS support on android. -// iOS and OpenBSD also do not support the __thread keyword. -#define GOOGLE_PROTOBUF_NO_THREADLOCAL -#endif - -#if defined(__MAC_OS_X_VERSION_MIN_REQUIRED) && __MAC_OS_X_VERSION_MIN_REQUIRED < 1070 -// __thread keyword requires at least 10.7 -#define GOOGLE_PROTOBUF_NO_THREADLOCAL -#endif - -#ifndef PROTOBUF_USE_DLLS -#define PROTOBUF_USE_DLLS -#endif // PROTOBUF_USE_DLLS - -#endif // GOOGLE_PROTOBUF_PLATFORM_MACROS_H_ diff --git a/include/google/protobuf/stubs/port.h b/include/google/protobuf/stubs/port.h deleted file mode 100644 index b074cb1630..0000000000 --- a/include/google/protobuf/stubs/port.h +++ /dev/null @@ -1,413 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// 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 -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -#ifndef GOOGLE_PROTOBUF_STUBS_PORT_H_ -#define GOOGLE_PROTOBUF_STUBS_PORT_H_ - -#include <assert.h> -#include <cstdint> -#include <stdlib.h> -#include <cstddef> -#include <string> -#include <string.h> - -#include <google/protobuf/stubs/platform_macros.h> - -#include <google/protobuf/port_def.inc> - -#undef PROTOBUF_LITTLE_ENDIAN -#ifdef _WIN32 - // Assuming windows is always little-endian. - // TODO(xiaofeng): The PROTOBUF_LITTLE_ENDIAN is not only used for - // optimization but also for correctness. We should define an - // different macro to test the big-endian code path in coded_stream. - #if !defined(PROTOBUF_DISABLE_LITTLE_ENDIAN_OPT_FOR_TEST) - #define PROTOBUF_LITTLE_ENDIAN 1 - #endif -#if defined(_MSC_VER) && _MSC_VER >= 1300 && !defined(__INTEL_COMPILER) -// If MSVC has "/RTCc" set, it will complain about truncating casts at -// runtime. This file contains some intentional truncating casts. -#pragma runtime_checks("c", off) -#endif -#else -#ifdef __APPLE__ -#include <machine/endian.h> // __BYTE_ORDER -#elif defined(__FreeBSD__) -#include <sys/endian.h> // __BYTE_ORDER -#elif (defined(sun) || defined(__sun)) && (defined(__SVR4) || defined(__svr4__)) -#include <sys/isa_defs.h> // __BYTE_ORDER -#elif defined(_AIX) || defined(__TOS_AIX__) -#include <sys/machine.h> // BYTE_ORDER -#else -#if !defined(__QNX__) -#include <endian.h> // __BYTE_ORDER -#endif -#endif -#if ((defined(__LITTLE_ENDIAN__) && !defined(__BIG_ENDIAN__)) || \ - (defined(__BYTE_ORDER) && __BYTE_ORDER == __LITTLE_ENDIAN) || \ - (defined(BYTE_ORDER) && BYTE_ORDER == LITTLE_ENDIAN)) && \ - !defined(PROTOBUF_DISABLE_LITTLE_ENDIAN_OPT_FOR_TEST) -#define PROTOBUF_LITTLE_ENDIAN 1 -#endif -#endif - -// These #includes are for the byte swap functions declared later on. -#ifdef _MSC_VER -#include <stdlib.h> // NOLINT(build/include) -#include <intrin.h> -#elif defined(__APPLE__) -#include <libkern/OSByteOrder.h> -#elif defined(__linux__) || defined(__ANDROID__) || defined(__CYGWIN__) -#include <byteswap.h> // IWYU pragma: export -#endif - -// Legacy: some users reference these (internal-only) macros even though we -// don't need them any more. -#if defined(_MSC_VER) && defined(PROTOBUF_USE_DLLS) - #ifdef LIBPROTOBUF_EXPORTS - #define LIBPROTOBUF_EXPORT __declspec(dllexport) - #else - #define LIBPROTOBUF_EXPORT __declspec(dllimport) - #endif - #ifdef LIBPROTOC_EXPORTS - #define LIBPROTOC_EXPORT __declspec(dllexport) - #else - #define LIBPROTOC_EXPORT __declspec(dllimport) - #endif -#else - #define LIBPROTOBUF_EXPORT - #define LIBPROTOC_EXPORT -#endif - -#define PROTOBUF_RUNTIME_DEPRECATED(message) PROTOBUF_DEPRECATED_MSG(message) -#define GOOGLE_PROTOBUF_RUNTIME_DEPRECATED(message) \ - PROTOBUF_DEPRECATED_MSG(message) - -// =================================================================== -// from google3/base/port.h - -#if (defined(__GXX_EXPERIMENTAL_CXX0X__) || __cplusplus >= 201103L || \ - (defined(_MSC_VER) && _MSC_VER >= 1900)) -// Define this to 1 if the code is compiled in C++11 mode; leave it -// undefined otherwise. Do NOT define it to 0 -- that causes -// '#ifdef LANG_CXX11' to behave differently from '#if LANG_CXX11'. -#define LANG_CXX11 1 -#else -#error "Protobuf requires at least C++11." -#endif - -namespace google { -namespace protobuf { - -using ConstStringParam = const std::string &; - -typedef unsigned int uint; - -typedef int8_t int8; -typedef int16_t int16; -typedef int32_t int32; -typedef int64_t int64; - -typedef uint8_t uint8; -typedef uint16_t uint16; -typedef uint32_t uint32; -typedef uint64_t uint64; - -static const int32 kint32max = 0x7FFFFFFF; -static const int32 kint32min = -kint32max - 1; -static const int64 kint64max = int64_t{0x7FFFFFFFFFFFFFFF}; -static const int64 kint64min = -kint64max - 1; -static const uint32 kuint32max = 0xFFFFFFFFu; -static const uint64 kuint64max = uint64_t{0xFFFFFFFFFFFFFFFFu}; - -#if defined(ADDRESS_SANITIZER) || defined(THREAD_SANITIZER) ||\ - defined(MEMORY_SANITIZER) - -#ifdef __cplusplus -extern "C" { -#endif // __cplusplus -uint16_t __sanitizer_unaligned_load16(const void *p); -uint32_t __sanitizer_unaligned_load32(const void *p); -uint64_t __sanitizer_unaligned_load64(const void *p); -void __sanitizer_unaligned_store16(void *p, uint16_t v); -void __sanitizer_unaligned_store32(void *p, uint32_t v); -void __sanitizer_unaligned_store64(void *p, uint64_t v); -#ifdef __cplusplus -} // extern "C" -#endif // __cplusplus - -inline uint16_t GOOGLE_UNALIGNED_LOAD16(const void *p) { - return __sanitizer_unaligned_load16(p); -} - -inline uint32_t GOOGLE_UNALIGNED_LOAD32(const void *p) { - return __sanitizer_unaligned_load32(p); -} - -inline uint64_t GOOGLE_UNALIGNED_LOAD64(const void *p) { - return __sanitizer_unaligned_load64(p); -} - -inline void GOOGLE_UNALIGNED_STORE16(void *p, uint16_t v) { - __sanitizer_unaligned_store16(p, v); -} - -inline void GOOGLE_UNALIGNED_STORE32(void *p, uint32_t v) { - __sanitizer_unaligned_store32(p, v); -} - -inline void GOOGLE_UNALIGNED_STORE64(void *p, uint64_t v) { - __sanitizer_unaligned_store64(p, v); -} - -#elif defined(GOOGLE_PROTOBUF_USE_UNALIGNED) && GOOGLE_PROTOBUF_USE_UNALIGNED - -#define GOOGLE_UNALIGNED_LOAD16(_p) (*reinterpret_cast<const uint16_t *>(_p)) -#define GOOGLE_UNALIGNED_LOAD32(_p) (*reinterpret_cast<const uint32_t *>(_p)) -#define GOOGLE_UNALIGNED_LOAD64(_p) (*reinterpret_cast<const uint64_t *>(_p)) - -#define GOOGLE_UNALIGNED_STORE16(_p, _val) (*reinterpret_cast<uint16_t *>(_p) = (_val)) -#define GOOGLE_UNALIGNED_STORE32(_p, _val) (*reinterpret_cast<uint32_t *>(_p) = (_val)) -#define GOOGLE_UNALIGNED_STORE64(_p, _val) (*reinterpret_cast<uint64_t *>(_p) = (_val)) - -#else -inline uint16_t GOOGLE_UNALIGNED_LOAD16(const void *p) { - uint16_t t; - memcpy(&t, p, sizeof t); - return t; -} - -inline uint32_t GOOGLE_UNALIGNED_LOAD32(const void *p) { - uint32_t t; - memcpy(&t, p, sizeof t); - return t; -} - -inline uint64_t GOOGLE_UNALIGNED_LOAD64(const void *p) { - uint64_t t; - memcpy(&t, p, sizeof t); - return t; -} - -inline void GOOGLE_UNALIGNED_STORE16(void *p, uint16_t v) { - memcpy(p, &v, sizeof v); -} - -inline void GOOGLE_UNALIGNED_STORE32(void *p, uint32_t v) { - memcpy(p, &v, sizeof v); -} - -inline void GOOGLE_UNALIGNED_STORE64(void *p, uint64_t v) { - memcpy(p, &v, sizeof v); -} -#endif - -#if defined(GOOGLE_PROTOBUF_OS_NACL) \ - || (defined(__ANDROID__) && defined(__clang__) \ - && (__clang_major__ == 3 && __clang_minor__ == 8) \ - && (__clang_patchlevel__ < 275480)) -# define GOOGLE_PROTOBUF_USE_PORTABLE_LOG2 -#endif - -// The following guarantees declaration of the byte swap functions. -#ifdef _MSC_VER -#define bswap_16(x) _byteswap_ushort(x) -#define bswap_32(x) _byteswap_ulong(x) -#define bswap_64(x) _byteswap_uint64(x) - -#elif defined(__APPLE__) -// Mac OS X / Darwin features -#define bswap_16(x) OSSwapInt16(x) -#define bswap_32(x) OSSwapInt32(x) -#define bswap_64(x) OSSwapInt64(x) - -#elif !defined(__linux__) && !defined(__ANDROID__) && !defined(__CYGWIN__) - -#ifndef bswap_16 -static inline uint16_t bswap_16(uint16_t x) { - return static_cast<uint16_t>(((x & 0xFF) << 8) | ((x & 0xFF00) >> 8)); -} -#define bswap_16(x) bswap_16(x) -#endif - -#ifndef bswap_32 -static inline uint32_t bswap_32(uint32_t x) { - return (((x & 0xFF) << 24) | - ((x & 0xFF00) << 8) | - ((x & 0xFF0000) >> 8) | - ((x & 0xFF000000) >> 24)); -} -#define bswap_32(x) bswap_32(x) -#endif - -#ifndef bswap_64 -static inline uint64_t bswap_64(uint64_t x) { - return (((x & uint64_t{0xFFu}) << 56) | ((x & uint64_t{0xFF00u}) << 40) | - ((x & uint64_t{0xFF0000u}) << 24) | - ((x & uint64_t{0xFF000000u}) << 8) | - ((x & uint64_t{0xFF00000000u}) >> 8) | - ((x & uint64_t{0xFF0000000000u}) >> 24) | - ((x & uint64_t{0xFF000000000000u}) >> 40) | - ((x & uint64_t{0xFF00000000000000u}) >> 56)); -} -#define bswap_64(x) bswap_64(x) -#endif - -#endif - -// =================================================================== -// from google3/util/bits/bits.h - -class Bits { - public: - static uint32_t Log2FloorNonZero(uint32_t n) { -#if defined(__GNUC__) - return 31 ^ static_cast<uint32_t>(__builtin_clz(n)); -#elif defined(_MSC_VER) - unsigned long where; - _BitScanReverse(&where, n); - return where; -#else - return Log2FloorNonZero_Portable(n); -#endif - } - - static uint32_t Log2FloorNonZero64(uint64_t n) { - // Older versions of clang run into an instruction-selection failure when - // it encounters __builtin_clzll: - // https://bugs.chromium.org/p/nativeclient/issues/detail?id=4395 - // This includes arm-nacl-clang and clang in older Android NDK versions. - // To work around this, when we build with those we use the portable - // implementation instead. -#if defined(__GNUC__) && !defined(GOOGLE_PROTOBUF_USE_PORTABLE_LOG2) - return 63 ^ static_cast<uint32_t>(__builtin_clzll(n)); -#elif defined(_MSC_VER) && defined(_M_X64) - unsigned long where; - _BitScanReverse64(&where, n); - return where; -#else - return Log2FloorNonZero64_Portable(n); -#endif - } - private: - static int Log2FloorNonZero_Portable(uint32_t n) { - if (n == 0) - return -1; - int log = 0; - uint32_t value = n; - for (int i = 4; i >= 0; --i) { - int shift = (1 << i); - uint32_t x = value >> shift; - if (x != 0) { - value = x; - log += shift; - } - } - assert(value == 1); - return log; - } - - static int Log2FloorNonZero64_Portable(uint64_t n) { - const uint32_t topbits = static_cast<uint32_t>(n >> 32); - if (topbits == 0) { - // Top bits are zero, so scan in bottom bits - return static_cast<int>(Log2FloorNonZero(static_cast<uint32_t>(n))); - } else { - return 32 + static_cast<int>(Log2FloorNonZero(topbits)); - } - } -}; - -// =================================================================== -// from google3/util/endian/endian.h -PROTOBUF_EXPORT uint32_t ghtonl(uint32_t x); - -class BigEndian { - public: -#ifdef PROTOBUF_LITTLE_ENDIAN - - static uint16_t FromHost16(uint16_t x) { return bswap_16(x); } - static uint16_t ToHost16(uint16_t x) { return bswap_16(x); } - - static uint32_t FromHost32(uint32_t x) { return bswap_32(x); } - static uint32_t ToHost32(uint32_t x) { return bswap_32(x); } - - static uint64_t FromHost64(uint64_t x) { return bswap_64(x); } - static uint64_t ToHost64(uint64_t x) { return bswap_64(x); } - - static bool IsLittleEndian() { return true; } - -#else - - static uint16_t FromHost16(uint16_t x) { return x; } - static uint16_t ToHost16(uint16_t x) { return x; } - - static uint32_t FromHost32(uint32_t x) { return x; } - static uint32_t ToHost32(uint32_t x) { return x; } - - static uint64_t FromHost64(uint64_t x) { return x; } - static uint64_t ToHost64(uint64_t x) { return x; } - - static bool IsLittleEndian() { return false; } - -#endif /* ENDIAN */ - - // Functions to do unaligned loads and stores in big-endian order. - static uint16_t Load16(const void *p) { - return ToHost16(GOOGLE_UNALIGNED_LOAD16(p)); - } - - static void Store16(void *p, uint16_t v) { - GOOGLE_UNALIGNED_STORE16(p, FromHost16(v)); - } - - static uint32_t Load32(const void *p) { - return ToHost32(GOOGLE_UNALIGNED_LOAD32(p)); - } - - static void Store32(void *p, uint32_t v) { - GOOGLE_UNALIGNED_STORE32(p, FromHost32(v)); - } - - static uint64_t Load64(const void *p) { - return ToHost64(GOOGLE_UNALIGNED_LOAD64(p)); - } - - static void Store64(void *p, uint64_t v) { - GOOGLE_UNALIGNED_STORE64(p, FromHost64(v)); - } -}; - -} // namespace protobuf -} // namespace google - -#include <google/protobuf/port_undef.inc> - -#endif // GOOGLE_PROTOBUF_STUBS_PORT_H_ diff --git a/include/google/protobuf/stubs/status.h b/include/google/protobuf/stubs/status.h deleted file mode 100644 index c858cf6239..0000000000 --- a/include/google/protobuf/stubs/status.h +++ /dev/null @@ -1,196 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// 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 -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -#ifndef GOOGLE_PROTOBUF_STUBS_STATUS_H_ -#define GOOGLE_PROTOBUF_STUBS_STATUS_H_ - -#include <string> - -#include <google/protobuf/stubs/stringpiece.h> - -#include <google/protobuf/port_def.inc> - -namespace google { -namespace protobuf { -namespace util { -namespace status_internal { - -// These values must match error codes defined in google/rpc/code.proto. -enum class StatusCode : int { - kOk = 0, - kCancelled = 1, - kUnknown = 2, - kInvalidArgument = 3, - kDeadlineExceeded = 4, - kNotFound = 5, - kAlreadyExists = 6, - kPermissionDenied = 7, - kUnauthenticated = 16, - kResourceExhausted = 8, - kFailedPrecondition = 9, - kAborted = 10, - kOutOfRange = 11, - kUnimplemented = 12, - kInternal = 13, - kUnavailable = 14, - kDataLoss = 15, -}; - -class PROTOBUF_EXPORT Status { - public: - // Creates a "successful" status. - Status(); - - // Create a status in the canonical error space with the specified - // code, and error message. If "code == 0", error_message is - // ignored and a Status object identical to Status::kOk is - // constructed. - Status(StatusCode error_code, StringPiece error_message); - Status(const Status&); - Status& operator=(const Status& x); - ~Status() {} - - // Accessor - bool ok() const { return error_code_ == StatusCode::kOk; } - StatusCode code() const { return error_code_; } - StringPiece message() const { - return error_message_; - } - - bool operator==(const Status& x) const; - bool operator!=(const Status& x) const { - return !operator==(x); - } - - // Return a combination of the error code name and message. - std::string ToString() const; - - private: - StatusCode error_code_; - std::string error_message_; -}; - -// Returns an OK status, equivalent to a default constructed instance. Prefer -// usage of `OkStatus()` when constructing such an OK status. -PROTOBUF_EXPORT Status OkStatus(); - -// Prints a human-readable representation of 'x' to 'os'. -PROTOBUF_EXPORT std::ostream& operator<<(std::ostream& os, const Status& x); - -// These convenience functions return `true` if a given status matches the -// `StatusCode` error code of its associated function. -PROTOBUF_EXPORT bool IsAborted(const Status& status); -PROTOBUF_EXPORT bool IsAlreadyExists(const Status& status); -PROTOBUF_EXPORT bool IsCancelled(const Status& status); -PROTOBUF_EXPORT bool IsDataLoss(const Status& status); -PROTOBUF_EXPORT bool IsDeadlineExceeded(const Status& status); -PROTOBUF_EXPORT bool IsFailedPrecondition(const Status& status); -PROTOBUF_EXPORT bool IsInternal(const Status& status); -PROTOBUF_EXPORT bool IsInvalidArgument(const Status& status); -PROTOBUF_EXPORT bool IsNotFound(const Status& status); -PROTOBUF_EXPORT bool IsOutOfRange(const Status& status); -PROTOBUF_EXPORT bool IsPermissionDenied(const Status& status); -PROTOBUF_EXPORT bool IsResourceExhausted(const Status& status); -PROTOBUF_EXPORT bool IsUnauthenticated(const Status& status); -PROTOBUF_EXPORT bool IsUnavailable(const Status& status); -PROTOBUF_EXPORT bool IsUnimplemented(const Status& status); -PROTOBUF_EXPORT bool IsUnknown(const Status& status); - -// These convenience functions create an `Status` object with an error code as -// indicated by the associated function name, using the error message passed in -// `message`. -// -// These functions are intentionally named `*Error` rather than `*Status` to -// match the names from Abseil: -// https://github.com/abseil/abseil-cpp/blob/2e9532cc6c701a8323d0cffb468999ab804095ab/absl/status/status.h#L716 -PROTOBUF_EXPORT Status AbortedError(StringPiece message); -PROTOBUF_EXPORT Status AlreadyExistsError(StringPiece message); -PROTOBUF_EXPORT Status CancelledError(StringPiece message); -PROTOBUF_EXPORT Status DataLossError(StringPiece message); -PROTOBUF_EXPORT Status DeadlineExceededError(StringPiece message); -PROTOBUF_EXPORT Status FailedPreconditionError(StringPiece message); -PROTOBUF_EXPORT Status InternalError(StringPiece message); -PROTOBUF_EXPORT Status InvalidArgumentError(StringPiece message); -PROTOBUF_EXPORT Status NotFoundError(StringPiece message); -PROTOBUF_EXPORT Status OutOfRangeError(StringPiece message); -PROTOBUF_EXPORT Status PermissionDeniedError(StringPiece message); -PROTOBUF_EXPORT Status ResourceExhaustedError(StringPiece message); -PROTOBUF_EXPORT Status UnauthenticatedError(StringPiece message); -PROTOBUF_EXPORT Status UnavailableError(StringPiece message); -PROTOBUF_EXPORT Status UnimplementedError(StringPiece message); -PROTOBUF_EXPORT Status UnknownError(StringPiece message); - -} // namespace status_internal - -using ::google::protobuf::util::status_internal::Status; -using ::google::protobuf::util::status_internal::StatusCode; - -using ::google::protobuf::util::status_internal::IsAborted; -using ::google::protobuf::util::status_internal::IsAlreadyExists; -using ::google::protobuf::util::status_internal::IsCancelled; -using ::google::protobuf::util::status_internal::IsDataLoss; -using ::google::protobuf::util::status_internal::IsDeadlineExceeded; -using ::google::protobuf::util::status_internal::IsFailedPrecondition; -using ::google::protobuf::util::status_internal::IsInternal; -using ::google::protobuf::util::status_internal::IsInvalidArgument; -using ::google::protobuf::util::status_internal::IsNotFound; -using ::google::protobuf::util::status_internal::IsOutOfRange; -using ::google::protobuf::util::status_internal::IsPermissionDenied; -using ::google::protobuf::util::status_internal::IsResourceExhausted; -using ::google::protobuf::util::status_internal::IsUnauthenticated; -using ::google::protobuf::util::status_internal::IsUnavailable; -using ::google::protobuf::util::status_internal::IsUnimplemented; -using ::google::protobuf::util::status_internal::IsUnknown; - -using ::google::protobuf::util::status_internal::AbortedError; -using ::google::protobuf::util::status_internal::AlreadyExistsError; -using ::google::protobuf::util::status_internal::CancelledError; -using ::google::protobuf::util::status_internal::DataLossError; -using ::google::protobuf::util::status_internal::DeadlineExceededError; -using ::google::protobuf::util::status_internal::FailedPreconditionError; -using ::google::protobuf::util::status_internal::InternalError; -using ::google::protobuf::util::status_internal::InvalidArgumentError; -using ::google::protobuf::util::status_internal::NotFoundError; -using ::google::protobuf::util::status_internal::OkStatus; -using ::google::protobuf::util::status_internal::OutOfRangeError; -using ::google::protobuf::util::status_internal::PermissionDeniedError; -using ::google::protobuf::util::status_internal::ResourceExhaustedError; -using ::google::protobuf::util::status_internal::UnauthenticatedError; -using ::google::protobuf::util::status_internal::UnavailableError; -using ::google::protobuf::util::status_internal::UnimplementedError; -using ::google::protobuf::util::status_internal::UnknownError; - -} // namespace util -} // namespace protobuf -} // namespace google - -#include <google/protobuf/port_undef.inc> - -#endif // GOOGLE_PROTOBUF_STUBS_STATUS_H_ diff --git a/include/google/protobuf/stubs/stl_util.h b/include/google/protobuf/stubs/stl_util.h deleted file mode 100644 index e6260d0760..0000000000 --- a/include/google/protobuf/stubs/stl_util.h +++ /dev/null @@ -1,90 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// 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 -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -// from google3/util/gtl/stl_util.h - -#ifndef GOOGLE_PROTOBUF_STUBS_STL_UTIL_H__ -#define GOOGLE_PROTOBUF_STUBS_STL_UTIL_H__ - -#include <google/protobuf/stubs/common.h> - -#include <algorithm> - -// Must be last. -#include <google/protobuf/port_def.inc> // NOLINT - -namespace google { -namespace protobuf { - -// Inside Google, this function implements a horrible, disgusting hack in which -// we reach into the string's private implementation and resize it without -// initializing the new bytes. In some cases doing this can significantly -// improve performance. However, since it's totally non-portable it has no -// place in open source code. Feel free to fill this function in with your -// own disgusting hack if you want the perf boost. -inline void STLStringResizeUninitialized(std::string* s, size_t new_size) { - s->resize(new_size); -} - -// As above, but we make sure to follow amortized growth in which we always -// increase the capacity by at least a constant factor >1. -inline void STLStringResizeUninitializedAmortized(std::string* s, - size_t new_size) { - const size_t cap = s->capacity(); - if (new_size > cap) { - // Make sure to always grow by at least a factor of 2x. - s->reserve(std::max<size_t>(new_size, 2 * cap)); - } - STLStringResizeUninitialized(s, new_size); -} - -// Return a mutable char* pointing to a string's internal buffer, -// which may not be null-terminated. Writing through this pointer will -// modify the string. -// -// string_as_array(&str)[i] is valid for 0 <= i < str.size() until the -// next call to a string method that invalidates iterators. -// -// As of 2006-04, there is no standard-blessed way of getting a -// mutable reference to a string's internal buffer. However, issue 530 -// (http://www.open-std.org/JTC1/SC22/WG21/docs/lwg-active.html#530) -// proposes this as the method. According to Matt Austern, this should -// already work on all current implementations. -inline char* string_as_array(std::string* str) { - // DO NOT USE const_cast<char*>(str->data())! See the unittest for why. - return str->empty() ? nullptr : &*str->begin(); -} - -} // namespace protobuf -} // namespace google - -#include <google/protobuf/port_undef.inc> // NOLINT - -#endif // GOOGLE_PROTOBUF_STUBS_STL_UTIL_H__ diff --git a/include/google/protobuf/stubs/stringpiece.h b/include/google/protobuf/stubs/stringpiece.h deleted file mode 100644 index c63e25b254..0000000000 --- a/include/google/protobuf/stubs/stringpiece.h +++ /dev/null @@ -1,402 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// 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 -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -// A StringPiece points to part or all of a string, Cord, double-quoted string -// literal, or other string-like object. A StringPiece does *not* own the -// string to which it points. A StringPiece is not null-terminated. -// -// You can use StringPiece as a function or method parameter. A StringPiece -// parameter can receive a double-quoted string literal argument, a "const -// char*" argument, a string argument, or a StringPiece argument with no data -// copying. Systematic use of StringPiece for arguments reduces data -// copies and strlen() calls. -// -// Prefer passing StringPieces by value: -// void MyFunction(StringPiece arg); -// If circumstances require, you may also pass by const reference: -// void MyFunction(const StringPiece& arg); // not preferred -// Both of these have the same lifetime semantics. Passing by value -// generates slightly smaller code. For more discussion, see the thread -// go/stringpiecebyvalue on c-users. -// -// StringPiece is also suitable for local variables if you know that -// the lifetime of the underlying object is longer than the lifetime -// of your StringPiece variable. -// -// Beware of binding a StringPiece to a temporary: -// StringPiece sp = obj.MethodReturningString(); // BAD: lifetime problem -// -// This code is okay: -// string str = obj.MethodReturningString(); // str owns its contents -// StringPiece sp(str); // GOOD, because str outlives sp -// -// StringPiece is sometimes a poor choice for a return value and usually a poor -// choice for a data member. If you do use a StringPiece this way, it is your -// responsibility to ensure that the object pointed to by the StringPiece -// outlives the StringPiece. -// -// A StringPiece may represent just part of a string; thus the name "Piece". -// For example, when splitting a string, vector<StringPiece> is a natural data -// type for the output. For another example, a Cord is a non-contiguous, -// potentially very long string-like object. The Cord class has an interface -// that iteratively provides StringPiece objects that point to the -// successive pieces of a Cord object. -// -// A StringPiece is not null-terminated. If you write code that scans a -// StringPiece, you must check its length before reading any characters. -// Common idioms that work on null-terminated strings do not work on -// StringPiece objects. -// -// There are several ways to create a null StringPiece: -// StringPiece() -// StringPiece(nullptr) -// StringPiece(nullptr, 0) -// For all of the above, sp.data() == nullptr, sp.length() == 0, -// and sp.empty() == true. Also, if you create a StringPiece with -// a non-null pointer then sp.data() != nullptr. Once created, -// sp.data() will stay either nullptr or not-nullptr, except if you call -// sp.clear() or sp.set(). -// -// Thus, you can use StringPiece(nullptr) to signal an out-of-band value -// that is different from other StringPiece values. This is similar -// to the way that const char* p1 = nullptr; is different from -// const char* p2 = "";. -// -// There are many ways to create an empty StringPiece: -// StringPiece() -// StringPiece(nullptr) -// StringPiece(nullptr, 0) -// StringPiece("") -// StringPiece("", 0) -// StringPiece("abcdef", 0) -// StringPiece("abcdef"+6, 0) -// For all of the above, sp.length() will be 0 and sp.empty() will be true. -// For some empty StringPiece values, sp.data() will be nullptr. -// For some empty StringPiece values, sp.data() will not be nullptr. -// -// Be careful not to confuse: null StringPiece and empty StringPiece. -// The set of empty StringPieces properly includes the set of null StringPieces. -// That is, every null StringPiece is an empty StringPiece, -// but some non-null StringPieces are empty Stringpieces too. -// -// All empty StringPiece values compare equal to each other. -// Even a null StringPieces compares equal to a non-null empty StringPiece: -// StringPiece() == StringPiece("", 0) -// StringPiece(nullptr) == StringPiece("abc", 0) -// StringPiece(nullptr, 0) == StringPiece("abcdef"+6, 0) -// -// Look carefully at this example: -// StringPiece("") == nullptr -// True or false? TRUE, because StringPiece::operator== converts -// the right-hand side from nullptr to StringPiece(nullptr), -// and then compares two zero-length spans of characters. -// However, we are working to make this example produce a compile error. -// -// Suppose you want to write: -// bool TestWhat?(StringPiece sp) { return sp == nullptr; } // BAD -// Do not do that. Write one of these instead: -// bool TestNull(StringPiece sp) { return sp.data() == nullptr; } -// bool TestEmpty(StringPiece sp) { return sp.empty(); } -// The intent of TestWhat? is unclear. Did you mean TestNull or TestEmpty? -// Right now, TestWhat? behaves likes TestEmpty. -// We are working to make TestWhat? produce a compile error. -// TestNull is good to test for an out-of-band signal. -// TestEmpty is good to test for an empty StringPiece. -// -// Caveats (again): -// (1) The lifetime of the pointed-to string (or piece of a string) -// must be longer than the lifetime of the StringPiece. -// (2) There may or may not be a '\0' character after the end of -// StringPiece data. -// (3) A null StringPiece is empty. -// An empty StringPiece may or may not be a null StringPiece. - -#ifndef GOOGLE_PROTOBUF_STUBS_STRINGPIECE_H_ -#define GOOGLE_PROTOBUF_STUBS_STRINGPIECE_H_ - -#include <assert.h> -#include <stddef.h> -#include <string.h> -#include <iosfwd> -#include <limits> -#include <string> - -#if defined(__cpp_lib_string_view) -#include <string_view> -#endif - -#include <google/protobuf/stubs/hash.h> - -#include <google/protobuf/port_def.inc> - -namespace google { -namespace protobuf { -namespace stringpiece_internal { - -class PROTOBUF_EXPORT StringPiece { - public: - using traits_type = std::char_traits<char>; - using value_type = char; - using pointer = char*; - using const_pointer = const char*; - using reference = char&; - using const_reference = const char&; - using const_iterator = const char*; - using iterator = const_iterator; - using const_reverse_iterator = std::reverse_iterator<const_iterator>; - using reverse_iterator = const_reverse_iterator; - using size_type = size_t; - using difference_type = std::ptrdiff_t; - - private: - const char* ptr_; - size_type length_; - - static constexpr size_type kMaxSize = - (std::numeric_limits<difference_type>::max)(); - - static size_type CheckSize(size_type size) { -#if !defined(NDEBUG) || defined(_FORTIFY_SOURCE) && _FORTIFY_SOURCE > 0 - if (PROTOBUF_PREDICT_FALSE(size > kMaxSize)) { - // Some people grep for this message in logs - // so take care if you ever change it. - LogFatalSizeTooBig(size, "string length exceeds max size"); - } -#endif - return size; - } - - // Out-of-line error path. - static void LogFatalSizeTooBig(size_type size, const char* details); - - public: - // We provide non-explicit singleton constructors so users can pass - // in a "const char*" or a "string" wherever a "StringPiece" is - // expected. - // - // Style guide exception granted: - // http://goto/style-guide-exception-20978288 - StringPiece() : ptr_(nullptr), length_(0) {} - - StringPiece(const char* str) // NOLINT(runtime/explicit) - : ptr_(str), length_(0) { - if (str != nullptr) { - length_ = CheckSize(strlen(str)); - } - } - - template <class Allocator> - StringPiece( // NOLINT(runtime/explicit) - const std::basic_string<char, std::char_traits<char>, Allocator>& str) - : ptr_(str.data()), length_(0) { - length_ = CheckSize(str.size()); - } - -#if defined(__cpp_lib_string_view) - StringPiece( // NOLINT(runtime/explicit) - std::string_view str) - : ptr_(str.data()), length_(0) { - length_ = CheckSize(str.size()); - } -#endif - - StringPiece(const char* offset, size_type len) - : ptr_(offset), length_(CheckSize(len)) {} - - // data() may return a pointer to a buffer with embedded NULs, and the - // returned buffer may or may not be null terminated. Therefore it is - // typically a mistake to pass data() to a routine that expects a NUL - // terminated string. - const_pointer data() const { return ptr_; } - size_type size() const { return length_; } - size_type length() const { return length_; } - bool empty() const { return length_ == 0; } - - char operator[](size_type i) const { - assert(i < length_); - return ptr_[i]; - } - - void remove_prefix(size_type n) { - assert(length_ >= n); - ptr_ += n; - length_ -= n; - } - - void remove_suffix(size_type n) { - assert(length_ >= n); - length_ -= n; - } - - // returns {-1, 0, 1} - int compare(StringPiece x) const { - size_type min_size = length_ < x.length_ ? length_ : x.length_; - int r = memcmp(ptr_, x.ptr_, static_cast<size_t>(min_size)); - if (r < 0) return -1; - if (r > 0) return 1; - if (length_ < x.length_) return -1; - if (length_ > x.length_) return 1; - return 0; - } - - std::string as_string() const { return ToString(); } - // We also define ToString() here, since many other string-like - // interfaces name the routine that converts to a C++ string - // "ToString", and it's confusing to have the method that does that - // for a StringPiece be called "as_string()". We also leave the - // "as_string()" method defined here for existing code. - std::string ToString() const { - if (ptr_ == nullptr) return ""; - return std::string(data(), static_cast<size_type>(size())); - } - - explicit operator std::string() const { return ToString(); } - - void CopyToString(std::string* target) const; - void AppendToString(std::string* target) const; - - bool starts_with(StringPiece x) const { - return (length_ >= x.length_) && - (memcmp(ptr_, x.ptr_, static_cast<size_t>(x.length_)) == 0); - } - - bool ends_with(StringPiece x) const { - return ((length_ >= x.length_) && - (memcmp(ptr_ + (length_-x.length_), x.ptr_, - static_cast<size_t>(x.length_)) == 0)); - } - - // Checks whether StringPiece starts with x and if so advances the beginning - // of it to past the match. It's basically a shortcut for starts_with - // followed by remove_prefix. - bool Consume(StringPiece x); - // Like above but for the end of the string. - bool ConsumeFromEnd(StringPiece x); - - // standard STL container boilerplate - static const size_type npos; - const_iterator begin() const { return ptr_; } - const_iterator end() const { return ptr_ + length_; } - const_reverse_iterator rbegin() const { - return const_reverse_iterator(ptr_ + length_); - } - const_reverse_iterator rend() const { - return const_reverse_iterator(ptr_); - } - size_type max_size() const { return length_; } - size_type capacity() const { return length_; } - - // cpplint.py emits a false positive [build/include_what_you_use] - size_type copy(char* buf, size_type n, size_type pos = 0) const; // NOLINT - - bool contains(StringPiece s) const; - - size_type find(StringPiece s, size_type pos = 0) const; - size_type find(char c, size_type pos = 0) const; - size_type rfind(StringPiece s, size_type pos = npos) const; - size_type rfind(char c, size_type pos = npos) const; - - size_type find_first_of(StringPiece s, size_type pos = 0) const; - size_type find_first_of(char c, size_type pos = 0) const { - return find(c, pos); - } - size_type find_first_not_of(StringPiece s, size_type pos = 0) const; - size_type find_first_not_of(char c, size_type pos = 0) const; - size_type find_last_of(StringPiece s, size_type pos = npos) const; - size_type find_last_of(char c, size_type pos = npos) const { - return rfind(c, pos); - } - size_type find_last_not_of(StringPiece s, size_type pos = npos) const; - size_type find_last_not_of(char c, size_type pos = npos) const; - - StringPiece substr(size_type pos, size_type n = npos) const; -}; - -// This large function is defined inline so that in a fairly common case where -// one of the arguments is a literal, the compiler can elide a lot of the -// following comparisons. -inline bool operator==(StringPiece x, StringPiece y) { - StringPiece::size_type len = x.size(); - if (len != y.size()) { - return false; - } - - return x.data() == y.data() || len <= 0 || - memcmp(x.data(), y.data(), static_cast<size_t>(len)) == 0; -} - -inline bool operator!=(StringPiece x, StringPiece y) { - return !(x == y); -} - -inline bool operator<(StringPiece x, StringPiece y) { - const StringPiece::size_type min_size = - x.size() < y.size() ? x.size() : y.size(); - const int r = memcmp(x.data(), y.data(), static_cast<size_t>(min_size)); - return (r < 0) || (r == 0 && x.size() < y.size()); -} - -inline bool operator>(StringPiece x, StringPiece y) { - return y < x; -} - -inline bool operator<=(StringPiece x, StringPiece y) { - return !(x > y); -} - -inline bool operator>=(StringPiece x, StringPiece y) { - return !(x < y); -} - -// allow StringPiece to be logged -extern std::ostream& operator<<(std::ostream& o, StringPiece piece); - -} // namespace stringpiece_internal - -using ::google::protobuf::stringpiece_internal::StringPiece; - -} // namespace protobuf -} // namespace google - -GOOGLE_PROTOBUF_HASH_NAMESPACE_DECLARATION_START -template<> struct hash<StringPiece> { - size_t operator()(const StringPiece& s) const { - size_t result = 0; - for (const char *str = s.data(), *end = str + s.size(); str < end; str++) { - result = 5 * result + static_cast<size_t>(*str); - } - return result; - } -}; -GOOGLE_PROTOBUF_HASH_NAMESPACE_DECLARATION_END - -#include <google/protobuf/port_undef.inc> - -#endif // STRINGS_STRINGPIECE_H_ diff --git a/include/google/protobuf/stubs/strutil.h b/include/google/protobuf/stubs/strutil.h deleted file mode 100644 index 9658abf908..0000000000 --- a/include/google/protobuf/stubs/strutil.h +++ /dev/null @@ -1,950 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// 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 -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -// from google3/strings/strutil.h - -#ifndef GOOGLE_PROTOBUF_STUBS_STRUTIL_H__ -#define GOOGLE_PROTOBUF_STUBS_STRUTIL_H__ - -#include <google/protobuf/stubs/common.h> -#include <google/protobuf/stubs/stringpiece.h> -#include <stdlib.h> - -#include <cstring> -#include <google/protobuf/port_def.inc> -#include <vector> - -namespace google { -namespace protobuf { - -#if defined(_MSC_VER) && _MSC_VER < 1800 -#define strtoll _strtoi64 -#define strtoull _strtoui64 -#elif defined(__DECCXX) && defined(__osf__) -// HP C++ on Tru64 does not have strtoll, but strtol is already 64-bit. -#define strtoll strtol -#define strtoull strtoul -#endif - -// ---------------------------------------------------------------------- -// ascii_isalnum() -// Check if an ASCII character is alphanumeric. We can't use ctype's -// isalnum() because it is affected by locale. This function is applied -// to identifiers in the protocol buffer language, not to natural-language -// strings, so locale should not be taken into account. -// ascii_isdigit() -// Like above, but only accepts digits. -// ascii_isspace() -// Check if the character is a space character. -// ---------------------------------------------------------------------- - -inline bool ascii_isalnum(char c) { - return ('a' <= c && c <= 'z') || - ('A' <= c && c <= 'Z') || - ('0' <= c && c <= '9'); -} - -inline bool ascii_isdigit(char c) { - return ('0' <= c && c <= '9'); -} - -inline bool ascii_isspace(char c) { - return c == ' ' || c == '\t' || c == '\n' || c == '\v' || c == '\f' || - c == '\r'; -} - -inline bool ascii_isupper(char c) { - return c >= 'A' && c <= 'Z'; -} - -inline bool ascii_islower(char c) { - return c >= 'a' && c <= 'z'; -} - -inline char ascii_toupper(char c) { - return ascii_islower(c) ? c - ('a' - 'A') : c; -} - -inline char ascii_tolower(char c) { - return ascii_isupper(c) ? c + ('a' - 'A') : c; -} - -inline int hex_digit_to_int(char c) { - /* Assume ASCII. */ - int x = static_cast<unsigned char>(c); - if (x > '9') { - x += 9; - } - return x & 0xf; -} - -// ---------------------------------------------------------------------- -// HasPrefixString() -// Check if a string begins with a given prefix. -// StripPrefixString() -// Given a string and a putative prefix, returns the string minus the -// prefix string if the prefix matches, otherwise the original -// string. -// ---------------------------------------------------------------------- -inline bool HasPrefixString(StringPiece str, StringPiece prefix) { - return str.size() >= prefix.size() && - memcmp(str.data(), prefix.data(), prefix.size()) == 0; -} - -inline std::string StripPrefixString(const std::string& str, - const std::string& prefix) { - if (HasPrefixString(str, prefix)) { - return str.substr(prefix.size()); - } else { - return str; - } -} - -// ---------------------------------------------------------------------- -// HasSuffixString() -// Return true if str ends in suffix. -// StripSuffixString() -// Given a string and a putative suffix, returns the string minus the -// suffix string if the suffix matches, otherwise the original -// string. -// ---------------------------------------------------------------------- -inline bool HasSuffixString(StringPiece str, StringPiece suffix) { - return str.size() >= suffix.size() && - memcmp(str.data() + str.size() - suffix.size(), suffix.data(), - suffix.size()) == 0; -} - -inline std::string StripSuffixString(const std::string& str, - const std::string& suffix) { - if (HasSuffixString(str, suffix)) { - return str.substr(0, str.size() - suffix.size()); - } else { - return str; - } -} - -// ---------------------------------------------------------------------- -// ReplaceCharacters -// Replaces any occurrence of the character 'remove' (or the characters -// in 'remove') with the character 'replacewith'. -// Good for keeping html characters or protocol characters (\t) out -// of places where they might cause a problem. -// StripWhitespace -// Removes whitespaces from both ends of the given string. -// ---------------------------------------------------------------------- -PROTOBUF_EXPORT void ReplaceCharacters(std::string* s, const char* remove, - char replacewith); - -PROTOBUF_EXPORT void StripWhitespace(std::string* s); - -// ---------------------------------------------------------------------- -// LowerString() -// UpperString() -// ToUpper() -// Convert the characters in "s" to lowercase or uppercase. ASCII-only: -// these functions intentionally ignore locale because they are applied to -// identifiers used in the Protocol Buffer language, not to natural-language -// strings. -// ---------------------------------------------------------------------- - -inline void LowerString(std::string* s) { - std::string::iterator end = s->end(); - for (std::string::iterator i = s->begin(); i != end; ++i) { - // tolower() changes based on locale. We don't want this! - if ('A' <= *i && *i <= 'Z') *i += 'a' - 'A'; - } -} - -inline void UpperString(std::string* s) { - std::string::iterator end = s->end(); - for (std::string::iterator i = s->begin(); i != end; ++i) { - // toupper() changes based on locale. We don't want this! - if ('a' <= *i && *i <= 'z') *i += 'A' - 'a'; - } -} - -inline void ToUpper(std::string* s) { UpperString(s); } - -inline std::string ToUpper(const std::string& s) { - std::string out = s; - UpperString(&out); - return out; -} - -// ---------------------------------------------------------------------- -// StringReplace() -// Give me a string and two patterns "old" and "new", and I replace -// the first instance of "old" in the string with "new", if it -// exists. RETURN a new string, regardless of whether the replacement -// happened or not. -// ---------------------------------------------------------------------- - -PROTOBUF_EXPORT std::string StringReplace(const std::string& s, - const std::string& oldsub, - const std::string& newsub, - bool replace_all); - -// ---------------------------------------------------------------------- -// SplitStringUsing() -// Split a string using a character delimiter. Append the components -// to 'result'. If there are consecutive delimiters, this function skips -// over all of them. -// ---------------------------------------------------------------------- -PROTOBUF_EXPORT void SplitStringUsing(StringPiece full, const char* delim, - std::vector<std::string>* res); - -// Split a string using one or more byte delimiters, presented -// as a nul-terminated c string. Append the components to 'result'. -// If there are consecutive delimiters, this function will return -// corresponding empty strings. If you want to drop the empty -// strings, try SplitStringUsing(). -// -// If "full" is the empty string, yields an empty string as the only value. -// ---------------------------------------------------------------------- -PROTOBUF_EXPORT void SplitStringAllowEmpty(StringPiece full, const char* delim, - std::vector<std::string>* result); - -// ---------------------------------------------------------------------- -// Split() -// Split a string using a character delimiter. -// ---------------------------------------------------------------------- -inline std::vector<std::string> Split(StringPiece full, const char* delim, - bool skip_empty = true) { - std::vector<std::string> result; - if (skip_empty) { - SplitStringUsing(full, delim, &result); - } else { - SplitStringAllowEmpty(full, delim, &result); - } - return result; -} - -// ---------------------------------------------------------------------- -// JoinStrings() -// These methods concatenate a vector of strings into a C++ string, using -// the C-string "delim" as a separator between components. There are two -// flavors of the function, one flavor returns the concatenated string, -// another takes a pointer to the target string. In the latter case the -// target string is cleared and overwritten. -// ---------------------------------------------------------------------- -PROTOBUF_EXPORT void JoinStrings(const std::vector<std::string>& components, - const char* delim, std::string* result); - -inline std::string JoinStrings(const std::vector<std::string>& components, - const char* delim) { - std::string result; - JoinStrings(components, delim, &result); - return result; -} - -// ---------------------------------------------------------------------- -// UnescapeCEscapeSequences() -// Copies "source" to "dest", rewriting C-style escape sequences -// -- '\n', '\r', '\\', '\ooo', etc -- to their ASCII -// equivalents. "dest" must be sufficiently large to hold all -// the characters in the rewritten string (i.e. at least as large -// as strlen(source) + 1 should be safe, since the replacements -// are always shorter than the original escaped sequences). It's -// safe for source and dest to be the same. RETURNS the length -// of dest. -// -// It allows hex sequences \xhh, or generally \xhhhhh with an -// arbitrary number of hex digits, but all of them together must -// specify a value of a single byte (e.g. \x0045 is equivalent -// to \x45, and \x1234 is erroneous). -// -// It also allows escape sequences of the form \uhhhh (exactly four -// hex digits, upper or lower case) or \Uhhhhhhhh (exactly eight -// hex digits, upper or lower case) to specify a Unicode code -// point. The dest array will contain the UTF8-encoded version of -// that code-point (e.g., if source contains \u2019, then dest will -// contain the three bytes 0xE2, 0x80, and 0x99). -// -// Errors: In the first form of the call, errors are reported with -// LOG(ERROR). The same is true for the second form of the call if -// the pointer to the string std::vector is nullptr; otherwise, error -// messages are stored in the std::vector. In either case, the effect on -// the dest array is not defined, but rest of the source will be -// processed. -// ---------------------------------------------------------------------- - -PROTOBUF_EXPORT int UnescapeCEscapeSequences(const char* source, char* dest); -PROTOBUF_EXPORT int UnescapeCEscapeSequences(const char* source, char* dest, - std::vector<std::string>* errors); - -// ---------------------------------------------------------------------- -// UnescapeCEscapeString() -// This does the same thing as UnescapeCEscapeSequences, but creates -// a new string. The caller does not need to worry about allocating -// a dest buffer. This should be used for non performance critical -// tasks such as printing debug messages. It is safe for src and dest -// to be the same. -// -// The second call stores its errors in a supplied string vector. -// If the string vector pointer is nullptr, it reports the errors with LOG(). -// -// In the first and second calls, the length of dest is returned. In the -// the third call, the new string is returned. -// ---------------------------------------------------------------------- - -PROTOBUF_EXPORT int UnescapeCEscapeString(const std::string& src, - std::string* dest); -PROTOBUF_EXPORT int UnescapeCEscapeString(const std::string& src, - std::string* dest, - std::vector<std::string>* errors); -PROTOBUF_EXPORT std::string UnescapeCEscapeString(const std::string& src); - -// ---------------------------------------------------------------------- -// CEscape() -// Escapes 'src' using C-style escape sequences and returns the resulting -// string. -// -// Escaped chars: \n, \r, \t, ", ', \, and !isprint(). -// ---------------------------------------------------------------------- -PROTOBUF_EXPORT std::string CEscape(const std::string& src); - -// ---------------------------------------------------------------------- -// CEscapeAndAppend() -// Escapes 'src' using C-style escape sequences, and appends the escaped -// string to 'dest'. -// ---------------------------------------------------------------------- -PROTOBUF_EXPORT void CEscapeAndAppend(StringPiece src, std::string* dest); - -namespace strings { -// Like CEscape() but does not escape bytes with the upper bit set. -PROTOBUF_EXPORT std::string Utf8SafeCEscape(const std::string& src); - -// Like CEscape() but uses hex (\x) escapes instead of octals. -PROTOBUF_EXPORT std::string CHexEscape(const std::string& src); -} // namespace strings - -// ---------------------------------------------------------------------- -// strto32() -// strtou32() -// strto64() -// strtou64() -// Architecture-neutral plug compatible replacements for strtol() and -// strtoul(). Long's have different lengths on ILP-32 and LP-64 -// platforms, so using these is safer, from the point of view of -// overflow behavior, than using the standard libc functions. -// ---------------------------------------------------------------------- -PROTOBUF_EXPORT int32_t strto32_adaptor(const char* nptr, char** endptr, - int base); -PROTOBUF_EXPORT uint32_t strtou32_adaptor(const char* nptr, char** endptr, - int base); - -inline int32_t strto32(const char *nptr, char **endptr, int base) { - if (sizeof(int32_t) == sizeof(long)) - return strtol(nptr, endptr, base); - else - return strto32_adaptor(nptr, endptr, base); -} - -inline uint32_t strtou32(const char *nptr, char **endptr, int base) { - if (sizeof(uint32_t) == sizeof(unsigned long)) - return strtoul(nptr, endptr, base); - else - return strtou32_adaptor(nptr, endptr, base); -} - -// For now, long long is 64-bit on all the platforms we care about, so these -// functions can simply pass the call to strto[u]ll. -inline int64_t strto64(const char *nptr, char **endptr, int base) { - static_assert(sizeof(int64_t) == sizeof(long long), - "sizeof int64_t is not sizeof long long"); - return strtoll(nptr, endptr, base); -} - -inline uint64_t strtou64(const char *nptr, char **endptr, int base) { - static_assert(sizeof(uint64_t) == sizeof(unsigned long long), - "sizeof uint64_t is not sizeof unsigned long long"); - return strtoull(nptr, endptr, base); -} - -// ---------------------------------------------------------------------- -// safe_strtob() -// safe_strto32() -// safe_strtou32() -// safe_strto64() -// safe_strtou64() -// safe_strtof() -// safe_strtod() -// ---------------------------------------------------------------------- -PROTOBUF_EXPORT bool safe_strtob(StringPiece str, bool* value); - -PROTOBUF_EXPORT bool safe_strto32(const std::string& str, int32_t* value); -PROTOBUF_EXPORT bool safe_strtou32(const std::string& str, uint32_t* value); -inline bool safe_strto32(const char* str, int32_t* value) { - return safe_strto32(std::string(str), value); -} -inline bool safe_strto32(StringPiece str, int32_t* value) { - return safe_strto32(str.ToString(), value); -} -inline bool safe_strtou32(const char* str, uint32_t* value) { - return safe_strtou32(std::string(str), value); -} -inline bool safe_strtou32(StringPiece str, uint32_t* value) { - return safe_strtou32(str.ToString(), value); -} - -PROTOBUF_EXPORT bool safe_strto64(const std::string& str, int64_t* value); -PROTOBUF_EXPORT bool safe_strtou64(const std::string& str, uint64_t* value); -inline bool safe_strto64(const char* str, int64_t* value) { - return safe_strto64(std::string(str), value); -} -inline bool safe_strto64(StringPiece str, int64_t* value) { - return safe_strto64(str.ToString(), value); -} -inline bool safe_strtou64(const char* str, uint64_t* value) { - return safe_strtou64(std::string(str), value); -} -inline bool safe_strtou64(StringPiece str, uint64_t* value) { - return safe_strtou64(str.ToString(), value); -} - -PROTOBUF_EXPORT bool safe_strtof(const char* str, float* value); -PROTOBUF_EXPORT bool safe_strtod(const char* str, double* value); -inline bool safe_strtof(const std::string& str, float* value) { - return safe_strtof(str.c_str(), value); -} -inline bool safe_strtod(const std::string& str, double* value) { - return safe_strtod(str.c_str(), value); -} -inline bool safe_strtof(StringPiece str, float* value) { - return safe_strtof(str.ToString(), value); -} -inline bool safe_strtod(StringPiece str, double* value) { - return safe_strtod(str.ToString(), value); -} - -// ---------------------------------------------------------------------- -// FastIntToBuffer() -// FastHexToBuffer() -// FastHex64ToBuffer() -// FastHex32ToBuffer() -// FastTimeToBuffer() -// These are intended for speed. FastIntToBuffer() assumes the -// integer is non-negative. FastHexToBuffer() puts output in -// hex rather than decimal. FastTimeToBuffer() puts the output -// into RFC822 format. -// -// FastHex64ToBuffer() puts a 64-bit unsigned value in hex-format, -// padded to exactly 16 bytes (plus one byte for '\0') -// -// FastHex32ToBuffer() puts a 32-bit unsigned value in hex-format, -// padded to exactly 8 bytes (plus one byte for '\0') -// -// All functions take the output buffer as an arg. -// They all return a pointer to the beginning of the output, -// which may not be the beginning of the input buffer. -// ---------------------------------------------------------------------- - -// Suggested buffer size for FastToBuffer functions. Also works with -// DoubleToBuffer() and FloatToBuffer(). -static const int kFastToBufferSize = 32; - -PROTOBUF_EXPORT char* FastInt32ToBuffer(int32_t i, char* buffer); -PROTOBUF_EXPORT char* FastInt64ToBuffer(int64_t i, char* buffer); -char* FastUInt32ToBuffer(uint32_t i, char* buffer); // inline below -char* FastUInt64ToBuffer(uint64_t i, char* buffer); // inline below -PROTOBUF_EXPORT char* FastHexToBuffer(int i, char* buffer); -PROTOBUF_EXPORT char* FastHex64ToBuffer(uint64_t i, char* buffer); -PROTOBUF_EXPORT char* FastHex32ToBuffer(uint32_t i, char* buffer); - -// at least 22 bytes long -inline char* FastIntToBuffer(int i, char* buffer) { - return (sizeof(i) == 4 ? - FastInt32ToBuffer(i, buffer) : FastInt64ToBuffer(i, buffer)); -} -inline char* FastUIntToBuffer(unsigned int i, char* buffer) { - return (sizeof(i) == 4 ? - FastUInt32ToBuffer(i, buffer) : FastUInt64ToBuffer(i, buffer)); -} -inline char* FastLongToBuffer(long i, char* buffer) { - return (sizeof(i) == 4 ? - FastInt32ToBuffer(i, buffer) : FastInt64ToBuffer(i, buffer)); -} -inline char* FastULongToBuffer(unsigned long i, char* buffer) { - return (sizeof(i) == 4 ? - FastUInt32ToBuffer(i, buffer) : FastUInt64ToBuffer(i, buffer)); -} - -// ---------------------------------------------------------------------- -// FastInt32ToBufferLeft() -// FastUInt32ToBufferLeft() -// FastInt64ToBufferLeft() -// FastUInt64ToBufferLeft() -// -// Like the Fast*ToBuffer() functions above, these are intended for speed. -// Unlike the Fast*ToBuffer() functions, however, these functions write -// their output to the beginning of the buffer (hence the name, as the -// output is left-aligned). The caller is responsible for ensuring that -// the buffer has enough space to hold the output. -// -// Returns a pointer to the end of the string (i.e. the null character -// terminating the string). -// ---------------------------------------------------------------------- - -PROTOBUF_EXPORT char* FastInt32ToBufferLeft(int32_t i, char* buffer); -PROTOBUF_EXPORT char* FastUInt32ToBufferLeft(uint32_t i, char* buffer); -PROTOBUF_EXPORT char* FastInt64ToBufferLeft(int64_t i, char* buffer); -PROTOBUF_EXPORT char* FastUInt64ToBufferLeft(uint64_t i, char* buffer); - -// Just define these in terms of the above. -inline char* FastUInt32ToBuffer(uint32_t i, char* buffer) { - FastUInt32ToBufferLeft(i, buffer); - return buffer; -} -inline char* FastUInt64ToBuffer(uint64_t i, char* buffer) { - FastUInt64ToBufferLeft(i, buffer); - return buffer; -} - -inline std::string SimpleBtoa(bool value) { return value ? "true" : "false"; } - -// ---------------------------------------------------------------------- -// SimpleItoa() -// Description: converts an integer to a string. -// -// Return value: string -// ---------------------------------------------------------------------- -PROTOBUF_EXPORT std::string SimpleItoa(int i); -PROTOBUF_EXPORT std::string SimpleItoa(unsigned int i); -PROTOBUF_EXPORT std::string SimpleItoa(long i); -PROTOBUF_EXPORT std::string SimpleItoa(unsigned long i); -PROTOBUF_EXPORT std::string SimpleItoa(long long i); -PROTOBUF_EXPORT std::string SimpleItoa(unsigned long long i); - -// ---------------------------------------------------------------------- -// SimpleDtoa() -// SimpleFtoa() -// DoubleToBuffer() -// FloatToBuffer() -// Description: converts a double or float to a string which, if -// passed to NoLocaleStrtod(), will produce the exact same original double -// (except in case of NaN; all NaNs are considered the same value). -// We try to keep the string short but it's not guaranteed to be as -// short as possible. -// -// DoubleToBuffer() and FloatToBuffer() write the text to the given -// buffer and return it. The buffer must be at least -// kDoubleToBufferSize bytes for doubles and kFloatToBufferSize -// bytes for floats. kFastToBufferSize is also guaranteed to be large -// enough to hold either. -// -// Return value: string -// ---------------------------------------------------------------------- -PROTOBUF_EXPORT std::string SimpleDtoa(double value); -PROTOBUF_EXPORT std::string SimpleFtoa(float value); - -PROTOBUF_EXPORT char* DoubleToBuffer(double i, char* buffer); -PROTOBUF_EXPORT char* FloatToBuffer(float i, char* buffer); - -// In practice, doubles should never need more than 24 bytes and floats -// should never need more than 14 (including null terminators), but we -// overestimate to be safe. -static const int kDoubleToBufferSize = 32; -static const int kFloatToBufferSize = 24; - -namespace strings { - -enum PadSpec { - NO_PAD = 1, - ZERO_PAD_2, - ZERO_PAD_3, - ZERO_PAD_4, - ZERO_PAD_5, - ZERO_PAD_6, - ZERO_PAD_7, - ZERO_PAD_8, - ZERO_PAD_9, - ZERO_PAD_10, - ZERO_PAD_11, - ZERO_PAD_12, - ZERO_PAD_13, - ZERO_PAD_14, - ZERO_PAD_15, - ZERO_PAD_16, -}; - -struct Hex { - uint64_t value; - enum PadSpec spec; - template <class Int> - explicit Hex(Int v, PadSpec s = NO_PAD) - : spec(s) { - // Prevent sign-extension by casting integers to - // their unsigned counterparts. -#ifdef LANG_CXX11 - static_assert( - sizeof(v) == 1 || sizeof(v) == 2 || sizeof(v) == 4 || sizeof(v) == 8, - "Unknown integer type"); -#endif - value = sizeof(v) == 1 ? static_cast<uint8_t>(v) - : sizeof(v) == 2 ? static_cast<uint16_t>(v) - : sizeof(v) == 4 ? static_cast<uint32_t>(v) - : static_cast<uint64_t>(v); - } -}; - -struct PROTOBUF_EXPORT AlphaNum { - const char *piece_data_; // move these to string_ref eventually - size_t piece_size_; // move these to string_ref eventually - - char digits[kFastToBufferSize]; - - // No bool ctor -- bools convert to an integral type. - // A bool ctor would also convert incoming pointers (bletch). - - AlphaNum(int i32) - : piece_data_(digits), - piece_size_(FastInt32ToBufferLeft(i32, digits) - &digits[0]) {} - AlphaNum(unsigned int u32) - : piece_data_(digits), - piece_size_(FastUInt32ToBufferLeft(u32, digits) - &digits[0]) {} - AlphaNum(long long i64) - : piece_data_(digits), - piece_size_(FastInt64ToBufferLeft(i64, digits) - &digits[0]) {} - AlphaNum(unsigned long long u64) - : piece_data_(digits), - piece_size_(FastUInt64ToBufferLeft(u64, digits) - &digits[0]) {} - - // Note: on some architectures, "long" is only 32 bits, not 64, but the - // performance hit of using FastInt64ToBufferLeft to handle 32-bit values - // is quite minor. - AlphaNum(long i64) - : piece_data_(digits), - piece_size_(FastInt64ToBufferLeft(i64, digits) - &digits[0]) {} - AlphaNum(unsigned long u64) - : piece_data_(digits), - piece_size_(FastUInt64ToBufferLeft(u64, digits) - &digits[0]) {} - - AlphaNum(float f) - : piece_data_(digits), piece_size_(strlen(FloatToBuffer(f, digits))) {} - AlphaNum(double f) - : piece_data_(digits), piece_size_(strlen(DoubleToBuffer(f, digits))) {} - - AlphaNum(Hex hex); - - AlphaNum(const char* c_str) - : piece_data_(c_str), piece_size_(strlen(c_str)) {} - // TODO: Add a string_ref constructor, eventually - // AlphaNum(const StringPiece &pc) : piece(pc) {} - - AlphaNum(const std::string& str) - : piece_data_(str.data()), piece_size_(str.size()) {} - - AlphaNum(StringPiece str) - : piece_data_(str.data()), piece_size_(str.size()) {} - - size_t size() const { return piece_size_; } - const char *data() const { return piece_data_; } - - private: - // Use ":" not ':' - AlphaNum(char c); // NOLINT(runtime/explicit) - - // Disallow copy and assign. - AlphaNum(const AlphaNum&); - void operator=(const AlphaNum&); -}; - -} // namespace strings - -using strings::AlphaNum; - -// ---------------------------------------------------------------------- -// StrCat() -// This merges the given strings or numbers, with no delimiter. This -// is designed to be the fastest possible way to construct a string out -// of a mix of raw C strings, strings, bool values, -// and numeric values. -// -// Don't use this for user-visible strings. The localization process -// works poorly on strings built up out of fragments. -// -// For clarity and performance, don't use StrCat when appending to a -// string. In particular, avoid using any of these (anti-)patterns: -// str.append(StrCat(...) -// str += StrCat(...) -// str = StrCat(str, ...) -// where the last is the worse, with the potential to change a loop -// from a linear time operation with O(1) dynamic allocations into a -// quadratic time operation with O(n) dynamic allocations. StrAppend -// is a better choice than any of the above, subject to the restriction -// of StrAppend(&str, a, b, c, ...) that none of the a, b, c, ... may -// be a reference into str. -// ---------------------------------------------------------------------- - -PROTOBUF_EXPORT std::string StrCat(const AlphaNum& a, const AlphaNum& b); -PROTOBUF_EXPORT std::string StrCat(const AlphaNum& a, const AlphaNum& b, - const AlphaNum& c); -PROTOBUF_EXPORT std::string StrCat(const AlphaNum& a, const AlphaNum& b, - const AlphaNum& c, const AlphaNum& d); -PROTOBUF_EXPORT std::string StrCat(const AlphaNum& a, const AlphaNum& b, - const AlphaNum& c, const AlphaNum& d, - const AlphaNum& e); -PROTOBUF_EXPORT std::string StrCat(const AlphaNum& a, const AlphaNum& b, - const AlphaNum& c, const AlphaNum& d, - const AlphaNum& e, const AlphaNum& f); -PROTOBUF_EXPORT std::string StrCat(const AlphaNum& a, const AlphaNum& b, - const AlphaNum& c, const AlphaNum& d, - const AlphaNum& e, const AlphaNum& f, - const AlphaNum& g); -PROTOBUF_EXPORT std::string StrCat(const AlphaNum& a, const AlphaNum& b, - const AlphaNum& c, const AlphaNum& d, - const AlphaNum& e, const AlphaNum& f, - const AlphaNum& g, const AlphaNum& h); -PROTOBUF_EXPORT std::string StrCat(const AlphaNum& a, const AlphaNum& b, - const AlphaNum& c, const AlphaNum& d, - const AlphaNum& e, const AlphaNum& f, - const AlphaNum& g, const AlphaNum& h, - const AlphaNum& i); - -inline std::string StrCat(const AlphaNum& a) { - return std::string(a.data(), a.size()); -} - -// ---------------------------------------------------------------------- -// StrAppend() -// Same as above, but adds the output to the given string. -// WARNING: For speed, StrAppend does not try to check each of its input -// arguments to be sure that they are not a subset of the string being -// appended to. That is, while this will work: -// -// string s = "foo"; -// s += s; -// -// This will not (necessarily) work: -// -// string s = "foo"; -// StrAppend(&s, s); -// -// Note: while StrCat supports appending up to 9 arguments, StrAppend -// is currently limited to 4. That's rarely an issue except when -// automatically transforming StrCat to StrAppend, and can easily be -// worked around as consecutive calls to StrAppend are quite efficient. -// ---------------------------------------------------------------------- - -PROTOBUF_EXPORT void StrAppend(std::string* dest, const AlphaNum& a); -PROTOBUF_EXPORT void StrAppend(std::string* dest, const AlphaNum& a, - const AlphaNum& b); -PROTOBUF_EXPORT void StrAppend(std::string* dest, const AlphaNum& a, - const AlphaNum& b, const AlphaNum& c); -PROTOBUF_EXPORT void StrAppend(std::string* dest, const AlphaNum& a, - const AlphaNum& b, const AlphaNum& c, - const AlphaNum& d); - -// ---------------------------------------------------------------------- -// Join() -// These methods concatenate a range of components into a C++ string, using -// the C-string "delim" as a separator between components. -// ---------------------------------------------------------------------- -template <typename Iterator> -void Join(Iterator start, Iterator end, const char* delim, - std::string* result) { - for (Iterator it = start; it != end; ++it) { - if (it != start) { - result->append(delim); - } - StrAppend(result, *it); - } -} - -template <typename Range> -std::string Join(const Range& components, const char* delim) { - std::string result; - Join(components.begin(), components.end(), delim, &result); - return result; -} - -// ---------------------------------------------------------------------- -// ToHex() -// Return a lower-case hex string representation of the given integer. -// ---------------------------------------------------------------------- -PROTOBUF_EXPORT std::string ToHex(uint64_t num); - -// ---------------------------------------------------------------------- -// GlobalReplaceSubstring() -// Replaces all instances of a substring in a string. Does nothing -// if 'substring' is empty. Returns the number of replacements. -// -// NOTE: The string pieces must not overlap s. -// ---------------------------------------------------------------------- -PROTOBUF_EXPORT int GlobalReplaceSubstring(const std::string& substring, - const std::string& replacement, - std::string* s); - -// ---------------------------------------------------------------------- -// Base64Unescape() -// Converts "src" which is encoded in Base64 to its binary equivalent and -// writes it to "dest". If src contains invalid characters, dest is cleared -// and the function returns false. Returns true on success. -// ---------------------------------------------------------------------- -PROTOBUF_EXPORT bool Base64Unescape(StringPiece src, std::string* dest); - -// ---------------------------------------------------------------------- -// WebSafeBase64Unescape() -// This is a variation of Base64Unescape which uses '-' instead of '+', and -// '_' instead of '/'. src is not null terminated, instead specify len. I -// recommend that slen<szdest, but we honor szdest anyway. -// RETURNS the length of dest, or -1 if src contains invalid chars. - -// The variation that stores into a string clears the string first, and -// returns false (with dest empty) if src contains invalid chars; for -// this version src and dest must be different strings. -// ---------------------------------------------------------------------- -PROTOBUF_EXPORT int WebSafeBase64Unescape(const char* src, int slen, char* dest, - int szdest); -PROTOBUF_EXPORT bool WebSafeBase64Unescape(StringPiece src, std::string* dest); - -// Return the length to use for the output buffer given to the base64 escape -// routines. Make sure to use the same value for do_padding in both. -// This function may return incorrect results if given input_len values that -// are extremely high, which should happen rarely. -PROTOBUF_EXPORT int CalculateBase64EscapedLen(int input_len, bool do_padding); -// Use this version when calling Base64Escape without a do_padding arg. -PROTOBUF_EXPORT int CalculateBase64EscapedLen(int input_len); - -// ---------------------------------------------------------------------- -// Base64Escape() -// WebSafeBase64Escape() -// Encode "src" to "dest" using base64 encoding. -// src is not null terminated, instead specify len. -// 'dest' should have at least CalculateBase64EscapedLen() length. -// RETURNS the length of dest. -// The WebSafe variation use '-' instead of '+' and '_' instead of '/' -// so that we can place the out in the URL or cookies without having -// to escape them. It also has an extra parameter "do_padding", -// which when set to false will prevent padding with "=". -// ---------------------------------------------------------------------- -PROTOBUF_EXPORT int Base64Escape(const unsigned char* src, int slen, char* dest, - int szdest); -PROTOBUF_EXPORT int WebSafeBase64Escape(const unsigned char* src, int slen, - char* dest, int szdest, - bool do_padding); -// Encode src into dest with padding. -PROTOBUF_EXPORT void Base64Escape(StringPiece src, std::string* dest); -// Encode src into dest web-safely without padding. -PROTOBUF_EXPORT void WebSafeBase64Escape(StringPiece src, std::string* dest); -// Encode src into dest web-safely with padding. -PROTOBUF_EXPORT void WebSafeBase64EscapeWithPadding(StringPiece src, - std::string* dest); - -PROTOBUF_EXPORT void Base64Escape(const unsigned char* src, int szsrc, - std::string* dest, bool do_padding); -PROTOBUF_EXPORT void WebSafeBase64Escape(const unsigned char* src, int szsrc, - std::string* dest, bool do_padding); - -inline bool IsValidCodePoint(uint32_t code_point) { - return code_point < 0xD800 || - (code_point >= 0xE000 && code_point <= 0x10FFFF); -} - -static const int UTFmax = 4; -// ---------------------------------------------------------------------- -// EncodeAsUTF8Char() -// Helper to append a Unicode code point to a string as UTF8, without bringing -// in any external dependencies. The output buffer must be as least 4 bytes -// large. -// ---------------------------------------------------------------------- -PROTOBUF_EXPORT int EncodeAsUTF8Char(uint32_t code_point, char* output); - -// ---------------------------------------------------------------------- -// UTF8FirstLetterNumBytes() -// Length of the first UTF-8 character. -// ---------------------------------------------------------------------- -PROTOBUF_EXPORT int UTF8FirstLetterNumBytes(const char* src, int len); - -// From google3/third_party/absl/strings/escaping.h - -// ---------------------------------------------------------------------- -// CleanStringLineEndings() -// Clean up a multi-line string to conform to Unix line endings. -// Reads from src and appends to dst, so usually dst should be empty. -// -// If there is no line ending at the end of a non-empty string, it can -// be added automatically. -// -// Four different types of input are correctly handled: -// -// - Unix/Linux files: line ending is LF: pass through unchanged -// -// - DOS/Windows files: line ending is CRLF: convert to LF -// -// - Legacy Mac files: line ending is CR: convert to LF -// -// - Garbled files: random line endings: convert gracefully -// lonely CR, lonely LF, CRLF: convert to LF -// -// @param src The multi-line string to convert -// @param dst The converted string is appended to this string -// @param auto_end_last_line Automatically terminate the last line -// -// Limitations: -// -// This does not do the right thing for CRCRLF files created by -// broken programs that do another Unix->DOS conversion on files -// that are already in CRLF format. For this, a two-pass approach -// brute-force would be needed that -// -// (1) determines the presence of LF (first one is ok) -// (2) if yes, removes any CR, else convert every CR to LF -PROTOBUF_EXPORT void CleanStringLineEndings(const std::string& src, - std::string* dst, - bool auto_end_last_line); - -// Same as above, but transforms the argument in place. -PROTOBUF_EXPORT void CleanStringLineEndings(std::string* str, - bool auto_end_last_line); - -namespace strings { -inline bool EndsWith(StringPiece text, StringPiece suffix) { - return suffix.empty() || - (text.size() >= suffix.size() && - memcmp(text.data() + (text.size() - suffix.size()), suffix.data(), - suffix.size()) == 0); -} -} // namespace strings - -namespace internal { - -// A locale-independent version of the standard strtod(), which always -// uses a dot as the decimal separator. -double NoLocaleStrtod(const char* str, char** endptr); - -} // namespace internal - -} // namespace protobuf -} // namespace google - -#include <google/protobuf/port_undef.inc> - -#endif // GOOGLE_PROTOBUF_STUBS_STRUTIL_H__ diff --git a/include/google/protobuf/stubs/template_util.h b/include/google/protobuf/stubs/template_util.h deleted file mode 100644 index feef904bea..0000000000 --- a/include/google/protobuf/stubs/template_util.h +++ /dev/null @@ -1,138 +0,0 @@ -// Copyright 2005 Google Inc. -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -// ---- -// Author: lar@google.com (Laramie Leavitt) -// -// Template metaprogramming utility functions. -// -// This code is compiled directly on many platforms, including client -// platforms like Windows, Mac, and embedded systems. Before making -// any changes here, make sure that you're not breaking any platforms. -// -// -// The names chosen here reflect those used in tr1 and the boost::mpl -// library, there are similar operations used in the Loki library as -// well. I prefer the boost names for 2 reasons: -// 1. I think that portions of the Boost libraries are more likely to -// be included in the c++ standard. -// 2. It is not impossible that some of the boost libraries will be -// included in our own build in the future. -// Both of these outcomes means that we may be able to directly replace -// some of these with boost equivalents. -// -#ifndef GOOGLE_PROTOBUF_TEMPLATE_UTIL_H_ -#define GOOGLE_PROTOBUF_TEMPLATE_UTIL_H_ - -namespace google { -namespace protobuf { -namespace internal { - -// Types small_ and big_ are guaranteed such that sizeof(small_) < -// sizeof(big_) -typedef char small_; - -struct big_ { - char dummy[2]; -}; - -// Identity metafunction. -template <class T> -struct identity_ { - typedef T type; -}; - -// integral_constant, defined in tr1, is a wrapper for an integer -// value. We don't really need this generality; we could get away -// with hardcoding the integer type to bool. We use the fully -// general integer_constant for compatibility with tr1. - -template<class T, T v> -struct integral_constant { - static const T value = v; - typedef T value_type; - typedef integral_constant<T, v> type; -}; - -template <class T, T v> const T integral_constant<T, v>::value; - - -// Abbreviations: true_type and false_type are structs that represent boolean -// true and false values. Also define the boost::mpl versions of those names, -// true_ and false_. -typedef integral_constant<bool, true> true_type; -typedef integral_constant<bool, false> false_type; -typedef true_type true_; -typedef false_type false_; - -// if_ is a templatized conditional statement. -// if_<cond, A, B> is a compile time evaluation of cond. -// if_<>::type contains A if cond is true, B otherwise. -template<bool cond, typename A, typename B> -struct if_{ - typedef A type; -}; - -template<typename A, typename B> -struct if_<false, A, B> { - typedef B type; -}; - - -// type_equals_ is a template type comparator, similar to Loki IsSameType. -// type_equals_<A, B>::value is true iff "A" is the same type as "B". -// -// New code should prefer base::is_same, defined in base/type_traits.h. -// It is functionally identical, but is_same is the standard spelling. -template<typename A, typename B> -struct type_equals_ : public false_ { -}; - -template<typename A> -struct type_equals_<A, A> : public true_ { -}; - -// and_ is a template && operator. -// and_<A, B>::value evaluates "A::value && B::value". -template<typename A, typename B> -struct and_ : public integral_constant<bool, (A::value && B::value)> { -}; - -// or_ is a template || operator. -// or_<A, B>::value evaluates "A::value || B::value". -template<typename A, typename B> -struct or_ : public integral_constant<bool, (A::value || B::value)> { -}; - - -} // namespace internal -} // namespace protobuf -} // namespace google - -#endif // GOOGLE_PROTOBUF_TEMPLATE_UTIL_H_ diff --git a/include/google/protobuf/text_format.h b/include/google/protobuf/text_format.h deleted file mode 100644 index e10bef7ddf..0000000000 --- a/include/google/protobuf/text_format.h +++ /dev/null @@ -1,693 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// 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 -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -// Author: jschorr@google.com (Joseph Schorr) -// Based on original Protocol Buffers design by -// Sanjay Ghemawat, Jeff Dean, and others. -// -// Utilities for printing and parsing protocol messages in a human-readable, -// text-based format. - -#ifndef GOOGLE_PROTOBUF_TEXT_FORMAT_H__ -#define GOOGLE_PROTOBUF_TEXT_FORMAT_H__ - - -#include <map> -#include <memory> -#include <string> -#include <vector> - -#include <google/protobuf/stubs/common.h> -#include <google/protobuf/port.h> -#include <google/protobuf/descriptor.h> -#include <google/protobuf/message.h> -#include <google/protobuf/message_lite.h> - -// Must be included last. -#include <google/protobuf/port_def.inc> - -#ifdef SWIG -#error "You cannot SWIG proto headers" -#endif - -namespace google { -namespace protobuf { - -namespace internal { -PROTOBUF_EXPORT extern const char kDebugStringSilentMarker[1]; -PROTOBUF_EXPORT extern const char kDebugStringSilentMarkerForDetection[3]; -} // namespace internal - -namespace io { -class ErrorCollector; // tokenizer.h -} - -// This class implements protocol buffer text format, colloquially known as text -// proto. Printing and parsing protocol messages in text format is useful for -// debugging and human editing of messages. -// -// This class is really a namespace that contains only static methods. -class PROTOBUF_EXPORT TextFormat { - public: - // Outputs a textual representation of the given message to the given - // output stream. Returns false if printing fails. - static bool Print(const Message& message, io::ZeroCopyOutputStream* output); - - // Print the fields in an UnknownFieldSet. They are printed by tag number - // only. Embedded messages are heuristically identified by attempting to - // parse them. Returns false if printing fails. - static bool PrintUnknownFields(const UnknownFieldSet& unknown_fields, - io::ZeroCopyOutputStream* output); - - // Like Print(), but outputs directly to a string. - // Note: output will be cleared prior to printing, and will be left empty - // even if printing fails. Returns false if printing fails. - static bool PrintToString(const Message& message, std::string* output); - - // Like PrintUnknownFields(), but outputs directly to a string. Returns - // false if printing fails. - static bool PrintUnknownFieldsToString(const UnknownFieldSet& unknown_fields, - std::string* output); - - // Outputs a textual representation of the value of the field supplied on - // the message supplied. For non-repeated fields, an index of -1 must - // be supplied. Note that this method will print the default value for a - // field if it is not set. - static void PrintFieldValueToString(const Message& message, - const FieldDescriptor* field, int index, - std::string* output); - - class PROTOBUF_EXPORT BaseTextGenerator { - public: - virtual ~BaseTextGenerator(); - - virtual void Indent() {} - virtual void Outdent() {} - // Returns the current indentation size in characters. - virtual size_t GetCurrentIndentationSize() const { return 0; } - - // Print text to the output stream. - virtual void Print(const char* text, size_t size) = 0; - - void PrintString(const std::string& str) { Print(str.data(), str.size()); } - - template <size_t n> - void PrintLiteral(const char (&text)[n]) { - Print(text, n - 1); // n includes the terminating zero character. - } - }; - - // The default printer that converts scalar values from fields into their - // string representation. - // You can derive from this FastFieldValuePrinter if you want to have fields - // to be printed in a different way and register it at the Printer. - class PROTOBUF_EXPORT FastFieldValuePrinter { - public: - FastFieldValuePrinter(); - virtual ~FastFieldValuePrinter(); - virtual void PrintBool(bool val, BaseTextGenerator* generator) const; - virtual void PrintInt32(int32_t val, BaseTextGenerator* generator) const; - virtual void PrintUInt32(uint32_t val, BaseTextGenerator* generator) const; - virtual void PrintInt64(int64_t val, BaseTextGenerator* generator) const; - virtual void PrintUInt64(uint64_t val, BaseTextGenerator* generator) const; - virtual void PrintFloat(float val, BaseTextGenerator* generator) const; - virtual void PrintDouble(double val, BaseTextGenerator* generator) const; - virtual void PrintString(const std::string& val, - BaseTextGenerator* generator) const; - virtual void PrintBytes(const std::string& val, - BaseTextGenerator* generator) const; - virtual void PrintEnum(int32_t val, const std::string& name, - BaseTextGenerator* generator) const; - virtual void PrintFieldName(const Message& message, int field_index, - int field_count, const Reflection* reflection, - const FieldDescriptor* field, - BaseTextGenerator* generator) const; - virtual void PrintFieldName(const Message& message, - const Reflection* reflection, - const FieldDescriptor* field, - BaseTextGenerator* generator) const; - virtual void PrintMessageStart(const Message& message, int field_index, - int field_count, bool single_line_mode, - BaseTextGenerator* generator) const; - // Allows to override the logic on how to print the content of a message. - // Return false to use the default printing logic. Note that it is legal for - // this function to print something and then return false to use the default - // content printing (although at that point it would behave similarly to - // PrintMessageStart). - virtual bool PrintMessageContent(const Message& message, int field_index, - int field_count, bool single_line_mode, - BaseTextGenerator* generator) const; - virtual void PrintMessageEnd(const Message& message, int field_index, - int field_count, bool single_line_mode, - BaseTextGenerator* generator) const; - - private: - GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(FastFieldValuePrinter); - }; - - // Deprecated: please use FastFieldValuePrinter instead. - class PROTOBUF_EXPORT FieldValuePrinter { - public: - FieldValuePrinter(); - virtual ~FieldValuePrinter(); - virtual std::string PrintBool(bool val) const; - virtual std::string PrintInt32(int32_t val) const; - virtual std::string PrintUInt32(uint32_t val) const; - virtual std::string PrintInt64(int64_t val) const; - virtual std::string PrintUInt64(uint64_t val) const; - virtual std::string PrintFloat(float val) const; - virtual std::string PrintDouble(double val) const; - virtual std::string PrintString(const std::string& val) const; - virtual std::string PrintBytes(const std::string& val) const; - virtual std::string PrintEnum(int32_t val, const std::string& name) const; - virtual std::string PrintFieldName(const Message& message, - const Reflection* reflection, - const FieldDescriptor* field) const; - virtual std::string PrintMessageStart(const Message& message, - int field_index, int field_count, - bool single_line_mode) const; - virtual std::string PrintMessageEnd(const Message& message, int field_index, - int field_count, - bool single_line_mode) const; - - private: - FastFieldValuePrinter delegate_; - GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(FieldValuePrinter); - }; - - class PROTOBUF_EXPORT MessagePrinter { - public: - MessagePrinter() {} - virtual ~MessagePrinter() {} - virtual void Print(const Message& message, bool single_line_mode, - BaseTextGenerator* generator) const = 0; - - private: - GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(MessagePrinter); - }; - - // Interface that Printers or Parsers can use to find extensions, or types - // referenced in Any messages. - class PROTOBUF_EXPORT Finder { - public: - virtual ~Finder(); - - // Try to find an extension of *message by fully-qualified field - // name. Returns nullptr if no extension is known for this name or number. - // The base implementation uses the extensions already known by the message. - virtual const FieldDescriptor* FindExtension(Message* message, - const std::string& name) const; - - // Similar to FindExtension, but uses a Descriptor and the extension number - // instead of using a Message and the name when doing the look up. - virtual const FieldDescriptor* FindExtensionByNumber( - const Descriptor* descriptor, int number) const; - - // Find the message type for an Any proto. - // Returns nullptr if no message is known for this name. - // The base implementation only accepts prefixes of type.googleprod.com/ or - // type.googleapis.com/, and searches the DescriptorPool of the parent - // message. - virtual const Descriptor* FindAnyType(const Message& message, - const std::string& prefix, - const std::string& name) const; - - // Find the message factory for the given extension field. This can be used - // to generalize the Parser to add extension fields to a message in the same - // way as the "input" message for the Parser. - virtual MessageFactory* FindExtensionFactory( - const FieldDescriptor* field) const; - }; - - // Class for those users which require more fine-grained control over how - // a protobuffer message is printed out. - class PROTOBUF_EXPORT Printer { - public: - Printer(); - - // Like TextFormat::Print - bool Print(const Message& message, io::ZeroCopyOutputStream* output) const; - // Like TextFormat::PrintUnknownFields - bool PrintUnknownFields(const UnknownFieldSet& unknown_fields, - io::ZeroCopyOutputStream* output) const; - // Like TextFormat::PrintToString - bool PrintToString(const Message& message, std::string* output) const; - // Like TextFormat::PrintUnknownFieldsToString - bool PrintUnknownFieldsToString(const UnknownFieldSet& unknown_fields, - std::string* output) const; - // Like TextFormat::PrintFieldValueToString - void PrintFieldValueToString(const Message& message, - const FieldDescriptor* field, int index, - std::string* output) const; - - // Adjust the initial indent level of all output. Each indent level is - // equal to two spaces. - void SetInitialIndentLevel(int indent_level) { - initial_indent_level_ = indent_level; - } - - // If printing in single line mode, then the entire message will be output - // on a single line with no line breaks. - void SetSingleLineMode(bool single_line_mode) { - single_line_mode_ = single_line_mode; - } - - bool IsInSingleLineMode() const { return single_line_mode_; } - - // If use_field_number is true, uses field number instead of field name. - void SetUseFieldNumber(bool use_field_number) { - use_field_number_ = use_field_number; - } - - // Set true to print repeated primitives in a format like: - // field_name: [1, 2, 3, 4] - // instead of printing each value on its own line. Short format applies - // only to primitive values -- i.e. everything except strings and - // sub-messages/groups. - void SetUseShortRepeatedPrimitives(bool use_short_repeated_primitives) { - use_short_repeated_primitives_ = use_short_repeated_primitives; - } - - // Set true to output UTF-8 instead of ASCII. The only difference - // is that bytes >= 0x80 in string fields will not be escaped, - // because they are assumed to be part of UTF-8 multi-byte - // sequences. This will change the default FastFieldValuePrinter. - void SetUseUtf8StringEscaping(bool as_utf8); - - // Set the default FastFieldValuePrinter that is used for all fields that - // don't have a field-specific printer registered. - // Takes ownership of the printer. - void SetDefaultFieldValuePrinter(const FastFieldValuePrinter* printer); - - PROTOBUF_DEPRECATED_MSG("Please use FastFieldValuePrinter") - void SetDefaultFieldValuePrinter(const FieldValuePrinter* printer); - - // Sets whether we want to hide unknown fields or not. - // Usually unknown fields are printed in a generic way that includes the - // tag number of the field instead of field name. However, sometimes it - // is useful to be able to print the message without unknown fields (e.g. - // for the python protobuf version to maintain consistency between its pure - // python and c++ implementations). - void SetHideUnknownFields(bool hide) { hide_unknown_fields_ = hide; } - - // If print_message_fields_in_index_order is true, fields of a proto message - // will be printed using the order defined in source code instead of the - // field number, extensions will be printed at the end of the message - // and their relative order is determined by the extension number. - // By default, use the field number order. - void SetPrintMessageFieldsInIndexOrder( - bool print_message_fields_in_index_order) { - print_message_fields_in_index_order_ = - print_message_fields_in_index_order; - } - - // If expand==true, expand google.protobuf.Any payloads. The output - // will be of form - // [type_url] { <value_printed_in_text> } - // - // If expand==false, print Any using the default printer. The output will - // look like - // type_url: "<type_url>" value: "serialized_content" - void SetExpandAny(bool expand) { expand_any_ = expand; } - - // Set how parser finds message for Any payloads. - void SetFinder(const Finder* finder) { finder_ = finder; } - - // If non-zero, we truncate all string fields that are longer than - // this threshold. This is useful when the proto message has very long - // strings, e.g., dump of encoded image file. - // - // NOTE(hfgong): Setting a non-zero value breaks round-trip safe - // property of TextFormat::Printer. That is, from the printed message, we - // cannot fully recover the original string field any more. - void SetTruncateStringFieldLongerThan( - const int64_t truncate_string_field_longer_than) { - truncate_string_field_longer_than_ = truncate_string_field_longer_than; - } - - // Register a custom field-specific FastFieldValuePrinter for fields - // with a particular FieldDescriptor. - // Returns "true" if the registration succeeded, or "false", if there is - // already a printer for that FieldDescriptor. - // Takes ownership of the printer on successful registration. - bool RegisterFieldValuePrinter(const FieldDescriptor* field, - const FastFieldValuePrinter* printer); - - PROTOBUF_DEPRECATED_MSG("Please use FastFieldValuePrinter") - bool RegisterFieldValuePrinter(const FieldDescriptor* field, - const FieldValuePrinter* printer); - - // Register a custom message-specific MessagePrinter for messages with a - // particular Descriptor. - // Returns "true" if the registration succeeded, or "false" if there is - // already a printer for that Descriptor. - bool RegisterMessagePrinter(const Descriptor* descriptor, - const MessagePrinter* printer); - - private: - friend std::string Message::DebugString() const; - friend std::string Message::ShortDebugString() const; - friend std::string Message::Utf8DebugString() const; - - // Sets whether *DebugString should insert a silent marker. - void SetInsertSilentMarker(bool v) { insert_silent_marker_ = v; } - - // Forward declaration of an internal class used to print the text - // output to the OutputStream (see text_format.cc for implementation). - class TextGenerator; - - // Forward declaration of an internal class used to print field values for - // DebugString APIs (see text_format.cc for implementation). - class DebugStringFieldValuePrinter; - - // Forward declaration of an internal class used to print UTF-8 escaped - // strings (see text_format.cc for implementation). - class FastFieldValuePrinterUtf8Escaping; - - static const char* const kDoNotParse; - - // Internal Print method, used for writing to the OutputStream via - // the TextGenerator class. - void Print(const Message& message, TextGenerator* generator) const; - - // Print a single field. - void PrintField(const Message& message, const Reflection* reflection, - const FieldDescriptor* field, - TextGenerator* generator) const; - - // Print a repeated primitive field in short form. - void PrintShortRepeatedField(const Message& message, - const Reflection* reflection, - const FieldDescriptor* field, - TextGenerator* generator) const; - - // Print the name of a field -- i.e. everything that comes before the - // ':' for a single name/value pair. - void PrintFieldName(const Message& message, int field_index, - int field_count, const Reflection* reflection, - const FieldDescriptor* field, - TextGenerator* generator) const; - - // Outputs a textual representation of the value of the field supplied on - // the message supplied or the default value if not set. - void PrintFieldValue(const Message& message, const Reflection* reflection, - const FieldDescriptor* field, int index, - TextGenerator* generator) const; - - // Print the fields in an UnknownFieldSet. They are printed by tag number - // only. Embedded messages are heuristically identified by attempting to - // parse them (subject to the recursion budget). - void PrintUnknownFields(const UnknownFieldSet& unknown_fields, - TextGenerator* generator, - int recursion_budget) const; - - bool PrintAny(const Message& message, TextGenerator* generator) const; - - const FastFieldValuePrinter* GetFieldPrinter( - const FieldDescriptor* field) const { - auto it = custom_printers_.find(field); - return it == custom_printers_.end() ? default_field_value_printer_.get() - : it->second.get(); - } - - int initial_indent_level_; - bool single_line_mode_; - bool use_field_number_; - bool use_short_repeated_primitives_; - bool insert_silent_marker_; - bool hide_unknown_fields_; - bool print_message_fields_in_index_order_; - bool expand_any_; - int64_t truncate_string_field_longer_than_; - - std::unique_ptr<const FastFieldValuePrinter> default_field_value_printer_; - typedef std::map<const FieldDescriptor*, - std::unique_ptr<const FastFieldValuePrinter>> - CustomPrinterMap; - CustomPrinterMap custom_printers_; - - typedef std::map<const Descriptor*, std::unique_ptr<const MessagePrinter>> - CustomMessagePrinterMap; - CustomMessagePrinterMap custom_message_printers_; - - const Finder* finder_; - }; - - // Parses a text-format protocol message from the given input stream to - // the given message object. This function parses the human-readable - // serialization format written by Print(). Returns true on success. The - // message is cleared first, even if the function fails -- See Merge() to - // avoid this behavior. - // - // Example input: "user {\n id: 123 extra { gender: MALE language: 'en' }\n}" - // - // One common use for this function is parsing handwritten strings in test - // code. - // - // If you would like to read a protocol buffer serialized in the - // (non-human-readable) binary wire format, see - // google::protobuf::MessageLite::ParseFromString(). - static bool Parse(io::ZeroCopyInputStream* input, Message* output); - // Like Parse(), but reads directly from a string. - static bool ParseFromString(ConstStringParam input, Message* output); - - // Like Parse(), but the data is merged into the given message, as if - // using Message::MergeFrom(). - static bool Merge(io::ZeroCopyInputStream* input, Message* output); - // Like Merge(), but reads directly from a string. - static bool MergeFromString(ConstStringParam input, Message* output); - - // Parse the given text as a single field value and store it into the - // given field of the given message. If the field is a repeated field, - // the new value will be added to the end - static bool ParseFieldValueFromString(const std::string& input, - const FieldDescriptor* field, - Message* message); - - // A location in the parsed text. - struct ParseLocation { - int line; - int column; - - ParseLocation() : line(-1), column(-1) {} - ParseLocation(int line_param, int column_param) - : line(line_param), column(column_param) {} - }; - - // A range of locations in the parsed text, including `start` and excluding - // `end`. - struct ParseLocationRange { - ParseLocation start; - ParseLocation end; - ParseLocationRange() : start(), end() {} - ParseLocationRange(ParseLocation start_param, ParseLocation end_param) - : start(start_param), end(end_param) {} - }; - - // Data structure which is populated with the locations of each field - // value parsed from the text. - class PROTOBUF_EXPORT ParseInfoTree { - public: - ParseInfoTree() = default; - ParseInfoTree(const ParseInfoTree&) = delete; - ParseInfoTree& operator=(const ParseInfoTree&) = delete; - - // Returns the parse location range for index-th value of the field in - // the parsed text. If none exists, returns a location with start and end - // line -1. Index should be -1 for not-repeated fields. - ParseLocationRange GetLocationRange(const FieldDescriptor* field, - int index) const; - - // Returns the starting parse location for index-th value of the field in - // the parsed text. If none exists, returns a location with line = -1. Index - // should be -1 for not-repeated fields. - ParseLocation GetLocation(const FieldDescriptor* field, int index) const { - return GetLocationRange(field, index).start; - } - - // Returns the parse info tree for the given field, which must be a message - // type. The nested information tree is owned by the root tree and will be - // deleted when it is deleted. - ParseInfoTree* GetTreeForNested(const FieldDescriptor* field, - int index) const; - - private: - // Allow the text format parser to record information into the tree. - friend class TextFormat; - - // Records the starting and ending locations of a single value for a field. - void RecordLocation(const FieldDescriptor* field, ParseLocationRange range); - - // Create and records a nested tree for a nested message field. - ParseInfoTree* CreateNested(const FieldDescriptor* field); - - // Defines the map from the index-th field descriptor to its parse location. - typedef std::map<const FieldDescriptor*, std::vector<ParseLocationRange>> - LocationMap; - - // Defines the map from the index-th field descriptor to the nested parse - // info tree. - typedef std::map<const FieldDescriptor*, - std::vector<std::unique_ptr<ParseInfoTree>>> - NestedMap; - - LocationMap locations_; - NestedMap nested_; - }; - - // For more control over parsing, use this class. - class PROTOBUF_EXPORT Parser { - public: - Parser(); - ~Parser(); - - // Like TextFormat::Parse(). - bool Parse(io::ZeroCopyInputStream* input, Message* output); - // Like TextFormat::ParseFromString(). - bool ParseFromString(ConstStringParam input, Message* output); - // Like TextFormat::Merge(). - bool Merge(io::ZeroCopyInputStream* input, Message* output); - // Like TextFormat::MergeFromString(). - bool MergeFromString(ConstStringParam input, Message* output); - - // Set where to report parse errors. If nullptr (the default), errors will - // be printed to stderr. - void RecordErrorsTo(io::ErrorCollector* error_collector) { - error_collector_ = error_collector; - } - - // Set how parser finds extensions. If nullptr (the default), the - // parser will use the standard Reflection object associated with - // the message being parsed. - void SetFinder(const Finder* finder) { finder_ = finder; } - - // Sets where location information about the parse will be written. If - // nullptr - // (the default), then no location will be written. - void WriteLocationsTo(ParseInfoTree* tree) { parse_info_tree_ = tree; } - - // Normally parsing fails if, after parsing, output->IsInitialized() - // returns false. Call AllowPartialMessage(true) to skip this check. - void AllowPartialMessage(bool allow) { allow_partial_ = allow; } - - // Allow field names to be matched case-insensitively. - // This is not advisable if there are fields that only differ in case, or - // if you want to enforce writing in the canonical form. - // This is 'false' by default. - void AllowCaseInsensitiveField(bool allow) { - allow_case_insensitive_field_ = allow; - } - - // Like TextFormat::ParseFieldValueFromString - bool ParseFieldValueFromString(const std::string& input, - const FieldDescriptor* field, - Message* output); - - // When an unknown extension is met, parsing will fail if this option is - // set to false (the default). If true, unknown extensions will be ignored - // and a warning message will be generated. - // Beware! Setting this option true may hide some errors (e.g. spelling - // error on extension name). This allows data loss; unlike binary format, - // text format cannot preserve unknown extensions. Avoid using this option - // if possible. - void AllowUnknownExtension(bool allow) { allow_unknown_extension_ = allow; } - - // When an unknown field is met, parsing will fail if this option is set - // to false (the default). If true, unknown fields will be ignored and - // a warning message will be generated. - // Beware! Setting this option true may hide some errors (e.g. spelling - // error on field name). This allows data loss; unlike binary format, text - // format cannot preserve unknown fields. Avoid using this option - // if possible. - void AllowUnknownField(bool allow) { allow_unknown_field_ = allow; } - - - void AllowFieldNumber(bool allow) { allow_field_number_ = allow; } - - // Sets maximum recursion depth which parser can use. This is effectively - // the maximum allowed nesting of proto messages. - void SetRecursionLimit(int limit) { recursion_limit_ = limit; } - - private: - // Forward declaration of an internal class used to parse text - // representations (see text_format.cc for implementation). - class ParserImpl; - - // Like TextFormat::Merge(). The provided implementation is used - // to do the parsing. - bool MergeUsingImpl(io::ZeroCopyInputStream* input, Message* output, - ParserImpl* parser_impl); - - io::ErrorCollector* error_collector_; - const Finder* finder_; - ParseInfoTree* parse_info_tree_; - bool allow_partial_; - bool allow_case_insensitive_field_; - bool allow_unknown_field_; - bool allow_unknown_extension_; - bool allow_unknown_enum_; - bool allow_field_number_; - bool allow_relaxed_whitespace_; - bool allow_singular_overwrites_; - int recursion_limit_; - }; - - - private: - // Hack: ParseInfoTree declares TextFormat as a friend which should extend - // the friendship to TextFormat::Parser::ParserImpl, but unfortunately some - // old compilers (e.g. GCC 3.4.6) don't implement this correctly. We provide - // helpers for ParserImpl to call methods of ParseInfoTree. - static inline void RecordLocation(ParseInfoTree* info_tree, - const FieldDescriptor* field, - ParseLocationRange location); - static inline ParseInfoTree* CreateNested(ParseInfoTree* info_tree, - const FieldDescriptor* field); - - GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(TextFormat); -}; - -inline void TextFormat::RecordLocation(ParseInfoTree* info_tree, - const FieldDescriptor* field, - ParseLocationRange location) { - info_tree->RecordLocation(field, location); -} - -inline TextFormat::ParseInfoTree* TextFormat::CreateNested( - ParseInfoTree* info_tree, const FieldDescriptor* field) { - return info_tree->CreateNested(field); -} - -} // namespace protobuf -} // namespace google - -#include <google/protobuf/port_undef.inc> - -#endif // GOOGLE_PROTOBUF_TEXT_FORMAT_H__ diff --git a/include/google/protobuf/timestamp.pb.h b/include/google/protobuf/timestamp.pb.h deleted file mode 100644 index 771216e61b..0000000000 --- a/include/google/protobuf/timestamp.pb.h +++ /dev/null @@ -1,278 +0,0 @@ -// Generated by the protocol buffer compiler. DO NOT EDIT! -// source: google/protobuf/timestamp.proto - -#ifndef GOOGLE_PROTOBUF_INCLUDED_google_2fprotobuf_2ftimestamp_2eproto -#define GOOGLE_PROTOBUF_INCLUDED_google_2fprotobuf_2ftimestamp_2eproto - -#include <limits> -#include <string> - -#include <google/protobuf/port_def.inc> -#if PROTOBUF_VERSION < 3021000 -#error This file was generated by a newer version of protoc which is -#error incompatible with your Protocol Buffer headers. Please update -#error your headers. -#endif -#if 3021004 < PROTOBUF_MIN_PROTOC_VERSION -#error This file was generated by an older version of protoc which is -#error incompatible with your Protocol Buffer headers. Please -#error regenerate this file with a newer version of protoc. -#endif - -#include <google/protobuf/port_undef.inc> -#include <google/protobuf/io/coded_stream.h> -#include <google/protobuf/arena.h> -#include <google/protobuf/arenastring.h> -#include <google/protobuf/generated_message_util.h> -#include <google/protobuf/metadata_lite.h> -#include <google/protobuf/generated_message_reflection.h> -#include <google/protobuf/message.h> -#include <google/protobuf/repeated_field.h> // IWYU pragma: export -#include <google/protobuf/extension_set.h> // IWYU pragma: export -#include <google/protobuf/unknown_field_set.h> -// @@protoc_insertion_point(includes) -#include <google/protobuf/port_def.inc> -#define PROTOBUF_INTERNAL_EXPORT_google_2fprotobuf_2ftimestamp_2eproto PROTOBUF_EXPORT -PROTOBUF_NAMESPACE_OPEN -namespace internal { -class AnyMetadata; -} // namespace internal -PROTOBUF_NAMESPACE_CLOSE - -// Internal implementation detail -- do not use these members. -struct PROTOBUF_EXPORT TableStruct_google_2fprotobuf_2ftimestamp_2eproto { - static const uint32_t offsets[]; -}; -PROTOBUF_EXPORT extern const ::PROTOBUF_NAMESPACE_ID::internal::DescriptorTable descriptor_table_google_2fprotobuf_2ftimestamp_2eproto; -PROTOBUF_NAMESPACE_OPEN -class Timestamp; -struct TimestampDefaultTypeInternal; -PROTOBUF_EXPORT extern TimestampDefaultTypeInternal _Timestamp_default_instance_; -PROTOBUF_NAMESPACE_CLOSE -PROTOBUF_NAMESPACE_OPEN -template<> PROTOBUF_EXPORT ::PROTOBUF_NAMESPACE_ID::Timestamp* Arena::CreateMaybeMessage<::PROTOBUF_NAMESPACE_ID::Timestamp>(Arena*); -PROTOBUF_NAMESPACE_CLOSE -PROTOBUF_NAMESPACE_OPEN - -// =================================================================== - -class PROTOBUF_EXPORT Timestamp final : - public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:google.protobuf.Timestamp) */ { - public: - inline Timestamp() : Timestamp(nullptr) {} - ~Timestamp() override; - explicit PROTOBUF_CONSTEXPR Timestamp(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized); - - Timestamp(const Timestamp& from); - Timestamp(Timestamp&& from) noexcept - : Timestamp() { - *this = ::std::move(from); - } - - inline Timestamp& operator=(const Timestamp& from) { - CopyFrom(from); - return *this; - } - inline Timestamp& operator=(Timestamp&& from) noexcept { - if (this == &from) return *this; - if (GetOwningArena() == from.GetOwningArena() - #ifdef PROTOBUF_FORCE_COPY_IN_MOVE - && GetOwningArena() != nullptr - #endif // !PROTOBUF_FORCE_COPY_IN_MOVE - ) { - InternalSwap(&from); - } else { - CopyFrom(from); - } - return *this; - } - - static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() { - return GetDescriptor(); - } - static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() { - return default_instance().GetMetadata().descriptor; - } - static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() { - return default_instance().GetMetadata().reflection; - } - static const Timestamp& default_instance() { - return *internal_default_instance(); - } - static inline const Timestamp* internal_default_instance() { - return reinterpret_cast<const Timestamp*>( - &_Timestamp_default_instance_); - } - static constexpr int kIndexInFileMessages = - 0; - - friend void swap(Timestamp& a, Timestamp& b) { - a.Swap(&b); - } - inline void Swap(Timestamp* other) { - if (other == this) return; - #ifdef PROTOBUF_FORCE_COPY_IN_SWAP - if (GetOwningArena() != nullptr && - GetOwningArena() == other->GetOwningArena()) { - #else // PROTOBUF_FORCE_COPY_IN_SWAP - if (GetOwningArena() == other->GetOwningArena()) { - #endif // !PROTOBUF_FORCE_COPY_IN_SWAP - InternalSwap(other); - } else { - ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other); - } - } - void UnsafeArenaSwap(Timestamp* other) { - if (other == this) return; - GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena()); - InternalSwap(other); - } - - // implements Message ---------------------------------------------- - - Timestamp* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final { - return CreateMaybeMessage<Timestamp>(arena); - } - using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom; - void CopyFrom(const Timestamp& from); - using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom; - void MergeFrom( const Timestamp& from) { - Timestamp::MergeImpl(*this, from); - } - private: - static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message& to_msg, const ::PROTOBUF_NAMESPACE_ID::Message& from_msg); - public: - PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final; - bool IsInitialized() const final; - - size_t ByteSizeLong() const final; - const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final; - uint8_t* _InternalSerialize( - uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final; - int GetCachedSize() const final { return _impl_._cached_size_.Get(); } - - private: - void SharedCtor(::PROTOBUF_NAMESPACE_ID::Arena* arena, bool is_message_owned); - void SharedDtor(); - void SetCachedSize(int size) const final; - void InternalSwap(Timestamp* other); - - private: - friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata; - static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() { - return "google.protobuf.Timestamp"; - } - protected: - explicit Timestamp(::PROTOBUF_NAMESPACE_ID::Arena* arena, - bool is_message_owned = false); - public: - - static const ClassData _class_data_; - const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final; - - ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final; - - // nested types ---------------------------------------------------- - - // accessors ------------------------------------------------------- - - enum : int { - kSecondsFieldNumber = 1, - kNanosFieldNumber = 2, - }; - // int64 seconds = 1; - void clear_seconds(); - int64_t seconds() const; - void set_seconds(int64_t value); - private: - int64_t _internal_seconds() const; - void _internal_set_seconds(int64_t value); - public: - - // int32 nanos = 2; - void clear_nanos(); - int32_t nanos() const; - void set_nanos(int32_t value); - private: - int32_t _internal_nanos() const; - void _internal_set_nanos(int32_t value); - public: - - // @@protoc_insertion_point(class_scope:google.protobuf.Timestamp) - private: - class _Internal; - - template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper; - typedef void InternalArenaConstructable_; - typedef void DestructorSkippable_; - struct Impl_ { - int64_t seconds_; - int32_t nanos_; - mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_; - }; - union { Impl_ _impl_; }; - friend struct ::TableStruct_google_2fprotobuf_2ftimestamp_2eproto; -}; -// =================================================================== - - -// =================================================================== - -#ifdef __GNUC__ - #pragma GCC diagnostic push - #pragma GCC diagnostic ignored "-Wstrict-aliasing" -#endif // __GNUC__ -// Timestamp - -// int64 seconds = 1; -inline void Timestamp::clear_seconds() { - _impl_.seconds_ = int64_t{0}; -} -inline int64_t Timestamp::_internal_seconds() const { - return _impl_.seconds_; -} -inline int64_t Timestamp::seconds() const { - // @@protoc_insertion_point(field_get:google.protobuf.Timestamp.seconds) - return _internal_seconds(); -} -inline void Timestamp::_internal_set_seconds(int64_t value) { - - _impl_.seconds_ = value; -} -inline void Timestamp::set_seconds(int64_t value) { - _internal_set_seconds(value); - // @@protoc_insertion_point(field_set:google.protobuf.Timestamp.seconds) -} - -// int32 nanos = 2; -inline void Timestamp::clear_nanos() { - _impl_.nanos_ = 0; -} -inline int32_t Timestamp::_internal_nanos() const { - return _impl_.nanos_; -} -inline int32_t Timestamp::nanos() const { - // @@protoc_insertion_point(field_get:google.protobuf.Timestamp.nanos) - return _internal_nanos(); -} -inline void Timestamp::_internal_set_nanos(int32_t value) { - - _impl_.nanos_ = value; -} -inline void Timestamp::set_nanos(int32_t value) { - _internal_set_nanos(value); - // @@protoc_insertion_point(field_set:google.protobuf.Timestamp.nanos) -} - -#ifdef __GNUC__ - #pragma GCC diagnostic pop -#endif // __GNUC__ - -// @@protoc_insertion_point(namespace_scope) - -PROTOBUF_NAMESPACE_CLOSE - -// @@protoc_insertion_point(global_scope) - -#include <google/protobuf/port_undef.inc> -#endif // GOOGLE_PROTOBUF_INCLUDED_GOOGLE_PROTOBUF_INCLUDED_google_2fprotobuf_2ftimestamp_2eproto diff --git a/include/google/protobuf/timestamp.proto b/include/google/protobuf/timestamp.proto deleted file mode 100644 index 3b2df6d911..0000000000 --- a/include/google/protobuf/timestamp.proto +++ /dev/null @@ -1,147 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// 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 -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -syntax = "proto3"; - -package google.protobuf; - -option csharp_namespace = "Google.Protobuf.WellKnownTypes"; -option cc_enable_arenas = true; -option go_package = "google.golang.org/protobuf/types/known/timestamppb"; -option java_package = "com.google.protobuf"; -option java_outer_classname = "TimestampProto"; -option java_multiple_files = true; -option objc_class_prefix = "GPB"; - -// A Timestamp represents a point in time independent of any time zone or local -// calendar, encoded as a count of seconds and fractions of seconds at -// nanosecond resolution. The count is relative to an epoch at UTC midnight on -// January 1, 1970, in the proleptic Gregorian calendar which extends the -// Gregorian calendar backwards to year one. -// -// All minutes are 60 seconds long. Leap seconds are "smeared" so that no leap -// second table is needed for interpretation, using a [24-hour linear -// smear](https://developers.google.com/time/smear). -// -// The range is from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By -// restricting to that range, we ensure that we can convert to and from [RFC -// 3339](https://www.ietf.org/rfc/rfc3339.txt) date strings. -// -// # Examples -// -// Example 1: Compute Timestamp from POSIX `time()`. -// -// Timestamp timestamp; -// timestamp.set_seconds(time(NULL)); -// timestamp.set_nanos(0); -// -// Example 2: Compute Timestamp from POSIX `gettimeofday()`. -// -// struct timeval tv; -// gettimeofday(&tv, NULL); -// -// Timestamp timestamp; -// timestamp.set_seconds(tv.tv_sec); -// timestamp.set_nanos(tv.tv_usec * 1000); -// -// Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`. -// -// FILETIME ft; -// GetSystemTimeAsFileTime(&ft); -// UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime; -// -// // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z -// // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z. -// Timestamp timestamp; -// timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL)); -// timestamp.set_nanos((INT32) ((ticks % 10000000) * 100)); -// -// Example 4: Compute Timestamp from Java `System.currentTimeMillis()`. -// -// long millis = System.currentTimeMillis(); -// -// Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000) -// .setNanos((int) ((millis % 1000) * 1000000)).build(); -// -// -// Example 5: Compute Timestamp from Java `Instant.now()`. -// -// Instant now = Instant.now(); -// -// Timestamp timestamp = -// Timestamp.newBuilder().setSeconds(now.getEpochSecond()) -// .setNanos(now.getNano()).build(); -// -// -// Example 6: Compute Timestamp from current time in Python. -// -// timestamp = Timestamp() -// timestamp.GetCurrentTime() -// -// # JSON Mapping -// -// In JSON format, the Timestamp type is encoded as a string in the -// [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format. That is, the -// format is "{year}-{month}-{day}T{hour}:{min}:{sec}[.{frac_sec}]Z" -// where {year} is always expressed using four digits while {month}, {day}, -// {hour}, {min}, and {sec} are zero-padded to two digits each. The fractional -// seconds, which can go up to 9 digits (i.e. up to 1 nanosecond resolution), -// are optional. The "Z" suffix indicates the timezone ("UTC"); the timezone -// is required. A proto3 JSON serializer should always use UTC (as indicated by -// "Z") when printing the Timestamp type and a proto3 JSON parser should be -// able to accept both UTC and other timezones (as indicated by an offset). -// -// For example, "2017-01-15T01:30:15.01Z" encodes 15.01 seconds past -// 01:30 UTC on January 15, 2017. -// -// In JavaScript, one can convert a Date object to this format using the -// standard -// [toISOString()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString) -// method. In Python, a standard `datetime.datetime` object can be converted -// to this format using -// [`strftime`](https://docs.python.org/2/library/time.html#time.strftime) with -// the time format spec '%Y-%m-%dT%H:%M:%S.%fZ'. Likewise, in Java, one can use -// the Joda Time's [`ISODateTimeFormat.dateTime()`]( -// http://www.joda.org/joda-time/apidocs/org/joda/time/format/ISODateTimeFormat.html#dateTime%2D%2D -// ) to obtain a formatter capable of generating timestamps in this format. -// -// -message Timestamp { - // Represents seconds of UTC time since Unix epoch - // 1970-01-01T00:00:00Z. Must be from 0001-01-01T00:00:00Z to - // 9999-12-31T23:59:59Z inclusive. - int64 seconds = 1; - - // Non-negative fractions of a second at nanosecond resolution. Negative - // second values with fractions must still have non-negative nanos values - // that count forward in time. Must be from 0 to 999,999,999 - // inclusive. - int32 nanos = 2; -} diff --git a/include/google/protobuf/type.pb.h b/include/google/protobuf/type.pb.h deleted file mode 100644 index 49bd00c0de..0000000000 --- a/include/google/protobuf/type.pb.h +++ /dev/null @@ -1,2571 +0,0 @@ -// Generated by the protocol buffer compiler. DO NOT EDIT! -// source: google/protobuf/type.proto - -#ifndef GOOGLE_PROTOBUF_INCLUDED_google_2fprotobuf_2ftype_2eproto -#define GOOGLE_PROTOBUF_INCLUDED_google_2fprotobuf_2ftype_2eproto - -#include <limits> -#include <string> - -#include <google/protobuf/port_def.inc> -#if PROTOBUF_VERSION < 3021000 -#error This file was generated by a newer version of protoc which is -#error incompatible with your Protocol Buffer headers. Please update -#error your headers. -#endif -#if 3021004 < PROTOBUF_MIN_PROTOC_VERSION -#error This file was generated by an older version of protoc which is -#error incompatible with your Protocol Buffer headers. Please -#error regenerate this file with a newer version of protoc. -#endif - -#include <google/protobuf/port_undef.inc> -#include <google/protobuf/io/coded_stream.h> -#include <google/protobuf/arena.h> -#include <google/protobuf/arenastring.h> -#include <google/protobuf/generated_message_util.h> -#include <google/protobuf/metadata_lite.h> -#include <google/protobuf/generated_message_reflection.h> -#include <google/protobuf/message.h> -#include <google/protobuf/repeated_field.h> // IWYU pragma: export -#include <google/protobuf/extension_set.h> // IWYU pragma: export -#include <google/protobuf/generated_enum_reflection.h> -#include <google/protobuf/unknown_field_set.h> -#include <google/protobuf/any.pb.h> -#include <google/protobuf/source_context.pb.h> -// @@protoc_insertion_point(includes) -#include <google/protobuf/port_def.inc> -#define PROTOBUF_INTERNAL_EXPORT_google_2fprotobuf_2ftype_2eproto PROTOBUF_EXPORT -PROTOBUF_NAMESPACE_OPEN -namespace internal { -class AnyMetadata; -} // namespace internal -PROTOBUF_NAMESPACE_CLOSE - -// Internal implementation detail -- do not use these members. -struct PROTOBUF_EXPORT TableStruct_google_2fprotobuf_2ftype_2eproto { - static const uint32_t offsets[]; -}; -PROTOBUF_EXPORT extern const ::PROTOBUF_NAMESPACE_ID::internal::DescriptorTable descriptor_table_google_2fprotobuf_2ftype_2eproto; -PROTOBUF_NAMESPACE_OPEN -class Enum; -struct EnumDefaultTypeInternal; -PROTOBUF_EXPORT extern EnumDefaultTypeInternal _Enum_default_instance_; -class EnumValue; -struct EnumValueDefaultTypeInternal; -PROTOBUF_EXPORT extern EnumValueDefaultTypeInternal _EnumValue_default_instance_; -class Field; -struct FieldDefaultTypeInternal; -PROTOBUF_EXPORT extern FieldDefaultTypeInternal _Field_default_instance_; -class Option; -struct OptionDefaultTypeInternal; -PROTOBUF_EXPORT extern OptionDefaultTypeInternal _Option_default_instance_; -class Type; -struct TypeDefaultTypeInternal; -PROTOBUF_EXPORT extern TypeDefaultTypeInternal _Type_default_instance_; -PROTOBUF_NAMESPACE_CLOSE -PROTOBUF_NAMESPACE_OPEN -template<> PROTOBUF_EXPORT ::PROTOBUF_NAMESPACE_ID::Enum* Arena::CreateMaybeMessage<::PROTOBUF_NAMESPACE_ID::Enum>(Arena*); -template<> PROTOBUF_EXPORT ::PROTOBUF_NAMESPACE_ID::EnumValue* Arena::CreateMaybeMessage<::PROTOBUF_NAMESPACE_ID::EnumValue>(Arena*); -template<> PROTOBUF_EXPORT ::PROTOBUF_NAMESPACE_ID::Field* Arena::CreateMaybeMessage<::PROTOBUF_NAMESPACE_ID::Field>(Arena*); -template<> PROTOBUF_EXPORT ::PROTOBUF_NAMESPACE_ID::Option* Arena::CreateMaybeMessage<::PROTOBUF_NAMESPACE_ID::Option>(Arena*); -template<> PROTOBUF_EXPORT ::PROTOBUF_NAMESPACE_ID::Type* Arena::CreateMaybeMessage<::PROTOBUF_NAMESPACE_ID::Type>(Arena*); -PROTOBUF_NAMESPACE_CLOSE -PROTOBUF_NAMESPACE_OPEN - -enum Field_Kind : int { - Field_Kind_TYPE_UNKNOWN = 0, - Field_Kind_TYPE_DOUBLE = 1, - Field_Kind_TYPE_FLOAT = 2, - Field_Kind_TYPE_INT64 = 3, - Field_Kind_TYPE_UINT64 = 4, - Field_Kind_TYPE_INT32 = 5, - Field_Kind_TYPE_FIXED64 = 6, - Field_Kind_TYPE_FIXED32 = 7, - Field_Kind_TYPE_BOOL = 8, - Field_Kind_TYPE_STRING = 9, - Field_Kind_TYPE_GROUP = 10, - Field_Kind_TYPE_MESSAGE = 11, - Field_Kind_TYPE_BYTES = 12, - Field_Kind_TYPE_UINT32 = 13, - Field_Kind_TYPE_ENUM = 14, - Field_Kind_TYPE_SFIXED32 = 15, - Field_Kind_TYPE_SFIXED64 = 16, - Field_Kind_TYPE_SINT32 = 17, - Field_Kind_TYPE_SINT64 = 18, - Field_Kind_Field_Kind_INT_MIN_SENTINEL_DO_NOT_USE_ = std::numeric_limits<int32_t>::min(), - Field_Kind_Field_Kind_INT_MAX_SENTINEL_DO_NOT_USE_ = std::numeric_limits<int32_t>::max() -}; -PROTOBUF_EXPORT bool Field_Kind_IsValid(int value); -constexpr Field_Kind Field_Kind_Kind_MIN = Field_Kind_TYPE_UNKNOWN; -constexpr Field_Kind Field_Kind_Kind_MAX = Field_Kind_TYPE_SINT64; -constexpr int Field_Kind_Kind_ARRAYSIZE = Field_Kind_Kind_MAX + 1; - -PROTOBUF_EXPORT const ::PROTOBUF_NAMESPACE_ID::EnumDescriptor* Field_Kind_descriptor(); -template<typename T> -inline const std::string& Field_Kind_Name(T enum_t_value) { - static_assert(::std::is_same<T, Field_Kind>::value || - ::std::is_integral<T>::value, - "Incorrect type passed to function Field_Kind_Name."); - return ::PROTOBUF_NAMESPACE_ID::internal::NameOfEnum( - Field_Kind_descriptor(), enum_t_value); -} -inline bool Field_Kind_Parse( - ::PROTOBUF_NAMESPACE_ID::ConstStringParam name, Field_Kind* value) { - return ::PROTOBUF_NAMESPACE_ID::internal::ParseNamedEnum<Field_Kind>( - Field_Kind_descriptor(), name, value); -} -enum Field_Cardinality : int { - Field_Cardinality_CARDINALITY_UNKNOWN = 0, - Field_Cardinality_CARDINALITY_OPTIONAL = 1, - Field_Cardinality_CARDINALITY_REQUIRED = 2, - Field_Cardinality_CARDINALITY_REPEATED = 3, - Field_Cardinality_Field_Cardinality_INT_MIN_SENTINEL_DO_NOT_USE_ = std::numeric_limits<int32_t>::min(), - Field_Cardinality_Field_Cardinality_INT_MAX_SENTINEL_DO_NOT_USE_ = std::numeric_limits<int32_t>::max() -}; -PROTOBUF_EXPORT bool Field_Cardinality_IsValid(int value); -constexpr Field_Cardinality Field_Cardinality_Cardinality_MIN = Field_Cardinality_CARDINALITY_UNKNOWN; -constexpr Field_Cardinality Field_Cardinality_Cardinality_MAX = Field_Cardinality_CARDINALITY_REPEATED; -constexpr int Field_Cardinality_Cardinality_ARRAYSIZE = Field_Cardinality_Cardinality_MAX + 1; - -PROTOBUF_EXPORT const ::PROTOBUF_NAMESPACE_ID::EnumDescriptor* Field_Cardinality_descriptor(); -template<typename T> -inline const std::string& Field_Cardinality_Name(T enum_t_value) { - static_assert(::std::is_same<T, Field_Cardinality>::value || - ::std::is_integral<T>::value, - "Incorrect type passed to function Field_Cardinality_Name."); - return ::PROTOBUF_NAMESPACE_ID::internal::NameOfEnum( - Field_Cardinality_descriptor(), enum_t_value); -} -inline bool Field_Cardinality_Parse( - ::PROTOBUF_NAMESPACE_ID::ConstStringParam name, Field_Cardinality* value) { - return ::PROTOBUF_NAMESPACE_ID::internal::ParseNamedEnum<Field_Cardinality>( - Field_Cardinality_descriptor(), name, value); -} -enum Syntax : int { - SYNTAX_PROTO2 = 0, - SYNTAX_PROTO3 = 1, - Syntax_INT_MIN_SENTINEL_DO_NOT_USE_ = std::numeric_limits<int32_t>::min(), - Syntax_INT_MAX_SENTINEL_DO_NOT_USE_ = std::numeric_limits<int32_t>::max() -}; -PROTOBUF_EXPORT bool Syntax_IsValid(int value); -constexpr Syntax Syntax_MIN = SYNTAX_PROTO2; -constexpr Syntax Syntax_MAX = SYNTAX_PROTO3; -constexpr int Syntax_ARRAYSIZE = Syntax_MAX + 1; - -PROTOBUF_EXPORT const ::PROTOBUF_NAMESPACE_ID::EnumDescriptor* Syntax_descriptor(); -template<typename T> -inline const std::string& Syntax_Name(T enum_t_value) { - static_assert(::std::is_same<T, Syntax>::value || - ::std::is_integral<T>::value, - "Incorrect type passed to function Syntax_Name."); - return ::PROTOBUF_NAMESPACE_ID::internal::NameOfEnum( - Syntax_descriptor(), enum_t_value); -} -inline bool Syntax_Parse( - ::PROTOBUF_NAMESPACE_ID::ConstStringParam name, Syntax* value) { - return ::PROTOBUF_NAMESPACE_ID::internal::ParseNamedEnum<Syntax>( - Syntax_descriptor(), name, value); -} -// =================================================================== - -class PROTOBUF_EXPORT Type final : - public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:google.protobuf.Type) */ { - public: - inline Type() : Type(nullptr) {} - ~Type() override; - explicit PROTOBUF_CONSTEXPR Type(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized); - - Type(const Type& from); - Type(Type&& from) noexcept - : Type() { - *this = ::std::move(from); - } - - inline Type& operator=(const Type& from) { - CopyFrom(from); - return *this; - } - inline Type& operator=(Type&& from) noexcept { - if (this == &from) return *this; - if (GetOwningArena() == from.GetOwningArena() - #ifdef PROTOBUF_FORCE_COPY_IN_MOVE - && GetOwningArena() != nullptr - #endif // !PROTOBUF_FORCE_COPY_IN_MOVE - ) { - InternalSwap(&from); - } else { - CopyFrom(from); - } - return *this; - } - - static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() { - return GetDescriptor(); - } - static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() { - return default_instance().GetMetadata().descriptor; - } - static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() { - return default_instance().GetMetadata().reflection; - } - static const Type& default_instance() { - return *internal_default_instance(); - } - static inline const Type* internal_default_instance() { - return reinterpret_cast<const Type*>( - &_Type_default_instance_); - } - static constexpr int kIndexInFileMessages = - 0; - - friend void swap(Type& a, Type& b) { - a.Swap(&b); - } - inline void Swap(Type* other) { - if (other == this) return; - #ifdef PROTOBUF_FORCE_COPY_IN_SWAP - if (GetOwningArena() != nullptr && - GetOwningArena() == other->GetOwningArena()) { - #else // PROTOBUF_FORCE_COPY_IN_SWAP - if (GetOwningArena() == other->GetOwningArena()) { - #endif // !PROTOBUF_FORCE_COPY_IN_SWAP - InternalSwap(other); - } else { - ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other); - } - } - void UnsafeArenaSwap(Type* other) { - if (other == this) return; - GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena()); - InternalSwap(other); - } - - // implements Message ---------------------------------------------- - - Type* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final { - return CreateMaybeMessage<Type>(arena); - } - using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom; - void CopyFrom(const Type& from); - using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom; - void MergeFrom( const Type& from) { - Type::MergeImpl(*this, from); - } - private: - static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message& to_msg, const ::PROTOBUF_NAMESPACE_ID::Message& from_msg); - public: - PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final; - bool IsInitialized() const final; - - size_t ByteSizeLong() const final; - const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final; - uint8_t* _InternalSerialize( - uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final; - int GetCachedSize() const final { return _impl_._cached_size_.Get(); } - - private: - void SharedCtor(::PROTOBUF_NAMESPACE_ID::Arena* arena, bool is_message_owned); - void SharedDtor(); - void SetCachedSize(int size) const final; - void InternalSwap(Type* other); - - private: - friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata; - static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() { - return "google.protobuf.Type"; - } - protected: - explicit Type(::PROTOBUF_NAMESPACE_ID::Arena* arena, - bool is_message_owned = false); - public: - - static const ClassData _class_data_; - const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final; - - ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final; - - // nested types ---------------------------------------------------- - - // accessors ------------------------------------------------------- - - enum : int { - kFieldsFieldNumber = 2, - kOneofsFieldNumber = 3, - kOptionsFieldNumber = 4, - kNameFieldNumber = 1, - kSourceContextFieldNumber = 5, - kSyntaxFieldNumber = 6, - }; - // repeated .google.protobuf.Field fields = 2; - int fields_size() const; - private: - int _internal_fields_size() const; - public: - void clear_fields(); - ::PROTOBUF_NAMESPACE_ID::Field* mutable_fields(int index); - ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::Field >* - mutable_fields(); - private: - const ::PROTOBUF_NAMESPACE_ID::Field& _internal_fields(int index) const; - ::PROTOBUF_NAMESPACE_ID::Field* _internal_add_fields(); - public: - const ::PROTOBUF_NAMESPACE_ID::Field& fields(int index) const; - ::PROTOBUF_NAMESPACE_ID::Field* add_fields(); - const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::Field >& - fields() const; - - // repeated string oneofs = 3; - int oneofs_size() const; - private: - int _internal_oneofs_size() const; - public: - void clear_oneofs(); - const std::string& oneofs(int index) const; - std::string* mutable_oneofs(int index); - void set_oneofs(int index, const std::string& value); - void set_oneofs(int index, std::string&& value); - void set_oneofs(int index, const char* value); - void set_oneofs(int index, const char* value, size_t size); - std::string* add_oneofs(); - void add_oneofs(const std::string& value); - void add_oneofs(std::string&& value); - void add_oneofs(const char* value); - void add_oneofs(const char* value, size_t size); - const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField<std::string>& oneofs() const; - ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField<std::string>* mutable_oneofs(); - private: - const std::string& _internal_oneofs(int index) const; - std::string* _internal_add_oneofs(); - public: - - // repeated .google.protobuf.Option options = 4; - int options_size() const; - private: - int _internal_options_size() const; - public: - void clear_options(); - ::PROTOBUF_NAMESPACE_ID::Option* mutable_options(int index); - ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::Option >* - mutable_options(); - private: - const ::PROTOBUF_NAMESPACE_ID::Option& _internal_options(int index) const; - ::PROTOBUF_NAMESPACE_ID::Option* _internal_add_options(); - public: - const ::PROTOBUF_NAMESPACE_ID::Option& options(int index) const; - ::PROTOBUF_NAMESPACE_ID::Option* add_options(); - const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::Option >& - options() const; - - // string name = 1; - void clear_name(); - const std::string& name() const; - template <typename ArgT0 = const std::string&, typename... ArgT> - void set_name(ArgT0&& arg0, ArgT... args); - std::string* mutable_name(); - PROTOBUF_NODISCARD std::string* release_name(); - void set_allocated_name(std::string* name); - private: - const std::string& _internal_name() const; - inline PROTOBUF_ALWAYS_INLINE void _internal_set_name(const std::string& value); - std::string* _internal_mutable_name(); - public: - - // .google.protobuf.SourceContext source_context = 5; - bool has_source_context() const; - private: - bool _internal_has_source_context() const; - public: - void clear_source_context(); - const ::PROTOBUF_NAMESPACE_ID::SourceContext& source_context() const; - PROTOBUF_NODISCARD ::PROTOBUF_NAMESPACE_ID::SourceContext* release_source_context(); - ::PROTOBUF_NAMESPACE_ID::SourceContext* mutable_source_context(); - void set_allocated_source_context(::PROTOBUF_NAMESPACE_ID::SourceContext* source_context); - private: - const ::PROTOBUF_NAMESPACE_ID::SourceContext& _internal_source_context() const; - ::PROTOBUF_NAMESPACE_ID::SourceContext* _internal_mutable_source_context(); - public: - void unsafe_arena_set_allocated_source_context( - ::PROTOBUF_NAMESPACE_ID::SourceContext* source_context); - ::PROTOBUF_NAMESPACE_ID::SourceContext* unsafe_arena_release_source_context(); - - // .google.protobuf.Syntax syntax = 6; - void clear_syntax(); - ::PROTOBUF_NAMESPACE_ID::Syntax syntax() const; - void set_syntax(::PROTOBUF_NAMESPACE_ID::Syntax value); - private: - ::PROTOBUF_NAMESPACE_ID::Syntax _internal_syntax() const; - void _internal_set_syntax(::PROTOBUF_NAMESPACE_ID::Syntax value); - public: - - // @@protoc_insertion_point(class_scope:google.protobuf.Type) - private: - class _Internal; - - template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper; - typedef void InternalArenaConstructable_; - typedef void DestructorSkippable_; - struct Impl_ { - ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::Field > fields_; - ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField<std::string> oneofs_; - ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::Option > options_; - ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr name_; - ::PROTOBUF_NAMESPACE_ID::SourceContext* source_context_; - int syntax_; - mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_; - }; - union { Impl_ _impl_; }; - friend struct ::TableStruct_google_2fprotobuf_2ftype_2eproto; -}; -// ------------------------------------------------------------------- - -class PROTOBUF_EXPORT Field final : - public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:google.protobuf.Field) */ { - public: - inline Field() : Field(nullptr) {} - ~Field() override; - explicit PROTOBUF_CONSTEXPR Field(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized); - - Field(const Field& from); - Field(Field&& from) noexcept - : Field() { - *this = ::std::move(from); - } - - inline Field& operator=(const Field& from) { - CopyFrom(from); - return *this; - } - inline Field& operator=(Field&& from) noexcept { - if (this == &from) return *this; - if (GetOwningArena() == from.GetOwningArena() - #ifdef PROTOBUF_FORCE_COPY_IN_MOVE - && GetOwningArena() != nullptr - #endif // !PROTOBUF_FORCE_COPY_IN_MOVE - ) { - InternalSwap(&from); - } else { - CopyFrom(from); - } - return *this; - } - - static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() { - return GetDescriptor(); - } - static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() { - return default_instance().GetMetadata().descriptor; - } - static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() { - return default_instance().GetMetadata().reflection; - } - static const Field& default_instance() { - return *internal_default_instance(); - } - static inline const Field* internal_default_instance() { - return reinterpret_cast<const Field*>( - &_Field_default_instance_); - } - static constexpr int kIndexInFileMessages = - 1; - - friend void swap(Field& a, Field& b) { - a.Swap(&b); - } - inline void Swap(Field* other) { - if (other == this) return; - #ifdef PROTOBUF_FORCE_COPY_IN_SWAP - if (GetOwningArena() != nullptr && - GetOwningArena() == other->GetOwningArena()) { - #else // PROTOBUF_FORCE_COPY_IN_SWAP - if (GetOwningArena() == other->GetOwningArena()) { - #endif // !PROTOBUF_FORCE_COPY_IN_SWAP - InternalSwap(other); - } else { - ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other); - } - } - void UnsafeArenaSwap(Field* other) { - if (other == this) return; - GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena()); - InternalSwap(other); - } - - // implements Message ---------------------------------------------- - - Field* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final { - return CreateMaybeMessage<Field>(arena); - } - using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom; - void CopyFrom(const Field& from); - using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom; - void MergeFrom( const Field& from) { - Field::MergeImpl(*this, from); - } - private: - static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message& to_msg, const ::PROTOBUF_NAMESPACE_ID::Message& from_msg); - public: - PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final; - bool IsInitialized() const final; - - size_t ByteSizeLong() const final; - const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final; - uint8_t* _InternalSerialize( - uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final; - int GetCachedSize() const final { return _impl_._cached_size_.Get(); } - - private: - void SharedCtor(::PROTOBUF_NAMESPACE_ID::Arena* arena, bool is_message_owned); - void SharedDtor(); - void SetCachedSize(int size) const final; - void InternalSwap(Field* other); - - private: - friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata; - static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() { - return "google.protobuf.Field"; - } - protected: - explicit Field(::PROTOBUF_NAMESPACE_ID::Arena* arena, - bool is_message_owned = false); - public: - - static const ClassData _class_data_; - const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final; - - ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final; - - // nested types ---------------------------------------------------- - - typedef Field_Kind Kind; - static constexpr Kind TYPE_UNKNOWN = - Field_Kind_TYPE_UNKNOWN; - static constexpr Kind TYPE_DOUBLE = - Field_Kind_TYPE_DOUBLE; - static constexpr Kind TYPE_FLOAT = - Field_Kind_TYPE_FLOAT; - static constexpr Kind TYPE_INT64 = - Field_Kind_TYPE_INT64; - static constexpr Kind TYPE_UINT64 = - Field_Kind_TYPE_UINT64; - static constexpr Kind TYPE_INT32 = - Field_Kind_TYPE_INT32; - static constexpr Kind TYPE_FIXED64 = - Field_Kind_TYPE_FIXED64; - static constexpr Kind TYPE_FIXED32 = - Field_Kind_TYPE_FIXED32; - static constexpr Kind TYPE_BOOL = - Field_Kind_TYPE_BOOL; - static constexpr Kind TYPE_STRING = - Field_Kind_TYPE_STRING; - static constexpr Kind TYPE_GROUP = - Field_Kind_TYPE_GROUP; - static constexpr Kind TYPE_MESSAGE = - Field_Kind_TYPE_MESSAGE; - static constexpr Kind TYPE_BYTES = - Field_Kind_TYPE_BYTES; - static constexpr Kind TYPE_UINT32 = - Field_Kind_TYPE_UINT32; - static constexpr Kind TYPE_ENUM = - Field_Kind_TYPE_ENUM; - static constexpr Kind TYPE_SFIXED32 = - Field_Kind_TYPE_SFIXED32; - static constexpr Kind TYPE_SFIXED64 = - Field_Kind_TYPE_SFIXED64; - static constexpr Kind TYPE_SINT32 = - Field_Kind_TYPE_SINT32; - static constexpr Kind TYPE_SINT64 = - Field_Kind_TYPE_SINT64; - static inline bool Kind_IsValid(int value) { - return Field_Kind_IsValid(value); - } - static constexpr Kind Kind_MIN = - Field_Kind_Kind_MIN; - static constexpr Kind Kind_MAX = - Field_Kind_Kind_MAX; - static constexpr int Kind_ARRAYSIZE = - Field_Kind_Kind_ARRAYSIZE; - static inline const ::PROTOBUF_NAMESPACE_ID::EnumDescriptor* - Kind_descriptor() { - return Field_Kind_descriptor(); - } - template<typename T> - static inline const std::string& Kind_Name(T enum_t_value) { - static_assert(::std::is_same<T, Kind>::value || - ::std::is_integral<T>::value, - "Incorrect type passed to function Kind_Name."); - return Field_Kind_Name(enum_t_value); - } - static inline bool Kind_Parse(::PROTOBUF_NAMESPACE_ID::ConstStringParam name, - Kind* value) { - return Field_Kind_Parse(name, value); - } - - typedef Field_Cardinality Cardinality; - static constexpr Cardinality CARDINALITY_UNKNOWN = - Field_Cardinality_CARDINALITY_UNKNOWN; - static constexpr Cardinality CARDINALITY_OPTIONAL = - Field_Cardinality_CARDINALITY_OPTIONAL; - static constexpr Cardinality CARDINALITY_REQUIRED = - Field_Cardinality_CARDINALITY_REQUIRED; - static constexpr Cardinality CARDINALITY_REPEATED = - Field_Cardinality_CARDINALITY_REPEATED; - static inline bool Cardinality_IsValid(int value) { - return Field_Cardinality_IsValid(value); - } - static constexpr Cardinality Cardinality_MIN = - Field_Cardinality_Cardinality_MIN; - static constexpr Cardinality Cardinality_MAX = - Field_Cardinality_Cardinality_MAX; - static constexpr int Cardinality_ARRAYSIZE = - Field_Cardinality_Cardinality_ARRAYSIZE; - static inline const ::PROTOBUF_NAMESPACE_ID::EnumDescriptor* - Cardinality_descriptor() { - return Field_Cardinality_descriptor(); - } - template<typename T> - static inline const std::string& Cardinality_Name(T enum_t_value) { - static_assert(::std::is_same<T, Cardinality>::value || - ::std::is_integral<T>::value, - "Incorrect type passed to function Cardinality_Name."); - return Field_Cardinality_Name(enum_t_value); - } - static inline bool Cardinality_Parse(::PROTOBUF_NAMESPACE_ID::ConstStringParam name, - Cardinality* value) { - return Field_Cardinality_Parse(name, value); - } - - // accessors ------------------------------------------------------- - - enum : int { - kOptionsFieldNumber = 9, - kNameFieldNumber = 4, - kTypeUrlFieldNumber = 6, - kJsonNameFieldNumber = 10, - kDefaultValueFieldNumber = 11, - kKindFieldNumber = 1, - kCardinalityFieldNumber = 2, - kNumberFieldNumber = 3, - kOneofIndexFieldNumber = 7, - kPackedFieldNumber = 8, - }; - // repeated .google.protobuf.Option options = 9; - int options_size() const; - private: - int _internal_options_size() const; - public: - void clear_options(); - ::PROTOBUF_NAMESPACE_ID::Option* mutable_options(int index); - ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::Option >* - mutable_options(); - private: - const ::PROTOBUF_NAMESPACE_ID::Option& _internal_options(int index) const; - ::PROTOBUF_NAMESPACE_ID::Option* _internal_add_options(); - public: - const ::PROTOBUF_NAMESPACE_ID::Option& options(int index) const; - ::PROTOBUF_NAMESPACE_ID::Option* add_options(); - const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::Option >& - options() const; - - // string name = 4; - void clear_name(); - const std::string& name() const; - template <typename ArgT0 = const std::string&, typename... ArgT> - void set_name(ArgT0&& arg0, ArgT... args); - std::string* mutable_name(); - PROTOBUF_NODISCARD std::string* release_name(); - void set_allocated_name(std::string* name); - private: - const std::string& _internal_name() const; - inline PROTOBUF_ALWAYS_INLINE void _internal_set_name(const std::string& value); - std::string* _internal_mutable_name(); - public: - - // string type_url = 6; - void clear_type_url(); - const std::string& type_url() const; - template <typename ArgT0 = const std::string&, typename... ArgT> - void set_type_url(ArgT0&& arg0, ArgT... args); - std::string* mutable_type_url(); - PROTOBUF_NODISCARD std::string* release_type_url(); - void set_allocated_type_url(std::string* type_url); - private: - const std::string& _internal_type_url() const; - inline PROTOBUF_ALWAYS_INLINE void _internal_set_type_url(const std::string& value); - std::string* _internal_mutable_type_url(); - public: - - // string json_name = 10; - void clear_json_name(); - const std::string& json_name() const; - template <typename ArgT0 = const std::string&, typename... ArgT> - void set_json_name(ArgT0&& arg0, ArgT... args); - std::string* mutable_json_name(); - PROTOBUF_NODISCARD std::string* release_json_name(); - void set_allocated_json_name(std::string* json_name); - private: - const std::string& _internal_json_name() const; - inline PROTOBUF_ALWAYS_INLINE void _internal_set_json_name(const std::string& value); - std::string* _internal_mutable_json_name(); - public: - - // string default_value = 11; - void clear_default_value(); - const std::string& default_value() const; - template <typename ArgT0 = const std::string&, typename... ArgT> - void set_default_value(ArgT0&& arg0, ArgT... args); - std::string* mutable_default_value(); - PROTOBUF_NODISCARD std::string* release_default_value(); - void set_allocated_default_value(std::string* default_value); - private: - const std::string& _internal_default_value() const; - inline PROTOBUF_ALWAYS_INLINE void _internal_set_default_value(const std::string& value); - std::string* _internal_mutable_default_value(); - public: - - // .google.protobuf.Field.Kind kind = 1; - void clear_kind(); - ::PROTOBUF_NAMESPACE_ID::Field_Kind kind() const; - void set_kind(::PROTOBUF_NAMESPACE_ID::Field_Kind value); - private: - ::PROTOBUF_NAMESPACE_ID::Field_Kind _internal_kind() const; - void _internal_set_kind(::PROTOBUF_NAMESPACE_ID::Field_Kind value); - public: - - // .google.protobuf.Field.Cardinality cardinality = 2; - void clear_cardinality(); - ::PROTOBUF_NAMESPACE_ID::Field_Cardinality cardinality() const; - void set_cardinality(::PROTOBUF_NAMESPACE_ID::Field_Cardinality value); - private: - ::PROTOBUF_NAMESPACE_ID::Field_Cardinality _internal_cardinality() const; - void _internal_set_cardinality(::PROTOBUF_NAMESPACE_ID::Field_Cardinality value); - public: - - // int32 number = 3; - void clear_number(); - int32_t number() const; - void set_number(int32_t value); - private: - int32_t _internal_number() const; - void _internal_set_number(int32_t value); - public: - - // int32 oneof_index = 7; - void clear_oneof_index(); - int32_t oneof_index() const; - void set_oneof_index(int32_t value); - private: - int32_t _internal_oneof_index() const; - void _internal_set_oneof_index(int32_t value); - public: - - // bool packed = 8; - void clear_packed(); - bool packed() const; - void set_packed(bool value); - private: - bool _internal_packed() const; - void _internal_set_packed(bool value); - public: - - // @@protoc_insertion_point(class_scope:google.protobuf.Field) - private: - class _Internal; - - template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper; - typedef void InternalArenaConstructable_; - typedef void DestructorSkippable_; - struct Impl_ { - ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::Option > options_; - ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr name_; - ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr type_url_; - ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr json_name_; - ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr default_value_; - int kind_; - int cardinality_; - int32_t number_; - int32_t oneof_index_; - bool packed_; - mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_; - }; - union { Impl_ _impl_; }; - friend struct ::TableStruct_google_2fprotobuf_2ftype_2eproto; -}; -// ------------------------------------------------------------------- - -class PROTOBUF_EXPORT Enum final : - public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:google.protobuf.Enum) */ { - public: - inline Enum() : Enum(nullptr) {} - ~Enum() override; - explicit PROTOBUF_CONSTEXPR Enum(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized); - - Enum(const Enum& from); - Enum(Enum&& from) noexcept - : Enum() { - *this = ::std::move(from); - } - - inline Enum& operator=(const Enum& from) { - CopyFrom(from); - return *this; - } - inline Enum& operator=(Enum&& from) noexcept { - if (this == &from) return *this; - if (GetOwningArena() == from.GetOwningArena() - #ifdef PROTOBUF_FORCE_COPY_IN_MOVE - && GetOwningArena() != nullptr - #endif // !PROTOBUF_FORCE_COPY_IN_MOVE - ) { - InternalSwap(&from); - } else { - CopyFrom(from); - } - return *this; - } - - static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() { - return GetDescriptor(); - } - static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() { - return default_instance().GetMetadata().descriptor; - } - static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() { - return default_instance().GetMetadata().reflection; - } - static const Enum& default_instance() { - return *internal_default_instance(); - } - static inline const Enum* internal_default_instance() { - return reinterpret_cast<const Enum*>( - &_Enum_default_instance_); - } - static constexpr int kIndexInFileMessages = - 2; - - friend void swap(Enum& a, Enum& b) { - a.Swap(&b); - } - inline void Swap(Enum* other) { - if (other == this) return; - #ifdef PROTOBUF_FORCE_COPY_IN_SWAP - if (GetOwningArena() != nullptr && - GetOwningArena() == other->GetOwningArena()) { - #else // PROTOBUF_FORCE_COPY_IN_SWAP - if (GetOwningArena() == other->GetOwningArena()) { - #endif // !PROTOBUF_FORCE_COPY_IN_SWAP - InternalSwap(other); - } else { - ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other); - } - } - void UnsafeArenaSwap(Enum* other) { - if (other == this) return; - GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena()); - InternalSwap(other); - } - - // implements Message ---------------------------------------------- - - Enum* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final { - return CreateMaybeMessage<Enum>(arena); - } - using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom; - void CopyFrom(const Enum& from); - using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom; - void MergeFrom( const Enum& from) { - Enum::MergeImpl(*this, from); - } - private: - static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message& to_msg, const ::PROTOBUF_NAMESPACE_ID::Message& from_msg); - public: - PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final; - bool IsInitialized() const final; - - size_t ByteSizeLong() const final; - const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final; - uint8_t* _InternalSerialize( - uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final; - int GetCachedSize() const final { return _impl_._cached_size_.Get(); } - - private: - void SharedCtor(::PROTOBUF_NAMESPACE_ID::Arena* arena, bool is_message_owned); - void SharedDtor(); - void SetCachedSize(int size) const final; - void InternalSwap(Enum* other); - - private: - friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata; - static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() { - return "google.protobuf.Enum"; - } - protected: - explicit Enum(::PROTOBUF_NAMESPACE_ID::Arena* arena, - bool is_message_owned = false); - public: - - static const ClassData _class_data_; - const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final; - - ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final; - - // nested types ---------------------------------------------------- - - // accessors ------------------------------------------------------- - - enum : int { - kEnumvalueFieldNumber = 2, - kOptionsFieldNumber = 3, - kNameFieldNumber = 1, - kSourceContextFieldNumber = 4, - kSyntaxFieldNumber = 5, - }; - // repeated .google.protobuf.EnumValue enumvalue = 2; - int enumvalue_size() const; - private: - int _internal_enumvalue_size() const; - public: - void clear_enumvalue(); - ::PROTOBUF_NAMESPACE_ID::EnumValue* mutable_enumvalue(int index); - ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::EnumValue >* - mutable_enumvalue(); - private: - const ::PROTOBUF_NAMESPACE_ID::EnumValue& _internal_enumvalue(int index) const; - ::PROTOBUF_NAMESPACE_ID::EnumValue* _internal_add_enumvalue(); - public: - const ::PROTOBUF_NAMESPACE_ID::EnumValue& enumvalue(int index) const; - ::PROTOBUF_NAMESPACE_ID::EnumValue* add_enumvalue(); - const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::EnumValue >& - enumvalue() const; - - // repeated .google.protobuf.Option options = 3; - int options_size() const; - private: - int _internal_options_size() const; - public: - void clear_options(); - ::PROTOBUF_NAMESPACE_ID::Option* mutable_options(int index); - ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::Option >* - mutable_options(); - private: - const ::PROTOBUF_NAMESPACE_ID::Option& _internal_options(int index) const; - ::PROTOBUF_NAMESPACE_ID::Option* _internal_add_options(); - public: - const ::PROTOBUF_NAMESPACE_ID::Option& options(int index) const; - ::PROTOBUF_NAMESPACE_ID::Option* add_options(); - const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::Option >& - options() const; - - // string name = 1; - void clear_name(); - const std::string& name() const; - template <typename ArgT0 = const std::string&, typename... ArgT> - void set_name(ArgT0&& arg0, ArgT... args); - std::string* mutable_name(); - PROTOBUF_NODISCARD std::string* release_name(); - void set_allocated_name(std::string* name); - private: - const std::string& _internal_name() const; - inline PROTOBUF_ALWAYS_INLINE void _internal_set_name(const std::string& value); - std::string* _internal_mutable_name(); - public: - - // .google.protobuf.SourceContext source_context = 4; - bool has_source_context() const; - private: - bool _internal_has_source_context() const; - public: - void clear_source_context(); - const ::PROTOBUF_NAMESPACE_ID::SourceContext& source_context() const; - PROTOBUF_NODISCARD ::PROTOBUF_NAMESPACE_ID::SourceContext* release_source_context(); - ::PROTOBUF_NAMESPACE_ID::SourceContext* mutable_source_context(); - void set_allocated_source_context(::PROTOBUF_NAMESPACE_ID::SourceContext* source_context); - private: - const ::PROTOBUF_NAMESPACE_ID::SourceContext& _internal_source_context() const; - ::PROTOBUF_NAMESPACE_ID::SourceContext* _internal_mutable_source_context(); - public: - void unsafe_arena_set_allocated_source_context( - ::PROTOBUF_NAMESPACE_ID::SourceContext* source_context); - ::PROTOBUF_NAMESPACE_ID::SourceContext* unsafe_arena_release_source_context(); - - // .google.protobuf.Syntax syntax = 5; - void clear_syntax(); - ::PROTOBUF_NAMESPACE_ID::Syntax syntax() const; - void set_syntax(::PROTOBUF_NAMESPACE_ID::Syntax value); - private: - ::PROTOBUF_NAMESPACE_ID::Syntax _internal_syntax() const; - void _internal_set_syntax(::PROTOBUF_NAMESPACE_ID::Syntax value); - public: - - // @@protoc_insertion_point(class_scope:google.protobuf.Enum) - private: - class _Internal; - - template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper; - typedef void InternalArenaConstructable_; - typedef void DestructorSkippable_; - struct Impl_ { - ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::EnumValue > enumvalue_; - ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::Option > options_; - ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr name_; - ::PROTOBUF_NAMESPACE_ID::SourceContext* source_context_; - int syntax_; - mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_; - }; - union { Impl_ _impl_; }; - friend struct ::TableStruct_google_2fprotobuf_2ftype_2eproto; -}; -// ------------------------------------------------------------------- - -class PROTOBUF_EXPORT EnumValue final : - public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:google.protobuf.EnumValue) */ { - public: - inline EnumValue() : EnumValue(nullptr) {} - ~EnumValue() override; - explicit PROTOBUF_CONSTEXPR EnumValue(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized); - - EnumValue(const EnumValue& from); - EnumValue(EnumValue&& from) noexcept - : EnumValue() { - *this = ::std::move(from); - } - - inline EnumValue& operator=(const EnumValue& from) { - CopyFrom(from); - return *this; - } - inline EnumValue& operator=(EnumValue&& from) noexcept { - if (this == &from) return *this; - if (GetOwningArena() == from.GetOwningArena() - #ifdef PROTOBUF_FORCE_COPY_IN_MOVE - && GetOwningArena() != nullptr - #endif // !PROTOBUF_FORCE_COPY_IN_MOVE - ) { - InternalSwap(&from); - } else { - CopyFrom(from); - } - return *this; - } - - static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() { - return GetDescriptor(); - } - static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() { - return default_instance().GetMetadata().descriptor; - } - static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() { - return default_instance().GetMetadata().reflection; - } - static const EnumValue& default_instance() { - return *internal_default_instance(); - } - static inline const EnumValue* internal_default_instance() { - return reinterpret_cast<const EnumValue*>( - &_EnumValue_default_instance_); - } - static constexpr int kIndexInFileMessages = - 3; - - friend void swap(EnumValue& a, EnumValue& b) { - a.Swap(&b); - } - inline void Swap(EnumValue* other) { - if (other == this) return; - #ifdef PROTOBUF_FORCE_COPY_IN_SWAP - if (GetOwningArena() != nullptr && - GetOwningArena() == other->GetOwningArena()) { - #else // PROTOBUF_FORCE_COPY_IN_SWAP - if (GetOwningArena() == other->GetOwningArena()) { - #endif // !PROTOBUF_FORCE_COPY_IN_SWAP - InternalSwap(other); - } else { - ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other); - } - } - void UnsafeArenaSwap(EnumValue* other) { - if (other == this) return; - GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena()); - InternalSwap(other); - } - - // implements Message ---------------------------------------------- - - EnumValue* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final { - return CreateMaybeMessage<EnumValue>(arena); - } - using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom; - void CopyFrom(const EnumValue& from); - using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom; - void MergeFrom( const EnumValue& from) { - EnumValue::MergeImpl(*this, from); - } - private: - static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message& to_msg, const ::PROTOBUF_NAMESPACE_ID::Message& from_msg); - public: - PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final; - bool IsInitialized() const final; - - size_t ByteSizeLong() const final; - const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final; - uint8_t* _InternalSerialize( - uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final; - int GetCachedSize() const final { return _impl_._cached_size_.Get(); } - - private: - void SharedCtor(::PROTOBUF_NAMESPACE_ID::Arena* arena, bool is_message_owned); - void SharedDtor(); - void SetCachedSize(int size) const final; - void InternalSwap(EnumValue* other); - - private: - friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata; - static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() { - return "google.protobuf.EnumValue"; - } - protected: - explicit EnumValue(::PROTOBUF_NAMESPACE_ID::Arena* arena, - bool is_message_owned = false); - public: - - static const ClassData _class_data_; - const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final; - - ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final; - - // nested types ---------------------------------------------------- - - // accessors ------------------------------------------------------- - - enum : int { - kOptionsFieldNumber = 3, - kNameFieldNumber = 1, - kNumberFieldNumber = 2, - }; - // repeated .google.protobuf.Option options = 3; - int options_size() const; - private: - int _internal_options_size() const; - public: - void clear_options(); - ::PROTOBUF_NAMESPACE_ID::Option* mutable_options(int index); - ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::Option >* - mutable_options(); - private: - const ::PROTOBUF_NAMESPACE_ID::Option& _internal_options(int index) const; - ::PROTOBUF_NAMESPACE_ID::Option* _internal_add_options(); - public: - const ::PROTOBUF_NAMESPACE_ID::Option& options(int index) const; - ::PROTOBUF_NAMESPACE_ID::Option* add_options(); - const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::Option >& - options() const; - - // string name = 1; - void clear_name(); - const std::string& name() const; - template <typename ArgT0 = const std::string&, typename... ArgT> - void set_name(ArgT0&& arg0, ArgT... args); - std::string* mutable_name(); - PROTOBUF_NODISCARD std::string* release_name(); - void set_allocated_name(std::string* name); - private: - const std::string& _internal_name() const; - inline PROTOBUF_ALWAYS_INLINE void _internal_set_name(const std::string& value); - std::string* _internal_mutable_name(); - public: - - // int32 number = 2; - void clear_number(); - int32_t number() const; - void set_number(int32_t value); - private: - int32_t _internal_number() const; - void _internal_set_number(int32_t value); - public: - - // @@protoc_insertion_point(class_scope:google.protobuf.EnumValue) - private: - class _Internal; - - template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper; - typedef void InternalArenaConstructable_; - typedef void DestructorSkippable_; - struct Impl_ { - ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::Option > options_; - ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr name_; - int32_t number_; - mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_; - }; - union { Impl_ _impl_; }; - friend struct ::TableStruct_google_2fprotobuf_2ftype_2eproto; -}; -// ------------------------------------------------------------------- - -class PROTOBUF_EXPORT Option final : - public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:google.protobuf.Option) */ { - public: - inline Option() : Option(nullptr) {} - ~Option() override; - explicit PROTOBUF_CONSTEXPR Option(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized); - - Option(const Option& from); - Option(Option&& from) noexcept - : Option() { - *this = ::std::move(from); - } - - inline Option& operator=(const Option& from) { - CopyFrom(from); - return *this; - } - inline Option& operator=(Option&& from) noexcept { - if (this == &from) return *this; - if (GetOwningArena() == from.GetOwningArena() - #ifdef PROTOBUF_FORCE_COPY_IN_MOVE - && GetOwningArena() != nullptr - #endif // !PROTOBUF_FORCE_COPY_IN_MOVE - ) { - InternalSwap(&from); - } else { - CopyFrom(from); - } - return *this; - } - - static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() { - return GetDescriptor(); - } - static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() { - return default_instance().GetMetadata().descriptor; - } - static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() { - return default_instance().GetMetadata().reflection; - } - static const Option& default_instance() { - return *internal_default_instance(); - } - static inline const Option* internal_default_instance() { - return reinterpret_cast<const Option*>( - &_Option_default_instance_); - } - static constexpr int kIndexInFileMessages = - 4; - - friend void swap(Option& a, Option& b) { - a.Swap(&b); - } - inline void Swap(Option* other) { - if (other == this) return; - #ifdef PROTOBUF_FORCE_COPY_IN_SWAP - if (GetOwningArena() != nullptr && - GetOwningArena() == other->GetOwningArena()) { - #else // PROTOBUF_FORCE_COPY_IN_SWAP - if (GetOwningArena() == other->GetOwningArena()) { - #endif // !PROTOBUF_FORCE_COPY_IN_SWAP - InternalSwap(other); - } else { - ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other); - } - } - void UnsafeArenaSwap(Option* other) { - if (other == this) return; - GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena()); - InternalSwap(other); - } - - // implements Message ---------------------------------------------- - - Option* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final { - return CreateMaybeMessage<Option>(arena); - } - using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom; - void CopyFrom(const Option& from); - using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom; - void MergeFrom( const Option& from) { - Option::MergeImpl(*this, from); - } - private: - static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message& to_msg, const ::PROTOBUF_NAMESPACE_ID::Message& from_msg); - public: - PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final; - bool IsInitialized() const final; - - size_t ByteSizeLong() const final; - const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final; - uint8_t* _InternalSerialize( - uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final; - int GetCachedSize() const final { return _impl_._cached_size_.Get(); } - - private: - void SharedCtor(::PROTOBUF_NAMESPACE_ID::Arena* arena, bool is_message_owned); - void SharedDtor(); - void SetCachedSize(int size) const final; - void InternalSwap(Option* other); - - private: - friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata; - static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() { - return "google.protobuf.Option"; - } - protected: - explicit Option(::PROTOBUF_NAMESPACE_ID::Arena* arena, - bool is_message_owned = false); - public: - - static const ClassData _class_data_; - const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final; - - ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final; - - // nested types ---------------------------------------------------- - - // accessors ------------------------------------------------------- - - enum : int { - kNameFieldNumber = 1, - kValueFieldNumber = 2, - }; - // string name = 1; - void clear_name(); - const std::string& name() const; - template <typename ArgT0 = const std::string&, typename... ArgT> - void set_name(ArgT0&& arg0, ArgT... args); - std::string* mutable_name(); - PROTOBUF_NODISCARD std::string* release_name(); - void set_allocated_name(std::string* name); - private: - const std::string& _internal_name() const; - inline PROTOBUF_ALWAYS_INLINE void _internal_set_name(const std::string& value); - std::string* _internal_mutable_name(); - public: - - // .google.protobuf.Any value = 2; - bool has_value() const; - private: - bool _internal_has_value() const; - public: - void clear_value(); - const ::PROTOBUF_NAMESPACE_ID::Any& value() const; - PROTOBUF_NODISCARD ::PROTOBUF_NAMESPACE_ID::Any* release_value(); - ::PROTOBUF_NAMESPACE_ID::Any* mutable_value(); - void set_allocated_value(::PROTOBUF_NAMESPACE_ID::Any* value); - private: - const ::PROTOBUF_NAMESPACE_ID::Any& _internal_value() const; - ::PROTOBUF_NAMESPACE_ID::Any* _internal_mutable_value(); - public: - void unsafe_arena_set_allocated_value( - ::PROTOBUF_NAMESPACE_ID::Any* value); - ::PROTOBUF_NAMESPACE_ID::Any* unsafe_arena_release_value(); - - // @@protoc_insertion_point(class_scope:google.protobuf.Option) - private: - class _Internal; - - template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper; - typedef void InternalArenaConstructable_; - typedef void DestructorSkippable_; - struct Impl_ { - ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr name_; - ::PROTOBUF_NAMESPACE_ID::Any* value_; - mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_; - }; - union { Impl_ _impl_; }; - friend struct ::TableStruct_google_2fprotobuf_2ftype_2eproto; -}; -// =================================================================== - - -// =================================================================== - -#ifdef __GNUC__ - #pragma GCC diagnostic push - #pragma GCC diagnostic ignored "-Wstrict-aliasing" -#endif // __GNUC__ -// Type - -// string name = 1; -inline void Type::clear_name() { - _impl_.name_.ClearToEmpty(); -} -inline const std::string& Type::name() const { - // @@protoc_insertion_point(field_get:google.protobuf.Type.name) - return _internal_name(); -} -template <typename ArgT0, typename... ArgT> -inline PROTOBUF_ALWAYS_INLINE -void Type::set_name(ArgT0&& arg0, ArgT... args) { - - _impl_.name_.Set(static_cast<ArgT0 &&>(arg0), args..., GetArenaForAllocation()); - // @@protoc_insertion_point(field_set:google.protobuf.Type.name) -} -inline std::string* Type::mutable_name() { - std::string* _s = _internal_mutable_name(); - // @@protoc_insertion_point(field_mutable:google.protobuf.Type.name) - return _s; -} -inline const std::string& Type::_internal_name() const { - return _impl_.name_.Get(); -} -inline void Type::_internal_set_name(const std::string& value) { - - _impl_.name_.Set(value, GetArenaForAllocation()); -} -inline std::string* Type::_internal_mutable_name() { - - return _impl_.name_.Mutable(GetArenaForAllocation()); -} -inline std::string* Type::release_name() { - // @@protoc_insertion_point(field_release:google.protobuf.Type.name) - return _impl_.name_.Release(); -} -inline void Type::set_allocated_name(std::string* name) { - if (name != nullptr) { - - } else { - - } - _impl_.name_.SetAllocated(name, GetArenaForAllocation()); -#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING - if (_impl_.name_.IsDefault()) { - _impl_.name_.Set("", GetArenaForAllocation()); - } -#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING - // @@protoc_insertion_point(field_set_allocated:google.protobuf.Type.name) -} - -// repeated .google.protobuf.Field fields = 2; -inline int Type::_internal_fields_size() const { - return _impl_.fields_.size(); -} -inline int Type::fields_size() const { - return _internal_fields_size(); -} -inline void Type::clear_fields() { - _impl_.fields_.Clear(); -} -inline ::PROTOBUF_NAMESPACE_ID::Field* Type::mutable_fields(int index) { - // @@protoc_insertion_point(field_mutable:google.protobuf.Type.fields) - return _impl_.fields_.Mutable(index); -} -inline ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::Field >* -Type::mutable_fields() { - // @@protoc_insertion_point(field_mutable_list:google.protobuf.Type.fields) - return &_impl_.fields_; -} -inline const ::PROTOBUF_NAMESPACE_ID::Field& Type::_internal_fields(int index) const { - return _impl_.fields_.Get(index); -} -inline const ::PROTOBUF_NAMESPACE_ID::Field& Type::fields(int index) const { - // @@protoc_insertion_point(field_get:google.protobuf.Type.fields) - return _internal_fields(index); -} -inline ::PROTOBUF_NAMESPACE_ID::Field* Type::_internal_add_fields() { - return _impl_.fields_.Add(); -} -inline ::PROTOBUF_NAMESPACE_ID::Field* Type::add_fields() { - ::PROTOBUF_NAMESPACE_ID::Field* _add = _internal_add_fields(); - // @@protoc_insertion_point(field_add:google.protobuf.Type.fields) - return _add; -} -inline const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::Field >& -Type::fields() const { - // @@protoc_insertion_point(field_list:google.protobuf.Type.fields) - return _impl_.fields_; -} - -// repeated string oneofs = 3; -inline int Type::_internal_oneofs_size() const { - return _impl_.oneofs_.size(); -} -inline int Type::oneofs_size() const { - return _internal_oneofs_size(); -} -inline void Type::clear_oneofs() { - _impl_.oneofs_.Clear(); -} -inline std::string* Type::add_oneofs() { - std::string* _s = _internal_add_oneofs(); - // @@protoc_insertion_point(field_add_mutable:google.protobuf.Type.oneofs) - return _s; -} -inline const std::string& Type::_internal_oneofs(int index) const { - return _impl_.oneofs_.Get(index); -} -inline const std::string& Type::oneofs(int index) const { - // @@protoc_insertion_point(field_get:google.protobuf.Type.oneofs) - return _internal_oneofs(index); -} -inline std::string* Type::mutable_oneofs(int index) { - // @@protoc_insertion_point(field_mutable:google.protobuf.Type.oneofs) - return _impl_.oneofs_.Mutable(index); -} -inline void Type::set_oneofs(int index, const std::string& value) { - _impl_.oneofs_.Mutable(index)->assign(value); - // @@protoc_insertion_point(field_set:google.protobuf.Type.oneofs) -} -inline void Type::set_oneofs(int index, std::string&& value) { - _impl_.oneofs_.Mutable(index)->assign(std::move(value)); - // @@protoc_insertion_point(field_set:google.protobuf.Type.oneofs) -} -inline void Type::set_oneofs(int index, const char* value) { - GOOGLE_DCHECK(value != nullptr); - _impl_.oneofs_.Mutable(index)->assign(value); - // @@protoc_insertion_point(field_set_char:google.protobuf.Type.oneofs) -} -inline void Type::set_oneofs(int index, const char* value, size_t size) { - _impl_.oneofs_.Mutable(index)->assign( - reinterpret_cast<const char*>(value), size); - // @@protoc_insertion_point(field_set_pointer:google.protobuf.Type.oneofs) -} -inline std::string* Type::_internal_add_oneofs() { - return _impl_.oneofs_.Add(); -} -inline void Type::add_oneofs(const std::string& value) { - _impl_.oneofs_.Add()->assign(value); - // @@protoc_insertion_point(field_add:google.protobuf.Type.oneofs) -} -inline void Type::add_oneofs(std::string&& value) { - _impl_.oneofs_.Add(std::move(value)); - // @@protoc_insertion_point(field_add:google.protobuf.Type.oneofs) -} -inline void Type::add_oneofs(const char* value) { - GOOGLE_DCHECK(value != nullptr); - _impl_.oneofs_.Add()->assign(value); - // @@protoc_insertion_point(field_add_char:google.protobuf.Type.oneofs) -} -inline void Type::add_oneofs(const char* value, size_t size) { - _impl_.oneofs_.Add()->assign(reinterpret_cast<const char*>(value), size); - // @@protoc_insertion_point(field_add_pointer:google.protobuf.Type.oneofs) -} -inline const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField<std::string>& -Type::oneofs() const { - // @@protoc_insertion_point(field_list:google.protobuf.Type.oneofs) - return _impl_.oneofs_; -} -inline ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField<std::string>* -Type::mutable_oneofs() { - // @@protoc_insertion_point(field_mutable_list:google.protobuf.Type.oneofs) - return &_impl_.oneofs_; -} - -// repeated .google.protobuf.Option options = 4; -inline int Type::_internal_options_size() const { - return _impl_.options_.size(); -} -inline int Type::options_size() const { - return _internal_options_size(); -} -inline void Type::clear_options() { - _impl_.options_.Clear(); -} -inline ::PROTOBUF_NAMESPACE_ID::Option* Type::mutable_options(int index) { - // @@protoc_insertion_point(field_mutable:google.protobuf.Type.options) - return _impl_.options_.Mutable(index); -} -inline ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::Option >* -Type::mutable_options() { - // @@protoc_insertion_point(field_mutable_list:google.protobuf.Type.options) - return &_impl_.options_; -} -inline const ::PROTOBUF_NAMESPACE_ID::Option& Type::_internal_options(int index) const { - return _impl_.options_.Get(index); -} -inline const ::PROTOBUF_NAMESPACE_ID::Option& Type::options(int index) const { - // @@protoc_insertion_point(field_get:google.protobuf.Type.options) - return _internal_options(index); -} -inline ::PROTOBUF_NAMESPACE_ID::Option* Type::_internal_add_options() { - return _impl_.options_.Add(); -} -inline ::PROTOBUF_NAMESPACE_ID::Option* Type::add_options() { - ::PROTOBUF_NAMESPACE_ID::Option* _add = _internal_add_options(); - // @@protoc_insertion_point(field_add:google.protobuf.Type.options) - return _add; -} -inline const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::Option >& -Type::options() const { - // @@protoc_insertion_point(field_list:google.protobuf.Type.options) - return _impl_.options_; -} - -// .google.protobuf.SourceContext source_context = 5; -inline bool Type::_internal_has_source_context() const { - return this != internal_default_instance() && _impl_.source_context_ != nullptr; -} -inline bool Type::has_source_context() const { - return _internal_has_source_context(); -} -inline const ::PROTOBUF_NAMESPACE_ID::SourceContext& Type::_internal_source_context() const { - const ::PROTOBUF_NAMESPACE_ID::SourceContext* p = _impl_.source_context_; - return p != nullptr ? *p : reinterpret_cast<const ::PROTOBUF_NAMESPACE_ID::SourceContext&>( - ::PROTOBUF_NAMESPACE_ID::_SourceContext_default_instance_); -} -inline const ::PROTOBUF_NAMESPACE_ID::SourceContext& Type::source_context() const { - // @@protoc_insertion_point(field_get:google.protobuf.Type.source_context) - return _internal_source_context(); -} -inline void Type::unsafe_arena_set_allocated_source_context( - ::PROTOBUF_NAMESPACE_ID::SourceContext* source_context) { - if (GetArenaForAllocation() == nullptr) { - delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(_impl_.source_context_); - } - _impl_.source_context_ = source_context; - if (source_context) { - - } else { - - } - // @@protoc_insertion_point(field_unsafe_arena_set_allocated:google.protobuf.Type.source_context) -} -inline ::PROTOBUF_NAMESPACE_ID::SourceContext* Type::release_source_context() { - - ::PROTOBUF_NAMESPACE_ID::SourceContext* temp = _impl_.source_context_; - _impl_.source_context_ = nullptr; -#ifdef PROTOBUF_FORCE_COPY_IN_RELEASE - auto* old = reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(temp); - temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp); - if (GetArenaForAllocation() == nullptr) { delete old; } -#else // PROTOBUF_FORCE_COPY_IN_RELEASE - if (GetArenaForAllocation() != nullptr) { - temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp); - } -#endif // !PROTOBUF_FORCE_COPY_IN_RELEASE - return temp; -} -inline ::PROTOBUF_NAMESPACE_ID::SourceContext* Type::unsafe_arena_release_source_context() { - // @@protoc_insertion_point(field_release:google.protobuf.Type.source_context) - - ::PROTOBUF_NAMESPACE_ID::SourceContext* temp = _impl_.source_context_; - _impl_.source_context_ = nullptr; - return temp; -} -inline ::PROTOBUF_NAMESPACE_ID::SourceContext* Type::_internal_mutable_source_context() { - - if (_impl_.source_context_ == nullptr) { - auto* p = CreateMaybeMessage<::PROTOBUF_NAMESPACE_ID::SourceContext>(GetArenaForAllocation()); - _impl_.source_context_ = p; - } - return _impl_.source_context_; -} -inline ::PROTOBUF_NAMESPACE_ID::SourceContext* Type::mutable_source_context() { - ::PROTOBUF_NAMESPACE_ID::SourceContext* _msg = _internal_mutable_source_context(); - // @@protoc_insertion_point(field_mutable:google.protobuf.Type.source_context) - return _msg; -} -inline void Type::set_allocated_source_context(::PROTOBUF_NAMESPACE_ID::SourceContext* source_context) { - ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation(); - if (message_arena == nullptr) { - delete reinterpret_cast< ::PROTOBUF_NAMESPACE_ID::MessageLite*>(_impl_.source_context_); - } - if (source_context) { - ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena = - ::PROTOBUF_NAMESPACE_ID::Arena::InternalGetOwningArena( - reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(source_context)); - if (message_arena != submessage_arena) { - source_context = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage( - message_arena, source_context, submessage_arena); - } - - } else { - - } - _impl_.source_context_ = source_context; - // @@protoc_insertion_point(field_set_allocated:google.protobuf.Type.source_context) -} - -// .google.protobuf.Syntax syntax = 6; -inline void Type::clear_syntax() { - _impl_.syntax_ = 0; -} -inline ::PROTOBUF_NAMESPACE_ID::Syntax Type::_internal_syntax() const { - return static_cast< ::PROTOBUF_NAMESPACE_ID::Syntax >(_impl_.syntax_); -} -inline ::PROTOBUF_NAMESPACE_ID::Syntax Type::syntax() const { - // @@protoc_insertion_point(field_get:google.protobuf.Type.syntax) - return _internal_syntax(); -} -inline void Type::_internal_set_syntax(::PROTOBUF_NAMESPACE_ID::Syntax value) { - - _impl_.syntax_ = value; -} -inline void Type::set_syntax(::PROTOBUF_NAMESPACE_ID::Syntax value) { - _internal_set_syntax(value); - // @@protoc_insertion_point(field_set:google.protobuf.Type.syntax) -} - -// ------------------------------------------------------------------- - -// Field - -// .google.protobuf.Field.Kind kind = 1; -inline void Field::clear_kind() { - _impl_.kind_ = 0; -} -inline ::PROTOBUF_NAMESPACE_ID::Field_Kind Field::_internal_kind() const { - return static_cast< ::PROTOBUF_NAMESPACE_ID::Field_Kind >(_impl_.kind_); -} -inline ::PROTOBUF_NAMESPACE_ID::Field_Kind Field::kind() const { - // @@protoc_insertion_point(field_get:google.protobuf.Field.kind) - return _internal_kind(); -} -inline void Field::_internal_set_kind(::PROTOBUF_NAMESPACE_ID::Field_Kind value) { - - _impl_.kind_ = value; -} -inline void Field::set_kind(::PROTOBUF_NAMESPACE_ID::Field_Kind value) { - _internal_set_kind(value); - // @@protoc_insertion_point(field_set:google.protobuf.Field.kind) -} - -// .google.protobuf.Field.Cardinality cardinality = 2; -inline void Field::clear_cardinality() { - _impl_.cardinality_ = 0; -} -inline ::PROTOBUF_NAMESPACE_ID::Field_Cardinality Field::_internal_cardinality() const { - return static_cast< ::PROTOBUF_NAMESPACE_ID::Field_Cardinality >(_impl_.cardinality_); -} -inline ::PROTOBUF_NAMESPACE_ID::Field_Cardinality Field::cardinality() const { - // @@protoc_insertion_point(field_get:google.protobuf.Field.cardinality) - return _internal_cardinality(); -} -inline void Field::_internal_set_cardinality(::PROTOBUF_NAMESPACE_ID::Field_Cardinality value) { - - _impl_.cardinality_ = value; -} -inline void Field::set_cardinality(::PROTOBUF_NAMESPACE_ID::Field_Cardinality value) { - _internal_set_cardinality(value); - // @@protoc_insertion_point(field_set:google.protobuf.Field.cardinality) -} - -// int32 number = 3; -inline void Field::clear_number() { - _impl_.number_ = 0; -} -inline int32_t Field::_internal_number() const { - return _impl_.number_; -} -inline int32_t Field::number() const { - // @@protoc_insertion_point(field_get:google.protobuf.Field.number) - return _internal_number(); -} -inline void Field::_internal_set_number(int32_t value) { - - _impl_.number_ = value; -} -inline void Field::set_number(int32_t value) { - _internal_set_number(value); - // @@protoc_insertion_point(field_set:google.protobuf.Field.number) -} - -// string name = 4; -inline void Field::clear_name() { - _impl_.name_.ClearToEmpty(); -} -inline const std::string& Field::name() const { - // @@protoc_insertion_point(field_get:google.protobuf.Field.name) - return _internal_name(); -} -template <typename ArgT0, typename... ArgT> -inline PROTOBUF_ALWAYS_INLINE -void Field::set_name(ArgT0&& arg0, ArgT... args) { - - _impl_.name_.Set(static_cast<ArgT0 &&>(arg0), args..., GetArenaForAllocation()); - // @@protoc_insertion_point(field_set:google.protobuf.Field.name) -} -inline std::string* Field::mutable_name() { - std::string* _s = _internal_mutable_name(); - // @@protoc_insertion_point(field_mutable:google.protobuf.Field.name) - return _s; -} -inline const std::string& Field::_internal_name() const { - return _impl_.name_.Get(); -} -inline void Field::_internal_set_name(const std::string& value) { - - _impl_.name_.Set(value, GetArenaForAllocation()); -} -inline std::string* Field::_internal_mutable_name() { - - return _impl_.name_.Mutable(GetArenaForAllocation()); -} -inline std::string* Field::release_name() { - // @@protoc_insertion_point(field_release:google.protobuf.Field.name) - return _impl_.name_.Release(); -} -inline void Field::set_allocated_name(std::string* name) { - if (name != nullptr) { - - } else { - - } - _impl_.name_.SetAllocated(name, GetArenaForAllocation()); -#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING - if (_impl_.name_.IsDefault()) { - _impl_.name_.Set("", GetArenaForAllocation()); - } -#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING - // @@protoc_insertion_point(field_set_allocated:google.protobuf.Field.name) -} - -// string type_url = 6; -inline void Field::clear_type_url() { - _impl_.type_url_.ClearToEmpty(); -} -inline const std::string& Field::type_url() const { - // @@protoc_insertion_point(field_get:google.protobuf.Field.type_url) - return _internal_type_url(); -} -template <typename ArgT0, typename... ArgT> -inline PROTOBUF_ALWAYS_INLINE -void Field::set_type_url(ArgT0&& arg0, ArgT... args) { - - _impl_.type_url_.Set(static_cast<ArgT0 &&>(arg0), args..., GetArenaForAllocation()); - // @@protoc_insertion_point(field_set:google.protobuf.Field.type_url) -} -inline std::string* Field::mutable_type_url() { - std::string* _s = _internal_mutable_type_url(); - // @@protoc_insertion_point(field_mutable:google.protobuf.Field.type_url) - return _s; -} -inline const std::string& Field::_internal_type_url() const { - return _impl_.type_url_.Get(); -} -inline void Field::_internal_set_type_url(const std::string& value) { - - _impl_.type_url_.Set(value, GetArenaForAllocation()); -} -inline std::string* Field::_internal_mutable_type_url() { - - return _impl_.type_url_.Mutable(GetArenaForAllocation()); -} -inline std::string* Field::release_type_url() { - // @@protoc_insertion_point(field_release:google.protobuf.Field.type_url) - return _impl_.type_url_.Release(); -} -inline void Field::set_allocated_type_url(std::string* type_url) { - if (type_url != nullptr) { - - } else { - - } - _impl_.type_url_.SetAllocated(type_url, GetArenaForAllocation()); -#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING - if (_impl_.type_url_.IsDefault()) { - _impl_.type_url_.Set("", GetArenaForAllocation()); - } -#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING - // @@protoc_insertion_point(field_set_allocated:google.protobuf.Field.type_url) -} - -// int32 oneof_index = 7; -inline void Field::clear_oneof_index() { - _impl_.oneof_index_ = 0; -} -inline int32_t Field::_internal_oneof_index() const { - return _impl_.oneof_index_; -} -inline int32_t Field::oneof_index() const { - // @@protoc_insertion_point(field_get:google.protobuf.Field.oneof_index) - return _internal_oneof_index(); -} -inline void Field::_internal_set_oneof_index(int32_t value) { - - _impl_.oneof_index_ = value; -} -inline void Field::set_oneof_index(int32_t value) { - _internal_set_oneof_index(value); - // @@protoc_insertion_point(field_set:google.protobuf.Field.oneof_index) -} - -// bool packed = 8; -inline void Field::clear_packed() { - _impl_.packed_ = false; -} -inline bool Field::_internal_packed() const { - return _impl_.packed_; -} -inline bool Field::packed() const { - // @@protoc_insertion_point(field_get:google.protobuf.Field.packed) - return _internal_packed(); -} -inline void Field::_internal_set_packed(bool value) { - - _impl_.packed_ = value; -} -inline void Field::set_packed(bool value) { - _internal_set_packed(value); - // @@protoc_insertion_point(field_set:google.protobuf.Field.packed) -} - -// repeated .google.protobuf.Option options = 9; -inline int Field::_internal_options_size() const { - return _impl_.options_.size(); -} -inline int Field::options_size() const { - return _internal_options_size(); -} -inline void Field::clear_options() { - _impl_.options_.Clear(); -} -inline ::PROTOBUF_NAMESPACE_ID::Option* Field::mutable_options(int index) { - // @@protoc_insertion_point(field_mutable:google.protobuf.Field.options) - return _impl_.options_.Mutable(index); -} -inline ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::Option >* -Field::mutable_options() { - // @@protoc_insertion_point(field_mutable_list:google.protobuf.Field.options) - return &_impl_.options_; -} -inline const ::PROTOBUF_NAMESPACE_ID::Option& Field::_internal_options(int index) const { - return _impl_.options_.Get(index); -} -inline const ::PROTOBUF_NAMESPACE_ID::Option& Field::options(int index) const { - // @@protoc_insertion_point(field_get:google.protobuf.Field.options) - return _internal_options(index); -} -inline ::PROTOBUF_NAMESPACE_ID::Option* Field::_internal_add_options() { - return _impl_.options_.Add(); -} -inline ::PROTOBUF_NAMESPACE_ID::Option* Field::add_options() { - ::PROTOBUF_NAMESPACE_ID::Option* _add = _internal_add_options(); - // @@protoc_insertion_point(field_add:google.protobuf.Field.options) - return _add; -} -inline const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::Option >& -Field::options() const { - // @@protoc_insertion_point(field_list:google.protobuf.Field.options) - return _impl_.options_; -} - -// string json_name = 10; -inline void Field::clear_json_name() { - _impl_.json_name_.ClearToEmpty(); -} -inline const std::string& Field::json_name() const { - // @@protoc_insertion_point(field_get:google.protobuf.Field.json_name) - return _internal_json_name(); -} -template <typename ArgT0, typename... ArgT> -inline PROTOBUF_ALWAYS_INLINE -void Field::set_json_name(ArgT0&& arg0, ArgT... args) { - - _impl_.json_name_.Set(static_cast<ArgT0 &&>(arg0), args..., GetArenaForAllocation()); - // @@protoc_insertion_point(field_set:google.protobuf.Field.json_name) -} -inline std::string* Field::mutable_json_name() { - std::string* _s = _internal_mutable_json_name(); - // @@protoc_insertion_point(field_mutable:google.protobuf.Field.json_name) - return _s; -} -inline const std::string& Field::_internal_json_name() const { - return _impl_.json_name_.Get(); -} -inline void Field::_internal_set_json_name(const std::string& value) { - - _impl_.json_name_.Set(value, GetArenaForAllocation()); -} -inline std::string* Field::_internal_mutable_json_name() { - - return _impl_.json_name_.Mutable(GetArenaForAllocation()); -} -inline std::string* Field::release_json_name() { - // @@protoc_insertion_point(field_release:google.protobuf.Field.json_name) - return _impl_.json_name_.Release(); -} -inline void Field::set_allocated_json_name(std::string* json_name) { - if (json_name != nullptr) { - - } else { - - } - _impl_.json_name_.SetAllocated(json_name, GetArenaForAllocation()); -#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING - if (_impl_.json_name_.IsDefault()) { - _impl_.json_name_.Set("", GetArenaForAllocation()); - } -#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING - // @@protoc_insertion_point(field_set_allocated:google.protobuf.Field.json_name) -} - -// string default_value = 11; -inline void Field::clear_default_value() { - _impl_.default_value_.ClearToEmpty(); -} -inline const std::string& Field::default_value() const { - // @@protoc_insertion_point(field_get:google.protobuf.Field.default_value) - return _internal_default_value(); -} -template <typename ArgT0, typename... ArgT> -inline PROTOBUF_ALWAYS_INLINE -void Field::set_default_value(ArgT0&& arg0, ArgT... args) { - - _impl_.default_value_.Set(static_cast<ArgT0 &&>(arg0), args..., GetArenaForAllocation()); - // @@protoc_insertion_point(field_set:google.protobuf.Field.default_value) -} -inline std::string* Field::mutable_default_value() { - std::string* _s = _internal_mutable_default_value(); - // @@protoc_insertion_point(field_mutable:google.protobuf.Field.default_value) - return _s; -} -inline const std::string& Field::_internal_default_value() const { - return _impl_.default_value_.Get(); -} -inline void Field::_internal_set_default_value(const std::string& value) { - - _impl_.default_value_.Set(value, GetArenaForAllocation()); -} -inline std::string* Field::_internal_mutable_default_value() { - - return _impl_.default_value_.Mutable(GetArenaForAllocation()); -} -inline std::string* Field::release_default_value() { - // @@protoc_insertion_point(field_release:google.protobuf.Field.default_value) - return _impl_.default_value_.Release(); -} -inline void Field::set_allocated_default_value(std::string* default_value) { - if (default_value != nullptr) { - - } else { - - } - _impl_.default_value_.SetAllocated(default_value, GetArenaForAllocation()); -#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING - if (_impl_.default_value_.IsDefault()) { - _impl_.default_value_.Set("", GetArenaForAllocation()); - } -#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING - // @@protoc_insertion_point(field_set_allocated:google.protobuf.Field.default_value) -} - -// ------------------------------------------------------------------- - -// Enum - -// string name = 1; -inline void Enum::clear_name() { - _impl_.name_.ClearToEmpty(); -} -inline const std::string& Enum::name() const { - // @@protoc_insertion_point(field_get:google.protobuf.Enum.name) - return _internal_name(); -} -template <typename ArgT0, typename... ArgT> -inline PROTOBUF_ALWAYS_INLINE -void Enum::set_name(ArgT0&& arg0, ArgT... args) { - - _impl_.name_.Set(static_cast<ArgT0 &&>(arg0), args..., GetArenaForAllocation()); - // @@protoc_insertion_point(field_set:google.protobuf.Enum.name) -} -inline std::string* Enum::mutable_name() { - std::string* _s = _internal_mutable_name(); - // @@protoc_insertion_point(field_mutable:google.protobuf.Enum.name) - return _s; -} -inline const std::string& Enum::_internal_name() const { - return _impl_.name_.Get(); -} -inline void Enum::_internal_set_name(const std::string& value) { - - _impl_.name_.Set(value, GetArenaForAllocation()); -} -inline std::string* Enum::_internal_mutable_name() { - - return _impl_.name_.Mutable(GetArenaForAllocation()); -} -inline std::string* Enum::release_name() { - // @@protoc_insertion_point(field_release:google.protobuf.Enum.name) - return _impl_.name_.Release(); -} -inline void Enum::set_allocated_name(std::string* name) { - if (name != nullptr) { - - } else { - - } - _impl_.name_.SetAllocated(name, GetArenaForAllocation()); -#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING - if (_impl_.name_.IsDefault()) { - _impl_.name_.Set("", GetArenaForAllocation()); - } -#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING - // @@protoc_insertion_point(field_set_allocated:google.protobuf.Enum.name) -} - -// repeated .google.protobuf.EnumValue enumvalue = 2; -inline int Enum::_internal_enumvalue_size() const { - return _impl_.enumvalue_.size(); -} -inline int Enum::enumvalue_size() const { - return _internal_enumvalue_size(); -} -inline void Enum::clear_enumvalue() { - _impl_.enumvalue_.Clear(); -} -inline ::PROTOBUF_NAMESPACE_ID::EnumValue* Enum::mutable_enumvalue(int index) { - // @@protoc_insertion_point(field_mutable:google.protobuf.Enum.enumvalue) - return _impl_.enumvalue_.Mutable(index); -} -inline ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::EnumValue >* -Enum::mutable_enumvalue() { - // @@protoc_insertion_point(field_mutable_list:google.protobuf.Enum.enumvalue) - return &_impl_.enumvalue_; -} -inline const ::PROTOBUF_NAMESPACE_ID::EnumValue& Enum::_internal_enumvalue(int index) const { - return _impl_.enumvalue_.Get(index); -} -inline const ::PROTOBUF_NAMESPACE_ID::EnumValue& Enum::enumvalue(int index) const { - // @@protoc_insertion_point(field_get:google.protobuf.Enum.enumvalue) - return _internal_enumvalue(index); -} -inline ::PROTOBUF_NAMESPACE_ID::EnumValue* Enum::_internal_add_enumvalue() { - return _impl_.enumvalue_.Add(); -} -inline ::PROTOBUF_NAMESPACE_ID::EnumValue* Enum::add_enumvalue() { - ::PROTOBUF_NAMESPACE_ID::EnumValue* _add = _internal_add_enumvalue(); - // @@protoc_insertion_point(field_add:google.protobuf.Enum.enumvalue) - return _add; -} -inline const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::EnumValue >& -Enum::enumvalue() const { - // @@protoc_insertion_point(field_list:google.protobuf.Enum.enumvalue) - return _impl_.enumvalue_; -} - -// repeated .google.protobuf.Option options = 3; -inline int Enum::_internal_options_size() const { - return _impl_.options_.size(); -} -inline int Enum::options_size() const { - return _internal_options_size(); -} -inline void Enum::clear_options() { - _impl_.options_.Clear(); -} -inline ::PROTOBUF_NAMESPACE_ID::Option* Enum::mutable_options(int index) { - // @@protoc_insertion_point(field_mutable:google.protobuf.Enum.options) - return _impl_.options_.Mutable(index); -} -inline ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::Option >* -Enum::mutable_options() { - // @@protoc_insertion_point(field_mutable_list:google.protobuf.Enum.options) - return &_impl_.options_; -} -inline const ::PROTOBUF_NAMESPACE_ID::Option& Enum::_internal_options(int index) const { - return _impl_.options_.Get(index); -} -inline const ::PROTOBUF_NAMESPACE_ID::Option& Enum::options(int index) const { - // @@protoc_insertion_point(field_get:google.protobuf.Enum.options) - return _internal_options(index); -} -inline ::PROTOBUF_NAMESPACE_ID::Option* Enum::_internal_add_options() { - return _impl_.options_.Add(); -} -inline ::PROTOBUF_NAMESPACE_ID::Option* Enum::add_options() { - ::PROTOBUF_NAMESPACE_ID::Option* _add = _internal_add_options(); - // @@protoc_insertion_point(field_add:google.protobuf.Enum.options) - return _add; -} -inline const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::Option >& -Enum::options() const { - // @@protoc_insertion_point(field_list:google.protobuf.Enum.options) - return _impl_.options_; -} - -// .google.protobuf.SourceContext source_context = 4; -inline bool Enum::_internal_has_source_context() const { - return this != internal_default_instance() && _impl_.source_context_ != nullptr; -} -inline bool Enum::has_source_context() const { - return _internal_has_source_context(); -} -inline const ::PROTOBUF_NAMESPACE_ID::SourceContext& Enum::_internal_source_context() const { - const ::PROTOBUF_NAMESPACE_ID::SourceContext* p = _impl_.source_context_; - return p != nullptr ? *p : reinterpret_cast<const ::PROTOBUF_NAMESPACE_ID::SourceContext&>( - ::PROTOBUF_NAMESPACE_ID::_SourceContext_default_instance_); -} -inline const ::PROTOBUF_NAMESPACE_ID::SourceContext& Enum::source_context() const { - // @@protoc_insertion_point(field_get:google.protobuf.Enum.source_context) - return _internal_source_context(); -} -inline void Enum::unsafe_arena_set_allocated_source_context( - ::PROTOBUF_NAMESPACE_ID::SourceContext* source_context) { - if (GetArenaForAllocation() == nullptr) { - delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(_impl_.source_context_); - } - _impl_.source_context_ = source_context; - if (source_context) { - - } else { - - } - // @@protoc_insertion_point(field_unsafe_arena_set_allocated:google.protobuf.Enum.source_context) -} -inline ::PROTOBUF_NAMESPACE_ID::SourceContext* Enum::release_source_context() { - - ::PROTOBUF_NAMESPACE_ID::SourceContext* temp = _impl_.source_context_; - _impl_.source_context_ = nullptr; -#ifdef PROTOBUF_FORCE_COPY_IN_RELEASE - auto* old = reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(temp); - temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp); - if (GetArenaForAllocation() == nullptr) { delete old; } -#else // PROTOBUF_FORCE_COPY_IN_RELEASE - if (GetArenaForAllocation() != nullptr) { - temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp); - } -#endif // !PROTOBUF_FORCE_COPY_IN_RELEASE - return temp; -} -inline ::PROTOBUF_NAMESPACE_ID::SourceContext* Enum::unsafe_arena_release_source_context() { - // @@protoc_insertion_point(field_release:google.protobuf.Enum.source_context) - - ::PROTOBUF_NAMESPACE_ID::SourceContext* temp = _impl_.source_context_; - _impl_.source_context_ = nullptr; - return temp; -} -inline ::PROTOBUF_NAMESPACE_ID::SourceContext* Enum::_internal_mutable_source_context() { - - if (_impl_.source_context_ == nullptr) { - auto* p = CreateMaybeMessage<::PROTOBUF_NAMESPACE_ID::SourceContext>(GetArenaForAllocation()); - _impl_.source_context_ = p; - } - return _impl_.source_context_; -} -inline ::PROTOBUF_NAMESPACE_ID::SourceContext* Enum::mutable_source_context() { - ::PROTOBUF_NAMESPACE_ID::SourceContext* _msg = _internal_mutable_source_context(); - // @@protoc_insertion_point(field_mutable:google.protobuf.Enum.source_context) - return _msg; -} -inline void Enum::set_allocated_source_context(::PROTOBUF_NAMESPACE_ID::SourceContext* source_context) { - ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation(); - if (message_arena == nullptr) { - delete reinterpret_cast< ::PROTOBUF_NAMESPACE_ID::MessageLite*>(_impl_.source_context_); - } - if (source_context) { - ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena = - ::PROTOBUF_NAMESPACE_ID::Arena::InternalGetOwningArena( - reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(source_context)); - if (message_arena != submessage_arena) { - source_context = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage( - message_arena, source_context, submessage_arena); - } - - } else { - - } - _impl_.source_context_ = source_context; - // @@protoc_insertion_point(field_set_allocated:google.protobuf.Enum.source_context) -} - -// .google.protobuf.Syntax syntax = 5; -inline void Enum::clear_syntax() { - _impl_.syntax_ = 0; -} -inline ::PROTOBUF_NAMESPACE_ID::Syntax Enum::_internal_syntax() const { - return static_cast< ::PROTOBUF_NAMESPACE_ID::Syntax >(_impl_.syntax_); -} -inline ::PROTOBUF_NAMESPACE_ID::Syntax Enum::syntax() const { - // @@protoc_insertion_point(field_get:google.protobuf.Enum.syntax) - return _internal_syntax(); -} -inline void Enum::_internal_set_syntax(::PROTOBUF_NAMESPACE_ID::Syntax value) { - - _impl_.syntax_ = value; -} -inline void Enum::set_syntax(::PROTOBUF_NAMESPACE_ID::Syntax value) { - _internal_set_syntax(value); - // @@protoc_insertion_point(field_set:google.protobuf.Enum.syntax) -} - -// ------------------------------------------------------------------- - -// EnumValue - -// string name = 1; -inline void EnumValue::clear_name() { - _impl_.name_.ClearToEmpty(); -} -inline const std::string& EnumValue::name() const { - // @@protoc_insertion_point(field_get:google.protobuf.EnumValue.name) - return _internal_name(); -} -template <typename ArgT0, typename... ArgT> -inline PROTOBUF_ALWAYS_INLINE -void EnumValue::set_name(ArgT0&& arg0, ArgT... args) { - - _impl_.name_.Set(static_cast<ArgT0 &&>(arg0), args..., GetArenaForAllocation()); - // @@protoc_insertion_point(field_set:google.protobuf.EnumValue.name) -} -inline std::string* EnumValue::mutable_name() { - std::string* _s = _internal_mutable_name(); - // @@protoc_insertion_point(field_mutable:google.protobuf.EnumValue.name) - return _s; -} -inline const std::string& EnumValue::_internal_name() const { - return _impl_.name_.Get(); -} -inline void EnumValue::_internal_set_name(const std::string& value) { - - _impl_.name_.Set(value, GetArenaForAllocation()); -} -inline std::string* EnumValue::_internal_mutable_name() { - - return _impl_.name_.Mutable(GetArenaForAllocation()); -} -inline std::string* EnumValue::release_name() { - // @@protoc_insertion_point(field_release:google.protobuf.EnumValue.name) - return _impl_.name_.Release(); -} -inline void EnumValue::set_allocated_name(std::string* name) { - if (name != nullptr) { - - } else { - - } - _impl_.name_.SetAllocated(name, GetArenaForAllocation()); -#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING - if (_impl_.name_.IsDefault()) { - _impl_.name_.Set("", GetArenaForAllocation()); - } -#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING - // @@protoc_insertion_point(field_set_allocated:google.protobuf.EnumValue.name) -} - -// int32 number = 2; -inline void EnumValue::clear_number() { - _impl_.number_ = 0; -} -inline int32_t EnumValue::_internal_number() const { - return _impl_.number_; -} -inline int32_t EnumValue::number() const { - // @@protoc_insertion_point(field_get:google.protobuf.EnumValue.number) - return _internal_number(); -} -inline void EnumValue::_internal_set_number(int32_t value) { - - _impl_.number_ = value; -} -inline void EnumValue::set_number(int32_t value) { - _internal_set_number(value); - // @@protoc_insertion_point(field_set:google.protobuf.EnumValue.number) -} - -// repeated .google.protobuf.Option options = 3; -inline int EnumValue::_internal_options_size() const { - return _impl_.options_.size(); -} -inline int EnumValue::options_size() const { - return _internal_options_size(); -} -inline void EnumValue::clear_options() { - _impl_.options_.Clear(); -} -inline ::PROTOBUF_NAMESPACE_ID::Option* EnumValue::mutable_options(int index) { - // @@protoc_insertion_point(field_mutable:google.protobuf.EnumValue.options) - return _impl_.options_.Mutable(index); -} -inline ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::Option >* -EnumValue::mutable_options() { - // @@protoc_insertion_point(field_mutable_list:google.protobuf.EnumValue.options) - return &_impl_.options_; -} -inline const ::PROTOBUF_NAMESPACE_ID::Option& EnumValue::_internal_options(int index) const { - return _impl_.options_.Get(index); -} -inline const ::PROTOBUF_NAMESPACE_ID::Option& EnumValue::options(int index) const { - // @@protoc_insertion_point(field_get:google.protobuf.EnumValue.options) - return _internal_options(index); -} -inline ::PROTOBUF_NAMESPACE_ID::Option* EnumValue::_internal_add_options() { - return _impl_.options_.Add(); -} -inline ::PROTOBUF_NAMESPACE_ID::Option* EnumValue::add_options() { - ::PROTOBUF_NAMESPACE_ID::Option* _add = _internal_add_options(); - // @@protoc_insertion_point(field_add:google.protobuf.EnumValue.options) - return _add; -} -inline const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::Option >& -EnumValue::options() const { - // @@protoc_insertion_point(field_list:google.protobuf.EnumValue.options) - return _impl_.options_; -} - -// ------------------------------------------------------------------- - -// Option - -// string name = 1; -inline void Option::clear_name() { - _impl_.name_.ClearToEmpty(); -} -inline const std::string& Option::name() const { - // @@protoc_insertion_point(field_get:google.protobuf.Option.name) - return _internal_name(); -} -template <typename ArgT0, typename... ArgT> -inline PROTOBUF_ALWAYS_INLINE -void Option::set_name(ArgT0&& arg0, ArgT... args) { - - _impl_.name_.Set(static_cast<ArgT0 &&>(arg0), args..., GetArenaForAllocation()); - // @@protoc_insertion_point(field_set:google.protobuf.Option.name) -} -inline std::string* Option::mutable_name() { - std::string* _s = _internal_mutable_name(); - // @@protoc_insertion_point(field_mutable:google.protobuf.Option.name) - return _s; -} -inline const std::string& Option::_internal_name() const { - return _impl_.name_.Get(); -} -inline void Option::_internal_set_name(const std::string& value) { - - _impl_.name_.Set(value, GetArenaForAllocation()); -} -inline std::string* Option::_internal_mutable_name() { - - return _impl_.name_.Mutable(GetArenaForAllocation()); -} -inline std::string* Option::release_name() { - // @@protoc_insertion_point(field_release:google.protobuf.Option.name) - return _impl_.name_.Release(); -} -inline void Option::set_allocated_name(std::string* name) { - if (name != nullptr) { - - } else { - - } - _impl_.name_.SetAllocated(name, GetArenaForAllocation()); -#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING - if (_impl_.name_.IsDefault()) { - _impl_.name_.Set("", GetArenaForAllocation()); - } -#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING - // @@protoc_insertion_point(field_set_allocated:google.protobuf.Option.name) -} - -// .google.protobuf.Any value = 2; -inline bool Option::_internal_has_value() const { - return this != internal_default_instance() && _impl_.value_ != nullptr; -} -inline bool Option::has_value() const { - return _internal_has_value(); -} -inline const ::PROTOBUF_NAMESPACE_ID::Any& Option::_internal_value() const { - const ::PROTOBUF_NAMESPACE_ID::Any* p = _impl_.value_; - return p != nullptr ? *p : reinterpret_cast<const ::PROTOBUF_NAMESPACE_ID::Any&>( - ::PROTOBUF_NAMESPACE_ID::_Any_default_instance_); -} -inline const ::PROTOBUF_NAMESPACE_ID::Any& Option::value() const { - // @@protoc_insertion_point(field_get:google.protobuf.Option.value) - return _internal_value(); -} -inline void Option::unsafe_arena_set_allocated_value( - ::PROTOBUF_NAMESPACE_ID::Any* value) { - if (GetArenaForAllocation() == nullptr) { - delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(_impl_.value_); - } - _impl_.value_ = value; - if (value) { - - } else { - - } - // @@protoc_insertion_point(field_unsafe_arena_set_allocated:google.protobuf.Option.value) -} -inline ::PROTOBUF_NAMESPACE_ID::Any* Option::release_value() { - - ::PROTOBUF_NAMESPACE_ID::Any* temp = _impl_.value_; - _impl_.value_ = nullptr; -#ifdef PROTOBUF_FORCE_COPY_IN_RELEASE - auto* old = reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(temp); - temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp); - if (GetArenaForAllocation() == nullptr) { delete old; } -#else // PROTOBUF_FORCE_COPY_IN_RELEASE - if (GetArenaForAllocation() != nullptr) { - temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp); - } -#endif // !PROTOBUF_FORCE_COPY_IN_RELEASE - return temp; -} -inline ::PROTOBUF_NAMESPACE_ID::Any* Option::unsafe_arena_release_value() { - // @@protoc_insertion_point(field_release:google.protobuf.Option.value) - - ::PROTOBUF_NAMESPACE_ID::Any* temp = _impl_.value_; - _impl_.value_ = nullptr; - return temp; -} -inline ::PROTOBUF_NAMESPACE_ID::Any* Option::_internal_mutable_value() { - - if (_impl_.value_ == nullptr) { - auto* p = CreateMaybeMessage<::PROTOBUF_NAMESPACE_ID::Any>(GetArenaForAllocation()); - _impl_.value_ = p; - } - return _impl_.value_; -} -inline ::PROTOBUF_NAMESPACE_ID::Any* Option::mutable_value() { - ::PROTOBUF_NAMESPACE_ID::Any* _msg = _internal_mutable_value(); - // @@protoc_insertion_point(field_mutable:google.protobuf.Option.value) - return _msg; -} -inline void Option::set_allocated_value(::PROTOBUF_NAMESPACE_ID::Any* value) { - ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation(); - if (message_arena == nullptr) { - delete reinterpret_cast< ::PROTOBUF_NAMESPACE_ID::MessageLite*>(_impl_.value_); - } - if (value) { - ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena = - ::PROTOBUF_NAMESPACE_ID::Arena::InternalGetOwningArena( - reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(value)); - if (message_arena != submessage_arena) { - value = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage( - message_arena, value, submessage_arena); - } - - } else { - - } - _impl_.value_ = value; - // @@protoc_insertion_point(field_set_allocated:google.protobuf.Option.value) -} - -#ifdef __GNUC__ - #pragma GCC diagnostic pop -#endif // __GNUC__ -// ------------------------------------------------------------------- - -// ------------------------------------------------------------------- - -// ------------------------------------------------------------------- - -// ------------------------------------------------------------------- - - -// @@protoc_insertion_point(namespace_scope) - -PROTOBUF_NAMESPACE_CLOSE - -PROTOBUF_NAMESPACE_OPEN - -template <> struct is_proto_enum< ::PROTOBUF_NAMESPACE_ID::Field_Kind> : ::std::true_type {}; -template <> -inline const EnumDescriptor* GetEnumDescriptor< ::PROTOBUF_NAMESPACE_ID::Field_Kind>() { - return ::PROTOBUF_NAMESPACE_ID::Field_Kind_descriptor(); -} -template <> struct is_proto_enum< ::PROTOBUF_NAMESPACE_ID::Field_Cardinality> : ::std::true_type {}; -template <> -inline const EnumDescriptor* GetEnumDescriptor< ::PROTOBUF_NAMESPACE_ID::Field_Cardinality>() { - return ::PROTOBUF_NAMESPACE_ID::Field_Cardinality_descriptor(); -} -template <> struct is_proto_enum< ::PROTOBUF_NAMESPACE_ID::Syntax> : ::std::true_type {}; -template <> -inline const EnumDescriptor* GetEnumDescriptor< ::PROTOBUF_NAMESPACE_ID::Syntax>() { - return ::PROTOBUF_NAMESPACE_ID::Syntax_descriptor(); -} - -PROTOBUF_NAMESPACE_CLOSE - -// @@protoc_insertion_point(global_scope) - -#include <google/protobuf/port_undef.inc> -#endif // GOOGLE_PROTOBUF_INCLUDED_GOOGLE_PROTOBUF_INCLUDED_google_2fprotobuf_2ftype_2eproto diff --git a/include/google/protobuf/type.proto b/include/google/protobuf/type.proto deleted file mode 100644 index d3f6a68b83..0000000000 --- a/include/google/protobuf/type.proto +++ /dev/null @@ -1,187 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// 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 -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -syntax = "proto3"; - -package google.protobuf; - -import "google/protobuf/any.proto"; -import "google/protobuf/source_context.proto"; - -option csharp_namespace = "Google.Protobuf.WellKnownTypes"; -option cc_enable_arenas = true; -option java_package = "com.google.protobuf"; -option java_outer_classname = "TypeProto"; -option java_multiple_files = true; -option objc_class_prefix = "GPB"; -option go_package = "google.golang.org/protobuf/types/known/typepb"; - -// A protocol buffer message type. -message Type { - // The fully qualified message name. - string name = 1; - // The list of fields. - repeated Field fields = 2; - // The list of types appearing in `oneof` definitions in this type. - repeated string oneofs = 3; - // The protocol buffer options. - repeated Option options = 4; - // The source context. - SourceContext source_context = 5; - // The source syntax. - Syntax syntax = 6; -} - -// A single field of a message type. -message Field { - // Basic field types. - enum Kind { - // Field type unknown. - TYPE_UNKNOWN = 0; - // Field type double. - TYPE_DOUBLE = 1; - // Field type float. - TYPE_FLOAT = 2; - // Field type int64. - TYPE_INT64 = 3; - // Field type uint64. - TYPE_UINT64 = 4; - // Field type int32. - TYPE_INT32 = 5; - // Field type fixed64. - TYPE_FIXED64 = 6; - // Field type fixed32. - TYPE_FIXED32 = 7; - // Field type bool. - TYPE_BOOL = 8; - // Field type string. - TYPE_STRING = 9; - // Field type group. Proto2 syntax only, and deprecated. - TYPE_GROUP = 10; - // Field type message. - TYPE_MESSAGE = 11; - // Field type bytes. - TYPE_BYTES = 12; - // Field type uint32. - TYPE_UINT32 = 13; - // Field type enum. - TYPE_ENUM = 14; - // Field type sfixed32. - TYPE_SFIXED32 = 15; - // Field type sfixed64. - TYPE_SFIXED64 = 16; - // Field type sint32. - TYPE_SINT32 = 17; - // Field type sint64. - TYPE_SINT64 = 18; - } - - // Whether a field is optional, required, or repeated. - enum Cardinality { - // For fields with unknown cardinality. - CARDINALITY_UNKNOWN = 0; - // For optional fields. - CARDINALITY_OPTIONAL = 1; - // For required fields. Proto2 syntax only. - CARDINALITY_REQUIRED = 2; - // For repeated fields. - CARDINALITY_REPEATED = 3; - } - - // The field type. - Kind kind = 1; - // The field cardinality. - Cardinality cardinality = 2; - // The field number. - int32 number = 3; - // The field name. - string name = 4; - // The field type URL, without the scheme, for message or enumeration - // types. Example: `"type.googleapis.com/google.protobuf.Timestamp"`. - string type_url = 6; - // The index of the field type in `Type.oneofs`, for message or enumeration - // types. The first type has index 1; zero means the type is not in the list. - int32 oneof_index = 7; - // Whether to use alternative packed wire representation. - bool packed = 8; - // The protocol buffer options. - repeated Option options = 9; - // The field JSON name. - string json_name = 10; - // The string value of the default value of this field. Proto2 syntax only. - string default_value = 11; -} - -// Enum type definition. -message Enum { - // Enum type name. - string name = 1; - // Enum value definitions. - repeated EnumValue enumvalue = 2; - // Protocol buffer options. - repeated Option options = 3; - // The source context. - SourceContext source_context = 4; - // The source syntax. - Syntax syntax = 5; -} - -// Enum value definition. -message EnumValue { - // Enum value name. - string name = 1; - // Enum value number. - int32 number = 2; - // Protocol buffer options. - repeated Option options = 3; -} - -// A protocol buffer option, which can be attached to a message, field, -// enumeration, etc. -message Option { - // The option's name. For protobuf built-in options (options defined in - // descriptor.proto), this is the short name. For example, `"map_entry"`. - // For custom options, it should be the fully-qualified name. For example, - // `"google.api.http"`. - string name = 1; - // The option's value packed in an Any message. If the value is a primitive, - // the corresponding wrapper type defined in google/protobuf/wrappers.proto - // should be used. If the value is an enum, it should be stored as an int32 - // value using the google.protobuf.Int32Value type. - Any value = 2; -} - -// The syntax in which a protocol buffer element is defined. -enum Syntax { - // Syntax `proto2`. - SYNTAX_PROTO2 = 0; - // Syntax `proto3`. - SYNTAX_PROTO3 = 1; -} diff --git a/include/google/protobuf/unknown_field_set.h b/include/google/protobuf/unknown_field_set.h deleted file mode 100644 index 9aa2cbbe47..0000000000 --- a/include/google/protobuf/unknown_field_set.h +++ /dev/null @@ -1,407 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// 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 -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -// Author: kenton@google.com (Kenton Varda) -// Based on original Protocol Buffers design by -// Sanjay Ghemawat, Jeff Dean, and others. -// -// Contains classes used to keep track of unrecognized fields seen while -// parsing a protocol message. - -#ifndef GOOGLE_PROTOBUF_UNKNOWN_FIELD_SET_H__ -#define GOOGLE_PROTOBUF_UNKNOWN_FIELD_SET_H__ - - -#include <assert.h> - -#include <string> -#include <vector> - -#include <google/protobuf/stubs/common.h> -#include <google/protobuf/stubs/logging.h> -#include <google/protobuf/io/coded_stream.h> -#include <google/protobuf/io/zero_copy_stream_impl_lite.h> -#include <google/protobuf/port.h> -#include <google/protobuf/message_lite.h> -#include <google/protobuf/parse_context.h> - -// Must be included last. -#include <google/protobuf/port_def.inc> - -#ifdef SWIG -#error "You cannot SWIG proto headers" -#endif - -namespace google { -namespace protobuf { -namespace internal { -class InternalMetadata; // metadata_lite.h -class WireFormat; // wire_format.h -class MessageSetFieldSkipperUsingCord; -// extension_set_heavy.cc -} // namespace internal - -class Message; // message.h -class UnknownField; // below - -// An UnknownFieldSet contains fields that were encountered while parsing a -// message but were not defined by its type. Keeping track of these can be -// useful, especially in that they may be written if the message is serialized -// again without being cleared in between. This means that software which -// simply receives messages and forwards them to other servers does not need -// to be updated every time a new field is added to the message definition. -// -// To get the UnknownFieldSet attached to any message, call -// Reflection::GetUnknownFields(). -// -// This class is necessarily tied to the protocol buffer wire format, unlike -// the Reflection interface which is independent of any serialization scheme. -class PROTOBUF_EXPORT UnknownFieldSet { - public: - UnknownFieldSet(); - ~UnknownFieldSet(); - - // Remove all fields. - inline void Clear(); - - // Remove all fields and deallocate internal data objects - void ClearAndFreeMemory(); - - // Is this set empty? - inline bool empty() const; - - // Merge the contents of some other UnknownFieldSet with this one. - void MergeFrom(const UnknownFieldSet& other); - - // Similar to above, but this function will destroy the contents of other. - void MergeFromAndDestroy(UnknownFieldSet* other); - - // Merge the contents an UnknownFieldSet with the UnknownFieldSet in - // *metadata, if there is one. If *metadata doesn't have an UnknownFieldSet - // then add one to it and make it be a copy of the first arg. - static void MergeToInternalMetadata(const UnknownFieldSet& other, - internal::InternalMetadata* metadata); - - // Swaps the contents of some other UnknownFieldSet with this one. - inline void Swap(UnknownFieldSet* x); - - // Computes (an estimate of) the total number of bytes currently used for - // storing the unknown fields in memory. Does NOT include - // sizeof(*this) in the calculation. - size_t SpaceUsedExcludingSelfLong() const; - - int SpaceUsedExcludingSelf() const { - return internal::ToIntSize(SpaceUsedExcludingSelfLong()); - } - - // Version of SpaceUsed() including sizeof(*this). - size_t SpaceUsedLong() const; - - int SpaceUsed() const { return internal::ToIntSize(SpaceUsedLong()); } - - // Returns the number of fields present in the UnknownFieldSet. - inline int field_count() const; - // Get a field in the set, where 0 <= index < field_count(). The fields - // appear in the order in which they were added. - inline const UnknownField& field(int index) const; - // Get a mutable pointer to a field in the set, where - // 0 <= index < field_count(). The fields appear in the order in which - // they were added. - inline UnknownField* mutable_field(int index); - - // Adding fields --------------------------------------------------- - - void AddVarint(int number, uint64_t value); - void AddFixed32(int number, uint32_t value); - void AddFixed64(int number, uint64_t value); - void AddLengthDelimited(int number, const std::string& value); - std::string* AddLengthDelimited(int number); - UnknownFieldSet* AddGroup(int number); - - // Adds an unknown field from another set. - void AddField(const UnknownField& field); - - // Delete fields with indices in the range [start .. start+num-1]. - // Caution: implementation moves all fields with indices [start+num .. ]. - void DeleteSubrange(int start, int num); - - // Delete all fields with a specific field number. The order of left fields - // is preserved. - // Caution: implementation moves all fields after the first deleted field. - void DeleteByNumber(int number); - - // Parsing helpers ------------------------------------------------- - // These work exactly like the similarly-named methods of Message. - - bool MergeFromCodedStream(io::CodedInputStream* input); - bool ParseFromCodedStream(io::CodedInputStream* input); - bool ParseFromZeroCopyStream(io::ZeroCopyInputStream* input); - bool ParseFromArray(const void* data, int size); - inline bool ParseFromString(const std::string& data) { - return ParseFromArray(data.data(), static_cast<int>(data.size())); - } - - // Merges this message's unknown field data (if any). This works whether - // the message is a lite or full proto (for legacy reasons, lite and full - // return different types for MessageType::unknown_fields()). - template <typename MessageType> - bool MergeFromMessage(const MessageType& message); - - // Serialization. - bool SerializeToString(std::string* output) const; - bool SerializeToCodedStream(io::CodedOutputStream* output) const; - static const UnknownFieldSet& default_instance(); - - private: - // For InternalMergeFrom - friend class UnknownField; - // Merges from other UnknownFieldSet. This method assumes, that this object - // is newly created and has no fields. - void InternalMergeFrom(const UnknownFieldSet& other); - void ClearFallback(); - - template <typename MessageType, - typename std::enable_if< - std::is_base_of<Message, MessageType>::value, int>::type = 0> - bool InternalMergeFromMessage(const MessageType& message) { - MergeFrom(message.GetReflection()->GetUnknownFields(message)); - return true; - } - - template <typename MessageType, - typename std::enable_if< - std::is_base_of<MessageLite, MessageType>::value && - !std::is_base_of<Message, MessageType>::value, - int>::type = 0> - bool InternalMergeFromMessage(const MessageType& message) { - const auto& unknown_fields = message.unknown_fields(); - io::ArrayInputStream array_stream(unknown_fields.data(), - unknown_fields.size()); - io::CodedInputStream coded_stream(&array_stream); - return MergeFromCodedStream(&coded_stream); - } - - std::vector<UnknownField> fields_; - GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(UnknownFieldSet); -}; - -namespace internal { - -inline void WriteVarint(uint32_t num, uint64_t val, UnknownFieldSet* unknown) { - unknown->AddVarint(num, val); -} -inline void WriteLengthDelimited(uint32_t num, StringPiece val, - UnknownFieldSet* unknown) { - unknown->AddLengthDelimited(num)->assign(val.data(), val.size()); -} - -PROTOBUF_EXPORT -const char* UnknownGroupParse(UnknownFieldSet* unknown, const char* ptr, - ParseContext* ctx); -PROTOBUF_EXPORT -const char* UnknownFieldParse(uint64_t tag, UnknownFieldSet* unknown, - const char* ptr, ParseContext* ctx); - -} // namespace internal - -// Represents one field in an UnknownFieldSet. -class PROTOBUF_EXPORT UnknownField { - public: - enum Type { - TYPE_VARINT, - TYPE_FIXED32, - TYPE_FIXED64, - TYPE_LENGTH_DELIMITED, - TYPE_GROUP - }; - - // The field's field number, as seen on the wire. - inline int number() const; - - // The field type. - inline Type type() const; - - // Accessors ------------------------------------------------------- - // Each method works only for UnknownFields of the corresponding type. - - inline uint64_t varint() const; - inline uint32_t fixed32() const; - inline uint64_t fixed64() const; - inline const std::string& length_delimited() const; - inline const UnknownFieldSet& group() const; - - inline void set_varint(uint64_t value); - inline void set_fixed32(uint32_t value); - inline void set_fixed64(uint64_t value); - inline void set_length_delimited(const std::string& value); - inline std::string* mutable_length_delimited(); - inline UnknownFieldSet* mutable_group(); - - inline size_t GetLengthDelimitedSize() const; - uint8_t* InternalSerializeLengthDelimitedNoTag( - uint8_t* target, io::EpsCopyOutputStream* stream) const; - - - // If this UnknownField contains a pointer, delete it. - void Delete(); - - // Make a deep copy of any pointers in this UnknownField. - void DeepCopy(const UnknownField& other); - - // Set the wire type of this UnknownField. Should only be used when this - // UnknownField is being created. - inline void SetType(Type type); - - union LengthDelimited { - std::string* string_value; - }; - - uint32_t number_; - uint32_t type_; - union { - uint64_t varint_; - uint32_t fixed32_; - uint64_t fixed64_; - mutable union LengthDelimited length_delimited_; - UnknownFieldSet* group_; - } data_; -}; - -// =================================================================== -// inline implementations - -inline UnknownFieldSet::UnknownFieldSet() {} - -inline UnknownFieldSet::~UnknownFieldSet() { Clear(); } - -inline void UnknownFieldSet::ClearAndFreeMemory() { Clear(); } - -inline void UnknownFieldSet::Clear() { - if (!fields_.empty()) { - ClearFallback(); - } -} - -inline bool UnknownFieldSet::empty() const { return fields_.empty(); } - -inline void UnknownFieldSet::Swap(UnknownFieldSet* x) { - fields_.swap(x->fields_); -} - -inline int UnknownFieldSet::field_count() const { - return static_cast<int>(fields_.size()); -} -inline const UnknownField& UnknownFieldSet::field(int index) const { - return (fields_)[static_cast<size_t>(index)]; -} -inline UnknownField* UnknownFieldSet::mutable_field(int index) { - return &(fields_)[static_cast<size_t>(index)]; -} - -inline void UnknownFieldSet::AddLengthDelimited(int number, - const std::string& value) { - AddLengthDelimited(number)->assign(value); -} - - - - -inline int UnknownField::number() const { return static_cast<int>(number_); } -inline UnknownField::Type UnknownField::type() const { - return static_cast<Type>(type_); -} - -inline uint64_t UnknownField::varint() const { - assert(type() == TYPE_VARINT); - return data_.varint_; -} -inline uint32_t UnknownField::fixed32() const { - assert(type() == TYPE_FIXED32); - return data_.fixed32_; -} -inline uint64_t UnknownField::fixed64() const { - assert(type() == TYPE_FIXED64); - return data_.fixed64_; -} -inline const std::string& UnknownField::length_delimited() const { - assert(type() == TYPE_LENGTH_DELIMITED); - return *data_.length_delimited_.string_value; -} -inline const UnknownFieldSet& UnknownField::group() const { - assert(type() == TYPE_GROUP); - return *data_.group_; -} - -inline void UnknownField::set_varint(uint64_t value) { - assert(type() == TYPE_VARINT); - data_.varint_ = value; -} -inline void UnknownField::set_fixed32(uint32_t value) { - assert(type() == TYPE_FIXED32); - data_.fixed32_ = value; -} -inline void UnknownField::set_fixed64(uint64_t value) { - assert(type() == TYPE_FIXED64); - data_.fixed64_ = value; -} -inline void UnknownField::set_length_delimited(const std::string& value) { - assert(type() == TYPE_LENGTH_DELIMITED); - data_.length_delimited_.string_value->assign(value); -} -inline std::string* UnknownField::mutable_length_delimited() { - assert(type() == TYPE_LENGTH_DELIMITED); - return data_.length_delimited_.string_value; -} -inline UnknownFieldSet* UnknownField::mutable_group() { - assert(type() == TYPE_GROUP); - return data_.group_; -} -template <typename MessageType> -bool UnknownFieldSet::MergeFromMessage(const MessageType& message) { - // SFINAE will route to the right version. - return InternalMergeFromMessage(message); -} - - -inline size_t UnknownField::GetLengthDelimitedSize() const { - GOOGLE_DCHECK_EQ(TYPE_LENGTH_DELIMITED, type()); - return data_.length_delimited_.string_value->size(); -} - -inline void UnknownField::SetType(Type type) { - type_ = type; -} - - -} // namespace protobuf -} // namespace google - -#include <google/protobuf/port_undef.inc> -#endif // GOOGLE_PROTOBUF_UNKNOWN_FIELD_SET_H__ diff --git a/include/google/protobuf/util/delimited_message_util.h b/include/google/protobuf/util/delimited_message_util.h deleted file mode 100644 index 78625cf2f1..0000000000 --- a/include/google/protobuf/util/delimited_message_util.h +++ /dev/null @@ -1,109 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// 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 -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -// Adapted from the patch of kenton@google.com (Kenton Varda) -// See https://github.com/protocolbuffers/protobuf/pull/710 for details. - -#ifndef GOOGLE_PROTOBUF_UTIL_DELIMITED_MESSAGE_UTIL_H__ -#define GOOGLE_PROTOBUF_UTIL_DELIMITED_MESSAGE_UTIL_H__ - - -#include <ostream> - -#include <google/protobuf/message_lite.h> -#include <google/protobuf/io/coded_stream.h> -#include <google/protobuf/io/zero_copy_stream_impl.h> - -// Must be included last. -#include <google/protobuf/port_def.inc> - -namespace google { -namespace protobuf { -namespace util { - -// Write a single size-delimited message from the given stream. Delimited -// format allows a single file or stream to contain multiple messages, -// whereas normally writing multiple non-delimited messages to the same -// stream would cause them to be merged. A delimited message is a varint -// encoding the message size followed by a message of exactly that size. -// -// Note that if you want to *read* a delimited message from a file descriptor -// or istream, you will need to construct an io::FileInputStream or -// io::OstreamInputStream (implementations of io::ZeroCopyStream) and use the -// utility function ParseDelimitedFromZeroCopyStream(). You must then -// continue to use the same ZeroCopyInputStream to read all further data from -// the stream until EOF. This is because these ZeroCopyInputStream -// implementations are buffered: they read a big chunk of data at a time, -// then parse it. As a result, they may read past the end of the delimited -// message. There is no way for them to push the extra data back into the -// underlying source, so instead you must keep using the same stream object. -bool PROTOBUF_EXPORT SerializeDelimitedToFileDescriptor( - const MessageLite& message, int file_descriptor); - -bool PROTOBUF_EXPORT SerializeDelimitedToOstream(const MessageLite& message, - std::ostream* output); - -// Read a single size-delimited message from the given stream. Delimited -// format allows a single file or stream to contain multiple messages, -// whereas normally parsing consumes the entire input. A delimited message -// is a varint encoding the message size followed by a message of exactly -// that size. -// -// If |clean_eof| is not NULL, then it will be set to indicate whether the -// stream ended cleanly. That is, if the stream ends without this method -// having read any data at all from it, then *clean_eof will be set true, -// otherwise it will be set false. Note that these methods return false -// on EOF, but they also return false on other errors, so |clean_eof| is -// needed to distinguish a clean end from errors. -bool PROTOBUF_EXPORT ParseDelimitedFromZeroCopyStream( - MessageLite* message, io::ZeroCopyInputStream* input, bool* clean_eof); - -bool PROTOBUF_EXPORT ParseDelimitedFromCodedStream(MessageLite* message, - io::CodedInputStream* input, - bool* clean_eof); - -// Write a single size-delimited message from the given stream. Delimited -// format allows a single file or stream to contain multiple messages, -// whereas normally writing multiple non-delimited messages to the same -// stream would cause them to be merged. A delimited message is a varint -// encoding the message size followed by a message of exactly that size. -bool PROTOBUF_EXPORT SerializeDelimitedToZeroCopyStream( - const MessageLite& message, io::ZeroCopyOutputStream* output); - -bool PROTOBUF_EXPORT SerializeDelimitedToCodedStream( - const MessageLite& message, io::CodedOutputStream* output); - -} // namespace util -} // namespace protobuf -} // namespace google - -#include <google/protobuf/port_undef.inc> - -#endif // GOOGLE_PROTOBUF_UTIL_DELIMITED_MESSAGE_UTIL_H__ diff --git a/include/google/protobuf/util/field_comparator.h b/include/google/protobuf/util/field_comparator.h deleted file mode 100644 index 5706da357a..0000000000 --- a/include/google/protobuf/util/field_comparator.h +++ /dev/null @@ -1,288 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// 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 -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -// Defines classes for field comparison. - -#ifndef GOOGLE_PROTOBUF_UTIL_FIELD_COMPARATOR_H__ -#define GOOGLE_PROTOBUF_UTIL_FIELD_COMPARATOR_H__ - - -#include <cstdint> -#include <map> -#include <string> -#include <vector> - -#include <google/protobuf/stubs/common.h> - -// Must be included last. -#include <google/protobuf/port_def.inc> - -namespace google { -namespace protobuf { - -class Message; -class EnumValueDescriptor; -class FieldDescriptor; - -namespace util { - -class FieldContext; -class MessageDifferencer; - -// Base class specifying the interface for comparing protocol buffer fields. -// Regular users should consider using or subclassing DefaultFieldComparator -// rather than this interface. -// Currently, this does not support comparing unknown fields. -class PROTOBUF_EXPORT FieldComparator { - public: - FieldComparator(); - virtual ~FieldComparator(); - - enum ComparisonResult { - SAME, // Compared fields are equal. In case of comparing submessages, - // user should not recursively compare their contents. - DIFFERENT, // Compared fields are different. In case of comparing - // submessages, user should not recursively compare their - // contents. - RECURSE, // Compared submessages need to be compared recursively. - // FieldComparator does not specify the semantics of recursive - // comparison. This value should not be returned for simple - // values. - }; - - // Compares the values of a field in two protocol buffer messages. - // Returns SAME or DIFFERENT for simple values, and SAME, DIFFERENT or RECURSE - // for submessages. Returning RECURSE for fields not being submessages is - // illegal. - // In case the given FieldDescriptor points to a repeated field, the indices - // need to be valid. Otherwise they should be ignored. - // - // FieldContext contains information about the specific instances of the - // fields being compared, versus FieldDescriptor which only contains general - // type information about the fields. - virtual ComparisonResult Compare(const Message& message_1, - const Message& message_2, - const FieldDescriptor* field, int index_1, - int index_2, - const util::FieldContext* field_context) = 0; - - private: - GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(FieldComparator); -}; - -// Basic implementation of FieldComparator. Supports three modes of floating -// point value comparison: exact, approximate using MathUtil::AlmostEqual -// method, and arbitrarily precise using MathUtil::WithinFractionOrMargin. -class PROTOBUF_EXPORT SimpleFieldComparator : public FieldComparator { - public: - enum FloatComparison { - EXACT, // Floats and doubles are compared exactly. - APPROXIMATE, // Floats and doubles are compared using the - // MathUtil::AlmostEqual method or - // MathUtil::WithinFractionOrMargin method. - // TODO(ksroka): Introduce third value to differentiate uses of AlmostEqual - // and WithinFractionOrMargin. - }; - - // Creates new comparator with float comparison set to EXACT. - SimpleFieldComparator(); - - ~SimpleFieldComparator() override; - - void set_float_comparison(FloatComparison float_comparison) { - float_comparison_ = float_comparison; - } - - FloatComparison float_comparison() const { return float_comparison_; } - - // Set whether the FieldComparator shall treat floats or doubles that are both - // NaN as equal (treat_nan_as_equal = true) or as different - // (treat_nan_as_equal = false). Default is treating NaNs always as different. - void set_treat_nan_as_equal(bool treat_nan_as_equal) { - treat_nan_as_equal_ = treat_nan_as_equal; - } - - bool treat_nan_as_equal() const { return treat_nan_as_equal_; } - - // Sets the fraction and margin for the float comparison of a given field. - // Uses MathUtil::WithinFractionOrMargin to compare the values. - // - // REQUIRES: field->cpp_type == FieldDescriptor::CPPTYPE_DOUBLE or - // field->cpp_type == FieldDescriptor::CPPTYPE_FLOAT - // REQUIRES: float_comparison_ == APPROXIMATE - void SetFractionAndMargin(const FieldDescriptor* field, double fraction, - double margin); - - // Sets the fraction and margin for the float comparison of all float and - // double fields, unless a field has been given a specific setting via - // SetFractionAndMargin() above. - // Uses MathUtil::WithinFractionOrMargin to compare the values. - // - // REQUIRES: float_comparison_ == APPROXIMATE - void SetDefaultFractionAndMargin(double fraction, double margin); - - protected: - // Returns the comparison result for the given field in two messages. - // - // This function is called directly by DefaultFieldComparator::Compare. - // Subclasses can call this function to compare fields they do not need to - // handle specially. - ComparisonResult SimpleCompare(const Message& message_1, - const Message& message_2, - const FieldDescriptor* field, int index_1, - int index_2, - const util::FieldContext* field_context); - - // Compare using the provided message_differencer. For example, a subclass can - // use this method to compare some field in a certain way using the same - // message_differencer instance and the field context. - bool CompareWithDifferencer(MessageDifferencer* differencer, - const Message& message1, const Message& message2, - const util::FieldContext* field_context); - - // Returns FieldComparator::SAME if boolean_result is true and - // FieldComparator::DIFFERENT otherwise. - ComparisonResult ResultFromBoolean(bool boolean_result) const; - - private: - // Defines the tolerance for floating point comparison (fraction and margin). - struct Tolerance { - double fraction; - double margin; - Tolerance() : fraction(0.0), margin(0.0) {} - Tolerance(double f, double m) : fraction(f), margin(m) {} - }; - - // Defines the map to store the tolerances for floating point comparison. - typedef std::map<const FieldDescriptor*, Tolerance> ToleranceMap; - - friend class MessageDifferencer; - // The following methods get executed when CompareFields is called for the - // basic types (instead of submessages). They return true on success. One - // can use ResultFromBoolean() to convert that boolean to a ComparisonResult - // value. - bool CompareBool(const FieldDescriptor& /* unused */, bool value_1, - bool value_2) { - return value_1 == value_2; - } - - // Uses CompareDoubleOrFloat, a helper function used by both CompareDouble and - // CompareFloat. - bool CompareDouble(const FieldDescriptor& field, double value_1, - double value_2); - - bool CompareEnum(const FieldDescriptor& field, - const EnumValueDescriptor* value_1, - const EnumValueDescriptor* value_2); - - // Uses CompareDoubleOrFloat, a helper function used by both CompareDouble and - // CompareFloat. - bool CompareFloat(const FieldDescriptor& field, float value_1, float value_2); - - bool CompareInt32(const FieldDescriptor& /* unused */, int32_t value_1, - int32_t value_2) { - return value_1 == value_2; - } - - bool CompareInt64(const FieldDescriptor& /* unused */, int64_t value_1, - int64_t value_2) { - return value_1 == value_2; - } - - bool CompareString(const FieldDescriptor& /* unused */, - const std::string& value_1, const std::string& value_2) { - return value_1 == value_2; - } - - bool CompareUInt32(const FieldDescriptor& /* unused */, uint32_t value_1, - uint32_t value_2) { - return value_1 == value_2; - } - - bool CompareUInt64(const FieldDescriptor& /* unused */, uint64_t value_1, - uint64_t value_2) { - return value_1 == value_2; - } - - // This function is used by CompareDouble and CompareFloat to avoid code - // duplication. There are no checks done against types of the values passed, - // but it's likely to fail if passed non-numeric arguments. - template <typename T> - bool CompareDoubleOrFloat(const FieldDescriptor& field, T value_1, T value_2); - - FloatComparison float_comparison_; - - // If true, floats and doubles that are both NaN are considered to be - // equal. Otherwise, two floats or doubles that are NaN are considered to be - // different. - bool treat_nan_as_equal_; - - // True iff default_tolerance_ has been explicitly set. - // - // If false, then the default tolerance for floats and doubles is that which - // is used by MathUtil::AlmostEquals(). - bool has_default_tolerance_; - - // Default float/double tolerance. Only meaningful if - // has_default_tolerance_ == true. - Tolerance default_tolerance_; - - // Field-specific float/double tolerances, which override any default for - // those particular fields. - ToleranceMap map_tolerance_; - - GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(SimpleFieldComparator); -}; - -// Default field comparison: use the basic implementation of FieldComparator. -#ifdef PROTOBUF_FUTURE_BREAKING_CHANGES -class PROTOBUF_EXPORT DefaultFieldComparator final - : public SimpleFieldComparator -#else // PROTOBUF_FUTURE_BREAKING_CHANGES -class PROTOBUF_EXPORT DefaultFieldComparator : public SimpleFieldComparator -#endif // PROTOBUF_FUTURE_BREAKING_CHANGES -{ - public: - ComparisonResult Compare(const Message& message_1, const Message& message_2, - const FieldDescriptor* field, int index_1, - int index_2, - const util::FieldContext* field_context) override { - return SimpleCompare(message_1, message_2, field, index_1, index_2, - field_context); - } -}; - -} // namespace util -} // namespace protobuf -} // namespace google - -#include <google/protobuf/port_undef.inc> - -#endif // GOOGLE_PROTOBUF_UTIL_FIELD_COMPARATOR_H__ diff --git a/include/google/protobuf/util/field_mask_util.h b/include/google/protobuf/util/field_mask_util.h deleted file mode 100644 index d51a332c8b..0000000000 --- a/include/google/protobuf/util/field_mask_util.h +++ /dev/null @@ -1,263 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// 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 -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -// Defines utilities for the FieldMask well known type. - -#ifndef GOOGLE_PROTOBUF_UTIL_FIELD_MASK_UTIL_H__ -#define GOOGLE_PROTOBUF_UTIL_FIELD_MASK_UTIL_H__ - -#include <cstdint> -#include <string> - -#include <google/protobuf/field_mask.pb.h> -#include <google/protobuf/stubs/strutil.h> -#include <google/protobuf/descriptor.h> - -// Must be included last. -#include <google/protobuf/port_def.inc> - -namespace google { -namespace protobuf { -namespace util { - -class PROTOBUF_EXPORT FieldMaskUtil { - typedef google::protobuf::FieldMask FieldMask; - - public: - // Converts FieldMask to/from string, formatted by separating each path - // with a comma (e.g., "foo_bar,baz.quz"). - static std::string ToString(const FieldMask& mask); - static void FromString(StringPiece str, FieldMask* out); - - // Populates the FieldMask with the paths corresponding to the fields with the - // given numbers, after checking that all field numbers are valid. - template <typename T> - static void FromFieldNumbers(const std::vector<int64_t>& field_numbers, - FieldMask* out) { - for (const auto field_number : field_numbers) { - const FieldDescriptor* field_desc = - T::descriptor()->FindFieldByNumber(field_number); - GOOGLE_CHECK(field_desc != nullptr) - << "Invalid field number for " << T::descriptor()->full_name() << ": " - << field_number; - AddPathToFieldMask<T>(field_desc->lowercase_name(), out); - } - } - - // Converts FieldMask to/from string, formatted according to proto3 JSON - // spec for FieldMask (e.g., "fooBar,baz.quz"). If the field name is not - // style conforming (i.e., not snake_case when converted to string, or not - // camelCase when converted from string), the conversion will fail. - static bool ToJsonString(const FieldMask& mask, std::string* out); - static bool FromJsonString(StringPiece str, FieldMask* out); - - // Get the descriptors of the fields which the given path from the message - // descriptor traverses, if field_descriptors is not null. - // Return false if the path is not valid, and the content of field_descriptors - // is unspecified. - static bool GetFieldDescriptors( - const Descriptor* descriptor, StringPiece path, - std::vector<const FieldDescriptor*>* field_descriptors); - - // Checks whether the given path is valid for type T. - template <typename T> - static bool IsValidPath(StringPiece path) { - return GetFieldDescriptors(T::descriptor(), path, nullptr); - } - - // Checks whether the given FieldMask is valid for type T. - template <typename T> - static bool IsValidFieldMask(const FieldMask& mask) { - for (int i = 0; i < mask.paths_size(); ++i) { - if (!GetFieldDescriptors(T::descriptor(), mask.paths(i), nullptr)) { - return false; - } - } - return true; - } - - // Adds a path to FieldMask after checking whether the given path is valid. - // This method check-fails if the path is not a valid path for type T. - template <typename T> - static void AddPathToFieldMask(StringPiece path, FieldMask* mask) { - GOOGLE_CHECK(IsValidPath<T>(path)) << path; - mask->add_paths(std::string(path)); - } - - // Creates a FieldMask with all fields of type T. This FieldMask only - // contains fields of T but not any sub-message fields. - template <typename T> - static FieldMask GetFieldMaskForAllFields() { - FieldMask out; - GetFieldMaskForAllFields(T::descriptor(), &out); - return out; - } - template <typename T> - PROTOBUF_DEPRECATED_MSG("Use *out = GetFieldMaskForAllFields() instead") - static void GetFieldMaskForAllFields(FieldMask* out) { - GetFieldMaskForAllFields(T::descriptor(), out); - } - // This flavor takes the protobuf type descriptor as an argument. - // Useful when the type is not known at compile time. - static void GetFieldMaskForAllFields(const Descriptor* descriptor, - FieldMask* out); - - // Converts a FieldMask to the canonical form. It will: - // 1. Remove paths that are covered by another path. For example, - // "foo.bar" is covered by "foo" and will be removed if "foo" - // is also in the FieldMask. - // 2. Sort all paths in alphabetical order. - static void ToCanonicalForm(const FieldMask& mask, FieldMask* out); - - // Creates an union of two FieldMasks. - static void Union(const FieldMask& mask1, const FieldMask& mask2, - FieldMask* out); - - // Creates an intersection of two FieldMasks. - static void Intersect(const FieldMask& mask1, const FieldMask& mask2, - FieldMask* out); - - // Subtracts mask2 from mask1 base of type T. - template <typename T> - static void Subtract(const FieldMask& mask1, const FieldMask& mask2, - FieldMask* out) { - Subtract(T::descriptor(), mask1, mask2, out); - } - // This flavor takes the protobuf type descriptor as an argument. - // Useful when the type is not known at compile time. - static void Subtract(const Descriptor* descriptor, const FieldMask& mask1, - const FieldMask& mask2, FieldMask* out); - - // Returns true if path is covered by the given FieldMask. Note that path - // "foo.bar" covers all paths like "foo.bar.baz", "foo.bar.quz.x", etc. - // Also note that parent paths are not covered by explicit child path, i.e. - // "foo.bar" does NOT cover "foo", even if "bar" is the only child. - static bool IsPathInFieldMask(StringPiece path, const FieldMask& mask); - - class MergeOptions; - // Merges fields specified in a FieldMask into another message. - static void MergeMessageTo(const Message& source, const FieldMask& mask, - const MergeOptions& options, Message* destination); - - class TrimOptions; - // Removes from 'message' any field that is not represented in the given - // FieldMask. If the FieldMask is empty, does nothing. - // Returns true if the message is modified. - static bool TrimMessage(const FieldMask& mask, Message* message); - - // Removes from 'message' any field that is not represented in the given - // FieldMask with customized TrimOptions. - // If the FieldMask is empty, does nothing. - // Returns true if the message is modified. - static bool TrimMessage(const FieldMask& mask, Message* message, - const TrimOptions& options); - - private: - friend class SnakeCaseCamelCaseTest; - // Converts a field name from snake_case to camelCase: - // 1. Every character after "_" will be converted to uppercase. - // 2. All "_"s are removed. - // The conversion will fail if: - // 1. The field name contains uppercase letters. - // 2. Any character after a "_" is not a lowercase letter. - // If the conversion succeeds, it's guaranteed that the resulted - // camelCase name will yield the original snake_case name when - // converted using CamelCaseToSnakeCase(). - // - // Note that the input can contain characters not allowed in C identifiers. - // For example, "foo_bar,baz_quz" will be converted to "fooBar,bazQuz" - // successfully. - static bool SnakeCaseToCamelCase(StringPiece input, - std::string* output); - // Converts a field name from camelCase to snake_case: - // 1. Every uppercase letter is converted to lowercase with an additional - // preceding "_". - // The conversion will fail if: - // 1. The field name contains "_"s. - // If the conversion succeeds, it's guaranteed that the resulted - // snake_case name will yield the original camelCase name when - // converted using SnakeCaseToCamelCase(). - // - // Note that the input can contain characters not allowed in C identifiers. - // For example, "fooBar,bazQuz" will be converted to "foo_bar,baz_quz" - // successfully. - static bool CamelCaseToSnakeCase(StringPiece input, - std::string* output); -}; - -class PROTOBUF_EXPORT FieldMaskUtil::MergeOptions { - public: - MergeOptions() - : replace_message_fields_(false), replace_repeated_fields_(false) {} - // When merging message fields, the default behavior is to merge the - // content of two message fields together. If you instead want to use - // the field from the source message to replace the corresponding field - // in the destination message, set this flag to true. When this flag is set, - // specified submessage fields that are missing in source will be cleared in - // destination. - void set_replace_message_fields(bool value) { - replace_message_fields_ = value; - } - bool replace_message_fields() const { return replace_message_fields_; } - // The default merging behavior will append entries from the source - // repeated field to the destination repeated field. If you only want - // to keep the entries from the source repeated field, set this flag - // to true. - void set_replace_repeated_fields(bool value) { - replace_repeated_fields_ = value; - } - bool replace_repeated_fields() const { return replace_repeated_fields_; } - - private: - bool replace_message_fields_; - bool replace_repeated_fields_; -}; - -class PROTOBUF_EXPORT FieldMaskUtil::TrimOptions { - public: - TrimOptions() : keep_required_fields_(false) {} - // When trimming message fields, the default behavior is to trim required - // fields of the present message if they are not specified in the field mask. - // If you instead want to keep required fields of the present message even - // when they are not specified in the field mask, set this flag to true. - void set_keep_required_fields(bool value) { keep_required_fields_ = value; } - bool keep_required_fields() const { return keep_required_fields_; } - - private: - bool keep_required_fields_; -}; - -} // namespace util -} // namespace protobuf -} // namespace google - -#include <google/protobuf/port_undef.inc> - -#endif // GOOGLE_PROTOBUF_UTIL_FIELD_MASK_UTIL_H__ diff --git a/include/google/protobuf/util/json_util.h b/include/google/protobuf/util/json_util.h deleted file mode 100644 index 0f1c4d8b5f..0000000000 --- a/include/google/protobuf/util/json_util.h +++ /dev/null @@ -1,204 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// 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 -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -// Utility functions to convert between protobuf binary format and proto3 JSON -// format. -#ifndef GOOGLE_PROTOBUF_UTIL_JSON_UTIL_H__ -#define GOOGLE_PROTOBUF_UTIL_JSON_UTIL_H__ - -#include <google/protobuf/stubs/bytestream.h> -#include <google/protobuf/stubs/status.h> -#include <google/protobuf/stubs/strutil.h> -#include <google/protobuf/message.h> -#include <google/protobuf/util/type_resolver.h> - -// Must be included last. -#include <google/protobuf/port_def.inc> - -namespace google { -namespace protobuf { -namespace io { -class ZeroCopyInputStream; -class ZeroCopyOutputStream; -} // namespace io -namespace util { - -struct JsonParseOptions { - // Whether to ignore unknown JSON fields during parsing - bool ignore_unknown_fields; - - // If true, when a lowercase enum value fails to parse, try convert it to - // UPPER_CASE and see if it matches a valid enum. - // WARNING: This option exists only to preserve legacy behavior. Avoid using - // this option. If your enum needs to support different casing, consider using - // allow_alias instead. - bool case_insensitive_enum_parsing; - - JsonParseOptions() - : ignore_unknown_fields(false), case_insensitive_enum_parsing(false) {} -}; - -struct JsonPrintOptions { - // Whether to add spaces, line breaks and indentation to make the JSON output - // easy to read. - bool add_whitespace; - // Whether to always print primitive fields. By default proto3 primitive - // fields with default values will be omitted in JSON output. For example, an - // int32 field set to 0 will be omitted. Set this flag to true will override - // the default behavior and print primitive fields regardless of their values. - bool always_print_primitive_fields; - // Whether to always print enums as ints. By default they are rendered as - // strings. - bool always_print_enums_as_ints; - // Whether to preserve proto field names - bool preserve_proto_field_names; - - JsonPrintOptions() - : add_whitespace(false), - always_print_primitive_fields(false), - always_print_enums_as_ints(false), - preserve_proto_field_names(false) {} -}; - -// DEPRECATED. Use JsonPrintOptions instead. -typedef JsonPrintOptions JsonOptions; - -// Converts from protobuf message to JSON and appends it to |output|. This is a -// simple wrapper of BinaryToJsonString(). It will use the DescriptorPool of the -// passed-in message to resolve Any types. -PROTOBUF_EXPORT util::Status MessageToJsonString(const Message& message, - std::string* output, - const JsonOptions& options); - -inline util::Status MessageToJsonString(const Message& message, - std::string* output) { - return MessageToJsonString(message, output, JsonOptions()); -} - -// Converts from JSON to protobuf message. This is a simple wrapper of -// JsonStringToBinary(). It will use the DescriptorPool of the passed-in -// message to resolve Any types. -PROTOBUF_EXPORT util::Status JsonStringToMessage( - StringPiece input, Message* message, const JsonParseOptions& options); - -inline util::Status JsonStringToMessage(StringPiece input, - Message* message) { - return JsonStringToMessage(input, message, JsonParseOptions()); -} - -// Converts protobuf binary data to JSON. -// The conversion will fail if: -// 1. TypeResolver fails to resolve a type. -// 2. input is not valid protobuf wire format, or conflicts with the type -// information returned by TypeResolver. -// Note that unknown fields will be discarded silently. -PROTOBUF_EXPORT util::Status BinaryToJsonStream( - TypeResolver* resolver, const std::string& type_url, - io::ZeroCopyInputStream* binary_input, - io::ZeroCopyOutputStream* json_output, const JsonPrintOptions& options); - -inline util::Status BinaryToJsonStream(TypeResolver* resolver, - const std::string& type_url, - io::ZeroCopyInputStream* binary_input, - io::ZeroCopyOutputStream* json_output) { - return BinaryToJsonStream(resolver, type_url, binary_input, json_output, - JsonPrintOptions()); -} - -PROTOBUF_EXPORT util::Status BinaryToJsonString( - TypeResolver* resolver, const std::string& type_url, - const std::string& binary_input, std::string* json_output, - const JsonPrintOptions& options); - -inline util::Status BinaryToJsonString(TypeResolver* resolver, - const std::string& type_url, - const std::string& binary_input, - std::string* json_output) { - return BinaryToJsonString(resolver, type_url, binary_input, json_output, - JsonPrintOptions()); -} - -// Converts JSON data to protobuf binary format. -// The conversion will fail if: -// 1. TypeResolver fails to resolve a type. -// 2. input is not valid JSON format, or conflicts with the type -// information returned by TypeResolver. -PROTOBUF_EXPORT util::Status JsonToBinaryStream( - TypeResolver* resolver, const std::string& type_url, - io::ZeroCopyInputStream* json_input, - io::ZeroCopyOutputStream* binary_output, const JsonParseOptions& options); - -inline util::Status JsonToBinaryStream( - TypeResolver* resolver, const std::string& type_url, - io::ZeroCopyInputStream* json_input, - io::ZeroCopyOutputStream* binary_output) { - return JsonToBinaryStream(resolver, type_url, json_input, binary_output, - JsonParseOptions()); -} - -PROTOBUF_EXPORT util::Status JsonToBinaryString( - TypeResolver* resolver, const std::string& type_url, - StringPiece json_input, std::string* binary_output, - const JsonParseOptions& options); - -inline util::Status JsonToBinaryString(TypeResolver* resolver, - const std::string& type_url, - StringPiece json_input, - std::string* binary_output) { - return JsonToBinaryString(resolver, type_url, json_input, binary_output, - JsonParseOptions()); -} - -namespace internal { -// Internal helper class. Put in the header so we can write unit-tests for it. -class PROTOBUF_EXPORT ZeroCopyStreamByteSink : public strings::ByteSink { - public: - explicit ZeroCopyStreamByteSink(io::ZeroCopyOutputStream* stream) - : stream_(stream), buffer_(nullptr), buffer_size_(0) {} - ~ZeroCopyStreamByteSink() override; - - void Append(const char* bytes, size_t len) override; - - private: - io::ZeroCopyOutputStream* stream_; - void* buffer_; - int buffer_size_; - - GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(ZeroCopyStreamByteSink); -}; -} // namespace internal - -} // namespace util -} // namespace protobuf -} // namespace google - -#include <google/protobuf/port_undef.inc> - -#endif // GOOGLE_PROTOBUF_UTIL_JSON_UTIL_H__ diff --git a/include/google/protobuf/util/message_differencer.h b/include/google/protobuf/util/message_differencer.h deleted file mode 100644 index f63cd54185..0000000000 --- a/include/google/protobuf/util/message_differencer.h +++ /dev/null @@ -1,980 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// 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 -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -// Author: jschorr@google.com (Joseph Schorr) -// Based on original Protocol Buffers design by -// Sanjay Ghemawat, Jeff Dean, and others. -// -// This file defines static methods and classes for comparing Protocol -// Messages. -// -// Aug. 2008: Added Unknown Fields Comparison for messages. -// Aug. 2009: Added different options to compare repeated fields. -// Apr. 2010: Moved field comparison to FieldComparator -// Sep. 2020: Added option to output map keys in path - -#ifndef GOOGLE_PROTOBUF_UTIL_MESSAGE_DIFFERENCER_H__ -#define GOOGLE_PROTOBUF_UTIL_MESSAGE_DIFFERENCER_H__ - - -#include <functional> -#include <map> -#include <memory> -#include <set> -#include <string> -#include <vector> - -#include <google/protobuf/descriptor.h> // FieldDescriptor -#include <google/protobuf/message.h> // Message -#include <google/protobuf/unknown_field_set.h> -#include <google/protobuf/util/field_comparator.h> - -// Always include as last one, otherwise it can break compilation -#include <google/protobuf/port_def.inc> - -namespace google { -namespace protobuf { - -class DynamicMessageFactory; -class FieldDescriptor; - -namespace io { -class ZeroCopyOutputStream; -class Printer; -} // namespace io - -namespace util { - -class DefaultFieldComparator; -class FieldContext; // declared below MessageDifferencer - -// Defines a collection of field descriptors. -// In case of internal google codebase we are using absl::FixedArray instead -// of vector. It significantly speeds up proto comparison (by ~30%) by -// reducing the number of malloc/free operations -typedef std::vector<const FieldDescriptor*> FieldDescriptorArray; - -// A basic differencer that can be used to determine -// the differences between two specified Protocol Messages. If any differences -// are found, the Compare method will return false, and any differencer reporter -// specified via ReportDifferencesTo will have its reporting methods called (see -// below for implementation of the report). Based off of the original -// ProtocolDifferencer implementation in //net/proto/protocol-differencer.h -// (Thanks Todd!). -// -// MessageDifferencer REQUIRES that compared messages be the same type, defined -// as messages that share the same descriptor. If not, the behavior of this -// class is undefined. -// -// People disagree on what MessageDifferencer should do when asked to compare -// messages with different descriptors. Some people think it should always -// return false. Others expect it to try to look for similar fields and -// compare them anyway -- especially if the descriptors happen to be identical. -// If we chose either of these behaviors, some set of people would find it -// surprising, and could end up writing code expecting the other behavior -// without realizing their error. Therefore, we forbid that usage. -// -// This class is implemented based on the proto2 reflection. The performance -// should be good enough for normal usages. However, for places where the -// performance is extremely sensitive, there are several alternatives: -// - Comparing serialized string -// Downside: false negatives (there are messages that are the same but their -// serialized strings are different). -// - Equals code generator by compiler plugin (net/proto2/contrib/equals_plugin) -// Downside: more generated code; maintenance overhead for the additional rule -// (must be in sync with the original proto_library). -// -// Note on handling of google.protobuf.Any: MessageDifferencer automatically -// unpacks Any::value into a Message and compares its individual fields. -// Messages encoded in a repeated Any cannot be compared using TreatAsMap. -// -// Note on thread-safety: MessageDifferencer is *not* thread-safe. You need to -// guard it with a lock to use the same MessageDifferencer instance from -// multiple threads. Note that it's fine to call static comparison methods -// (like MessageDifferencer::Equals) concurrently, but it's not recommended for -// performance critical code as it leads to extra allocations. -class PROTOBUF_EXPORT MessageDifferencer { - public: - // Determines whether the supplied messages are equal. Equality is defined as - // all fields within the two messages being set to the same value. Primitive - // fields and strings are compared by value while embedded messages/groups - // are compared as if via a recursive call. Use Compare() with IgnoreField() - // if some fields should be ignored in the comparison. Use Compare() with - // TreatAsSet() if there are repeated fields where ordering does not matter. - // - // This method REQUIRES that the two messages have the same - // Descriptor (message1.GetDescriptor() == message2.GetDescriptor()). - static bool Equals(const Message& message1, const Message& message2); - - // Determines whether the supplied messages are equivalent. Equivalency is - // defined as all fields within the two messages having the same value. This - // differs from the Equals method above in that fields with default values - // are considered set to said value automatically. For details on how default - // values are defined for each field type, see: - // https://developers.google.com/protocol-buffers/docs/proto?csw=1#optional. - // Also, Equivalent() ignores unknown fields. Use IgnoreField() and Compare() - // if some fields should be ignored in the comparison. - // - // This method REQUIRES that the two messages have the same - // Descriptor (message1.GetDescriptor() == message2.GetDescriptor()). - static bool Equivalent(const Message& message1, const Message& message2); - - // Determines whether the supplied messages are approximately equal. - // Approximate equality is defined as all fields within the two messages - // being approximately equal. Primitive (non-float) fields and strings are - // compared by value, floats are compared using MathUtil::AlmostEquals() and - // embedded messages/groups are compared as if via a recursive call. Use - // IgnoreField() and Compare() if some fields should be ignored in the - // comparison. - // - // This method REQUIRES that the two messages have the same - // Descriptor (message1.GetDescriptor() == message2.GetDescriptor()). - static bool ApproximatelyEquals(const Message& message1, - const Message& message2); - - // Determines whether the supplied messages are approximately equivalent. - // Approximate equivalency is defined as all fields within the two messages - // being approximately equivalent. As in - // MessageDifferencer::ApproximatelyEquals, primitive (non-float) fields and - // strings are compared by value, floats are compared using - // MathUtil::AlmostEquals() and embedded messages/groups are compared as if - // via a recursive call. However, fields with default values are considered - // set to said value, as per MessageDiffencer::Equivalent. Use IgnoreField() - // and Compare() if some fields should be ignored in the comparison. - // - // This method REQUIRES that the two messages have the same - // Descriptor (message1.GetDescriptor() == message2.GetDescriptor()). - static bool ApproximatelyEquivalent(const Message& message1, - const Message& message2); - - // Identifies an individual field in a message instance. Used for field_path, - // below. - struct SpecificField { - // For known fields, "field" is filled in and "unknown_field_number" is -1. - // For unknown fields, "field" is NULL, "unknown_field_number" is the field - // number, and "unknown_field_type" is its type. - const FieldDescriptor* field = nullptr; - int unknown_field_number = -1; - UnknownField::Type unknown_field_type = UnknownField::Type::TYPE_VARINT; - - // If this a repeated field, "index" is the index within it. For unknown - // fields, this is the index of the field among all unknown fields of the - // same field number and type. - int index = -1; - - // If "field" is a repeated field which is being treated as a map or - // a set (see TreatAsMap() and TreatAsSet(), below), new_index indicates - // the index the position to which the element has moved. If the element - // has not moved, "new_index" will have the same value as "index". - int new_index = -1; - - // If "field" is a map field, point to the map entry. - const Message* map_entry1 = nullptr; - const Message* map_entry2 = nullptr; - - // For unknown fields, these are the pointers to the UnknownFieldSet - // containing the unknown fields. In certain cases (e.g. proto1's - // MessageSet, or nested groups of unknown fields), these may differ from - // the messages' internal UnknownFieldSets. - const UnknownFieldSet* unknown_field_set1 = nullptr; - const UnknownFieldSet* unknown_field_set2 = nullptr; - - // For unknown fields, these are the index of the field within the - // UnknownFieldSets. One or the other will be -1 when - // reporting an addition or deletion. - int unknown_field_index1 = -1; - int unknown_field_index2 = -1; - }; - - // Abstract base class from which all MessageDifferencer - // reporters derive. The five Report* methods below will be called when - // a field has been added, deleted, modified, moved, or matched. The third - // argument is a vector of FieldDescriptor pointers which describes the chain - // of fields that was taken to find the current field. For example, for a - // field found in an embedded message, the vector will contain two - // FieldDescriptors. The first will be the field of the embedded message - // itself and the second will be the actual field in the embedded message - // that was added/deleted/modified. - // Fields will be reported in PostTraversalOrder. - // For example, given following proto, if both baz and mooo are changed. - // foo { - // bar { - // baz: 1 - // mooo: 2 - // } - // } - // ReportModified will be invoked with following order: - // 1. foo.bar.baz or foo.bar.mooo - // 2. foo.bar.mooo or foo.bar.baz - // 2. foo.bar - // 3. foo - class PROTOBUF_EXPORT Reporter { - public: - Reporter(); - virtual ~Reporter(); - - // Reports that a field has been added into Message2. - virtual void ReportAdded(const Message& message1, const Message& message2, - const std::vector<SpecificField>& field_path) = 0; - - // Reports that a field has been deleted from Message1. - virtual void ReportDeleted( - const Message& message1, const Message& message2, - const std::vector<SpecificField>& field_path) = 0; - - // Reports that the value of a field has been modified. - virtual void ReportModified( - const Message& message1, const Message& message2, - const std::vector<SpecificField>& field_path) = 0; - - // Reports that a repeated field has been moved to another location. This - // only applies when using TreatAsSet or TreatAsMap() -- see below. Also - // note that for any given field, ReportModified and ReportMoved are - // mutually exclusive. If a field has been both moved and modified, then - // only ReportModified will be called. - virtual void ReportMoved( - const Message& /* message1 */, const Message& /* message2 */, - const std::vector<SpecificField>& /* field_path */) {} - - // Reports that two fields match. Useful for doing side-by-side diffs. - // This function is mutually exclusive with ReportModified and ReportMoved. - // Note that you must call set_report_matches(true) before calling Compare - // to make use of this function. - virtual void ReportMatched( - const Message& /* message1 */, const Message& /* message2 */, - const std::vector<SpecificField>& /* field_path */) {} - - // Reports that two fields would have been compared, but the - // comparison has been skipped because the field was marked as - // 'ignored' using IgnoreField(). This function is mutually - // exclusive with all the other Report() functions. - // - // The contract of ReportIgnored is slightly different than the - // other Report() functions, in that |field_path.back().index| is - // always equal to -1, even if the last field is repeated. This is - // because while the other Report() functions indicate where in a - // repeated field the action (Addition, Deletion, etc...) - // happened, when a repeated field is 'ignored', the differencer - // simply calls ReportIgnored on the repeated field as a whole and - // moves on without looking at its individual elements. - // - // Furthermore, ReportIgnored() does not indicate whether the - // fields were in fact equal or not, as Compare() does not inspect - // these fields at all. It is up to the Reporter to decide whether - // the fields are equal or not (perhaps with a second call to - // Compare()), if it cares. - virtual void ReportIgnored( - const Message& /* message1 */, const Message& /* message2 */, - const std::vector<SpecificField>& /* field_path */) {} - - // Report that an unknown field is ignored. (see comment above). - // Note this is a different function since the last SpecificField in field - // path has a null field. This could break existing Reporter. - virtual void ReportUnknownFieldIgnored( - const Message& /* message1 */, const Message& /* message2 */, - const std::vector<SpecificField>& /* field_path */) {} - - private: - GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(Reporter); - }; - - // MapKeyComparator is used to determine if two elements have the same key - // when comparing elements of a repeated field as a map. - class PROTOBUF_EXPORT MapKeyComparator { - public: - MapKeyComparator(); - virtual ~MapKeyComparator(); - - virtual bool IsMatch( - const Message& /* message1 */, const Message& /* message2 */, - const std::vector<SpecificField>& /* parent_fields */) const { - GOOGLE_CHECK(false) << "IsMatch() is not implemented."; - return false; - } - - private: - GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(MapKeyComparator); - }; - - // Abstract base class from which all IgnoreCriteria derive. - // By adding IgnoreCriteria more complex ignore logic can be implemented. - // IgnoreCriteria are registered with AddIgnoreCriteria. For each compared - // field IsIgnored is called on each added IgnoreCriteria until one returns - // true or all return false. - // IsIgnored is called for fields where at least one side has a value. - class PROTOBUF_EXPORT IgnoreCriteria { - public: - IgnoreCriteria(); - virtual ~IgnoreCriteria(); - - // Returns true if the field should be ignored. - virtual bool IsIgnored( - const Message& /* message1 */, const Message& /* message2 */, - const FieldDescriptor* /* field */, - const std::vector<SpecificField>& /* parent_fields */) = 0; - - // Returns true if the unknown field should be ignored. - // Note: This will be called for unknown fields as well in which case - // field.field will be null. - virtual bool IsUnknownFieldIgnored( - const Message& /* message1 */, const Message& /* message2 */, - const SpecificField& /* field */, - const std::vector<SpecificField>& /* parent_fields */) { - return false; - } - }; - - // To add a Reporter, construct default here, then use ReportDifferencesTo or - // ReportDifferencesToString. - explicit MessageDifferencer(); - - ~MessageDifferencer(); - - enum MessageFieldComparison { - EQUAL, // Fields must be present in both messages - // for the messages to be considered the same. - EQUIVALENT, // Fields with default values are considered set - // for comparison purposes even if not explicitly - // set in the messages themselves. Unknown fields - // are ignored. - }; - - enum Scope { - FULL, // All fields of both messages are considered in the comparison. - PARTIAL // Only fields present in the first message are considered; fields - // set only in the second message will be skipped during - // comparison. - }; - - // DEPRECATED. Use FieldComparator::FloatComparison instead. - enum FloatComparison { - EXACT, // Floats and doubles are compared exactly. - APPROXIMATE // Floats and doubles are compared using the - // MathUtil::AlmostEquals method. - }; - - enum RepeatedFieldComparison { - AS_LIST, // Repeated fields are compared in order. Differing values at - // the same index are reported using ReportModified(). If the - // repeated fields have different numbers of elements, the - // unpaired elements are reported using ReportAdded() or - // ReportDeleted(). - AS_SET, // Treat all the repeated fields as sets. - // See TreatAsSet(), as below. - AS_SMART_LIST, // Similar to AS_SET, but preserve the order and find the - // longest matching sequence from the first matching - // element. To use an optimal solution, call - // SetMatchIndicesForSmartListCallback() to pass it in. - AS_SMART_SET, // Similar to AS_SET, but match elements with fewest diffs. - }; - - // The elements of the given repeated field will be treated as a set for - // diffing purposes, so different orderings of the same elements will be - // considered equal. Elements which are present on both sides of the - // comparison but which have changed position will be reported with - // ReportMoved(). Elements which only exist on one side or the other are - // reported with ReportAdded() and ReportDeleted() regardless of their - // positions. ReportModified() is never used for this repeated field. If - // the only differences between the compared messages is that some fields - // have been moved, then the comparison returns true. - // - // Note that despite the name of this method, this is really - // comparison as multisets: if one side of the comparison has a duplicate - // in the repeated field but the other side doesn't, this will count as - // a mismatch. - // - // If the scope of comparison is set to PARTIAL, then in addition to what's - // above, extra values added to repeated fields of the second message will - // not cause the comparison to fail. - // - // Note that set comparison is currently O(k * n^2) (where n is the total - // number of elements, and k is the average size of each element). In theory - // it could be made O(n * k) with a more complex hashing implementation. Feel - // free to contribute one if the current implementation is too slow for you. - // If partial matching is also enabled, the time complexity will be O(k * n^2 - // + n^3) in which n^3 is the time complexity of the maximum matching - // algorithm. - // - // REQUIRES: field->is_repeated() and field not registered with TreatAsMap* - void TreatAsSet(const FieldDescriptor* field); - void TreatAsSmartSet(const FieldDescriptor* field); - - // The elements of the given repeated field will be treated as a list for - // diffing purposes, so different orderings of the same elements will NOT be - // considered equal. - // - // REQUIRES: field->is_repeated() and field not registered with TreatAsMap* - void TreatAsList(const FieldDescriptor* field); - // Note that the complexity is similar to treating as SET. - void TreatAsSmartList(const FieldDescriptor* field); - - // The elements of the given repeated field will be treated as a map for - // diffing purposes, with |key| being the map key. Thus, elements with the - // same key will be compared even if they do not appear at the same index. - // Differences are reported similarly to TreatAsSet(), except that - // ReportModified() is used to report elements with the same key but - // different values. Note that if an element is both moved and modified, - // only ReportModified() will be called. As with TreatAsSet, if the only - // differences between the compared messages is that some fields have been - // moved, then the comparison returns true. See TreatAsSet for notes on - // performance. - // - // REQUIRES: field->is_repeated() - // REQUIRES: field->cpp_type() == FieldDescriptor::CPPTYPE_MESSAGE - // REQUIRES: key->containing_type() == field->message_type() - void TreatAsMap(const FieldDescriptor* field, const FieldDescriptor* key); - // Same as TreatAsMap except that this method will use multiple fields as - // the key in comparison. All specified fields in 'key_fields' should be - // present in the compared elements. Two elements will be treated as having - // the same key iff they have the same value for every specified field. There - // are two steps in the comparison process. The first one is key matching. - // Every element from one message will be compared to every element from - // the other message. Only fields in 'key_fields' are compared in this step - // to decide if two elements have the same key. The second step is value - // comparison. Those pairs of elements with the same key (with equal value - // for every field in 'key_fields') will be compared in this step. - // Time complexity of the first step is O(s * m * n ^ 2) where s is the - // average size of the fields specified in 'key_fields', m is the number of - // fields in 'key_fields' and n is the number of elements. If partial - // matching is enabled, an extra O(n^3) will be incured by the maximum - // matching algorithm. The second step is O(k * n) where k is the average - // size of each element. - void TreatAsMapWithMultipleFieldsAsKey( - const FieldDescriptor* field, - const std::vector<const FieldDescriptor*>& key_fields); - // Same as TreatAsMapWithMultipleFieldsAsKey, except that each of the field - // do not necessarily need to be a direct subfield. Each element in - // key_field_paths indicate a path from the message being compared, listing - // successive subfield to reach the key field. - // - // REQUIRES: - // for key_field_path in key_field_paths: - // key_field_path[0]->containing_type() == field->message_type() - // for i in [0, key_field_path.size() - 1): - // key_field_path[i+1]->containing_type() == - // key_field_path[i]->message_type() - // key_field_path[i]->cpp_type() == FieldDescriptor::CPPTYPE_MESSAGE - // !key_field_path[i]->is_repeated() - void TreatAsMapWithMultipleFieldPathsAsKey( - const FieldDescriptor* field, - const std::vector<std::vector<const FieldDescriptor*> >& key_field_paths); - - // Uses a custom MapKeyComparator to determine if two elements have the same - // key when comparing a repeated field as a map. - // The caller is responsible to delete the key_comparator. - // This method varies from TreatAsMapWithMultipleFieldsAsKey only in the - // first key matching step. Rather than comparing some specified fields, it - // will invoke the IsMatch method of the given 'key_comparator' to decide if - // two elements have the same key. - void TreatAsMapUsingKeyComparator(const FieldDescriptor* field, - const MapKeyComparator* key_comparator); - - // Initiates and returns a new instance of MultipleFieldsMapKeyComparator. - MapKeyComparator* CreateMultipleFieldsMapKeyComparator( - const std::vector<std::vector<const FieldDescriptor*> >& key_field_paths); - - // Add a custom ignore criteria that is evaluated in addition to the - // ignored fields added with IgnoreField. - // Takes ownership of ignore_criteria. - void AddIgnoreCriteria(IgnoreCriteria* ignore_criteria); - - // Indicates that any field with the given descriptor should be - // ignored for the purposes of comparing two messages. This applies - // to fields nested in the message structure as well as top level - // ones. When the MessageDifferencer encounters an ignored field, - // ReportIgnored is called on the reporter, if one is specified. - // - // The only place where the field's 'ignored' status is not applied is when - // it is being used as a key in a field passed to TreatAsMap or is one of - // the fields passed to TreatAsMapWithMultipleFieldsAsKey. - // In this case it is compared in key matching but after that it's ignored - // in value comparison. - void IgnoreField(const FieldDescriptor* field); - - // Sets the field comparator used to determine differences between protocol - // buffer fields. By default it's set to a DefaultFieldComparator instance. - // MessageDifferencer doesn't take ownership over the passed object. - // Note that this method must be called before Compare for the comparator to - // be used. - void set_field_comparator(FieldComparator* comparator); -#ifdef PROTOBUF_FUTURE_BREAKING_CHANGES - void set_field_comparator(DefaultFieldComparator* comparator); -#endif // PROTOBUF_FUTURE_BREAKING_CHANGES - - // DEPRECATED. Pass a DefaultFieldComparator instance instead. - // Sets the fraction and margin for the float comparison of a given field. - // Uses MathUtil::WithinFractionOrMargin to compare the values. - // NOTE: this method does nothing if differencer's field comparator has been - // set to a custom object. - // - // REQUIRES: field->cpp_type == FieldDescriptor::CPPTYPE_DOUBLE or - // field->cpp_type == FieldDescriptor::CPPTYPE_FLOAT - // REQUIRES: float_comparison_ == APPROXIMATE - void SetFractionAndMargin(const FieldDescriptor* field, double fraction, - double margin); - - // Sets the type of comparison (as defined in the MessageFieldComparison - // enumeration above) that is used by this differencer when determining how - // to compare fields in messages. - void set_message_field_comparison(MessageFieldComparison comparison); - - // Returns the current message field comparison used in this differencer. - MessageFieldComparison message_field_comparison() const; - - // Tells the differencer whether or not to report matches. This method must - // be called before Compare. The default for a new differencer is false. - void set_report_matches(bool report_matches) { - report_matches_ = report_matches; - } - - // Tells the differencer whether or not to report moves (in a set or map - // repeated field). This method must be called before Compare. The default for - // a new differencer is true. - void set_report_moves(bool report_moves) { report_moves_ = report_moves; } - - // Tells the differencer whether or not to report ignored values. This method - // must be called before Compare. The default for a new differencer is true. - void set_report_ignores(bool report_ignores) { - report_ignores_ = report_ignores; - } - - // Sets the scope of the comparison (as defined in the Scope enumeration - // above) that is used by this differencer when determining which fields to - // compare between the messages. - void set_scope(Scope scope); - - // Returns the current scope used by this differencer. - Scope scope() const; - - // DEPRECATED. Pass a DefaultFieldComparator instance instead. - // Sets the type of comparison (as defined in the FloatComparison enumeration - // above) that is used by this differencer when comparing float (and double) - // fields in messages. - // NOTE: this method does nothing if differencer's field comparator has been - // set to a custom object. - void set_float_comparison(FloatComparison comparison); - - // Sets the type of comparison for repeated field (as defined in the - // RepeatedFieldComparison enumeration above) that is used by this - // differencer when compare repeated fields in messages. - void set_repeated_field_comparison(RepeatedFieldComparison comparison); - - // Returns the current repeated field comparison used by this differencer. - RepeatedFieldComparison repeated_field_comparison() const; - - // Compares the two specified messages, returning true if they are the same, - // false otherwise. If this method returns false, any changes between the - // two messages will be reported if a Reporter was specified via - // ReportDifferencesTo (see also ReportDifferencesToString). - // - // This method REQUIRES that the two messages have the same - // Descriptor (message1.GetDescriptor() == message2.GetDescriptor()). - bool Compare(const Message& message1, const Message& message2); - - // Same as above, except comparing only the list of fields specified by the - // two vectors of FieldDescriptors. - bool CompareWithFields( - const Message& message1, const Message& message2, - const std::vector<const FieldDescriptor*>& message1_fields, - const std::vector<const FieldDescriptor*>& message2_fields); - - // Automatically creates a reporter that will output the differences - // found (if any) to the specified output string pointer. Note that this - // method must be called before Compare. - void ReportDifferencesToString(std::string* output); - - // Tells the MessageDifferencer to report differences via the specified - // reporter. Note that this method must be called before Compare for - // the reporter to be used. It is the responsibility of the caller to delete - // this object. - // If the provided pointer equals NULL, the MessageDifferencer stops reporting - // differences to any previously set reporters or output strings. - void ReportDifferencesTo(Reporter* reporter); - - private: - // Class for processing Any deserialization. This logic is used by both the - // MessageDifferencer and StreamReporter classes. - class UnpackAnyField { - private: - std::unique_ptr<DynamicMessageFactory> dynamic_message_factory_; - - public: - UnpackAnyField() = default; - ~UnpackAnyField() = default; - // If "any" is of type google.protobuf.Any, extract its payload using - // DynamicMessageFactory and store in "data". - bool UnpackAny(const Message& any, std::unique_ptr<Message>* data); - }; - - public: - // An implementation of the MessageDifferencer Reporter that outputs - // any differences found in human-readable form to the supplied - // ZeroCopyOutputStream or Printer. If a printer is used, the delimiter - // *must* be '$'. - // - // WARNING: this reporter does not necessarily flush its output until it is - // destroyed. As a result, it is not safe to assume the output is valid or - // complete until after you destroy the reporter. For example, if you use a - // StreamReporter to write to a StringOutputStream, the target string may - // contain uninitialized data until the reporter is destroyed. - class PROTOBUF_EXPORT StreamReporter : public Reporter { - public: - explicit StreamReporter(io::ZeroCopyOutputStream* output); - explicit StreamReporter(io::Printer* printer); // delimiter '$' - ~StreamReporter() override; - - // When set to true, the stream reporter will also output aggregates nodes - // (i.e. messages and groups) whose subfields have been modified. When - // false, will only report the individual subfields. Defaults to false. - void set_report_modified_aggregates(bool report) { - report_modified_aggregates_ = report; - } - - // The following are implementations of the methods described above. - - void ReportAdded(const Message& message1, const Message& message2, - const std::vector<SpecificField>& field_path) override; - - void ReportDeleted(const Message& message1, const Message& message2, - const std::vector<SpecificField>& field_path) override; - - void ReportModified(const Message& message1, const Message& message2, - const std::vector<SpecificField>& field_path) override; - - void ReportMoved(const Message& message1, const Message& message2, - const std::vector<SpecificField>& field_path) override; - - void ReportMatched(const Message& message1, const Message& message2, - const std::vector<SpecificField>& field_path) override; - - void ReportIgnored(const Message& message1, const Message& message2, - const std::vector<SpecificField>& field_path) override; - - void ReportUnknownFieldIgnored( - const Message& message1, const Message& message2, - const std::vector<SpecificField>& field_path) override; - - // Messages that are being compared must be provided to StreamReporter prior - // to processing - void SetMessages(const Message& message1, const Message& message2); - - protected: - // Prints the specified path of fields to the buffer. - virtual void PrintPath(const std::vector<SpecificField>& field_path, - bool left_side); - - // Prints the value of fields to the buffer. left_side is true if the - // given message is from the left side of the comparison, false if it - // was the right. This is relevant only to decide whether to follow - // unknown_field_index1 or unknown_field_index2 when an unknown field - // is encountered in field_path. - virtual void PrintValue(const Message& message, - const std::vector<SpecificField>& field_path, - bool left_side); - - // Prints the specified path of unknown fields to the buffer. - virtual void PrintUnknownFieldValue(const UnknownField* unknown_field); - - // Just print a string - void Print(const std::string& str); - - private: - // helper function for PrintPath that contains logic for printing maps - void PrintMapKey(bool left_side, const SpecificField& specific_field); - - io::Printer* printer_; - bool delete_printer_; - bool report_modified_aggregates_; - const Message* message1_; - const Message* message2_; - MessageDifferencer::UnpackAnyField unpack_any_field_; - GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(StreamReporter); - }; - - private: - friend class SimpleFieldComparator; - - // A MapKeyComparator to be used in TreatAsMapUsingKeyComparator. - // Implementation of this class needs to do field value comparison which - // relies on some private methods of MessageDifferencer. That's why this - // class is declared as a nested class of MessageDifferencer. - class MultipleFieldsMapKeyComparator; - - // A MapKeyComparator for use with map_entries. - class PROTOBUF_EXPORT MapEntryKeyComparator : public MapKeyComparator { - public: - explicit MapEntryKeyComparator(MessageDifferencer* message_differencer); - bool IsMatch( - const Message& message1, const Message& message2, - const std::vector<SpecificField>& parent_fields) const override; - - private: - MessageDifferencer* message_differencer_; - }; - - // Returns true if field1's number() is less than field2's. - static bool FieldBefore(const FieldDescriptor* field1, - const FieldDescriptor* field2); - - // Retrieve all the set fields, including extensions. - FieldDescriptorArray RetrieveFields(const Message& message, - bool base_message); - - // Combine the two lists of fields into the combined_fields output vector. - // All fields present in both lists will always be included in the combined - // list. Fields only present in one of the lists will only appear in the - // combined list if the corresponding fields_scope option is set to FULL. - FieldDescriptorArray CombineFields(const FieldDescriptorArray& fields1, - Scope fields1_scope, - const FieldDescriptorArray& fields2, - Scope fields2_scope); - - // Internal version of the Compare method which performs the actual - // comparison. The parent_fields vector is a vector containing field - // descriptors of all fields accessed to get to this comparison operation - // (i.e. if the current message is an embedded message, the parent_fields - // vector will contain the field that has this embedded message). - bool Compare(const Message& message1, const Message& message2, - std::vector<SpecificField>* parent_fields); - - // Compares all the unknown fields in two messages. - bool CompareUnknownFields(const Message& message1, const Message& message2, - const UnknownFieldSet&, const UnknownFieldSet&, - std::vector<SpecificField>* parent_fields); - - // Compares the specified messages for the requested field lists. The field - // lists are modified depending on comparison settings, and then passed to - // CompareWithFieldsInternal. - bool CompareRequestedFieldsUsingSettings( - const Message& message1, const Message& message2, - const FieldDescriptorArray& message1_fields, - const FieldDescriptorArray& message2_fields, - std::vector<SpecificField>* parent_fields); - - // Compares the specified messages with the specified field lists. - bool CompareWithFieldsInternal(const Message& message1, - const Message& message2, - const FieldDescriptorArray& message1_fields, - const FieldDescriptorArray& message2_fields, - std::vector<SpecificField>* parent_fields); - - // Compares the repeated fields, and report the error. - bool CompareRepeatedField(const Message& message1, const Message& message2, - const FieldDescriptor* field, - std::vector<SpecificField>* parent_fields); - - // Compares map fields, and report the error. - bool CompareMapField(const Message& message1, const Message& message2, - const FieldDescriptor* field, - std::vector<SpecificField>* parent_fields); - - // Helper for CompareRepeatedField and CompareMapField: compares and reports - // differences element-wise. This is the implementation for non-map fields, - // and can also compare map fields by using the underlying representation. - bool CompareRepeatedRep(const Message& message1, const Message& message2, - const FieldDescriptor* field, - std::vector<SpecificField>* parent_fields); - - // Helper for CompareMapField: compare the map fields using map reflection - // instead of sync to repeated. - bool CompareMapFieldByMapReflection(const Message& message1, - const Message& message2, - const FieldDescriptor* field, - std::vector<SpecificField>* parent_fields, - DefaultFieldComparator* comparator); - - // Shorthand for CompareFieldValueUsingParentFields with NULL parent_fields. - bool CompareFieldValue(const Message& message1, const Message& message2, - const FieldDescriptor* field, int index1, int index2); - - // Compares the specified field on the two messages, returning - // true if they are the same, false otherwise. For repeated fields, - // this method only compares the value in the specified index. This method - // uses Compare functions to recurse into submessages. - // The parent_fields vector is used in calls to a Reporter instance calls. - // It can be NULL, in which case the MessageDifferencer will create new - // list of parent messages if it needs to recursively compare the given field. - // To avoid confusing users you should not set it to NULL unless you modified - // Reporter to handle the change of parent_fields correctly. - bool CompareFieldValueUsingParentFields( - const Message& message1, const Message& message2, - const FieldDescriptor* field, int index1, int index2, - std::vector<SpecificField>* parent_fields); - - // Compares the specified field on the two messages, returning comparison - // result, as returned by appropriate FieldComparator. - FieldComparator::ComparisonResult GetFieldComparisonResult( - const Message& message1, const Message& message2, - const FieldDescriptor* field, int index1, int index2, - const FieldContext* field_context); - - // Check if the two elements in the repeated field are match to each other. - // if the key_comprator is NULL, this function returns true when the two - // elements are equal. - bool IsMatch(const FieldDescriptor* repeated_field, - const MapKeyComparator* key_comparator, const Message* message1, - const Message* message2, - const std::vector<SpecificField>& parent_fields, - Reporter* reporter, int index1, int index2); - - // Returns true when this repeated field has been configured to be treated - // as a Set / SmartSet / SmartList. - bool IsTreatedAsSet(const FieldDescriptor* field); - bool IsTreatedAsSmartSet(const FieldDescriptor* field); - - bool IsTreatedAsSmartList(const FieldDescriptor* field); - // When treating as SMART_LIST, it uses MatchIndicesPostProcessorForSmartList - // by default to find the longest matching sequence from the first matching - // element. The callback takes two vectors showing the matching indices from - // the other vector, where -1 means an unmatch. - void SetMatchIndicesForSmartListCallback( - std::function<void(std::vector<int>*, std::vector<int>*)> callback); - - // Returns true when this repeated field is to be compared as a subset, ie. - // has been configured to be treated as a set or map and scope is set to - // PARTIAL. - bool IsTreatedAsSubset(const FieldDescriptor* field); - - // Returns true if this field is to be ignored when this - // MessageDifferencer compares messages. - bool IsIgnored(const Message& message1, const Message& message2, - const FieldDescriptor* field, - const std::vector<SpecificField>& parent_fields); - - // Returns true if this unknown field is to be ignored when this - // MessageDifferencer compares messages. - bool IsUnknownFieldIgnored(const Message& message1, const Message& message2, - const SpecificField& field, - const std::vector<SpecificField>& parent_fields); - - // Returns MapKeyComparator* when this field has been configured to be treated - // as a map or its is_map() return true. If not, returns NULL. - const MapKeyComparator* GetMapKeyComparator( - const FieldDescriptor* field) const; - - // Attempts to match indices of a repeated field, so that the contained values - // match. Clears output vectors and sets their values to indices of paired - // messages, ie. if message1[0] matches message2[1], then match_list1[0] == 1 - // and match_list2[1] == 0. The unmatched indices are indicated by -1. - // Assumes the repeated field is not treated as a simple list. - // This method returns false if the match failed. However, it doesn't mean - // that the comparison succeeds when this method returns true (you need to - // double-check in this case). - bool MatchRepeatedFieldIndices( - const Message& message1, const Message& message2, - const FieldDescriptor* repeated_field, - const MapKeyComparator* key_comparator, - const std::vector<SpecificField>& parent_fields, - std::vector<int>* match_list1, std::vector<int>* match_list2); - - // Checks if index is equal to new_index in all the specific fields. - static bool CheckPathChanged(const std::vector<SpecificField>& parent_fields); - - // CHECKs that the given repeated field can be compared according to - // new_comparison. - void CheckRepeatedFieldComparisons( - const FieldDescriptor* field, - const RepeatedFieldComparison& new_comparison); - - // Defines a map between field descriptors and their MapKeyComparators. - // Used for repeated fields when they are configured as TreatAsMap. - typedef std::map<const FieldDescriptor*, const MapKeyComparator*> - FieldKeyComparatorMap; - - // Defines a set to store field descriptors. Used for repeated fields when - // they are configured as TreatAsSet. - typedef std::set<const FieldDescriptor*> FieldSet; - typedef std::map<const FieldDescriptor*, RepeatedFieldComparison> FieldMap; - - Reporter* reporter_; - DefaultFieldComparator default_field_comparator_; - MessageFieldComparison message_field_comparison_; - Scope scope_; - RepeatedFieldComparison repeated_field_comparison_; - - FieldMap repeated_field_comparisons_; - // Keeps track of MapKeyComparators that are created within - // MessageDifferencer. These MapKeyComparators should be deleted - // before MessageDifferencer is destroyed. - // When TreatAsMap or TreatAsMapWithMultipleFieldsAsKey is called, we don't - // store the supplied FieldDescriptors directly. Instead, a new - // MapKeyComparator is created for comparison purpose. - std::vector<MapKeyComparator*> owned_key_comparators_; - FieldKeyComparatorMap map_field_key_comparator_; - MapEntryKeyComparator map_entry_key_comparator_; - std::vector<IgnoreCriteria*> ignore_criteria_; - // Reused multiple times in RetrieveFields to avoid extra allocations - std::vector<const FieldDescriptor*> tmp_message_fields_; - - FieldSet ignored_fields_; - - union { - DefaultFieldComparator* default_impl; - FieldComparator* base; - } field_comparator_ = {&default_field_comparator_}; - enum { kFCDefault, kFCBase } field_comparator_kind_ = kFCDefault; - - bool report_matches_; - bool report_moves_; - bool report_ignores_; - - std::string* output_string_; - - // Callback to post-process the matched indices to support SMART_LIST. - std::function<void(std::vector<int>*, std::vector<int>*)> - match_indices_for_smart_list_callback_; - - MessageDifferencer::UnpackAnyField unpack_any_field_; - GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(MessageDifferencer); -}; - -// This class provides extra information to the FieldComparator::Compare -// function. -class PROTOBUF_EXPORT FieldContext { - public: - explicit FieldContext( - std::vector<MessageDifferencer::SpecificField>* parent_fields) - : parent_fields_(parent_fields) {} - - std::vector<MessageDifferencer::SpecificField>* parent_fields() const { - return parent_fields_; - } - - private: - std::vector<MessageDifferencer::SpecificField>* parent_fields_; -}; - -} // namespace util -} // namespace protobuf -} // namespace google - -#include <google/protobuf/port_undef.inc> - -#endif // GOOGLE_PROTOBUF_UTIL_MESSAGE_DIFFERENCER_H__ diff --git a/include/google/protobuf/util/time_util.h b/include/google/protobuf/util/time_util.h deleted file mode 100644 index 709527ea27..0000000000 --- a/include/google/protobuf/util/time_util.h +++ /dev/null @@ -1,314 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// 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 -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -// Defines utilities for the Timestamp and Duration well known types. - -#ifndef GOOGLE_PROTOBUF_UTIL_TIME_UTIL_H__ -#define GOOGLE_PROTOBUF_UTIL_TIME_UTIL_H__ - -#include <cstdint> -#include <ctime> -#include <ostream> -#include <string> -#ifdef _MSC_VER -#ifdef _XBOX_ONE -struct timeval { - int64_t tv_sec; /* seconds */ - int64_t tv_usec; /* and microseconds */ -}; -#else -#include <winsock2.h> -#endif // _XBOX_ONE -#else -#include <sys/time.h> -#endif - -#include <google/protobuf/duration.pb.h> -#include <google/protobuf/timestamp.pb.h> - -// Must be included last. -#include <google/protobuf/port_def.inc> - -namespace google { -namespace protobuf { -namespace util { - -// Utility functions for Timestamp and Duration. -class PROTOBUF_EXPORT TimeUtil { - typedef google::protobuf::Timestamp Timestamp; - typedef google::protobuf::Duration Duration; - - public: - // The min/max Timestamp/Duration values we support. - // - // For "0001-01-01T00:00:00Z". - static const int64_t kTimestampMinSeconds = -62135596800LL; - // For "9999-12-31T23:59:59.999999999Z". - static const int64_t kTimestampMaxSeconds = 253402300799LL; - static const int64_t kDurationMinSeconds = -315576000000LL; - static const int64_t kDurationMaxSeconds = 315576000000LL; - - // Converts Timestamp to/from RFC 3339 date string format. - // Generated output will always be Z-normalized and uses 3, 6 or 9 - // fractional digits as required to represent the exact time. When - // parsing, any fractional digits (or none) and any offset are - // accepted as long as they fit into nano-seconds precision. - // Note that Timestamp can only represent time from - // 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. Converting - // a Timestamp outside of this range is undefined behavior. - // See https://www.ietf.org/rfc/rfc3339.txt - // - // Example of generated format: - // "1972-01-01T10:00:20.021Z" - // - // Example of accepted format: - // "1972-01-01T10:00:20.021-05:00" - static std::string ToString(const Timestamp& timestamp); - static bool FromString(const std::string& value, Timestamp* timestamp); - - // Converts Duration to/from string format. The string format will contains - // 3, 6, or 9 fractional digits depending on the precision required to - // represent the exact Duration value. For example: - // "1s", "1.010s", "1.000000100s", "-3.100s" - // The range that can be represented by Duration is from -315,576,000,000 - // to +315,576,000,000 inclusive (in seconds). - static std::string ToString(const Duration& duration); - static bool FromString(const std::string& value, Duration* timestamp); - -#ifdef GetCurrentTime -#undef GetCurrentTime // Visual Studio has macro GetCurrentTime -#endif - // Gets the current UTC time. - static Timestamp GetCurrentTime(); - // Returns the Time representing "1970-01-01 00:00:00". - static Timestamp GetEpoch(); - - // Converts between Duration and integer types. The behavior is undefined if - // the input value is not in the valid range of Duration. - static Duration NanosecondsToDuration(int64_t nanos); - static Duration MicrosecondsToDuration(int64_t micros); - static Duration MillisecondsToDuration(int64_t millis); - static Duration SecondsToDuration(int64_t seconds); - static Duration MinutesToDuration(int64_t minutes); - static Duration HoursToDuration(int64_t hours); - // Result will be truncated towards zero. For example, "-1.5s" will be - // truncated to "-1s", and "1.5s" to "1s" when converting to seconds. - // It's undefined behavior if the input duration is not valid or the result - // exceeds the range of int64. A duration is not valid if it's not in the - // valid range of Duration, or have an invalid nanos value (i.e., larger - // than 999999999, less than -999999999, or have a different sign from the - // seconds part). - static int64_t DurationToNanoseconds(const Duration& duration); - static int64_t DurationToMicroseconds(const Duration& duration); - static int64_t DurationToMilliseconds(const Duration& duration); - static int64_t DurationToSeconds(const Duration& duration); - static int64_t DurationToMinutes(const Duration& duration); - static int64_t DurationToHours(const Duration& duration); - // Creates Timestamp from integer types. The integer value indicates the - // time elapsed from Epoch time. The behavior is undefined if the input - // value is not in the valid range of Timestamp. - static Timestamp NanosecondsToTimestamp(int64_t nanos); - static Timestamp MicrosecondsToTimestamp(int64_t micros); - static Timestamp MillisecondsToTimestamp(int64_t millis); - static Timestamp SecondsToTimestamp(int64_t seconds); - // Result will be truncated down to the nearest integer value. For example, - // with "1969-12-31T23:59:59.9Z", TimestampToMilliseconds() returns -100 - // and TimestampToSeconds() returns -1. It's undefined behavior if the input - // Timestamp is not valid (i.e., its seconds part or nanos part does not fall - // in the valid range) or the return value doesn't fit into int64. - static int64_t TimestampToNanoseconds(const Timestamp& timestamp); - static int64_t TimestampToMicroseconds(const Timestamp& timestamp); - static int64_t TimestampToMilliseconds(const Timestamp& timestamp); - static int64_t TimestampToSeconds(const Timestamp& timestamp); - - // Conversion to/from other time/date types. Note that these types may - // have a different precision and time range from Timestamp/Duration. - // When converting to a lower precision type, the value will be truncated - // to the nearest value that can be represented. If the value is - // out of the range of the result type, the return value is undefined. - // - // Conversion to/from time_t - static Timestamp TimeTToTimestamp(time_t value); - static time_t TimestampToTimeT(const Timestamp& value); - - // Conversion to/from timeval - static Timestamp TimevalToTimestamp(const timeval& value); - static timeval TimestampToTimeval(const Timestamp& value); - static Duration TimevalToDuration(const timeval& value); - static timeval DurationToTimeval(const Duration& value); -}; - -} // namespace util -} // namespace protobuf -} // namespace google - -namespace google { -namespace protobuf { -// Overloaded operators for Duration. -// -// Assignment operators. -PROTOBUF_EXPORT Duration& operator+=(Duration& d1, - const Duration& d2); // NOLINT -PROTOBUF_EXPORT Duration& operator-=(Duration& d1, - const Duration& d2); // NOLINT -PROTOBUF_EXPORT Duration& operator*=(Duration& d, int64_t r); // NOLINT -PROTOBUF_EXPORT Duration& operator*=(Duration& d, double r); // NOLINT -PROTOBUF_EXPORT Duration& operator/=(Duration& d, int64_t r); // NOLINT -PROTOBUF_EXPORT Duration& operator/=(Duration& d, double r); // NOLINT -// Overload for other integer types. -template <typename T> -Duration& operator*=(Duration& d, T r) { // NOLINT - int64_t x = r; - return d *= x; -} -template <typename T> -Duration& operator/=(Duration& d, T r) { // NOLINT - int64_t x = r; - return d /= x; -} -PROTOBUF_EXPORT Duration& operator%=(Duration& d1, - const Duration& d2); // NOLINT -// Relational operators. -inline bool operator<(const Duration& d1, const Duration& d2) { - if (d1.seconds() == d2.seconds()) { - return d1.nanos() < d2.nanos(); - } - return d1.seconds() < d2.seconds(); -} -inline bool operator>(const Duration& d1, const Duration& d2) { - return d2 < d1; -} -inline bool operator>=(const Duration& d1, const Duration& d2) { - return !(d1 < d2); -} -inline bool operator<=(const Duration& d1, const Duration& d2) { - return !(d2 < d1); -} -inline bool operator==(const Duration& d1, const Duration& d2) { - return d1.seconds() == d2.seconds() && d1.nanos() == d2.nanos(); -} -inline bool operator!=(const Duration& d1, const Duration& d2) { - return !(d1 == d2); -} -// Additive operators -inline Duration operator-(const Duration& d) { - Duration result; - result.set_seconds(-d.seconds()); - result.set_nanos(-d.nanos()); - return result; -} -inline Duration operator+(const Duration& d1, const Duration& d2) { - Duration result = d1; - return result += d2; -} -inline Duration operator-(const Duration& d1, const Duration& d2) { - Duration result = d1; - return result -= d2; -} -// Multiplicative operators -template <typename T> -inline Duration operator*(Duration d, T r) { - return d *= r; -} -template <typename T> -inline Duration operator*(T r, Duration d) { - return d *= r; -} -template <typename T> -inline Duration operator/(Duration d, T r) { - return d /= r; -} -PROTOBUF_EXPORT int64_t operator/(const Duration& d1, const Duration& d2); - -inline Duration operator%(const Duration& d1, const Duration& d2) { - Duration result = d1; - return result %= d2; -} - -inline std::ostream& operator<<(std::ostream& out, const Duration& d) { - out << ::PROTOBUF_NAMESPACE_ID::util::TimeUtil::ToString(d); - return out; -} - -// Overloaded operators for Timestamp -// -// Assignment operators. -PROTOBUF_EXPORT Timestamp& operator+=(Timestamp& t, - const Duration& d); // NOLINT -PROTOBUF_EXPORT Timestamp& operator-=(Timestamp& t, - const Duration& d); // NOLINT -// Relational operators. -inline bool operator<(const Timestamp& t1, const Timestamp& t2) { - if (t1.seconds() == t2.seconds()) { - return t1.nanos() < t2.nanos(); - } - return t1.seconds() < t2.seconds(); -} -inline bool operator>(const Timestamp& t1, const Timestamp& t2) { - return t2 < t1; -} -inline bool operator>=(const Timestamp& t1, const Timestamp& t2) { - return !(t1 < t2); -} -inline bool operator<=(const Timestamp& t1, const Timestamp& t2) { - return !(t2 < t1); -} -inline bool operator==(const Timestamp& t1, const Timestamp& t2) { - return t1.seconds() == t2.seconds() && t1.nanos() == t2.nanos(); -} -inline bool operator!=(const Timestamp& t1, const Timestamp& t2) { - return !(t1 == t2); -} -// Additive operators. -inline Timestamp operator+(const Timestamp& t, const Duration& d) { - Timestamp result = t; - return result += d; -} -inline Timestamp operator+(const Duration& d, const Timestamp& t) { - Timestamp result = t; - return result += d; -} -inline Timestamp operator-(const Timestamp& t, const Duration& d) { - Timestamp result = t; - return result -= d; -} -PROTOBUF_EXPORT Duration operator-(const Timestamp& t1, const Timestamp& t2); - -inline std::ostream& operator<<(std::ostream& out, const Timestamp& t) { - out << ::PROTOBUF_NAMESPACE_ID::util::TimeUtil::ToString(t); - return out; -} - -} // namespace protobuf -} // namespace google - -#include <google/protobuf/port_undef.inc> - -#endif // GOOGLE_PROTOBUF_UTIL_TIME_UTIL_H__ diff --git a/include/google/protobuf/util/type_resolver.h b/include/google/protobuf/util/type_resolver.h deleted file mode 100644 index b2e7b43d76..0000000000 --- a/include/google/protobuf/util/type_resolver.h +++ /dev/null @@ -1,77 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// 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 -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -// Defines a TypeResolver for the Any message. - -#ifndef GOOGLE_PROTOBUF_UTIL_TYPE_RESOLVER_H__ -#define GOOGLE_PROTOBUF_UTIL_TYPE_RESOLVER_H__ - -#include <string> - -#include <google/protobuf/stubs/common.h> -#include <google/protobuf/type.pb.h> -#include <google/protobuf/stubs/status.h> -#include <google/protobuf/stubs/status.h> - -// Must be included last. -#include <google/protobuf/port_def.inc> - -namespace google { -namespace protobuf { -class DescriptorPool; -namespace util { - -// Abstract interface for a type resolver. -// -// Implementations of this interface must be thread-safe. -class PROTOBUF_EXPORT TypeResolver { - public: - TypeResolver() {} - virtual ~TypeResolver() {} - - // Resolves a type url for a message type. - virtual util::Status ResolveMessageType( - const std::string& type_url, google::protobuf::Type* message_type) = 0; - - // Resolves a type url for an enum type. - virtual util::Status ResolveEnumType(const std::string& type_url, - google::protobuf::Enum* enum_type) = 0; - - private: - GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(TypeResolver); -}; - -} // namespace util -} // namespace protobuf -} // namespace google - -#include <google/protobuf/port_undef.inc> - -#endif // GOOGLE_PROTOBUF_UTIL_TYPE_RESOLVER_H__ diff --git a/include/google/protobuf/util/type_resolver_util.h b/include/google/protobuf/util/type_resolver_util.h deleted file mode 100644 index 7f6a4b9b11..0000000000 --- a/include/google/protobuf/util/type_resolver_util.h +++ /dev/null @@ -1,58 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// 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 -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -// Defines utilities for the TypeResolver. - -#ifndef GOOGLE_PROTOBUF_UTIL_TYPE_RESOLVER_UTIL_H__ -#define GOOGLE_PROTOBUF_UTIL_TYPE_RESOLVER_UTIL_H__ - -#include <string> - -namespace google { -namespace protobuf { -class DescriptorPool; -namespace util { -class TypeResolver; - -// Must be included last. -#include <google/protobuf/port_def.inc> - -// Creates a TypeResolver that serves type information in the given descriptor -// pool. Caller takes ownership of the returned TypeResolver. -PROTOBUF_EXPORT TypeResolver* NewTypeResolverForDescriptorPool( - const std::string& url_prefix, const DescriptorPool* pool); - -} // namespace util -} // namespace protobuf -} // namespace google - -#include <google/protobuf/port_undef.inc> - -#endif // GOOGLE_PROTOBUF_UTIL_TYPE_RESOLVER_UTIL_H__ diff --git a/include/google/protobuf/wire_format.h b/include/google/protobuf/wire_format.h deleted file mode 100644 index 1acbf9e1f0..0000000000 --- a/include/google/protobuf/wire_format.h +++ /dev/null @@ -1,414 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// 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 -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -// Author: kenton@google.com (Kenton Varda) -// atenasio@google.com (Chris Atenasio) (ZigZag transform) -// Based on original Protocol Buffers design by -// Sanjay Ghemawat, Jeff Dean, and others. -// -// This header is logically internal, but is made public because it is used -// from protocol-compiler-generated code, which may reside in other components. - -#ifndef GOOGLE_PROTOBUF_WIRE_FORMAT_H__ -#define GOOGLE_PROTOBUF_WIRE_FORMAT_H__ - - -#include <google/protobuf/stubs/common.h> -#include <google/protobuf/io/coded_stream.h> -#include <google/protobuf/stubs/casts.h> -#include <google/protobuf/descriptor.h> -#include <google/protobuf/generated_message_util.h> -#include <google/protobuf/message.h> -#include <google/protobuf/metadata_lite.h> -#include <google/protobuf/parse_context.h> -#include <google/protobuf/wire_format_lite.h> - -#ifdef SWIG -#error "You cannot SWIG proto headers" -#endif - -// Must be included last. -#include <google/protobuf/port_def.inc> - -namespace google { -namespace protobuf { -class MapKey; // map_field.h -class UnknownFieldSet; // unknown_field_set.h -} // namespace protobuf -} // namespace google - -namespace google { -namespace protobuf { -namespace internal { - -// This class is for internal use by the protocol buffer library and by -// protocol-compiler-generated message classes. It must not be called -// directly by clients. -// -// This class contains code for implementing the binary protocol buffer -// wire format via reflection. The WireFormatLite class implements the -// non-reflection based routines. -// -// This class is really a namespace that contains only static methods -class PROTOBUF_EXPORT WireFormat { - public: - // Given a field return its WireType - static inline WireFormatLite::WireType WireTypeForField( - const FieldDescriptor* field); - - // Given a FieldDescriptor::Type return its WireType - static inline WireFormatLite::WireType WireTypeForFieldType( - FieldDescriptor::Type type); - - // Compute the byte size of a tag. For groups, this includes both the start - // and end tags. - static inline size_t TagSize(int field_number, FieldDescriptor::Type type); - - // These procedures can be used to implement the methods of Message which - // handle parsing and serialization of the protocol buffer wire format - // using only the Reflection interface. When you ask the protocol - // compiler to optimize for code size rather than speed, it will implement - // those methods in terms of these procedures. Of course, these are much - // slower than the specialized implementations which the protocol compiler - // generates when told to optimize for speed. - - // Read a message in protocol buffer wire format. - // - // This procedure reads either to the end of the input stream or through - // a WIRETYPE_END_GROUP tag ending the message, whichever comes first. - // It returns false if the input is invalid. - // - // Required fields are NOT checked by this method. You must call - // IsInitialized() on the resulting message yourself. - static bool ParseAndMergePartial(io::CodedInputStream* input, - Message* message); - - // This is meant for internal protobuf use (WireFormat is an internal class). - // This is the reflective implementation of the _InternalParse functionality. - static const char* _InternalParse(Message* msg, const char* ptr, - internal::ParseContext* ctx); - - // Serialize a message in protocol buffer wire format. - // - // Any embedded messages within the message must have their correct sizes - // cached. However, the top-level message need not; its size is passed as - // a parameter to this procedure. - // - // These return false iff the underlying stream returns a write error. - static void SerializeWithCachedSizes(const Message& message, int size, - io::CodedOutputStream* output) { - int expected_endpoint = output->ByteCount() + size; - output->SetCur( - _InternalSerialize(message, output->Cur(), output->EpsCopy())); - GOOGLE_CHECK_EQ(output->ByteCount(), expected_endpoint) - << ": Protocol message serialized to a size different from what was " - "originally expected. Perhaps it was modified by another thread " - "during serialization?"; - } - static uint8_t* _InternalSerialize(const Message& message, uint8_t* target, - io::EpsCopyOutputStream* stream); - - // Implements Message::ByteSize() via reflection. WARNING: The result - // of this method is *not* cached anywhere. However, all embedded messages - // will have their ByteSize() methods called, so their sizes will be cached. - // Therefore, calling this method is sufficient to allow you to call - // WireFormat::SerializeWithCachedSizes() on the same object. - static size_t ByteSize(const Message& message); - - // ----------------------------------------------------------------- - // Helpers for dealing with unknown fields - - // Skips a field value of the given WireType. The input should start - // positioned immediately after the tag. If unknown_fields is non-nullptr, - // the contents of the field will be added to it. - static bool SkipField(io::CodedInputStream* input, uint32_t tag, - UnknownFieldSet* unknown_fields); - - // Reads and ignores a message from the input. If unknown_fields is - // non-nullptr, the contents will be added to it. - static bool SkipMessage(io::CodedInputStream* input, - UnknownFieldSet* unknown_fields); - - // Read a packed enum field. If the is_valid function is not nullptr, values - // for which is_valid(value) returns false are appended to - // unknown_fields_stream. - static bool ReadPackedEnumPreserveUnknowns(io::CodedInputStream* input, - uint32_t field_number, - bool (*is_valid)(int), - UnknownFieldSet* unknown_fields, - RepeatedField<int>* values); - - // Write the contents of an UnknownFieldSet to the output. - static void SerializeUnknownFields(const UnknownFieldSet& unknown_fields, - io::CodedOutputStream* output) { - output->SetCur(InternalSerializeUnknownFieldsToArray( - unknown_fields, output->Cur(), output->EpsCopy())); - } - // Same as above, except writing directly to the provided buffer. - // Requires that the buffer have sufficient capacity for - // ComputeUnknownFieldsSize(unknown_fields). - // - // Returns a pointer past the last written byte. - static uint8_t* SerializeUnknownFieldsToArray( - const UnknownFieldSet& unknown_fields, uint8_t* target) { - io::EpsCopyOutputStream stream( - target, static_cast<int>(ComputeUnknownFieldsSize(unknown_fields)), - io::CodedOutputStream::IsDefaultSerializationDeterministic()); - return InternalSerializeUnknownFieldsToArray(unknown_fields, target, - &stream); - } - static uint8_t* InternalSerializeUnknownFieldsToArray( - const UnknownFieldSet& unknown_fields, uint8_t* target, - io::EpsCopyOutputStream* stream); - - // Same thing except for messages that have the message_set_wire_format - // option. - static void SerializeUnknownMessageSetItems( - const UnknownFieldSet& unknown_fields, io::CodedOutputStream* output) { - output->SetCur(InternalSerializeUnknownMessageSetItemsToArray( - unknown_fields, output->Cur(), output->EpsCopy())); - } - // Same as above, except writing directly to the provided buffer. - // Requires that the buffer have sufficient capacity for - // ComputeUnknownMessageSetItemsSize(unknown_fields). - // - // Returns a pointer past the last written byte. - static uint8_t* SerializeUnknownMessageSetItemsToArray( - const UnknownFieldSet& unknown_fields, uint8_t* target); - static uint8_t* InternalSerializeUnknownMessageSetItemsToArray( - const UnknownFieldSet& unknown_fields, uint8_t* target, - io::EpsCopyOutputStream* stream); - - // Compute the size of the UnknownFieldSet on the wire. - static size_t ComputeUnknownFieldsSize(const UnknownFieldSet& unknown_fields); - - // Same thing except for messages that have the message_set_wire_format - // option. - static size_t ComputeUnknownMessageSetItemsSize( - const UnknownFieldSet& unknown_fields); - - // Helper functions for encoding and decoding tags. (Inlined below and in - // _inl.h) - // - // This is different from MakeTag(field->number(), field->type()) in the - // case of packed repeated fields. - static uint32_t MakeTag(const FieldDescriptor* field); - - // Parse a single field. The input should start out positioned immediately - // after the tag. - static bool ParseAndMergeField( - uint32_t tag, - const FieldDescriptor* field, // May be nullptr for unknown - Message* message, io::CodedInputStream* input); - - // Serialize a single field. - static void SerializeFieldWithCachedSizes( - const FieldDescriptor* field, // Cannot be nullptr - const Message& message, io::CodedOutputStream* output) { - output->SetCur(InternalSerializeField(field, message, output->Cur(), - output->EpsCopy())); - } - static uint8_t* InternalSerializeField( - const FieldDescriptor* field, // Cannot be nullptr - const Message& message, uint8_t* target, io::EpsCopyOutputStream* stream); - - // Compute size of a single field. If the field is a message type, this - // will call ByteSize() for the embedded message, insuring that it caches - // its size. - static size_t FieldByteSize(const FieldDescriptor* field, // Can't be nullptr - const Message& message); - - // Parse/serialize a MessageSet::Item group. Used with messages that use - // option message_set_wire_format = true. - static bool ParseAndMergeMessageSetItem(io::CodedInputStream* input, - Message* message); - static void SerializeMessageSetItemWithCachedSizes( - const FieldDescriptor* field, const Message& message, - io::CodedOutputStream* output) { - output->SetCur(InternalSerializeMessageSetItem( - field, message, output->Cur(), output->EpsCopy())); - } - static uint8_t* InternalSerializeMessageSetItem( - const FieldDescriptor* field, const Message& message, uint8_t* target, - io::EpsCopyOutputStream* stream); - static size_t MessageSetItemByteSize(const FieldDescriptor* field, - const Message& message); - - // Computes the byte size of a field, excluding tags. For packed fields, it - // only includes the size of the raw data, and not the size of the total - // length, but for other length-delimited types, the size of the length is - // included. - static size_t FieldDataOnlyByteSize( - const FieldDescriptor* field, // Cannot be nullptr - const Message& message); - - enum Operation { - PARSE = 0, - SERIALIZE = 1, - }; - - // Verifies that a string field is valid UTF8, logging an error if not. - // This function will not be called by newly generated protobuf code - // but remains present to support existing code. - static void VerifyUTF8String(const char* data, int size, Operation op); - // The NamedField variant takes a field name in order to produce an - // informative error message if verification fails. - static void VerifyUTF8StringNamedField(const char* data, int size, - Operation op, const char* field_name); - - private: - struct MessageSetParser; - // Skip a MessageSet field. - static bool SkipMessageSetField(io::CodedInputStream* input, - uint32_t field_number, - UnknownFieldSet* unknown_fields); - - // Parse a MessageSet field. - static bool ParseAndMergeMessageSetField(uint32_t field_number, - const FieldDescriptor* field, - Message* message, - io::CodedInputStream* input); - // Parses the value from the wire that belongs to tag. - static const char* _InternalParseAndMergeField(Message* msg, const char* ptr, - internal::ParseContext* ctx, - uint64_t tag, - const Reflection* reflection, - const FieldDescriptor* field); - - GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(WireFormat); -}; - -// Subclass of FieldSkipper which saves skipped fields to an UnknownFieldSet. -class PROTOBUF_EXPORT UnknownFieldSetFieldSkipper : public FieldSkipper { - public: - UnknownFieldSetFieldSkipper(UnknownFieldSet* unknown_fields) - : unknown_fields_(unknown_fields) {} - ~UnknownFieldSetFieldSkipper() override {} - - // implements FieldSkipper ----------------------------------------- - bool SkipField(io::CodedInputStream* input, uint32_t tag) override; - bool SkipMessage(io::CodedInputStream* input) override; - void SkipUnknownEnum(int field_number, int value) override; - - protected: - UnknownFieldSet* unknown_fields_; -}; - -// inline methods ==================================================== - -inline WireFormatLite::WireType WireFormat::WireTypeForField( - const FieldDescriptor* field) { - if (field->is_packed()) { - return WireFormatLite::WIRETYPE_LENGTH_DELIMITED; - } else { - return WireTypeForFieldType(field->type()); - } -} - -inline WireFormatLite::WireType WireFormat::WireTypeForFieldType( - FieldDescriptor::Type type) { - // Some compilers don't like enum -> enum casts, so we implicit_cast to - // int first. - return WireFormatLite::WireTypeForFieldType( - static_cast<WireFormatLite::FieldType>(implicit_cast<int>(type))); -} - -inline uint32_t WireFormat::MakeTag(const FieldDescriptor* field) { - return WireFormatLite::MakeTag(field->number(), WireTypeForField(field)); -} - -inline size_t WireFormat::TagSize(int field_number, - FieldDescriptor::Type type) { - // Some compilers don't like enum -> enum casts, so we implicit_cast to - // int first. - return WireFormatLite::TagSize( - field_number, - static_cast<WireFormatLite::FieldType>(implicit_cast<int>(type))); -} - -inline void WireFormat::VerifyUTF8String(const char* data, int size, - WireFormat::Operation op) { -#ifdef GOOGLE_PROTOBUF_UTF8_VALIDATION_ENABLED - WireFormatLite::VerifyUtf8String( - data, size, static_cast<WireFormatLite::Operation>(op), nullptr); -#else - // Avoid the compiler warning about unused variables. - (void)data; - (void)size; - (void)op; -#endif -} - -inline void WireFormat::VerifyUTF8StringNamedField(const char* data, int size, - WireFormat::Operation op, - const char* field_name) { -#ifdef GOOGLE_PROTOBUF_UTF8_VALIDATION_ENABLED - WireFormatLite::VerifyUtf8String( - data, size, static_cast<WireFormatLite::Operation>(op), field_name); -#else - // Avoid the compiler warning about unused variables. - (void)data; - (void)size; - (void)op; - (void)field_name; -#endif -} - - -inline uint8_t* InternalSerializeUnknownMessageSetItemsToArray( - const UnknownFieldSet& unknown_fields, uint8_t* target, - io::EpsCopyOutputStream* stream) { - return WireFormat::InternalSerializeUnknownMessageSetItemsToArray( - unknown_fields, target, stream); -} - -inline size_t ComputeUnknownMessageSetItemsSize( - const UnknownFieldSet& unknown_fields) { - return WireFormat::ComputeUnknownMessageSetItemsSize(unknown_fields); -} - -// Compute the size of the UnknownFieldSet on the wire. -PROTOBUF_EXPORT -size_t ComputeUnknownFieldsSize(const InternalMetadata& metadata, size_t size, - CachedSize* cached_size); - -size_t MapKeyDataOnlyByteSize(const FieldDescriptor* field, - const MapKey& value); - -uint8_t* SerializeMapKeyWithCachedSizes(const FieldDescriptor* field, - const MapKey& value, uint8_t* target, - io::EpsCopyOutputStream* stream); -} // namespace internal -} // namespace protobuf -} // namespace google - -#include <google/protobuf/port_undef.inc> - -#endif // GOOGLE_PROTOBUF_WIRE_FORMAT_H__ diff --git a/include/google/protobuf/wire_format_lite.h b/include/google/protobuf/wire_format_lite.h deleted file mode 100644 index a7e64bf1e4..0000000000 --- a/include/google/protobuf/wire_format_lite.h +++ /dev/null @@ -1,1899 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// 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 -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -// Author: kenton@google.com (Kenton Varda) -// atenasio@google.com (Chris Atenasio) (ZigZag transform) -// wink@google.com (Wink Saville) (refactored from wire_format.h) -// Based on original Protocol Buffers design by -// Sanjay Ghemawat, Jeff Dean, and others. -// -// This header is logically internal, but is made public because it is used -// from protocol-compiler-generated code, which may reside in other components. - -#ifndef GOOGLE_PROTOBUF_WIRE_FORMAT_LITE_H__ -#define GOOGLE_PROTOBUF_WIRE_FORMAT_LITE_H__ - - -#include <limits> -#include <string> - -#include <google/protobuf/stubs/common.h> -#include <google/protobuf/stubs/logging.h> -#include <google/protobuf/io/coded_stream.h> -#include <google/protobuf/port.h> -#include <google/protobuf/stubs/casts.h> -#include <google/protobuf/arenastring.h> -#include <google/protobuf/message_lite.h> -#include <google/protobuf/repeated_field.h> - -// Do UTF-8 validation on string type in Debug build only -#ifndef NDEBUG -#define GOOGLE_PROTOBUF_UTF8_VALIDATION_ENABLED -#endif - -// Avoid conflict with iOS where <ConditionalMacros.h> #defines TYPE_BOOL. -// -// If some one needs the macro TYPE_BOOL in a file that includes this header, -// it's possible to bring it back using push/pop_macro as follows. -// -// #pragma push_macro("TYPE_BOOL") -// #include this header and/or all headers that need the macro to be undefined. -// #pragma pop_macro("TYPE_BOOL") -#undef TYPE_BOOL - - -// Must be included last. -#include <google/protobuf/port_def.inc> - -namespace google { -namespace protobuf { -namespace internal { - -// This class is for internal use by the protocol buffer library and by -// protocol-compiler-generated message classes. It must not be called -// directly by clients. -// -// This class contains helpers for implementing the binary protocol buffer -// wire format without the need for reflection. Use WireFormat when using -// reflection. -// -// This class is really a namespace that contains only static methods. -class PROTOBUF_EXPORT WireFormatLite { - public: - // ----------------------------------------------------------------- - // Helper constants and functions related to the format. These are - // mostly meant for internal and generated code to use. - - // The wire format is composed of a sequence of tag/value pairs, each - // of which contains the value of one field (or one element of a repeated - // field). Each tag is encoded as a varint. The lower bits of the tag - // identify its wire type, which specifies the format of the data to follow. - // The rest of the bits contain the field number. Each type of field (as - // declared by FieldDescriptor::Type, in descriptor.h) maps to one of - // these wire types. Immediately following each tag is the field's value, - // encoded in the format specified by the wire type. Because the tag - // identifies the encoding of this data, it is possible to skip - // unrecognized fields for forwards compatibility. - - enum WireType { - WIRETYPE_VARINT = 0, - WIRETYPE_FIXED64 = 1, - WIRETYPE_LENGTH_DELIMITED = 2, - WIRETYPE_START_GROUP = 3, - WIRETYPE_END_GROUP = 4, - WIRETYPE_FIXED32 = 5, - }; - - // Lite alternative to FieldDescriptor::Type. Must be kept in sync. - enum FieldType { - TYPE_DOUBLE = 1, - TYPE_FLOAT = 2, - TYPE_INT64 = 3, - TYPE_UINT64 = 4, - TYPE_INT32 = 5, - TYPE_FIXED64 = 6, - TYPE_FIXED32 = 7, - TYPE_BOOL = 8, - TYPE_STRING = 9, - TYPE_GROUP = 10, - TYPE_MESSAGE = 11, - TYPE_BYTES = 12, - TYPE_UINT32 = 13, - TYPE_ENUM = 14, - TYPE_SFIXED32 = 15, - TYPE_SFIXED64 = 16, - TYPE_SINT32 = 17, - TYPE_SINT64 = 18, - MAX_FIELD_TYPE = 18, - }; - - // Lite alternative to FieldDescriptor::CppType. Must be kept in sync. - enum CppType { - CPPTYPE_INT32 = 1, - CPPTYPE_INT64 = 2, - CPPTYPE_UINT32 = 3, - CPPTYPE_UINT64 = 4, - CPPTYPE_DOUBLE = 5, - CPPTYPE_FLOAT = 6, - CPPTYPE_BOOL = 7, - CPPTYPE_ENUM = 8, - CPPTYPE_STRING = 9, - CPPTYPE_MESSAGE = 10, - MAX_CPPTYPE = 10, - }; - - // Helper method to get the CppType for a particular Type. - static CppType FieldTypeToCppType(FieldType type); - - // Given a FieldDescriptor::Type return its WireType - static inline WireFormatLite::WireType WireTypeForFieldType( - WireFormatLite::FieldType type) { - return kWireTypeForFieldType[type]; - } - - // Number of bits in a tag which identify the wire type. - static constexpr int kTagTypeBits = 3; - // Mask for those bits. - static constexpr uint32_t kTagTypeMask = (1 << kTagTypeBits) - 1; - - // Helper functions for encoding and decoding tags. (Inlined below and in - // _inl.h) - // - // This is different from MakeTag(field->number(), field->type()) in the - // case of packed repeated fields. - constexpr static uint32_t MakeTag(int field_number, WireType type); - static WireType GetTagWireType(uint32_t tag); - static int GetTagFieldNumber(uint32_t tag); - - // Compute the byte size of a tag. For groups, this includes both the start - // and end tags. - static inline size_t TagSize(int field_number, - WireFormatLite::FieldType type); - - // Skips a field value with the given tag. The input should start - // positioned immediately after the tag. Skipped values are simply - // discarded, not recorded anywhere. See WireFormat::SkipField() for a - // version that records to an UnknownFieldSet. - static bool SkipField(io::CodedInputStream* input, uint32_t tag); - - // Skips a field value with the given tag. The input should start - // positioned immediately after the tag. Skipped values are recorded to a - // CodedOutputStream. - static bool SkipField(io::CodedInputStream* input, uint32_t tag, - io::CodedOutputStream* output); - - // Reads and ignores a message from the input. Skipped values are simply - // discarded, not recorded anywhere. See WireFormat::SkipMessage() for a - // version that records to an UnknownFieldSet. - static bool SkipMessage(io::CodedInputStream* input); - - // Reads and ignores a message from the input. Skipped values are recorded - // to a CodedOutputStream. - static bool SkipMessage(io::CodedInputStream* input, - io::CodedOutputStream* output); - - // This macro does the same thing as WireFormatLite::MakeTag(), but the - // result is usable as a compile-time constant, which makes it usable - // as a switch case or a template input. WireFormatLite::MakeTag() is more - // type-safe, though, so prefer it if possible. -#define GOOGLE_PROTOBUF_WIRE_FORMAT_MAKE_TAG(FIELD_NUMBER, TYPE) \ - static_cast<uint32_t>((static_cast<uint32_t>(FIELD_NUMBER) << 3) | (TYPE)) - - // These are the tags for the old MessageSet format, which was defined as: - // message MessageSet { - // repeated group Item = 1 { - // required int32 type_id = 2; - // required string message = 3; - // } - // } - static constexpr int kMessageSetItemNumber = 1; - static constexpr int kMessageSetTypeIdNumber = 2; - static constexpr int kMessageSetMessageNumber = 3; - static const int kMessageSetItemStartTag = GOOGLE_PROTOBUF_WIRE_FORMAT_MAKE_TAG( - kMessageSetItemNumber, WireFormatLite::WIRETYPE_START_GROUP); - static const int kMessageSetItemEndTag = GOOGLE_PROTOBUF_WIRE_FORMAT_MAKE_TAG( - kMessageSetItemNumber, WireFormatLite::WIRETYPE_END_GROUP); - static const int kMessageSetTypeIdTag = GOOGLE_PROTOBUF_WIRE_FORMAT_MAKE_TAG( - kMessageSetTypeIdNumber, WireFormatLite::WIRETYPE_VARINT); - static const int kMessageSetMessageTag = GOOGLE_PROTOBUF_WIRE_FORMAT_MAKE_TAG( - kMessageSetMessageNumber, WireFormatLite::WIRETYPE_LENGTH_DELIMITED); - - // Byte size of all tags of a MessageSet::Item combined. - static const size_t kMessageSetItemTagsSize; - - // Helper functions for converting between floats/doubles and IEEE-754 - // uint32s/uint64s so that they can be written. (Assumes your platform - // uses IEEE-754 floats.) - static uint32_t EncodeFloat(float value); - static float DecodeFloat(uint32_t value); - static uint64_t EncodeDouble(double value); - static double DecodeDouble(uint64_t value); - - // Helper functions for mapping signed integers to unsigned integers in - // such a way that numbers with small magnitudes will encode to smaller - // varints. If you simply static_cast a negative number to an unsigned - // number and varint-encode it, it will always take 10 bytes, defeating - // the purpose of varint. So, for the "sint32" and "sint64" field types, - // we ZigZag-encode the values. - static uint32_t ZigZagEncode32(int32_t n); - static int32_t ZigZagDecode32(uint32_t n); - static uint64_t ZigZagEncode64(int64_t n); - static int64_t ZigZagDecode64(uint64_t n); - - // ================================================================= - // Methods for reading/writing individual field. - - // Read fields, not including tags. The assumption is that you already - // read the tag to determine what field to read. - - // For primitive fields, we just use a templatized routine parameterized by - // the represented type and the FieldType. These are specialized with the - // appropriate definition for each declared type. - template <typename CType, enum FieldType DeclaredType> - PROTOBUF_NDEBUG_INLINE static bool ReadPrimitive(io::CodedInputStream* input, - CType* value); - - // Reads repeated primitive values, with optimizations for repeats. - // tag_size and tag should both be compile-time constants provided by the - // protocol compiler. - template <typename CType, enum FieldType DeclaredType> - PROTOBUF_NDEBUG_INLINE static bool ReadRepeatedPrimitive( - int tag_size, uint32_t tag, io::CodedInputStream* input, - RepeatedField<CType>* value); - - // Identical to ReadRepeatedPrimitive, except will not inline the - // implementation. - template <typename CType, enum FieldType DeclaredType> - static bool ReadRepeatedPrimitiveNoInline(int tag_size, uint32_t tag, - io::CodedInputStream* input, - RepeatedField<CType>* value); - - // Reads a primitive value directly from the provided buffer. It returns a - // pointer past the segment of data that was read. - // - // This is only implemented for the types with fixed wire size, e.g. - // float, double, and the (s)fixed* types. - template <typename CType, enum FieldType DeclaredType> - PROTOBUF_NDEBUG_INLINE static const uint8_t* ReadPrimitiveFromArray( - const uint8_t* buffer, CType* value); - - // Reads a primitive packed field. - // - // This is only implemented for packable types. - template <typename CType, enum FieldType DeclaredType> - PROTOBUF_NDEBUG_INLINE static bool ReadPackedPrimitive( - io::CodedInputStream* input, RepeatedField<CType>* value); - - // Identical to ReadPackedPrimitive, except will not inline the - // implementation. - template <typename CType, enum FieldType DeclaredType> - static bool ReadPackedPrimitiveNoInline(io::CodedInputStream* input, - RepeatedField<CType>* value); - - // Read a packed enum field. If the is_valid function is not nullptr, values - // for which is_valid(value) returns false are silently dropped. - static bool ReadPackedEnumNoInline(io::CodedInputStream* input, - bool (*is_valid)(int), - RepeatedField<int>* values); - - // Read a packed enum field. If the is_valid function is not nullptr, values - // for which is_valid(value) returns false are appended to - // unknown_fields_stream. - static bool ReadPackedEnumPreserveUnknowns( - io::CodedInputStream* input, int field_number, bool (*is_valid)(int), - io::CodedOutputStream* unknown_fields_stream, RepeatedField<int>* values); - - // Read a string. ReadString(..., std::string* value) requires an - // existing std::string. - static inline bool ReadString(io::CodedInputStream* input, - std::string* value); - // ReadString(..., std::string** p) is internal-only, and should only be - // called from generated code. It starts by setting *p to "new std::string" if - // *p == &GetEmptyStringAlreadyInited(). It then invokes - // ReadString(io::CodedInputStream* input, *p). This is useful for reducing - // code size. - static inline bool ReadString(io::CodedInputStream* input, std::string** p); - // Analogous to ReadString(). - static bool ReadBytes(io::CodedInputStream* input, std::string* value); - static bool ReadBytes(io::CodedInputStream* input, std::string** p); - - enum Operation { - PARSE = 0, - SERIALIZE = 1, - }; - - // Returns true if the data is valid UTF-8. - static bool VerifyUtf8String(const char* data, int size, Operation op, - const char* field_name); - - template <typename MessageType> - static inline bool ReadGroup(int field_number, io::CodedInputStream* input, - MessageType* value); - - template <typename MessageType> - static inline bool ReadMessage(io::CodedInputStream* input, - MessageType* value); - - template <typename MessageType> - static inline bool ReadMessageNoVirtual(io::CodedInputStream* input, - MessageType* value) { - return ReadMessage(input, value); - } - - // Write a tag. The Write*() functions typically include the tag, so - // normally there's no need to call this unless using the Write*NoTag() - // variants. - PROTOBUF_NDEBUG_INLINE static void WriteTag(int field_number, WireType type, - io::CodedOutputStream* output); - - // Write fields, without tags. - PROTOBUF_NDEBUG_INLINE static void WriteInt32NoTag( - int32_t value, io::CodedOutputStream* output); - PROTOBUF_NDEBUG_INLINE static void WriteInt64NoTag( - int64_t value, io::CodedOutputStream* output); - PROTOBUF_NDEBUG_INLINE static void WriteUInt32NoTag( - uint32_t value, io::CodedOutputStream* output); - PROTOBUF_NDEBUG_INLINE static void WriteUInt64NoTag( - uint64_t value, io::CodedOutputStream* output); - PROTOBUF_NDEBUG_INLINE static void WriteSInt32NoTag( - int32_t value, io::CodedOutputStream* output); - PROTOBUF_NDEBUG_INLINE static void WriteSInt64NoTag( - int64_t value, io::CodedOutputStream* output); - PROTOBUF_NDEBUG_INLINE static void WriteFixed32NoTag( - uint32_t value, io::CodedOutputStream* output); - PROTOBUF_NDEBUG_INLINE static void WriteFixed64NoTag( - uint64_t value, io::CodedOutputStream* output); - PROTOBUF_NDEBUG_INLINE static void WriteSFixed32NoTag( - int32_t value, io::CodedOutputStream* output); - PROTOBUF_NDEBUG_INLINE static void WriteSFixed64NoTag( - int64_t value, io::CodedOutputStream* output); - PROTOBUF_NDEBUG_INLINE static void WriteFloatNoTag( - float value, io::CodedOutputStream* output); - PROTOBUF_NDEBUG_INLINE static void WriteDoubleNoTag( - double value, io::CodedOutputStream* output); - PROTOBUF_NDEBUG_INLINE static void WriteBoolNoTag( - bool value, io::CodedOutputStream* output); - PROTOBUF_NDEBUG_INLINE static void WriteEnumNoTag( - int value, io::CodedOutputStream* output); - - // Write array of primitive fields, without tags - static void WriteFloatArray(const float* a, int n, - io::CodedOutputStream* output); - static void WriteDoubleArray(const double* a, int n, - io::CodedOutputStream* output); - static void WriteFixed32Array(const uint32_t* a, int n, - io::CodedOutputStream* output); - static void WriteFixed64Array(const uint64_t* a, int n, - io::CodedOutputStream* output); - static void WriteSFixed32Array(const int32_t* a, int n, - io::CodedOutputStream* output); - static void WriteSFixed64Array(const int64_t* a, int n, - io::CodedOutputStream* output); - static void WriteBoolArray(const bool* a, int n, - io::CodedOutputStream* output); - - // Write fields, including tags. - static void WriteInt32(int field_number, int32_t value, - io::CodedOutputStream* output); - static void WriteInt64(int field_number, int64_t value, - io::CodedOutputStream* output); - static void WriteUInt32(int field_number, uint32_t value, - io::CodedOutputStream* output); - static void WriteUInt64(int field_number, uint64_t value, - io::CodedOutputStream* output); - static void WriteSInt32(int field_number, int32_t value, - io::CodedOutputStream* output); - static void WriteSInt64(int field_number, int64_t value, - io::CodedOutputStream* output); - static void WriteFixed32(int field_number, uint32_t value, - io::CodedOutputStream* output); - static void WriteFixed64(int field_number, uint64_t value, - io::CodedOutputStream* output); - static void WriteSFixed32(int field_number, int32_t value, - io::CodedOutputStream* output); - static void WriteSFixed64(int field_number, int64_t value, - io::CodedOutputStream* output); - static void WriteFloat(int field_number, float value, - io::CodedOutputStream* output); - static void WriteDouble(int field_number, double value, - io::CodedOutputStream* output); - static void WriteBool(int field_number, bool value, - io::CodedOutputStream* output); - static void WriteEnum(int field_number, int value, - io::CodedOutputStream* output); - - static void WriteString(int field_number, const std::string& value, - io::CodedOutputStream* output); - static void WriteBytes(int field_number, const std::string& value, - io::CodedOutputStream* output); - static void WriteStringMaybeAliased(int field_number, - const std::string& value, - io::CodedOutputStream* output); - static void WriteBytesMaybeAliased(int field_number, const std::string& value, - io::CodedOutputStream* output); - - static void WriteGroup(int field_number, const MessageLite& value, - io::CodedOutputStream* output); - static void WriteMessage(int field_number, const MessageLite& value, - io::CodedOutputStream* output); - // Like above, but these will check if the output stream has enough - // space to write directly to a flat array. - static void WriteGroupMaybeToArray(int field_number, const MessageLite& value, - io::CodedOutputStream* output); - static void WriteMessageMaybeToArray(int field_number, - const MessageLite& value, - io::CodedOutputStream* output); - - // Like above, but de-virtualize the call to SerializeWithCachedSizes(). The - // pointer must point at an instance of MessageType, *not* a subclass (or - // the subclass must not override SerializeWithCachedSizes()). - template <typename MessageType> - static inline void WriteGroupNoVirtual(int field_number, - const MessageType& value, - io::CodedOutputStream* output); - template <typename MessageType> - static inline void WriteMessageNoVirtual(int field_number, - const MessageType& value, - io::CodedOutputStream* output); - - // Like above, but use only *ToArray methods of CodedOutputStream. - PROTOBUF_NDEBUG_INLINE static uint8_t* WriteTagToArray(int field_number, - WireType type, - uint8_t* target); - - // Write fields, without tags. - PROTOBUF_NDEBUG_INLINE static uint8_t* WriteInt32NoTagToArray( - int32_t value, uint8_t* target); - PROTOBUF_NDEBUG_INLINE static uint8_t* WriteInt64NoTagToArray( - int64_t value, uint8_t* target); - PROTOBUF_NDEBUG_INLINE static uint8_t* WriteUInt32NoTagToArray( - uint32_t value, uint8_t* target); - PROTOBUF_NDEBUG_INLINE static uint8_t* WriteUInt64NoTagToArray( - uint64_t value, uint8_t* target); - PROTOBUF_NDEBUG_INLINE static uint8_t* WriteSInt32NoTagToArray( - int32_t value, uint8_t* target); - PROTOBUF_NDEBUG_INLINE static uint8_t* WriteSInt64NoTagToArray( - int64_t value, uint8_t* target); - PROTOBUF_NDEBUG_INLINE static uint8_t* WriteFixed32NoTagToArray( - uint32_t value, uint8_t* target); - PROTOBUF_NDEBUG_INLINE static uint8_t* WriteFixed64NoTagToArray( - uint64_t value, uint8_t* target); - PROTOBUF_NDEBUG_INLINE static uint8_t* WriteSFixed32NoTagToArray( - int32_t value, uint8_t* target); - PROTOBUF_NDEBUG_INLINE static uint8_t* WriteSFixed64NoTagToArray( - int64_t value, uint8_t* target); - PROTOBUF_NDEBUG_INLINE static uint8_t* WriteFloatNoTagToArray( - float value, uint8_t* target); - PROTOBUF_NDEBUG_INLINE static uint8_t* WriteDoubleNoTagToArray( - double value, uint8_t* target); - PROTOBUF_NDEBUG_INLINE static uint8_t* WriteBoolNoTagToArray(bool value, - uint8_t* target); - PROTOBUF_NDEBUG_INLINE static uint8_t* WriteEnumNoTagToArray(int value, - uint8_t* target); - - // Write fields, without tags. These require that value.size() > 0. - template <typename T> - PROTOBUF_NDEBUG_INLINE static uint8_t* WritePrimitiveNoTagToArray( - const RepeatedField<T>& value, uint8_t* (*Writer)(T, uint8_t*), - uint8_t* target); - template <typename T> - PROTOBUF_NDEBUG_INLINE static uint8_t* WriteFixedNoTagToArray( - const RepeatedField<T>& value, uint8_t* (*Writer)(T, uint8_t*), - uint8_t* target); - - PROTOBUF_NDEBUG_INLINE static uint8_t* WriteInt32NoTagToArray( - const RepeatedField<int32_t>& value, uint8_t* output); - PROTOBUF_NDEBUG_INLINE static uint8_t* WriteInt64NoTagToArray( - const RepeatedField<int64_t>& value, uint8_t* output); - PROTOBUF_NDEBUG_INLINE static uint8_t* WriteUInt32NoTagToArray( - const RepeatedField<uint32_t>& value, uint8_t* output); - PROTOBUF_NDEBUG_INLINE static uint8_t* WriteUInt64NoTagToArray( - const RepeatedField<uint64_t>& value, uint8_t* output); - PROTOBUF_NDEBUG_INLINE static uint8_t* WriteSInt32NoTagToArray( - const RepeatedField<int32_t>& value, uint8_t* output); - PROTOBUF_NDEBUG_INLINE static uint8_t* WriteSInt64NoTagToArray( - const RepeatedField<int64_t>& value, uint8_t* output); - PROTOBUF_NDEBUG_INLINE static uint8_t* WriteFixed32NoTagToArray( - const RepeatedField<uint32_t>& value, uint8_t* output); - PROTOBUF_NDEBUG_INLINE static uint8_t* WriteFixed64NoTagToArray( - const RepeatedField<uint64_t>& value, uint8_t* output); - PROTOBUF_NDEBUG_INLINE static uint8_t* WriteSFixed32NoTagToArray( - const RepeatedField<int32_t>& value, uint8_t* output); - PROTOBUF_NDEBUG_INLINE static uint8_t* WriteSFixed64NoTagToArray( - const RepeatedField<int64_t>& value, uint8_t* output); - PROTOBUF_NDEBUG_INLINE static uint8_t* WriteFloatNoTagToArray( - const RepeatedField<float>& value, uint8_t* output); - PROTOBUF_NDEBUG_INLINE static uint8_t* WriteDoubleNoTagToArray( - const RepeatedField<double>& value, uint8_t* output); - PROTOBUF_NDEBUG_INLINE static uint8_t* WriteBoolNoTagToArray( - const RepeatedField<bool>& value, uint8_t* output); - PROTOBUF_NDEBUG_INLINE static uint8_t* WriteEnumNoTagToArray( - const RepeatedField<int>& value, uint8_t* output); - - // Write fields, including tags. - PROTOBUF_NDEBUG_INLINE static uint8_t* WriteInt32ToArray(int field_number, - int32_t value, - uint8_t* target); - PROTOBUF_NDEBUG_INLINE static uint8_t* WriteInt64ToArray(int field_number, - int64_t value, - uint8_t* target); - PROTOBUF_NDEBUG_INLINE static uint8_t* WriteUInt32ToArray(int field_number, - uint32_t value, - uint8_t* target); - PROTOBUF_NDEBUG_INLINE static uint8_t* WriteUInt64ToArray(int field_number, - uint64_t value, - uint8_t* target); - PROTOBUF_NDEBUG_INLINE static uint8_t* WriteSInt32ToArray(int field_number, - int32_t value, - uint8_t* target); - PROTOBUF_NDEBUG_INLINE static uint8_t* WriteSInt64ToArray(int field_number, - int64_t value, - uint8_t* target); - PROTOBUF_NDEBUG_INLINE static uint8_t* WriteFixed32ToArray(int field_number, - uint32_t value, - uint8_t* target); - PROTOBUF_NDEBUG_INLINE static uint8_t* WriteFixed64ToArray(int field_number, - uint64_t value, - uint8_t* target); - PROTOBUF_NDEBUG_INLINE static uint8_t* WriteSFixed32ToArray(int field_number, - int32_t value, - uint8_t* target); - PROTOBUF_NDEBUG_INLINE static uint8_t* WriteSFixed64ToArray(int field_number, - int64_t value, - uint8_t* target); - PROTOBUF_NDEBUG_INLINE static uint8_t* WriteFloatToArray(int field_number, - float value, - uint8_t* target); - PROTOBUF_NDEBUG_INLINE static uint8_t* WriteDoubleToArray(int field_number, - double value, - uint8_t* target); - PROTOBUF_NDEBUG_INLINE static uint8_t* WriteBoolToArray(int field_number, - bool value, - uint8_t* target); - PROTOBUF_NDEBUG_INLINE static uint8_t* WriteEnumToArray(int field_number, - int value, - uint8_t* target); - - template <typename T> - PROTOBUF_NDEBUG_INLINE static uint8_t* WritePrimitiveToArray( - int field_number, const RepeatedField<T>& value, - uint8_t* (*Writer)(int, T, uint8_t*), uint8_t* target); - - PROTOBUF_NDEBUG_INLINE static uint8_t* WriteInt32ToArray( - int field_number, const RepeatedField<int32_t>& value, uint8_t* output); - PROTOBUF_NDEBUG_INLINE static uint8_t* WriteInt64ToArray( - int field_number, const RepeatedField<int64_t>& value, uint8_t* output); - PROTOBUF_NDEBUG_INLINE static uint8_t* WriteUInt32ToArray( - int field_number, const RepeatedField<uint32_t>& value, uint8_t* output); - PROTOBUF_NDEBUG_INLINE static uint8_t* WriteUInt64ToArray( - int field_number, const RepeatedField<uint64_t>& value, uint8_t* output); - PROTOBUF_NDEBUG_INLINE static uint8_t* WriteSInt32ToArray( - int field_number, const RepeatedField<int32_t>& value, uint8_t* output); - PROTOBUF_NDEBUG_INLINE static uint8_t* WriteSInt64ToArray( - int field_number, const RepeatedField<int64_t>& value, uint8_t* output); - PROTOBUF_NDEBUG_INLINE static uint8_t* WriteFixed32ToArray( - int field_number, const RepeatedField<uint32_t>& value, uint8_t* output); - PROTOBUF_NDEBUG_INLINE static uint8_t* WriteFixed64ToArray( - int field_number, const RepeatedField<uint64_t>& value, uint8_t* output); - PROTOBUF_NDEBUG_INLINE static uint8_t* WriteSFixed32ToArray( - int field_number, const RepeatedField<int32_t>& value, uint8_t* output); - PROTOBUF_NDEBUG_INLINE static uint8_t* WriteSFixed64ToArray( - int field_number, const RepeatedField<int64_t>& value, uint8_t* output); - PROTOBUF_NDEBUG_INLINE static uint8_t* WriteFloatToArray( - int field_number, const RepeatedField<float>& value, uint8_t* output); - PROTOBUF_NDEBUG_INLINE static uint8_t* WriteDoubleToArray( - int field_number, const RepeatedField<double>& value, uint8_t* output); - PROTOBUF_NDEBUG_INLINE static uint8_t* WriteBoolToArray( - int field_number, const RepeatedField<bool>& value, uint8_t* output); - PROTOBUF_NDEBUG_INLINE static uint8_t* WriteEnumToArray( - int field_number, const RepeatedField<int>& value, uint8_t* output); - - PROTOBUF_NDEBUG_INLINE static uint8_t* WriteStringToArray( - int field_number, const std::string& value, uint8_t* target); - PROTOBUF_NDEBUG_INLINE static uint8_t* WriteBytesToArray( - int field_number, const std::string& value, uint8_t* target); - - // Whether to serialize deterministically (e.g., map keys are - // sorted) is a property of a CodedOutputStream, and in the process - // of serialization, the "ToArray" variants may be invoked. But they don't - // have a CodedOutputStream available, so they get an additional parameter - // telling them whether to serialize deterministically. - static uint8_t* InternalWriteGroup(int field_number, const MessageLite& value, - uint8_t* target, - io::EpsCopyOutputStream* stream); - static uint8_t* InternalWriteMessage(int field_number, - const MessageLite& value, - int cached_size, uint8_t* target, - io::EpsCopyOutputStream* stream); - - // Like above, but de-virtualize the call to SerializeWithCachedSizes(). The - // pointer must point at an instance of MessageType, *not* a subclass (or - // the subclass must not override SerializeWithCachedSizes()). - template <typename MessageType> - PROTOBUF_NDEBUG_INLINE static uint8_t* InternalWriteGroupNoVirtualToArray( - int field_number, const MessageType& value, uint8_t* target); - template <typename MessageType> - PROTOBUF_NDEBUG_INLINE static uint8_t* InternalWriteMessageNoVirtualToArray( - int field_number, const MessageType& value, uint8_t* target); - - // For backward-compatibility, the last four methods also have versions - // that are non-deterministic always. - PROTOBUF_NDEBUG_INLINE static uint8_t* WriteGroupToArray( - int field_number, const MessageLite& value, uint8_t* target) { - io::EpsCopyOutputStream stream( - target, - value.GetCachedSize() + - static_cast<int>(2 * io::CodedOutputStream::VarintSize32( - static_cast<uint32_t>(field_number) << 3)), - io::CodedOutputStream::IsDefaultSerializationDeterministic()); - return InternalWriteGroup(field_number, value, target, &stream); - } - PROTOBUF_NDEBUG_INLINE static uint8_t* WriteMessageToArray( - int field_number, const MessageLite& value, uint8_t* target) { - int size = value.GetCachedSize(); - io::EpsCopyOutputStream stream( - target, - size + static_cast<int>(io::CodedOutputStream::VarintSize32( - static_cast<uint32_t>(field_number) << 3) + - io::CodedOutputStream::VarintSize32(size)), - io::CodedOutputStream::IsDefaultSerializationDeterministic()); - return InternalWriteMessage(field_number, value, value.GetCachedSize(), - target, &stream); - } - - // Compute the byte size of a field. The XxSize() functions do NOT include - // the tag, so you must also call TagSize(). (This is because, for repeated - // fields, you should only call TagSize() once and multiply it by the element - // count, but you may have to call XxSize() for each individual element.) - static inline size_t Int32Size(int32_t value); - static inline size_t Int64Size(int64_t value); - static inline size_t UInt32Size(uint32_t value); - static inline size_t UInt64Size(uint64_t value); - static inline size_t SInt32Size(int32_t value); - static inline size_t SInt64Size(int64_t value); - static inline size_t EnumSize(int value); - static inline size_t Int32SizePlusOne(int32_t value); - static inline size_t Int64SizePlusOne(int64_t value); - static inline size_t UInt32SizePlusOne(uint32_t value); - static inline size_t UInt64SizePlusOne(uint64_t value); - static inline size_t SInt32SizePlusOne(int32_t value); - static inline size_t SInt64SizePlusOne(int64_t value); - static inline size_t EnumSizePlusOne(int value); - - static size_t Int32Size(const RepeatedField<int32_t>& value); - static size_t Int64Size(const RepeatedField<int64_t>& value); - static size_t UInt32Size(const RepeatedField<uint32_t>& value); - static size_t UInt64Size(const RepeatedField<uint64_t>& value); - static size_t SInt32Size(const RepeatedField<int32_t>& value); - static size_t SInt64Size(const RepeatedField<int64_t>& value); - static size_t EnumSize(const RepeatedField<int>& value); - - // These types always have the same size. - static constexpr size_t kFixed32Size = 4; - static constexpr size_t kFixed64Size = 8; - static constexpr size_t kSFixed32Size = 4; - static constexpr size_t kSFixed64Size = 8; - static constexpr size_t kFloatSize = 4; - static constexpr size_t kDoubleSize = 8; - static constexpr size_t kBoolSize = 1; - - static inline size_t StringSize(const std::string& value); - static inline size_t BytesSize(const std::string& value); - - template <typename MessageType> - static inline size_t GroupSize(const MessageType& value); - template <typename MessageType> - static inline size_t MessageSize(const MessageType& value); - - // Like above, but de-virtualize the call to ByteSize(). The - // pointer must point at an instance of MessageType, *not* a subclass (or - // the subclass must not override ByteSize()). - template <typename MessageType> - static inline size_t GroupSizeNoVirtual(const MessageType& value); - template <typename MessageType> - static inline size_t MessageSizeNoVirtual(const MessageType& value); - - // Given the length of data, calculate the byte size of the data on the - // wire if we encode the data as a length delimited field. - static inline size_t LengthDelimitedSize(size_t length); - - private: - // A helper method for the repeated primitive reader. This method has - // optimizations for primitive types that have fixed size on the wire, and - // can be read using potentially faster paths. - template <typename CType, enum FieldType DeclaredType> - PROTOBUF_NDEBUG_INLINE static bool ReadRepeatedFixedSizePrimitive( - int tag_size, uint32_t tag, io::CodedInputStream* input, - RepeatedField<CType>* value); - - // Like ReadRepeatedFixedSizePrimitive but for packed primitive fields. - template <typename CType, enum FieldType DeclaredType> - PROTOBUF_NDEBUG_INLINE static bool ReadPackedFixedSizePrimitive( - io::CodedInputStream* input, RepeatedField<CType>* value); - - static const CppType kFieldTypeToCppTypeMap[]; - static const WireFormatLite::WireType kWireTypeForFieldType[]; - static void WriteSubMessageMaybeToArray(int size, const MessageLite& value, - io::CodedOutputStream* output); - - GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(WireFormatLite); -}; - -// A class which deals with unknown values. The default implementation just -// discards them. WireFormat defines a subclass which writes to an -// UnknownFieldSet. This class is used by ExtensionSet::ParseField(), since -// ExtensionSet is part of the lite library but UnknownFieldSet is not. -class PROTOBUF_EXPORT FieldSkipper { - public: - FieldSkipper() {} - virtual ~FieldSkipper() {} - - // Skip a field whose tag has already been consumed. - virtual bool SkipField(io::CodedInputStream* input, uint32_t tag); - - // Skip an entire message or group, up to an end-group tag (which is consumed) - // or end-of-stream. - virtual bool SkipMessage(io::CodedInputStream* input); - - // Deal with an already-parsed unrecognized enum value. The default - // implementation does nothing, but the UnknownFieldSet-based implementation - // saves it as an unknown varint. - virtual void SkipUnknownEnum(int field_number, int value); -}; - -// Subclass of FieldSkipper which saves skipped fields to a CodedOutputStream. - -class PROTOBUF_EXPORT CodedOutputStreamFieldSkipper : public FieldSkipper { - public: - explicit CodedOutputStreamFieldSkipper(io::CodedOutputStream* unknown_fields) - : unknown_fields_(unknown_fields) {} - ~CodedOutputStreamFieldSkipper() override {} - - // implements FieldSkipper ----------------------------------------- - bool SkipField(io::CodedInputStream* input, uint32_t tag) override; - bool SkipMessage(io::CodedInputStream* input) override; - void SkipUnknownEnum(int field_number, int value) override; - - protected: - io::CodedOutputStream* unknown_fields_; -}; - -// inline methods ==================================================== - -inline WireFormatLite::CppType WireFormatLite::FieldTypeToCppType( - FieldType type) { - return kFieldTypeToCppTypeMap[type]; -} - -constexpr inline uint32_t WireFormatLite::MakeTag(int field_number, - WireType type) { - return GOOGLE_PROTOBUF_WIRE_FORMAT_MAKE_TAG(field_number, type); -} - -inline WireFormatLite::WireType WireFormatLite::GetTagWireType(uint32_t tag) { - return static_cast<WireType>(tag & kTagTypeMask); -} - -inline int WireFormatLite::GetTagFieldNumber(uint32_t tag) { - return static_cast<int>(tag >> kTagTypeBits); -} - -inline size_t WireFormatLite::TagSize(int field_number, - WireFormatLite::FieldType type) { - size_t result = io::CodedOutputStream::VarintSize32( - static_cast<uint32_t>(field_number << kTagTypeBits)); - if (type == TYPE_GROUP) { - // Groups have both a start and an end tag. - return result * 2; - } else { - return result; - } -} - -inline uint32_t WireFormatLite::EncodeFloat(float value) { - return bit_cast<uint32_t>(value); -} - -inline float WireFormatLite::DecodeFloat(uint32_t value) { - return bit_cast<float>(value); -} - -inline uint64_t WireFormatLite::EncodeDouble(double value) { - return bit_cast<uint64_t>(value); -} - -inline double WireFormatLite::DecodeDouble(uint64_t value) { - return bit_cast<double>(value); -} - -// ZigZag Transform: Encodes signed integers so that they can be -// effectively used with varint encoding. -// -// varint operates on unsigned integers, encoding smaller numbers into -// fewer bytes. If you try to use it on a signed integer, it will treat -// this number as a very large unsigned integer, which means that even -// small signed numbers like -1 will take the maximum number of bytes -// (10) to encode. ZigZagEncode() maps signed integers to unsigned -// in such a way that those with a small absolute value will have smaller -// encoded values, making them appropriate for encoding using varint. -// -// int32_t -> uint32_t -// ------------------------- -// 0 -> 0 -// -1 -> 1 -// 1 -> 2 -// -2 -> 3 -// ... -> ... -// 2147483647 -> 4294967294 -// -2147483648 -> 4294967295 -// -// >> encode >> -// << decode << - -inline uint32_t WireFormatLite::ZigZagEncode32(int32_t n) { - // Note: the right-shift must be arithmetic - // Note: left shift must be unsigned because of overflow - return (static_cast<uint32_t>(n) << 1) ^ static_cast<uint32_t>(n >> 31); -} - -inline int32_t WireFormatLite::ZigZagDecode32(uint32_t n) { - // Note: Using unsigned types prevent undefined behavior - return static_cast<int32_t>((n >> 1) ^ (~(n & 1) + 1)); -} - -inline uint64_t WireFormatLite::ZigZagEncode64(int64_t n) { - // Note: the right-shift must be arithmetic - // Note: left shift must be unsigned because of overflow - return (static_cast<uint64_t>(n) << 1) ^ static_cast<uint64_t>(n >> 63); -} - -inline int64_t WireFormatLite::ZigZagDecode64(uint64_t n) { - // Note: Using unsigned types prevent undefined behavior - return static_cast<int64_t>((n >> 1) ^ (~(n & 1) + 1)); -} - -// String is for UTF-8 text only, but, even so, ReadString() can simply -// call ReadBytes(). - -inline bool WireFormatLite::ReadString(io::CodedInputStream* input, - std::string* value) { - return ReadBytes(input, value); -} - -inline bool WireFormatLite::ReadString(io::CodedInputStream* input, - std::string** p) { - return ReadBytes(input, p); -} - -inline uint8_t* InternalSerializeUnknownMessageSetItemsToArray( - const std::string& unknown_fields, uint8_t* target, - io::EpsCopyOutputStream* stream) { - return stream->WriteRaw(unknown_fields.data(), - static_cast<int>(unknown_fields.size()), target); -} - -inline size_t ComputeUnknownMessageSetItemsSize( - const std::string& unknown_fields) { - return unknown_fields.size(); -} - -// Implementation details of ReadPrimitive. - -template <> -inline bool WireFormatLite::ReadPrimitive<int32_t, WireFormatLite::TYPE_INT32>( - io::CodedInputStream* input, int32_t* value) { - uint32_t temp; - if (!input->ReadVarint32(&temp)) return false; - *value = static_cast<int32_t>(temp); - return true; -} -template <> -inline bool WireFormatLite::ReadPrimitive<int64_t, WireFormatLite::TYPE_INT64>( - io::CodedInputStream* input, int64_t* value) { - uint64_t temp; - if (!input->ReadVarint64(&temp)) return false; - *value = static_cast<int64_t>(temp); - return true; -} -template <> -inline bool -WireFormatLite::ReadPrimitive<uint32_t, WireFormatLite::TYPE_UINT32>( - io::CodedInputStream* input, uint32_t* value) { - return input->ReadVarint32(value); -} -template <> -inline bool -WireFormatLite::ReadPrimitive<uint64_t, WireFormatLite::TYPE_UINT64>( - io::CodedInputStream* input, uint64_t* value) { - return input->ReadVarint64(value); -} -template <> -inline bool WireFormatLite::ReadPrimitive<int32_t, WireFormatLite::TYPE_SINT32>( - io::CodedInputStream* input, int32_t* value) { - uint32_t temp; - if (!input->ReadVarint32(&temp)) return false; - *value = ZigZagDecode32(temp); - return true; -} -template <> -inline bool WireFormatLite::ReadPrimitive<int64_t, WireFormatLite::TYPE_SINT64>( - io::CodedInputStream* input, int64_t* value) { - uint64_t temp; - if (!input->ReadVarint64(&temp)) return false; - *value = ZigZagDecode64(temp); - return true; -} -template <> -inline bool -WireFormatLite::ReadPrimitive<uint32_t, WireFormatLite::TYPE_FIXED32>( - io::CodedInputStream* input, uint32_t* value) { - return input->ReadLittleEndian32(value); -} -template <> -inline bool -WireFormatLite::ReadPrimitive<uint64_t, WireFormatLite::TYPE_FIXED64>( - io::CodedInputStream* input, uint64_t* value) { - return input->ReadLittleEndian64(value); -} -template <> -inline bool -WireFormatLite::ReadPrimitive<int32_t, WireFormatLite::TYPE_SFIXED32>( - io::CodedInputStream* input, int32_t* value) { - uint32_t temp; - if (!input->ReadLittleEndian32(&temp)) return false; - *value = static_cast<int32_t>(temp); - return true; -} -template <> -inline bool -WireFormatLite::ReadPrimitive<int64_t, WireFormatLite::TYPE_SFIXED64>( - io::CodedInputStream* input, int64_t* value) { - uint64_t temp; - if (!input->ReadLittleEndian64(&temp)) return false; - *value = static_cast<int64_t>(temp); - return true; -} -template <> -inline bool WireFormatLite::ReadPrimitive<float, WireFormatLite::TYPE_FLOAT>( - io::CodedInputStream* input, float* value) { - uint32_t temp; - if (!input->ReadLittleEndian32(&temp)) return false; - *value = DecodeFloat(temp); - return true; -} -template <> -inline bool WireFormatLite::ReadPrimitive<double, WireFormatLite::TYPE_DOUBLE>( - io::CodedInputStream* input, double* value) { - uint64_t temp; - if (!input->ReadLittleEndian64(&temp)) return false; - *value = DecodeDouble(temp); - return true; -} -template <> -inline bool WireFormatLite::ReadPrimitive<bool, WireFormatLite::TYPE_BOOL>( - io::CodedInputStream* input, bool* value) { - uint64_t temp; - if (!input->ReadVarint64(&temp)) return false; - *value = temp != 0; - return true; -} -template <> -inline bool WireFormatLite::ReadPrimitive<int, WireFormatLite::TYPE_ENUM>( - io::CodedInputStream* input, int* value) { - uint32_t temp; - if (!input->ReadVarint32(&temp)) return false; - *value = static_cast<int>(temp); - return true; -} - -template <> -inline const uint8_t* -WireFormatLite::ReadPrimitiveFromArray<uint32_t, WireFormatLite::TYPE_FIXED32>( - const uint8_t* buffer, uint32_t* value) { - return io::CodedInputStream::ReadLittleEndian32FromArray(buffer, value); -} -template <> -inline const uint8_t* -WireFormatLite::ReadPrimitiveFromArray<uint64_t, WireFormatLite::TYPE_FIXED64>( - const uint8_t* buffer, uint64_t* value) { - return io::CodedInputStream::ReadLittleEndian64FromArray(buffer, value); -} -template <> -inline const uint8_t* -WireFormatLite::ReadPrimitiveFromArray<int32_t, WireFormatLite::TYPE_SFIXED32>( - const uint8_t* buffer, int32_t* value) { - uint32_t temp; - buffer = io::CodedInputStream::ReadLittleEndian32FromArray(buffer, &temp); - *value = static_cast<int32_t>(temp); - return buffer; -} -template <> -inline const uint8_t* -WireFormatLite::ReadPrimitiveFromArray<int64_t, WireFormatLite::TYPE_SFIXED64>( - const uint8_t* buffer, int64_t* value) { - uint64_t temp; - buffer = io::CodedInputStream::ReadLittleEndian64FromArray(buffer, &temp); - *value = static_cast<int64_t>(temp); - return buffer; -} -template <> -inline const uint8_t* -WireFormatLite::ReadPrimitiveFromArray<float, WireFormatLite::TYPE_FLOAT>( - const uint8_t* buffer, float* value) { - uint32_t temp; - buffer = io::CodedInputStream::ReadLittleEndian32FromArray(buffer, &temp); - *value = DecodeFloat(temp); - return buffer; -} -template <> -inline const uint8_t* -WireFormatLite::ReadPrimitiveFromArray<double, WireFormatLite::TYPE_DOUBLE>( - const uint8_t* buffer, double* value) { - uint64_t temp; - buffer = io::CodedInputStream::ReadLittleEndian64FromArray(buffer, &temp); - *value = DecodeDouble(temp); - return buffer; -} - -template <typename CType, enum WireFormatLite::FieldType DeclaredType> -inline bool WireFormatLite::ReadRepeatedPrimitive( - int, // tag_size, unused. - uint32_t tag, io::CodedInputStream* input, RepeatedField<CType>* values) { - CType value; - if (!ReadPrimitive<CType, DeclaredType>(input, &value)) return false; - values->Add(value); - int elements_already_reserved = values->Capacity() - values->size(); - while (elements_already_reserved > 0 && input->ExpectTag(tag)) { - if (!ReadPrimitive<CType, DeclaredType>(input, &value)) return false; - values->AddAlreadyReserved(value); - elements_already_reserved--; - } - return true; -} - -template <typename CType, enum WireFormatLite::FieldType DeclaredType> -inline bool WireFormatLite::ReadRepeatedFixedSizePrimitive( - int tag_size, uint32_t tag, io::CodedInputStream* input, - RepeatedField<CType>* values) { - GOOGLE_DCHECK_EQ(UInt32Size(tag), static_cast<size_t>(tag_size)); - CType value; - if (!ReadPrimitive<CType, DeclaredType>(input, &value)) return false; - values->Add(value); - - // For fixed size values, repeated values can be read more quickly by - // reading directly from a raw array. - // - // We can get a tight loop by only reading as many elements as can be - // added to the RepeatedField without having to do any resizing. Additionally, - // we only try to read as many elements as are available from the current - // buffer space. Doing so avoids having to perform boundary checks when - // reading the value: the maximum number of elements that can be read is - // known outside of the loop. - const void* void_pointer; - int size; - input->GetDirectBufferPointerInline(&void_pointer, &size); - if (size > 0) { - const uint8_t* buffer = reinterpret_cast<const uint8_t*>(void_pointer); - // The number of bytes each type occupies on the wire. - const int per_value_size = tag_size + static_cast<int>(sizeof(value)); - - // parentheses around (std::min) prevents macro expansion of min(...) - int elements_available = - (std::min)(values->Capacity() - values->size(), size / per_value_size); - int num_read = 0; - while (num_read < elements_available && - (buffer = io::CodedInputStream::ExpectTagFromArray(buffer, tag)) != - nullptr) { - buffer = ReadPrimitiveFromArray<CType, DeclaredType>(buffer, &value); - values->AddAlreadyReserved(value); - ++num_read; - } - const int read_bytes = num_read * per_value_size; - if (read_bytes > 0) { - input->Skip(read_bytes); - } - } - return true; -} - -// Specializations of ReadRepeatedPrimitive for the fixed size types, which use -// the optimized code path. -#define READ_REPEATED_FIXED_SIZE_PRIMITIVE(CPPTYPE, DECLARED_TYPE) \ - template <> \ - inline bool WireFormatLite::ReadRepeatedPrimitive< \ - CPPTYPE, WireFormatLite::DECLARED_TYPE>( \ - int tag_size, uint32_t tag, io::CodedInputStream* input, \ - RepeatedField<CPPTYPE>* values) { \ - return ReadRepeatedFixedSizePrimitive<CPPTYPE, \ - WireFormatLite::DECLARED_TYPE>( \ - tag_size, tag, input, values); \ - } - -READ_REPEATED_FIXED_SIZE_PRIMITIVE(uint32_t, TYPE_FIXED32) -READ_REPEATED_FIXED_SIZE_PRIMITIVE(uint64_t, TYPE_FIXED64) -READ_REPEATED_FIXED_SIZE_PRIMITIVE(int32_t, TYPE_SFIXED32) -READ_REPEATED_FIXED_SIZE_PRIMITIVE(int64_t, TYPE_SFIXED64) -READ_REPEATED_FIXED_SIZE_PRIMITIVE(float, TYPE_FLOAT) -READ_REPEATED_FIXED_SIZE_PRIMITIVE(double, TYPE_DOUBLE) - -#undef READ_REPEATED_FIXED_SIZE_PRIMITIVE - -template <typename CType, enum WireFormatLite::FieldType DeclaredType> -bool WireFormatLite::ReadRepeatedPrimitiveNoInline( - int tag_size, uint32_t tag, io::CodedInputStream* input, - RepeatedField<CType>* value) { - return ReadRepeatedPrimitive<CType, DeclaredType>(tag_size, tag, input, - value); -} - -template <typename CType, enum WireFormatLite::FieldType DeclaredType> -inline bool WireFormatLite::ReadPackedPrimitive(io::CodedInputStream* input, - RepeatedField<CType>* values) { - int length; - if (!input->ReadVarintSizeAsInt(&length)) return false; - io::CodedInputStream::Limit limit = input->PushLimit(length); - while (input->BytesUntilLimit() > 0) { - CType value; - if (!ReadPrimitive<CType, DeclaredType>(input, &value)) return false; - values->Add(value); - } - input->PopLimit(limit); - return true; -} - -template <typename CType, enum WireFormatLite::FieldType DeclaredType> -inline bool WireFormatLite::ReadPackedFixedSizePrimitive( - io::CodedInputStream* input, RepeatedField<CType>* values) { - int length; - if (!input->ReadVarintSizeAsInt(&length)) return false; - const int old_entries = values->size(); - const int new_entries = length / static_cast<int>(sizeof(CType)); - const int new_bytes = new_entries * static_cast<int>(sizeof(CType)); - if (new_bytes != length) return false; - // We would *like* to pre-allocate the buffer to write into (for - // speed), but *must* avoid performing a very large allocation due - // to a malicious user-supplied "length" above. So we have a fast - // path that pre-allocates when the "length" is less than a bound. - // We determine the bound by calling BytesUntilTotalBytesLimit() and - // BytesUntilLimit(). These return -1 to mean "no limit set". - // There are four cases: - // TotalBytesLimit Limit - // -1 -1 Use slow path. - // -1 >= 0 Use fast path if length <= Limit. - // >= 0 -1 Use slow path. - // >= 0 >= 0 Use fast path if length <= min(both limits). - int64_t bytes_limit = input->BytesUntilTotalBytesLimit(); - if (bytes_limit == -1) { - bytes_limit = input->BytesUntilLimit(); - } else { - // parentheses around (std::min) prevents macro expansion of min(...) - bytes_limit = - (std::min)(bytes_limit, static_cast<int64_t>(input->BytesUntilLimit())); - } - if (bytes_limit >= new_bytes) { - // Fast-path that pre-allocates *values to the final size. -#if defined(PROTOBUF_LITTLE_ENDIAN) - values->Resize(old_entries + new_entries, 0); - // values->mutable_data() may change after Resize(), so do this after: - void* dest = reinterpret_cast<void*>(values->mutable_data() + old_entries); - if (!input->ReadRaw(dest, new_bytes)) { - values->Truncate(old_entries); - return false; - } -#else - values->Reserve(old_entries + new_entries); - CType value; - for (int i = 0; i < new_entries; ++i) { - if (!ReadPrimitive<CType, DeclaredType>(input, &value)) return false; - values->AddAlreadyReserved(value); - } -#endif - } else { - // This is the slow-path case where "length" may be too large to - // safely allocate. We read as much as we can into *values - // without pre-allocating "length" bytes. - CType value; - for (int i = 0; i < new_entries; ++i) { - if (!ReadPrimitive<CType, DeclaredType>(input, &value)) return false; - values->Add(value); - } - } - return true; -} - -// Specializations of ReadPackedPrimitive for the fixed size types, which use -// an optimized code path. -#define READ_REPEATED_PACKED_FIXED_SIZE_PRIMITIVE(CPPTYPE, DECLARED_TYPE) \ - template <> \ - inline bool \ - WireFormatLite::ReadPackedPrimitive<CPPTYPE, WireFormatLite::DECLARED_TYPE>( \ - io::CodedInputStream * input, RepeatedField<CPPTYPE> * values) { \ - return ReadPackedFixedSizePrimitive<CPPTYPE, \ - WireFormatLite::DECLARED_TYPE>( \ - input, values); \ - } - -READ_REPEATED_PACKED_FIXED_SIZE_PRIMITIVE(uint32_t, TYPE_FIXED32) -READ_REPEATED_PACKED_FIXED_SIZE_PRIMITIVE(uint64_t, TYPE_FIXED64) -READ_REPEATED_PACKED_FIXED_SIZE_PRIMITIVE(int32_t, TYPE_SFIXED32) -READ_REPEATED_PACKED_FIXED_SIZE_PRIMITIVE(int64_t, TYPE_SFIXED64) -READ_REPEATED_PACKED_FIXED_SIZE_PRIMITIVE(float, TYPE_FLOAT) -READ_REPEATED_PACKED_FIXED_SIZE_PRIMITIVE(double, TYPE_DOUBLE) - -#undef READ_REPEATED_PACKED_FIXED_SIZE_PRIMITIVE - -template <typename CType, enum WireFormatLite::FieldType DeclaredType> -bool WireFormatLite::ReadPackedPrimitiveNoInline(io::CodedInputStream* input, - RepeatedField<CType>* values) { - return ReadPackedPrimitive<CType, DeclaredType>(input, values); -} - - -template <typename MessageType> -inline bool WireFormatLite::ReadGroup(int field_number, - io::CodedInputStream* input, - MessageType* value) { - if (!input->IncrementRecursionDepth()) return false; - if (!value->MergePartialFromCodedStream(input)) return false; - input->UnsafeDecrementRecursionDepth(); - // Make sure the last thing read was an end tag for this group. - if (!input->LastTagWas(MakeTag(field_number, WIRETYPE_END_GROUP))) { - return false; - } - return true; -} -template <typename MessageType> -inline bool WireFormatLite::ReadMessage(io::CodedInputStream* input, - MessageType* value) { - int length; - if (!input->ReadVarintSizeAsInt(&length)) return false; - std::pair<io::CodedInputStream::Limit, int> p = - input->IncrementRecursionDepthAndPushLimit(length); - if (p.second < 0 || !value->MergePartialFromCodedStream(input)) return false; - // Make sure that parsing stopped when the limit was hit, not at an endgroup - // tag. - return input->DecrementRecursionDepthAndPopLimit(p.first); -} - -// =================================================================== - -inline void WireFormatLite::WriteTag(int field_number, WireType type, - io::CodedOutputStream* output) { - output->WriteTag(MakeTag(field_number, type)); -} - -inline void WireFormatLite::WriteInt32NoTag(int32_t value, - io::CodedOutputStream* output) { - output->WriteVarint32SignExtended(value); -} -inline void WireFormatLite::WriteInt64NoTag(int64_t value, - io::CodedOutputStream* output) { - output->WriteVarint64(static_cast<uint64_t>(value)); -} -inline void WireFormatLite::WriteUInt32NoTag(uint32_t value, - io::CodedOutputStream* output) { - output->WriteVarint32(value); -} -inline void WireFormatLite::WriteUInt64NoTag(uint64_t value, - io::CodedOutputStream* output) { - output->WriteVarint64(value); -} -inline void WireFormatLite::WriteSInt32NoTag(int32_t value, - io::CodedOutputStream* output) { - output->WriteVarint32(ZigZagEncode32(value)); -} -inline void WireFormatLite::WriteSInt64NoTag(int64_t value, - io::CodedOutputStream* output) { - output->WriteVarint64(ZigZagEncode64(value)); -} -inline void WireFormatLite::WriteFixed32NoTag(uint32_t value, - io::CodedOutputStream* output) { - output->WriteLittleEndian32(value); -} -inline void WireFormatLite::WriteFixed64NoTag(uint64_t value, - io::CodedOutputStream* output) { - output->WriteLittleEndian64(value); -} -inline void WireFormatLite::WriteSFixed32NoTag(int32_t value, - io::CodedOutputStream* output) { - output->WriteLittleEndian32(static_cast<uint32_t>(value)); -} -inline void WireFormatLite::WriteSFixed64NoTag(int64_t value, - io::CodedOutputStream* output) { - output->WriteLittleEndian64(static_cast<uint64_t>(value)); -} -inline void WireFormatLite::WriteFloatNoTag(float value, - io::CodedOutputStream* output) { - output->WriteLittleEndian32(EncodeFloat(value)); -} -inline void WireFormatLite::WriteDoubleNoTag(double value, - io::CodedOutputStream* output) { - output->WriteLittleEndian64(EncodeDouble(value)); -} -inline void WireFormatLite::WriteBoolNoTag(bool value, - io::CodedOutputStream* output) { - output->WriteVarint32(value ? 1 : 0); -} -inline void WireFormatLite::WriteEnumNoTag(int value, - io::CodedOutputStream* output) { - output->WriteVarint32SignExtended(value); -} - -// See comment on ReadGroupNoVirtual to understand the need for this template -// parameter name. -template <typename MessageType_WorkAroundCppLookupDefect> -inline void WireFormatLite::WriteGroupNoVirtual( - int field_number, const MessageType_WorkAroundCppLookupDefect& value, - io::CodedOutputStream* output) { - WriteTag(field_number, WIRETYPE_START_GROUP, output); - value.MessageType_WorkAroundCppLookupDefect::SerializeWithCachedSizes(output); - WriteTag(field_number, WIRETYPE_END_GROUP, output); -} -template <typename MessageType_WorkAroundCppLookupDefect> -inline void WireFormatLite::WriteMessageNoVirtual( - int field_number, const MessageType_WorkAroundCppLookupDefect& value, - io::CodedOutputStream* output) { - WriteTag(field_number, WIRETYPE_LENGTH_DELIMITED, output); - output->WriteVarint32( - value.MessageType_WorkAroundCppLookupDefect::GetCachedSize()); - value.MessageType_WorkAroundCppLookupDefect::SerializeWithCachedSizes(output); -} - -// =================================================================== - -inline uint8_t* WireFormatLite::WriteTagToArray(int field_number, WireType type, - uint8_t* target) { - return io::CodedOutputStream::WriteTagToArray(MakeTag(field_number, type), - target); -} - -inline uint8_t* WireFormatLite::WriteInt32NoTagToArray(int32_t value, - uint8_t* target) { - return io::CodedOutputStream::WriteVarint32SignExtendedToArray(value, target); -} -inline uint8_t* WireFormatLite::WriteInt64NoTagToArray(int64_t value, - uint8_t* target) { - return io::CodedOutputStream::WriteVarint64ToArray( - static_cast<uint64_t>(value), target); -} -inline uint8_t* WireFormatLite::WriteUInt32NoTagToArray(uint32_t value, - uint8_t* target) { - return io::CodedOutputStream::WriteVarint32ToArray(value, target); -} -inline uint8_t* WireFormatLite::WriteUInt64NoTagToArray(uint64_t value, - uint8_t* target) { - return io::CodedOutputStream::WriteVarint64ToArray(value, target); -} -inline uint8_t* WireFormatLite::WriteSInt32NoTagToArray(int32_t value, - uint8_t* target) { - return io::CodedOutputStream::WriteVarint32ToArray(ZigZagEncode32(value), - target); -} -inline uint8_t* WireFormatLite::WriteSInt64NoTagToArray(int64_t value, - uint8_t* target) { - return io::CodedOutputStream::WriteVarint64ToArray(ZigZagEncode64(value), - target); -} -inline uint8_t* WireFormatLite::WriteFixed32NoTagToArray(uint32_t value, - uint8_t* target) { - return io::CodedOutputStream::WriteLittleEndian32ToArray(value, target); -} -inline uint8_t* WireFormatLite::WriteFixed64NoTagToArray(uint64_t value, - uint8_t* target) { - return io::CodedOutputStream::WriteLittleEndian64ToArray(value, target); -} -inline uint8_t* WireFormatLite::WriteSFixed32NoTagToArray(int32_t value, - uint8_t* target) { - return io::CodedOutputStream::WriteLittleEndian32ToArray( - static_cast<uint32_t>(value), target); -} -inline uint8_t* WireFormatLite::WriteSFixed64NoTagToArray(int64_t value, - uint8_t* target) { - return io::CodedOutputStream::WriteLittleEndian64ToArray( - static_cast<uint64_t>(value), target); -} -inline uint8_t* WireFormatLite::WriteFloatNoTagToArray(float value, - uint8_t* target) { - return io::CodedOutputStream::WriteLittleEndian32ToArray(EncodeFloat(value), - target); -} -inline uint8_t* WireFormatLite::WriteDoubleNoTagToArray(double value, - uint8_t* target) { - return io::CodedOutputStream::WriteLittleEndian64ToArray(EncodeDouble(value), - target); -} -inline uint8_t* WireFormatLite::WriteBoolNoTagToArray(bool value, - uint8_t* target) { - return io::CodedOutputStream::WriteVarint32ToArray(value ? 1 : 0, target); -} -inline uint8_t* WireFormatLite::WriteEnumNoTagToArray(int value, - uint8_t* target) { - return io::CodedOutputStream::WriteVarint32SignExtendedToArray(value, target); -} - -template <typename T> -inline uint8_t* WireFormatLite::WritePrimitiveNoTagToArray( - const RepeatedField<T>& value, uint8_t* (*Writer)(T, uint8_t*), - uint8_t* target) { - const int n = value.size(); - GOOGLE_DCHECK_GT(n, 0); - - const T* ii = value.data(); - int i = 0; - do { - target = Writer(ii[i], target); - } while (++i < n); - - return target; -} - -template <typename T> -inline uint8_t* WireFormatLite::WriteFixedNoTagToArray( - const RepeatedField<T>& value, uint8_t* (*Writer)(T, uint8_t*), - uint8_t* target) { -#if defined(PROTOBUF_LITTLE_ENDIAN) - (void)Writer; - - const int n = value.size(); - GOOGLE_DCHECK_GT(n, 0); - - const T* ii = value.data(); - const int bytes = n * static_cast<int>(sizeof(ii[0])); - memcpy(target, ii, static_cast<size_t>(bytes)); - return target + bytes; -#else - return WritePrimitiveNoTagToArray(value, Writer, target); -#endif -} - -inline uint8_t* WireFormatLite::WriteInt32NoTagToArray( - const RepeatedField<int32_t>& value, uint8_t* target) { - return WritePrimitiveNoTagToArray(value, WriteInt32NoTagToArray, target); -} -inline uint8_t* WireFormatLite::WriteInt64NoTagToArray( - const RepeatedField<int64_t>& value, uint8_t* target) { - return WritePrimitiveNoTagToArray(value, WriteInt64NoTagToArray, target); -} -inline uint8_t* WireFormatLite::WriteUInt32NoTagToArray( - const RepeatedField<uint32_t>& value, uint8_t* target) { - return WritePrimitiveNoTagToArray(value, WriteUInt32NoTagToArray, target); -} -inline uint8_t* WireFormatLite::WriteUInt64NoTagToArray( - const RepeatedField<uint64_t>& value, uint8_t* target) { - return WritePrimitiveNoTagToArray(value, WriteUInt64NoTagToArray, target); -} -inline uint8_t* WireFormatLite::WriteSInt32NoTagToArray( - const RepeatedField<int32_t>& value, uint8_t* target) { - return WritePrimitiveNoTagToArray(value, WriteSInt32NoTagToArray, target); -} -inline uint8_t* WireFormatLite::WriteSInt64NoTagToArray( - const RepeatedField<int64_t>& value, uint8_t* target) { - return WritePrimitiveNoTagToArray(value, WriteSInt64NoTagToArray, target); -} -inline uint8_t* WireFormatLite::WriteFixed32NoTagToArray( - const RepeatedField<uint32_t>& value, uint8_t* target) { - return WriteFixedNoTagToArray(value, WriteFixed32NoTagToArray, target); -} -inline uint8_t* WireFormatLite::WriteFixed64NoTagToArray( - const RepeatedField<uint64_t>& value, uint8_t* target) { - return WriteFixedNoTagToArray(value, WriteFixed64NoTagToArray, target); -} -inline uint8_t* WireFormatLite::WriteSFixed32NoTagToArray( - const RepeatedField<int32_t>& value, uint8_t* target) { - return WriteFixedNoTagToArray(value, WriteSFixed32NoTagToArray, target); -} -inline uint8_t* WireFormatLite::WriteSFixed64NoTagToArray( - const RepeatedField<int64_t>& value, uint8_t* target) { - return WriteFixedNoTagToArray(value, WriteSFixed64NoTagToArray, target); -} -inline uint8_t* WireFormatLite::WriteFloatNoTagToArray( - const RepeatedField<float>& value, uint8_t* target) { - return WriteFixedNoTagToArray(value, WriteFloatNoTagToArray, target); -} -inline uint8_t* WireFormatLite::WriteDoubleNoTagToArray( - const RepeatedField<double>& value, uint8_t* target) { - return WriteFixedNoTagToArray(value, WriteDoubleNoTagToArray, target); -} -inline uint8_t* WireFormatLite::WriteBoolNoTagToArray( - const RepeatedField<bool>& value, uint8_t* target) { - return WritePrimitiveNoTagToArray(value, WriteBoolNoTagToArray, target); -} -inline uint8_t* WireFormatLite::WriteEnumNoTagToArray( - const RepeatedField<int>& value, uint8_t* target) { - return WritePrimitiveNoTagToArray(value, WriteEnumNoTagToArray, target); -} - -inline uint8_t* WireFormatLite::WriteInt32ToArray(int field_number, - int32_t value, - uint8_t* target) { - target = WriteTagToArray(field_number, WIRETYPE_VARINT, target); - return WriteInt32NoTagToArray(value, target); -} -inline uint8_t* WireFormatLite::WriteInt64ToArray(int field_number, - int64_t value, - uint8_t* target) { - target = WriteTagToArray(field_number, WIRETYPE_VARINT, target); - return WriteInt64NoTagToArray(value, target); -} -inline uint8_t* WireFormatLite::WriteUInt32ToArray(int field_number, - uint32_t value, - uint8_t* target) { - target = WriteTagToArray(field_number, WIRETYPE_VARINT, target); - return WriteUInt32NoTagToArray(value, target); -} -inline uint8_t* WireFormatLite::WriteUInt64ToArray(int field_number, - uint64_t value, - uint8_t* target) { - target = WriteTagToArray(field_number, WIRETYPE_VARINT, target); - return WriteUInt64NoTagToArray(value, target); -} -inline uint8_t* WireFormatLite::WriteSInt32ToArray(int field_number, - int32_t value, - uint8_t* target) { - target = WriteTagToArray(field_number, WIRETYPE_VARINT, target); - return WriteSInt32NoTagToArray(value, target); -} -inline uint8_t* WireFormatLite::WriteSInt64ToArray(int field_number, - int64_t value, - uint8_t* target) { - target = WriteTagToArray(field_number, WIRETYPE_VARINT, target); - return WriteSInt64NoTagToArray(value, target); -} -inline uint8_t* WireFormatLite::WriteFixed32ToArray(int field_number, - uint32_t value, - uint8_t* target) { - target = WriteTagToArray(field_number, WIRETYPE_FIXED32, target); - return WriteFixed32NoTagToArray(value, target); -} -inline uint8_t* WireFormatLite::WriteFixed64ToArray(int field_number, - uint64_t value, - uint8_t* target) { - target = WriteTagToArray(field_number, WIRETYPE_FIXED64, target); - return WriteFixed64NoTagToArray(value, target); -} -inline uint8_t* WireFormatLite::WriteSFixed32ToArray(int field_number, - int32_t value, - uint8_t* target) { - target = WriteTagToArray(field_number, WIRETYPE_FIXED32, target); - return WriteSFixed32NoTagToArray(value, target); -} -inline uint8_t* WireFormatLite::WriteSFixed64ToArray(int field_number, - int64_t value, - uint8_t* target) { - target = WriteTagToArray(field_number, WIRETYPE_FIXED64, target); - return WriteSFixed64NoTagToArray(value, target); -} -inline uint8_t* WireFormatLite::WriteFloatToArray(int field_number, float value, - uint8_t* target) { - target = WriteTagToArray(field_number, WIRETYPE_FIXED32, target); - return WriteFloatNoTagToArray(value, target); -} -inline uint8_t* WireFormatLite::WriteDoubleToArray(int field_number, - double value, - uint8_t* target) { - target = WriteTagToArray(field_number, WIRETYPE_FIXED64, target); - return WriteDoubleNoTagToArray(value, target); -} -inline uint8_t* WireFormatLite::WriteBoolToArray(int field_number, bool value, - uint8_t* target) { - target = WriteTagToArray(field_number, WIRETYPE_VARINT, target); - return WriteBoolNoTagToArray(value, target); -} -inline uint8_t* WireFormatLite::WriteEnumToArray(int field_number, int value, - uint8_t* target) { - target = WriteTagToArray(field_number, WIRETYPE_VARINT, target); - return WriteEnumNoTagToArray(value, target); -} - -template <typename T> -inline uint8_t* WireFormatLite::WritePrimitiveToArray( - int field_number, const RepeatedField<T>& value, - uint8_t* (*Writer)(int, T, uint8_t*), uint8_t* target) { - const int n = value.size(); - if (n == 0) { - return target; - } - - const T* ii = value.data(); - int i = 0; - do { - target = Writer(field_number, ii[i], target); - } while (++i < n); - - return target; -} - -inline uint8_t* WireFormatLite::WriteInt32ToArray( - int field_number, const RepeatedField<int32_t>& value, uint8_t* target) { - return WritePrimitiveToArray(field_number, value, WriteInt32ToArray, target); -} -inline uint8_t* WireFormatLite::WriteInt64ToArray( - int field_number, const RepeatedField<int64_t>& value, uint8_t* target) { - return WritePrimitiveToArray(field_number, value, WriteInt64ToArray, target); -} -inline uint8_t* WireFormatLite::WriteUInt32ToArray( - int field_number, const RepeatedField<uint32_t>& value, uint8_t* target) { - return WritePrimitiveToArray(field_number, value, WriteUInt32ToArray, target); -} -inline uint8_t* WireFormatLite::WriteUInt64ToArray( - int field_number, const RepeatedField<uint64_t>& value, uint8_t* target) { - return WritePrimitiveToArray(field_number, value, WriteUInt64ToArray, target); -} -inline uint8_t* WireFormatLite::WriteSInt32ToArray( - int field_number, const RepeatedField<int32_t>& value, uint8_t* target) { - return WritePrimitiveToArray(field_number, value, WriteSInt32ToArray, target); -} -inline uint8_t* WireFormatLite::WriteSInt64ToArray( - int field_number, const RepeatedField<int64_t>& value, uint8_t* target) { - return WritePrimitiveToArray(field_number, value, WriteSInt64ToArray, target); -} -inline uint8_t* WireFormatLite::WriteFixed32ToArray( - int field_number, const RepeatedField<uint32_t>& value, uint8_t* target) { - return WritePrimitiveToArray(field_number, value, WriteFixed32ToArray, - target); -} -inline uint8_t* WireFormatLite::WriteFixed64ToArray( - int field_number, const RepeatedField<uint64_t>& value, uint8_t* target) { - return WritePrimitiveToArray(field_number, value, WriteFixed64ToArray, - target); -} -inline uint8_t* WireFormatLite::WriteSFixed32ToArray( - int field_number, const RepeatedField<int32_t>& value, uint8_t* target) { - return WritePrimitiveToArray(field_number, value, WriteSFixed32ToArray, - target); -} -inline uint8_t* WireFormatLite::WriteSFixed64ToArray( - int field_number, const RepeatedField<int64_t>& value, uint8_t* target) { - return WritePrimitiveToArray(field_number, value, WriteSFixed64ToArray, - target); -} -inline uint8_t* WireFormatLite::WriteFloatToArray( - int field_number, const RepeatedField<float>& value, uint8_t* target) { - return WritePrimitiveToArray(field_number, value, WriteFloatToArray, target); -} -inline uint8_t* WireFormatLite::WriteDoubleToArray( - int field_number, const RepeatedField<double>& value, uint8_t* target) { - return WritePrimitiveToArray(field_number, value, WriteDoubleToArray, target); -} -inline uint8_t* WireFormatLite::WriteBoolToArray( - int field_number, const RepeatedField<bool>& value, uint8_t* target) { - return WritePrimitiveToArray(field_number, value, WriteBoolToArray, target); -} -inline uint8_t* WireFormatLite::WriteEnumToArray( - int field_number, const RepeatedField<int>& value, uint8_t* target) { - return WritePrimitiveToArray(field_number, value, WriteEnumToArray, target); -} -inline uint8_t* WireFormatLite::WriteStringToArray(int field_number, - const std::string& value, - uint8_t* target) { - // String is for UTF-8 text only - // WARNING: In wire_format.cc, both strings and bytes are handled by - // WriteString() to avoid code duplication. If the implementations become - // different, you will need to update that usage. - target = WriteTagToArray(field_number, WIRETYPE_LENGTH_DELIMITED, target); - return io::CodedOutputStream::WriteStringWithSizeToArray(value, target); -} -inline uint8_t* WireFormatLite::WriteBytesToArray(int field_number, - const std::string& value, - uint8_t* target) { - target = WriteTagToArray(field_number, WIRETYPE_LENGTH_DELIMITED, target); - return io::CodedOutputStream::WriteStringWithSizeToArray(value, target); -} - - -// See comment on ReadGroupNoVirtual to understand the need for this template -// parameter name. -template <typename MessageType_WorkAroundCppLookupDefect> -inline uint8_t* WireFormatLite::InternalWriteGroupNoVirtualToArray( - int field_number, const MessageType_WorkAroundCppLookupDefect& value, - uint8_t* target) { - target = WriteTagToArray(field_number, WIRETYPE_START_GROUP, target); - target = value.MessageType_WorkAroundCppLookupDefect:: - SerializeWithCachedSizesToArray(target); - return WriteTagToArray(field_number, WIRETYPE_END_GROUP, target); -} -template <typename MessageType_WorkAroundCppLookupDefect> -inline uint8_t* WireFormatLite::InternalWriteMessageNoVirtualToArray( - int field_number, const MessageType_WorkAroundCppLookupDefect& value, - uint8_t* target) { - target = WriteTagToArray(field_number, WIRETYPE_LENGTH_DELIMITED, target); - target = io::CodedOutputStream::WriteVarint32ToArray( - static_cast<uint32_t>( - value.MessageType_WorkAroundCppLookupDefect::GetCachedSize()), - target); - return value - .MessageType_WorkAroundCppLookupDefect::SerializeWithCachedSizesToArray( - target); -} - -// =================================================================== - -inline size_t WireFormatLite::Int32Size(int32_t value) { - return io::CodedOutputStream::VarintSize32SignExtended(value); -} -inline size_t WireFormatLite::Int64Size(int64_t value) { - return io::CodedOutputStream::VarintSize64(static_cast<uint64_t>(value)); -} -inline size_t WireFormatLite::UInt32Size(uint32_t value) { - return io::CodedOutputStream::VarintSize32(value); -} -inline size_t WireFormatLite::UInt64Size(uint64_t value) { - return io::CodedOutputStream::VarintSize64(value); -} -inline size_t WireFormatLite::SInt32Size(int32_t value) { - return io::CodedOutputStream::VarintSize32(ZigZagEncode32(value)); -} -inline size_t WireFormatLite::SInt64Size(int64_t value) { - return io::CodedOutputStream::VarintSize64(ZigZagEncode64(value)); -} -inline size_t WireFormatLite::EnumSize(int value) { - return io::CodedOutputStream::VarintSize32SignExtended(value); -} -inline size_t WireFormatLite::Int32SizePlusOne(int32_t value) { - return io::CodedOutputStream::VarintSize32SignExtendedPlusOne(value); -} -inline size_t WireFormatLite::Int64SizePlusOne(int64_t value) { - return io::CodedOutputStream::VarintSize64PlusOne( - static_cast<uint64_t>(value)); -} -inline size_t WireFormatLite::UInt32SizePlusOne(uint32_t value) { - return io::CodedOutputStream::VarintSize32PlusOne(value); -} -inline size_t WireFormatLite::UInt64SizePlusOne(uint64_t value) { - return io::CodedOutputStream::VarintSize64PlusOne(value); -} -inline size_t WireFormatLite::SInt32SizePlusOne(int32_t value) { - return io::CodedOutputStream::VarintSize32PlusOne(ZigZagEncode32(value)); -} -inline size_t WireFormatLite::SInt64SizePlusOne(int64_t value) { - return io::CodedOutputStream::VarintSize64PlusOne(ZigZagEncode64(value)); -} -inline size_t WireFormatLite::EnumSizePlusOne(int value) { - return io::CodedOutputStream::VarintSize32SignExtendedPlusOne(value); -} - -inline size_t WireFormatLite::StringSize(const std::string& value) { - return LengthDelimitedSize(value.size()); -} -inline size_t WireFormatLite::BytesSize(const std::string& value) { - return LengthDelimitedSize(value.size()); -} - - -template <typename MessageType> -inline size_t WireFormatLite::GroupSize(const MessageType& value) { - return value.ByteSizeLong(); -} -template <typename MessageType> -inline size_t WireFormatLite::MessageSize(const MessageType& value) { - return LengthDelimitedSize(value.ByteSizeLong()); -} - -// See comment on ReadGroupNoVirtual to understand the need for this template -// parameter name. -template <typename MessageType_WorkAroundCppLookupDefect> -inline size_t WireFormatLite::GroupSizeNoVirtual( - const MessageType_WorkAroundCppLookupDefect& value) { - return value.MessageType_WorkAroundCppLookupDefect::ByteSizeLong(); -} -template <typename MessageType_WorkAroundCppLookupDefect> -inline size_t WireFormatLite::MessageSizeNoVirtual( - const MessageType_WorkAroundCppLookupDefect& value) { - return LengthDelimitedSize( - value.MessageType_WorkAroundCppLookupDefect::ByteSizeLong()); -} - -inline size_t WireFormatLite::LengthDelimitedSize(size_t length) { - // The static_cast here prevents an error in certain compiler configurations - // but is not technically correct--if length is too large to fit in a uint32_t - // then it will be silently truncated. We will need to fix this if we ever - // decide to start supporting serialized messages greater than 2 GiB in size. - return length + - io::CodedOutputStream::VarintSize32(static_cast<uint32_t>(length)); -} - -template <typename MS> -bool ParseMessageSetItemImpl(io::CodedInputStream* input, MS ms) { - // This method parses a group which should contain two fields: - // required int32 type_id = 2; - // required data message = 3; - - uint32_t last_type_id = 0; - - // If we see message data before the type_id, we'll append it to this so - // we can parse it later. - std::string message_data; - - while (true) { - const uint32_t tag = input->ReadTagNoLastTag(); - if (tag == 0) return false; - - switch (tag) { - case WireFormatLite::kMessageSetTypeIdTag: { - uint32_t type_id; - if (!input->ReadVarint32(&type_id)) return false; - last_type_id = type_id; - - if (!message_data.empty()) { - // We saw some message data before the type_id. Have to parse it - // now. - io::CodedInputStream sub_input( - reinterpret_cast<const uint8_t*>(message_data.data()), - static_cast<int>(message_data.size())); - sub_input.SetRecursionLimit(input->RecursionBudget()); - if (!ms.ParseField(last_type_id, &sub_input)) { - return false; - } - message_data.clear(); - } - - break; - } - - case WireFormatLite::kMessageSetMessageTag: { - if (last_type_id == 0) { - // We haven't seen a type_id yet. Append this data to message_data. - uint32_t length; - if (!input->ReadVarint32(&length)) return false; - if (static_cast<int32_t>(length) < 0) return false; - uint32_t size = static_cast<uint32_t>( - length + io::CodedOutputStream::VarintSize32(length)); - message_data.resize(size); - auto ptr = reinterpret_cast<uint8_t*>(&message_data[0]); - ptr = io::CodedOutputStream::WriteVarint32ToArray(length, ptr); - if (!input->ReadRaw(ptr, length)) return false; - } else { - // Already saw type_id, so we can parse this directly. - if (!ms.ParseField(last_type_id, input)) { - return false; - } - } - - break; - } - - case WireFormatLite::kMessageSetItemEndTag: { - return true; - } - - default: { - if (!ms.SkipField(tag, input)) return false; - } - } - } -} - -} // namespace internal -} // namespace protobuf -} // namespace google - -#include <google/protobuf/port_undef.inc> - -#endif // GOOGLE_PROTOBUF_WIRE_FORMAT_LITE_H__ diff --git a/include/google/protobuf/wrappers.pb.h b/include/google/protobuf/wrappers.pb.h deleted file mode 100644 index f629e5e8e2..0000000000 --- a/include/google/protobuf/wrappers.pb.h +++ /dev/null @@ -1,1741 +0,0 @@ -// Generated by the protocol buffer compiler. DO NOT EDIT! -// source: google/protobuf/wrappers.proto - -#ifndef GOOGLE_PROTOBUF_INCLUDED_google_2fprotobuf_2fwrappers_2eproto -#define GOOGLE_PROTOBUF_INCLUDED_google_2fprotobuf_2fwrappers_2eproto - -#include <limits> -#include <string> - -#include <google/protobuf/port_def.inc> -#if PROTOBUF_VERSION < 3021000 -#error This file was generated by a newer version of protoc which is -#error incompatible with your Protocol Buffer headers. Please update -#error your headers. -#endif -#if 3021004 < PROTOBUF_MIN_PROTOC_VERSION -#error This file was generated by an older version of protoc which is -#error incompatible with your Protocol Buffer headers. Please -#error regenerate this file with a newer version of protoc. -#endif - -#include <google/protobuf/port_undef.inc> -#include <google/protobuf/io/coded_stream.h> -#include <google/protobuf/arena.h> -#include <google/protobuf/arenastring.h> -#include <google/protobuf/generated_message_util.h> -#include <google/protobuf/metadata_lite.h> -#include <google/protobuf/generated_message_reflection.h> -#include <google/protobuf/message.h> -#include <google/protobuf/repeated_field.h> // IWYU pragma: export -#include <google/protobuf/extension_set.h> // IWYU pragma: export -#include <google/protobuf/unknown_field_set.h> -// @@protoc_insertion_point(includes) -#include <google/protobuf/port_def.inc> -#define PROTOBUF_INTERNAL_EXPORT_google_2fprotobuf_2fwrappers_2eproto PROTOBUF_EXPORT -PROTOBUF_NAMESPACE_OPEN -namespace internal { -class AnyMetadata; -} // namespace internal -PROTOBUF_NAMESPACE_CLOSE - -// Internal implementation detail -- do not use these members. -struct PROTOBUF_EXPORT TableStruct_google_2fprotobuf_2fwrappers_2eproto { - static const uint32_t offsets[]; -}; -PROTOBUF_EXPORT extern const ::PROTOBUF_NAMESPACE_ID::internal::DescriptorTable descriptor_table_google_2fprotobuf_2fwrappers_2eproto; -PROTOBUF_NAMESPACE_OPEN -class BoolValue; -struct BoolValueDefaultTypeInternal; -PROTOBUF_EXPORT extern BoolValueDefaultTypeInternal _BoolValue_default_instance_; -class BytesValue; -struct BytesValueDefaultTypeInternal; -PROTOBUF_EXPORT extern BytesValueDefaultTypeInternal _BytesValue_default_instance_; -class DoubleValue; -struct DoubleValueDefaultTypeInternal; -PROTOBUF_EXPORT extern DoubleValueDefaultTypeInternal _DoubleValue_default_instance_; -class FloatValue; -struct FloatValueDefaultTypeInternal; -PROTOBUF_EXPORT extern FloatValueDefaultTypeInternal _FloatValue_default_instance_; -class Int32Value; -struct Int32ValueDefaultTypeInternal; -PROTOBUF_EXPORT extern Int32ValueDefaultTypeInternal _Int32Value_default_instance_; -class Int64Value; -struct Int64ValueDefaultTypeInternal; -PROTOBUF_EXPORT extern Int64ValueDefaultTypeInternal _Int64Value_default_instance_; -class StringValue; -struct StringValueDefaultTypeInternal; -PROTOBUF_EXPORT extern StringValueDefaultTypeInternal _StringValue_default_instance_; -class UInt32Value; -struct UInt32ValueDefaultTypeInternal; -PROTOBUF_EXPORT extern UInt32ValueDefaultTypeInternal _UInt32Value_default_instance_; -class UInt64Value; -struct UInt64ValueDefaultTypeInternal; -PROTOBUF_EXPORT extern UInt64ValueDefaultTypeInternal _UInt64Value_default_instance_; -PROTOBUF_NAMESPACE_CLOSE -PROTOBUF_NAMESPACE_OPEN -template<> PROTOBUF_EXPORT ::PROTOBUF_NAMESPACE_ID::BoolValue* Arena::CreateMaybeMessage<::PROTOBUF_NAMESPACE_ID::BoolValue>(Arena*); -template<> PROTOBUF_EXPORT ::PROTOBUF_NAMESPACE_ID::BytesValue* Arena::CreateMaybeMessage<::PROTOBUF_NAMESPACE_ID::BytesValue>(Arena*); -template<> PROTOBUF_EXPORT ::PROTOBUF_NAMESPACE_ID::DoubleValue* Arena::CreateMaybeMessage<::PROTOBUF_NAMESPACE_ID::DoubleValue>(Arena*); -template<> PROTOBUF_EXPORT ::PROTOBUF_NAMESPACE_ID::FloatValue* Arena::CreateMaybeMessage<::PROTOBUF_NAMESPACE_ID::FloatValue>(Arena*); -template<> PROTOBUF_EXPORT ::PROTOBUF_NAMESPACE_ID::Int32Value* Arena::CreateMaybeMessage<::PROTOBUF_NAMESPACE_ID::Int32Value>(Arena*); -template<> PROTOBUF_EXPORT ::PROTOBUF_NAMESPACE_ID::Int64Value* Arena::CreateMaybeMessage<::PROTOBUF_NAMESPACE_ID::Int64Value>(Arena*); -template<> PROTOBUF_EXPORT ::PROTOBUF_NAMESPACE_ID::StringValue* Arena::CreateMaybeMessage<::PROTOBUF_NAMESPACE_ID::StringValue>(Arena*); -template<> PROTOBUF_EXPORT ::PROTOBUF_NAMESPACE_ID::UInt32Value* Arena::CreateMaybeMessage<::PROTOBUF_NAMESPACE_ID::UInt32Value>(Arena*); -template<> PROTOBUF_EXPORT ::PROTOBUF_NAMESPACE_ID::UInt64Value* Arena::CreateMaybeMessage<::PROTOBUF_NAMESPACE_ID::UInt64Value>(Arena*); -PROTOBUF_NAMESPACE_CLOSE -PROTOBUF_NAMESPACE_OPEN - -// =================================================================== - -class PROTOBUF_EXPORT DoubleValue final : - public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:google.protobuf.DoubleValue) */ { - public: - inline DoubleValue() : DoubleValue(nullptr) {} - ~DoubleValue() override; - explicit PROTOBUF_CONSTEXPR DoubleValue(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized); - - DoubleValue(const DoubleValue& from); - DoubleValue(DoubleValue&& from) noexcept - : DoubleValue() { - *this = ::std::move(from); - } - - inline DoubleValue& operator=(const DoubleValue& from) { - CopyFrom(from); - return *this; - } - inline DoubleValue& operator=(DoubleValue&& from) noexcept { - if (this == &from) return *this; - if (GetOwningArena() == from.GetOwningArena() - #ifdef PROTOBUF_FORCE_COPY_IN_MOVE - && GetOwningArena() != nullptr - #endif // !PROTOBUF_FORCE_COPY_IN_MOVE - ) { - InternalSwap(&from); - } else { - CopyFrom(from); - } - return *this; - } - - static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() { - return GetDescriptor(); - } - static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() { - return default_instance().GetMetadata().descriptor; - } - static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() { - return default_instance().GetMetadata().reflection; - } - static const DoubleValue& default_instance() { - return *internal_default_instance(); - } - static inline const DoubleValue* internal_default_instance() { - return reinterpret_cast<const DoubleValue*>( - &_DoubleValue_default_instance_); - } - static constexpr int kIndexInFileMessages = - 0; - - friend void swap(DoubleValue& a, DoubleValue& b) { - a.Swap(&b); - } - inline void Swap(DoubleValue* other) { - if (other == this) return; - #ifdef PROTOBUF_FORCE_COPY_IN_SWAP - if (GetOwningArena() != nullptr && - GetOwningArena() == other->GetOwningArena()) { - #else // PROTOBUF_FORCE_COPY_IN_SWAP - if (GetOwningArena() == other->GetOwningArena()) { - #endif // !PROTOBUF_FORCE_COPY_IN_SWAP - InternalSwap(other); - } else { - ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other); - } - } - void UnsafeArenaSwap(DoubleValue* other) { - if (other == this) return; - GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena()); - InternalSwap(other); - } - - // implements Message ---------------------------------------------- - - DoubleValue* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final { - return CreateMaybeMessage<DoubleValue>(arena); - } - using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom; - void CopyFrom(const DoubleValue& from); - using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom; - void MergeFrom( const DoubleValue& from) { - DoubleValue::MergeImpl(*this, from); - } - private: - static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message& to_msg, const ::PROTOBUF_NAMESPACE_ID::Message& from_msg); - public: - PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final; - bool IsInitialized() const final; - - size_t ByteSizeLong() const final; - const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final; - uint8_t* _InternalSerialize( - uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final; - int GetCachedSize() const final { return _impl_._cached_size_.Get(); } - - private: - void SharedCtor(::PROTOBUF_NAMESPACE_ID::Arena* arena, bool is_message_owned); - void SharedDtor(); - void SetCachedSize(int size) const final; - void InternalSwap(DoubleValue* other); - - private: - friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata; - static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() { - return "google.protobuf.DoubleValue"; - } - protected: - explicit DoubleValue(::PROTOBUF_NAMESPACE_ID::Arena* arena, - bool is_message_owned = false); - public: - - static const ClassData _class_data_; - const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final; - - ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final; - - // nested types ---------------------------------------------------- - - // accessors ------------------------------------------------------- - - enum : int { - kValueFieldNumber = 1, - }; - // double value = 1; - void clear_value(); - double value() const; - void set_value(double value); - private: - double _internal_value() const; - void _internal_set_value(double value); - public: - - // @@protoc_insertion_point(class_scope:google.protobuf.DoubleValue) - private: - class _Internal; - - template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper; - typedef void InternalArenaConstructable_; - typedef void DestructorSkippable_; - struct Impl_ { - double value_; - mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_; - }; - union { Impl_ _impl_; }; - friend struct ::TableStruct_google_2fprotobuf_2fwrappers_2eproto; -}; -// ------------------------------------------------------------------- - -class PROTOBUF_EXPORT FloatValue final : - public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:google.protobuf.FloatValue) */ { - public: - inline FloatValue() : FloatValue(nullptr) {} - ~FloatValue() override; - explicit PROTOBUF_CONSTEXPR FloatValue(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized); - - FloatValue(const FloatValue& from); - FloatValue(FloatValue&& from) noexcept - : FloatValue() { - *this = ::std::move(from); - } - - inline FloatValue& operator=(const FloatValue& from) { - CopyFrom(from); - return *this; - } - inline FloatValue& operator=(FloatValue&& from) noexcept { - if (this == &from) return *this; - if (GetOwningArena() == from.GetOwningArena() - #ifdef PROTOBUF_FORCE_COPY_IN_MOVE - && GetOwningArena() != nullptr - #endif // !PROTOBUF_FORCE_COPY_IN_MOVE - ) { - InternalSwap(&from); - } else { - CopyFrom(from); - } - return *this; - } - - static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() { - return GetDescriptor(); - } - static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() { - return default_instance().GetMetadata().descriptor; - } - static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() { - return default_instance().GetMetadata().reflection; - } - static const FloatValue& default_instance() { - return *internal_default_instance(); - } - static inline const FloatValue* internal_default_instance() { - return reinterpret_cast<const FloatValue*>( - &_FloatValue_default_instance_); - } - static constexpr int kIndexInFileMessages = - 1; - - friend void swap(FloatValue& a, FloatValue& b) { - a.Swap(&b); - } - inline void Swap(FloatValue* other) { - if (other == this) return; - #ifdef PROTOBUF_FORCE_COPY_IN_SWAP - if (GetOwningArena() != nullptr && - GetOwningArena() == other->GetOwningArena()) { - #else // PROTOBUF_FORCE_COPY_IN_SWAP - if (GetOwningArena() == other->GetOwningArena()) { - #endif // !PROTOBUF_FORCE_COPY_IN_SWAP - InternalSwap(other); - } else { - ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other); - } - } - void UnsafeArenaSwap(FloatValue* other) { - if (other == this) return; - GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena()); - InternalSwap(other); - } - - // implements Message ---------------------------------------------- - - FloatValue* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final { - return CreateMaybeMessage<FloatValue>(arena); - } - using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom; - void CopyFrom(const FloatValue& from); - using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom; - void MergeFrom( const FloatValue& from) { - FloatValue::MergeImpl(*this, from); - } - private: - static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message& to_msg, const ::PROTOBUF_NAMESPACE_ID::Message& from_msg); - public: - PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final; - bool IsInitialized() const final; - - size_t ByteSizeLong() const final; - const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final; - uint8_t* _InternalSerialize( - uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final; - int GetCachedSize() const final { return _impl_._cached_size_.Get(); } - - private: - void SharedCtor(::PROTOBUF_NAMESPACE_ID::Arena* arena, bool is_message_owned); - void SharedDtor(); - void SetCachedSize(int size) const final; - void InternalSwap(FloatValue* other); - - private: - friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata; - static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() { - return "google.protobuf.FloatValue"; - } - protected: - explicit FloatValue(::PROTOBUF_NAMESPACE_ID::Arena* arena, - bool is_message_owned = false); - public: - - static const ClassData _class_data_; - const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final; - - ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final; - - // nested types ---------------------------------------------------- - - // accessors ------------------------------------------------------- - - enum : int { - kValueFieldNumber = 1, - }; - // float value = 1; - void clear_value(); - float value() const; - void set_value(float value); - private: - float _internal_value() const; - void _internal_set_value(float value); - public: - - // @@protoc_insertion_point(class_scope:google.protobuf.FloatValue) - private: - class _Internal; - - template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper; - typedef void InternalArenaConstructable_; - typedef void DestructorSkippable_; - struct Impl_ { - float value_; - mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_; - }; - union { Impl_ _impl_; }; - friend struct ::TableStruct_google_2fprotobuf_2fwrappers_2eproto; -}; -// ------------------------------------------------------------------- - -class PROTOBUF_EXPORT Int64Value final : - public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:google.protobuf.Int64Value) */ { - public: - inline Int64Value() : Int64Value(nullptr) {} - ~Int64Value() override; - explicit PROTOBUF_CONSTEXPR Int64Value(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized); - - Int64Value(const Int64Value& from); - Int64Value(Int64Value&& from) noexcept - : Int64Value() { - *this = ::std::move(from); - } - - inline Int64Value& operator=(const Int64Value& from) { - CopyFrom(from); - return *this; - } - inline Int64Value& operator=(Int64Value&& from) noexcept { - if (this == &from) return *this; - if (GetOwningArena() == from.GetOwningArena() - #ifdef PROTOBUF_FORCE_COPY_IN_MOVE - && GetOwningArena() != nullptr - #endif // !PROTOBUF_FORCE_COPY_IN_MOVE - ) { - InternalSwap(&from); - } else { - CopyFrom(from); - } - return *this; - } - - static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() { - return GetDescriptor(); - } - static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() { - return default_instance().GetMetadata().descriptor; - } - static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() { - return default_instance().GetMetadata().reflection; - } - static const Int64Value& default_instance() { - return *internal_default_instance(); - } - static inline const Int64Value* internal_default_instance() { - return reinterpret_cast<const Int64Value*>( - &_Int64Value_default_instance_); - } - static constexpr int kIndexInFileMessages = - 2; - - friend void swap(Int64Value& a, Int64Value& b) { - a.Swap(&b); - } - inline void Swap(Int64Value* other) { - if (other == this) return; - #ifdef PROTOBUF_FORCE_COPY_IN_SWAP - if (GetOwningArena() != nullptr && - GetOwningArena() == other->GetOwningArena()) { - #else // PROTOBUF_FORCE_COPY_IN_SWAP - if (GetOwningArena() == other->GetOwningArena()) { - #endif // !PROTOBUF_FORCE_COPY_IN_SWAP - InternalSwap(other); - } else { - ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other); - } - } - void UnsafeArenaSwap(Int64Value* other) { - if (other == this) return; - GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena()); - InternalSwap(other); - } - - // implements Message ---------------------------------------------- - - Int64Value* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final { - return CreateMaybeMessage<Int64Value>(arena); - } - using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom; - void CopyFrom(const Int64Value& from); - using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom; - void MergeFrom( const Int64Value& from) { - Int64Value::MergeImpl(*this, from); - } - private: - static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message& to_msg, const ::PROTOBUF_NAMESPACE_ID::Message& from_msg); - public: - PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final; - bool IsInitialized() const final; - - size_t ByteSizeLong() const final; - const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final; - uint8_t* _InternalSerialize( - uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final; - int GetCachedSize() const final { return _impl_._cached_size_.Get(); } - - private: - void SharedCtor(::PROTOBUF_NAMESPACE_ID::Arena* arena, bool is_message_owned); - void SharedDtor(); - void SetCachedSize(int size) const final; - void InternalSwap(Int64Value* other); - - private: - friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata; - static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() { - return "google.protobuf.Int64Value"; - } - protected: - explicit Int64Value(::PROTOBUF_NAMESPACE_ID::Arena* arena, - bool is_message_owned = false); - public: - - static const ClassData _class_data_; - const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final; - - ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final; - - // nested types ---------------------------------------------------- - - // accessors ------------------------------------------------------- - - enum : int { - kValueFieldNumber = 1, - }; - // int64 value = 1; - void clear_value(); - int64_t value() const; - void set_value(int64_t value); - private: - int64_t _internal_value() const; - void _internal_set_value(int64_t value); - public: - - // @@protoc_insertion_point(class_scope:google.protobuf.Int64Value) - private: - class _Internal; - - template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper; - typedef void InternalArenaConstructable_; - typedef void DestructorSkippable_; - struct Impl_ { - int64_t value_; - mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_; - }; - union { Impl_ _impl_; }; - friend struct ::TableStruct_google_2fprotobuf_2fwrappers_2eproto; -}; -// ------------------------------------------------------------------- - -class PROTOBUF_EXPORT UInt64Value final : - public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:google.protobuf.UInt64Value) */ { - public: - inline UInt64Value() : UInt64Value(nullptr) {} - ~UInt64Value() override; - explicit PROTOBUF_CONSTEXPR UInt64Value(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized); - - UInt64Value(const UInt64Value& from); - UInt64Value(UInt64Value&& from) noexcept - : UInt64Value() { - *this = ::std::move(from); - } - - inline UInt64Value& operator=(const UInt64Value& from) { - CopyFrom(from); - return *this; - } - inline UInt64Value& operator=(UInt64Value&& from) noexcept { - if (this == &from) return *this; - if (GetOwningArena() == from.GetOwningArena() - #ifdef PROTOBUF_FORCE_COPY_IN_MOVE - && GetOwningArena() != nullptr - #endif // !PROTOBUF_FORCE_COPY_IN_MOVE - ) { - InternalSwap(&from); - } else { - CopyFrom(from); - } - return *this; - } - - static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() { - return GetDescriptor(); - } - static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() { - return default_instance().GetMetadata().descriptor; - } - static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() { - return default_instance().GetMetadata().reflection; - } - static const UInt64Value& default_instance() { - return *internal_default_instance(); - } - static inline const UInt64Value* internal_default_instance() { - return reinterpret_cast<const UInt64Value*>( - &_UInt64Value_default_instance_); - } - static constexpr int kIndexInFileMessages = - 3; - - friend void swap(UInt64Value& a, UInt64Value& b) { - a.Swap(&b); - } - inline void Swap(UInt64Value* other) { - if (other == this) return; - #ifdef PROTOBUF_FORCE_COPY_IN_SWAP - if (GetOwningArena() != nullptr && - GetOwningArena() == other->GetOwningArena()) { - #else // PROTOBUF_FORCE_COPY_IN_SWAP - if (GetOwningArena() == other->GetOwningArena()) { - #endif // !PROTOBUF_FORCE_COPY_IN_SWAP - InternalSwap(other); - } else { - ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other); - } - } - void UnsafeArenaSwap(UInt64Value* other) { - if (other == this) return; - GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena()); - InternalSwap(other); - } - - // implements Message ---------------------------------------------- - - UInt64Value* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final { - return CreateMaybeMessage<UInt64Value>(arena); - } - using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom; - void CopyFrom(const UInt64Value& from); - using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom; - void MergeFrom( const UInt64Value& from) { - UInt64Value::MergeImpl(*this, from); - } - private: - static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message& to_msg, const ::PROTOBUF_NAMESPACE_ID::Message& from_msg); - public: - PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final; - bool IsInitialized() const final; - - size_t ByteSizeLong() const final; - const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final; - uint8_t* _InternalSerialize( - uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final; - int GetCachedSize() const final { return _impl_._cached_size_.Get(); } - - private: - void SharedCtor(::PROTOBUF_NAMESPACE_ID::Arena* arena, bool is_message_owned); - void SharedDtor(); - void SetCachedSize(int size) const final; - void InternalSwap(UInt64Value* other); - - private: - friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata; - static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() { - return "google.protobuf.UInt64Value"; - } - protected: - explicit UInt64Value(::PROTOBUF_NAMESPACE_ID::Arena* arena, - bool is_message_owned = false); - public: - - static const ClassData _class_data_; - const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final; - - ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final; - - // nested types ---------------------------------------------------- - - // accessors ------------------------------------------------------- - - enum : int { - kValueFieldNumber = 1, - }; - // uint64 value = 1; - void clear_value(); - uint64_t value() const; - void set_value(uint64_t value); - private: - uint64_t _internal_value() const; - void _internal_set_value(uint64_t value); - public: - - // @@protoc_insertion_point(class_scope:google.protobuf.UInt64Value) - private: - class _Internal; - - template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper; - typedef void InternalArenaConstructable_; - typedef void DestructorSkippable_; - struct Impl_ { - uint64_t value_; - mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_; - }; - union { Impl_ _impl_; }; - friend struct ::TableStruct_google_2fprotobuf_2fwrappers_2eproto; -}; -// ------------------------------------------------------------------- - -class PROTOBUF_EXPORT Int32Value final : - public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:google.protobuf.Int32Value) */ { - public: - inline Int32Value() : Int32Value(nullptr) {} - ~Int32Value() override; - explicit PROTOBUF_CONSTEXPR Int32Value(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized); - - Int32Value(const Int32Value& from); - Int32Value(Int32Value&& from) noexcept - : Int32Value() { - *this = ::std::move(from); - } - - inline Int32Value& operator=(const Int32Value& from) { - CopyFrom(from); - return *this; - } - inline Int32Value& operator=(Int32Value&& from) noexcept { - if (this == &from) return *this; - if (GetOwningArena() == from.GetOwningArena() - #ifdef PROTOBUF_FORCE_COPY_IN_MOVE - && GetOwningArena() != nullptr - #endif // !PROTOBUF_FORCE_COPY_IN_MOVE - ) { - InternalSwap(&from); - } else { - CopyFrom(from); - } - return *this; - } - - static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() { - return GetDescriptor(); - } - static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() { - return default_instance().GetMetadata().descriptor; - } - static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() { - return default_instance().GetMetadata().reflection; - } - static const Int32Value& default_instance() { - return *internal_default_instance(); - } - static inline const Int32Value* internal_default_instance() { - return reinterpret_cast<const Int32Value*>( - &_Int32Value_default_instance_); - } - static constexpr int kIndexInFileMessages = - 4; - - friend void swap(Int32Value& a, Int32Value& b) { - a.Swap(&b); - } - inline void Swap(Int32Value* other) { - if (other == this) return; - #ifdef PROTOBUF_FORCE_COPY_IN_SWAP - if (GetOwningArena() != nullptr && - GetOwningArena() == other->GetOwningArena()) { - #else // PROTOBUF_FORCE_COPY_IN_SWAP - if (GetOwningArena() == other->GetOwningArena()) { - #endif // !PROTOBUF_FORCE_COPY_IN_SWAP - InternalSwap(other); - } else { - ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other); - } - } - void UnsafeArenaSwap(Int32Value* other) { - if (other == this) return; - GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena()); - InternalSwap(other); - } - - // implements Message ---------------------------------------------- - - Int32Value* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final { - return CreateMaybeMessage<Int32Value>(arena); - } - using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom; - void CopyFrom(const Int32Value& from); - using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom; - void MergeFrom( const Int32Value& from) { - Int32Value::MergeImpl(*this, from); - } - private: - static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message& to_msg, const ::PROTOBUF_NAMESPACE_ID::Message& from_msg); - public: - PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final; - bool IsInitialized() const final; - - size_t ByteSizeLong() const final; - const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final; - uint8_t* _InternalSerialize( - uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final; - int GetCachedSize() const final { return _impl_._cached_size_.Get(); } - - private: - void SharedCtor(::PROTOBUF_NAMESPACE_ID::Arena* arena, bool is_message_owned); - void SharedDtor(); - void SetCachedSize(int size) const final; - void InternalSwap(Int32Value* other); - - private: - friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata; - static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() { - return "google.protobuf.Int32Value"; - } - protected: - explicit Int32Value(::PROTOBUF_NAMESPACE_ID::Arena* arena, - bool is_message_owned = false); - public: - - static const ClassData _class_data_; - const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final; - - ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final; - - // nested types ---------------------------------------------------- - - // accessors ------------------------------------------------------- - - enum : int { - kValueFieldNumber = 1, - }; - // int32 value = 1; - void clear_value(); - int32_t value() const; - void set_value(int32_t value); - private: - int32_t _internal_value() const; - void _internal_set_value(int32_t value); - public: - - // @@protoc_insertion_point(class_scope:google.protobuf.Int32Value) - private: - class _Internal; - - template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper; - typedef void InternalArenaConstructable_; - typedef void DestructorSkippable_; - struct Impl_ { - int32_t value_; - mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_; - }; - union { Impl_ _impl_; }; - friend struct ::TableStruct_google_2fprotobuf_2fwrappers_2eproto; -}; -// ------------------------------------------------------------------- - -class PROTOBUF_EXPORT UInt32Value final : - public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:google.protobuf.UInt32Value) */ { - public: - inline UInt32Value() : UInt32Value(nullptr) {} - ~UInt32Value() override; - explicit PROTOBUF_CONSTEXPR UInt32Value(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized); - - UInt32Value(const UInt32Value& from); - UInt32Value(UInt32Value&& from) noexcept - : UInt32Value() { - *this = ::std::move(from); - } - - inline UInt32Value& operator=(const UInt32Value& from) { - CopyFrom(from); - return *this; - } - inline UInt32Value& operator=(UInt32Value&& from) noexcept { - if (this == &from) return *this; - if (GetOwningArena() == from.GetOwningArena() - #ifdef PROTOBUF_FORCE_COPY_IN_MOVE - && GetOwningArena() != nullptr - #endif // !PROTOBUF_FORCE_COPY_IN_MOVE - ) { - InternalSwap(&from); - } else { - CopyFrom(from); - } - return *this; - } - - static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() { - return GetDescriptor(); - } - static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() { - return default_instance().GetMetadata().descriptor; - } - static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() { - return default_instance().GetMetadata().reflection; - } - static const UInt32Value& default_instance() { - return *internal_default_instance(); - } - static inline const UInt32Value* internal_default_instance() { - return reinterpret_cast<const UInt32Value*>( - &_UInt32Value_default_instance_); - } - static constexpr int kIndexInFileMessages = - 5; - - friend void swap(UInt32Value& a, UInt32Value& b) { - a.Swap(&b); - } - inline void Swap(UInt32Value* other) { - if (other == this) return; - #ifdef PROTOBUF_FORCE_COPY_IN_SWAP - if (GetOwningArena() != nullptr && - GetOwningArena() == other->GetOwningArena()) { - #else // PROTOBUF_FORCE_COPY_IN_SWAP - if (GetOwningArena() == other->GetOwningArena()) { - #endif // !PROTOBUF_FORCE_COPY_IN_SWAP - InternalSwap(other); - } else { - ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other); - } - } - void UnsafeArenaSwap(UInt32Value* other) { - if (other == this) return; - GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena()); - InternalSwap(other); - } - - // implements Message ---------------------------------------------- - - UInt32Value* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final { - return CreateMaybeMessage<UInt32Value>(arena); - } - using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom; - void CopyFrom(const UInt32Value& from); - using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom; - void MergeFrom( const UInt32Value& from) { - UInt32Value::MergeImpl(*this, from); - } - private: - static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message& to_msg, const ::PROTOBUF_NAMESPACE_ID::Message& from_msg); - public: - PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final; - bool IsInitialized() const final; - - size_t ByteSizeLong() const final; - const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final; - uint8_t* _InternalSerialize( - uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final; - int GetCachedSize() const final { return _impl_._cached_size_.Get(); } - - private: - void SharedCtor(::PROTOBUF_NAMESPACE_ID::Arena* arena, bool is_message_owned); - void SharedDtor(); - void SetCachedSize(int size) const final; - void InternalSwap(UInt32Value* other); - - private: - friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata; - static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() { - return "google.protobuf.UInt32Value"; - } - protected: - explicit UInt32Value(::PROTOBUF_NAMESPACE_ID::Arena* arena, - bool is_message_owned = false); - public: - - static const ClassData _class_data_; - const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final; - - ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final; - - // nested types ---------------------------------------------------- - - // accessors ------------------------------------------------------- - - enum : int { - kValueFieldNumber = 1, - }; - // uint32 value = 1; - void clear_value(); - uint32_t value() const; - void set_value(uint32_t value); - private: - uint32_t _internal_value() const; - void _internal_set_value(uint32_t value); - public: - - // @@protoc_insertion_point(class_scope:google.protobuf.UInt32Value) - private: - class _Internal; - - template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper; - typedef void InternalArenaConstructable_; - typedef void DestructorSkippable_; - struct Impl_ { - uint32_t value_; - mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_; - }; - union { Impl_ _impl_; }; - friend struct ::TableStruct_google_2fprotobuf_2fwrappers_2eproto; -}; -// ------------------------------------------------------------------- - -class PROTOBUF_EXPORT BoolValue final : - public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:google.protobuf.BoolValue) */ { - public: - inline BoolValue() : BoolValue(nullptr) {} - ~BoolValue() override; - explicit PROTOBUF_CONSTEXPR BoolValue(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized); - - BoolValue(const BoolValue& from); - BoolValue(BoolValue&& from) noexcept - : BoolValue() { - *this = ::std::move(from); - } - - inline BoolValue& operator=(const BoolValue& from) { - CopyFrom(from); - return *this; - } - inline BoolValue& operator=(BoolValue&& from) noexcept { - if (this == &from) return *this; - if (GetOwningArena() == from.GetOwningArena() - #ifdef PROTOBUF_FORCE_COPY_IN_MOVE - && GetOwningArena() != nullptr - #endif // !PROTOBUF_FORCE_COPY_IN_MOVE - ) { - InternalSwap(&from); - } else { - CopyFrom(from); - } - return *this; - } - - static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() { - return GetDescriptor(); - } - static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() { - return default_instance().GetMetadata().descriptor; - } - static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() { - return default_instance().GetMetadata().reflection; - } - static const BoolValue& default_instance() { - return *internal_default_instance(); - } - static inline const BoolValue* internal_default_instance() { - return reinterpret_cast<const BoolValue*>( - &_BoolValue_default_instance_); - } - static constexpr int kIndexInFileMessages = - 6; - - friend void swap(BoolValue& a, BoolValue& b) { - a.Swap(&b); - } - inline void Swap(BoolValue* other) { - if (other == this) return; - #ifdef PROTOBUF_FORCE_COPY_IN_SWAP - if (GetOwningArena() != nullptr && - GetOwningArena() == other->GetOwningArena()) { - #else // PROTOBUF_FORCE_COPY_IN_SWAP - if (GetOwningArena() == other->GetOwningArena()) { - #endif // !PROTOBUF_FORCE_COPY_IN_SWAP - InternalSwap(other); - } else { - ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other); - } - } - void UnsafeArenaSwap(BoolValue* other) { - if (other == this) return; - GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena()); - InternalSwap(other); - } - - // implements Message ---------------------------------------------- - - BoolValue* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final { - return CreateMaybeMessage<BoolValue>(arena); - } - using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom; - void CopyFrom(const BoolValue& from); - using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom; - void MergeFrom( const BoolValue& from) { - BoolValue::MergeImpl(*this, from); - } - private: - static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message& to_msg, const ::PROTOBUF_NAMESPACE_ID::Message& from_msg); - public: - PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final; - bool IsInitialized() const final; - - size_t ByteSizeLong() const final; - const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final; - uint8_t* _InternalSerialize( - uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final; - int GetCachedSize() const final { return _impl_._cached_size_.Get(); } - - private: - void SharedCtor(::PROTOBUF_NAMESPACE_ID::Arena* arena, bool is_message_owned); - void SharedDtor(); - void SetCachedSize(int size) const final; - void InternalSwap(BoolValue* other); - - private: - friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata; - static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() { - return "google.protobuf.BoolValue"; - } - protected: - explicit BoolValue(::PROTOBUF_NAMESPACE_ID::Arena* arena, - bool is_message_owned = false); - public: - - static const ClassData _class_data_; - const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final; - - ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final; - - // nested types ---------------------------------------------------- - - // accessors ------------------------------------------------------- - - enum : int { - kValueFieldNumber = 1, - }; - // bool value = 1; - void clear_value(); - bool value() const; - void set_value(bool value); - private: - bool _internal_value() const; - void _internal_set_value(bool value); - public: - - // @@protoc_insertion_point(class_scope:google.protobuf.BoolValue) - private: - class _Internal; - - template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper; - typedef void InternalArenaConstructable_; - typedef void DestructorSkippable_; - struct Impl_ { - bool value_; - mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_; - }; - union { Impl_ _impl_; }; - friend struct ::TableStruct_google_2fprotobuf_2fwrappers_2eproto; -}; -// ------------------------------------------------------------------- - -class PROTOBUF_EXPORT StringValue final : - public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:google.protobuf.StringValue) */ { - public: - inline StringValue() : StringValue(nullptr) {} - ~StringValue() override; - explicit PROTOBUF_CONSTEXPR StringValue(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized); - - StringValue(const StringValue& from); - StringValue(StringValue&& from) noexcept - : StringValue() { - *this = ::std::move(from); - } - - inline StringValue& operator=(const StringValue& from) { - CopyFrom(from); - return *this; - } - inline StringValue& operator=(StringValue&& from) noexcept { - if (this == &from) return *this; - if (GetOwningArena() == from.GetOwningArena() - #ifdef PROTOBUF_FORCE_COPY_IN_MOVE - && GetOwningArena() != nullptr - #endif // !PROTOBUF_FORCE_COPY_IN_MOVE - ) { - InternalSwap(&from); - } else { - CopyFrom(from); - } - return *this; - } - - static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() { - return GetDescriptor(); - } - static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() { - return default_instance().GetMetadata().descriptor; - } - static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() { - return default_instance().GetMetadata().reflection; - } - static const StringValue& default_instance() { - return *internal_default_instance(); - } - static inline const StringValue* internal_default_instance() { - return reinterpret_cast<const StringValue*>( - &_StringValue_default_instance_); - } - static constexpr int kIndexInFileMessages = - 7; - - friend void swap(StringValue& a, StringValue& b) { - a.Swap(&b); - } - inline void Swap(StringValue* other) { - if (other == this) return; - #ifdef PROTOBUF_FORCE_COPY_IN_SWAP - if (GetOwningArena() != nullptr && - GetOwningArena() == other->GetOwningArena()) { - #else // PROTOBUF_FORCE_COPY_IN_SWAP - if (GetOwningArena() == other->GetOwningArena()) { - #endif // !PROTOBUF_FORCE_COPY_IN_SWAP - InternalSwap(other); - } else { - ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other); - } - } - void UnsafeArenaSwap(StringValue* other) { - if (other == this) return; - GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena()); - InternalSwap(other); - } - - // implements Message ---------------------------------------------- - - StringValue* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final { - return CreateMaybeMessage<StringValue>(arena); - } - using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom; - void CopyFrom(const StringValue& from); - using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom; - void MergeFrom( const StringValue& from) { - StringValue::MergeImpl(*this, from); - } - private: - static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message& to_msg, const ::PROTOBUF_NAMESPACE_ID::Message& from_msg); - public: - PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final; - bool IsInitialized() const final; - - size_t ByteSizeLong() const final; - const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final; - uint8_t* _InternalSerialize( - uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final; - int GetCachedSize() const final { return _impl_._cached_size_.Get(); } - - private: - void SharedCtor(::PROTOBUF_NAMESPACE_ID::Arena* arena, bool is_message_owned); - void SharedDtor(); - void SetCachedSize(int size) const final; - void InternalSwap(StringValue* other); - - private: - friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata; - static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() { - return "google.protobuf.StringValue"; - } - protected: - explicit StringValue(::PROTOBUF_NAMESPACE_ID::Arena* arena, - bool is_message_owned = false); - public: - - static const ClassData _class_data_; - const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final; - - ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final; - - // nested types ---------------------------------------------------- - - // accessors ------------------------------------------------------- - - enum : int { - kValueFieldNumber = 1, - }; - // string value = 1; - void clear_value(); - const std::string& value() const; - template <typename ArgT0 = const std::string&, typename... ArgT> - void set_value(ArgT0&& arg0, ArgT... args); - std::string* mutable_value(); - PROTOBUF_NODISCARD std::string* release_value(); - void set_allocated_value(std::string* value); - private: - const std::string& _internal_value() const; - inline PROTOBUF_ALWAYS_INLINE void _internal_set_value(const std::string& value); - std::string* _internal_mutable_value(); - public: - - // @@protoc_insertion_point(class_scope:google.protobuf.StringValue) - private: - class _Internal; - - template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper; - typedef void InternalArenaConstructable_; - typedef void DestructorSkippable_; - struct Impl_ { - ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr value_; - mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_; - }; - union { Impl_ _impl_; }; - friend struct ::TableStruct_google_2fprotobuf_2fwrappers_2eproto; -}; -// ------------------------------------------------------------------- - -class PROTOBUF_EXPORT BytesValue final : - public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:google.protobuf.BytesValue) */ { - public: - inline BytesValue() : BytesValue(nullptr) {} - ~BytesValue() override; - explicit PROTOBUF_CONSTEXPR BytesValue(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized); - - BytesValue(const BytesValue& from); - BytesValue(BytesValue&& from) noexcept - : BytesValue() { - *this = ::std::move(from); - } - - inline BytesValue& operator=(const BytesValue& from) { - CopyFrom(from); - return *this; - } - inline BytesValue& operator=(BytesValue&& from) noexcept { - if (this == &from) return *this; - if (GetOwningArena() == from.GetOwningArena() - #ifdef PROTOBUF_FORCE_COPY_IN_MOVE - && GetOwningArena() != nullptr - #endif // !PROTOBUF_FORCE_COPY_IN_MOVE - ) { - InternalSwap(&from); - } else { - CopyFrom(from); - } - return *this; - } - - static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() { - return GetDescriptor(); - } - static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() { - return default_instance().GetMetadata().descriptor; - } - static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() { - return default_instance().GetMetadata().reflection; - } - static const BytesValue& default_instance() { - return *internal_default_instance(); - } - static inline const BytesValue* internal_default_instance() { - return reinterpret_cast<const BytesValue*>( - &_BytesValue_default_instance_); - } - static constexpr int kIndexInFileMessages = - 8; - - friend void swap(BytesValue& a, BytesValue& b) { - a.Swap(&b); - } - inline void Swap(BytesValue* other) { - if (other == this) return; - #ifdef PROTOBUF_FORCE_COPY_IN_SWAP - if (GetOwningArena() != nullptr && - GetOwningArena() == other->GetOwningArena()) { - #else // PROTOBUF_FORCE_COPY_IN_SWAP - if (GetOwningArena() == other->GetOwningArena()) { - #endif // !PROTOBUF_FORCE_COPY_IN_SWAP - InternalSwap(other); - } else { - ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other); - } - } - void UnsafeArenaSwap(BytesValue* other) { - if (other == this) return; - GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena()); - InternalSwap(other); - } - - // implements Message ---------------------------------------------- - - BytesValue* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final { - return CreateMaybeMessage<BytesValue>(arena); - } - using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom; - void CopyFrom(const BytesValue& from); - using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom; - void MergeFrom( const BytesValue& from) { - BytesValue::MergeImpl(*this, from); - } - private: - static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message& to_msg, const ::PROTOBUF_NAMESPACE_ID::Message& from_msg); - public: - PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final; - bool IsInitialized() const final; - - size_t ByteSizeLong() const final; - const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final; - uint8_t* _InternalSerialize( - uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final; - int GetCachedSize() const final { return _impl_._cached_size_.Get(); } - - private: - void SharedCtor(::PROTOBUF_NAMESPACE_ID::Arena* arena, bool is_message_owned); - void SharedDtor(); - void SetCachedSize(int size) const final; - void InternalSwap(BytesValue* other); - - private: - friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata; - static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() { - return "google.protobuf.BytesValue"; - } - protected: - explicit BytesValue(::PROTOBUF_NAMESPACE_ID::Arena* arena, - bool is_message_owned = false); - public: - - static const ClassData _class_data_; - const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final; - - ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final; - - // nested types ---------------------------------------------------- - - // accessors ------------------------------------------------------- - - enum : int { - kValueFieldNumber = 1, - }; - // bytes value = 1; - void clear_value(); - const std::string& value() const; - template <typename ArgT0 = const std::string&, typename... ArgT> - void set_value(ArgT0&& arg0, ArgT... args); - std::string* mutable_value(); - PROTOBUF_NODISCARD std::string* release_value(); - void set_allocated_value(std::string* value); - private: - const std::string& _internal_value() const; - inline PROTOBUF_ALWAYS_INLINE void _internal_set_value(const std::string& value); - std::string* _internal_mutable_value(); - public: - - // @@protoc_insertion_point(class_scope:google.protobuf.BytesValue) - private: - class _Internal; - - template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper; - typedef void InternalArenaConstructable_; - typedef void DestructorSkippable_; - struct Impl_ { - ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr value_; - mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_; - }; - union { Impl_ _impl_; }; - friend struct ::TableStruct_google_2fprotobuf_2fwrappers_2eproto; -}; -// =================================================================== - - -// =================================================================== - -#ifdef __GNUC__ - #pragma GCC diagnostic push - #pragma GCC diagnostic ignored "-Wstrict-aliasing" -#endif // __GNUC__ -// DoubleValue - -// double value = 1; -inline void DoubleValue::clear_value() { - _impl_.value_ = 0; -} -inline double DoubleValue::_internal_value() const { - return _impl_.value_; -} -inline double DoubleValue::value() const { - // @@protoc_insertion_point(field_get:google.protobuf.DoubleValue.value) - return _internal_value(); -} -inline void DoubleValue::_internal_set_value(double value) { - - _impl_.value_ = value; -} -inline void DoubleValue::set_value(double value) { - _internal_set_value(value); - // @@protoc_insertion_point(field_set:google.protobuf.DoubleValue.value) -} - -// ------------------------------------------------------------------- - -// FloatValue - -// float value = 1; -inline void FloatValue::clear_value() { - _impl_.value_ = 0; -} -inline float FloatValue::_internal_value() const { - return _impl_.value_; -} -inline float FloatValue::value() const { - // @@protoc_insertion_point(field_get:google.protobuf.FloatValue.value) - return _internal_value(); -} -inline void FloatValue::_internal_set_value(float value) { - - _impl_.value_ = value; -} -inline void FloatValue::set_value(float value) { - _internal_set_value(value); - // @@protoc_insertion_point(field_set:google.protobuf.FloatValue.value) -} - -// ------------------------------------------------------------------- - -// Int64Value - -// int64 value = 1; -inline void Int64Value::clear_value() { - _impl_.value_ = int64_t{0}; -} -inline int64_t Int64Value::_internal_value() const { - return _impl_.value_; -} -inline int64_t Int64Value::value() const { - // @@protoc_insertion_point(field_get:google.protobuf.Int64Value.value) - return _internal_value(); -} -inline void Int64Value::_internal_set_value(int64_t value) { - - _impl_.value_ = value; -} -inline void Int64Value::set_value(int64_t value) { - _internal_set_value(value); - // @@protoc_insertion_point(field_set:google.protobuf.Int64Value.value) -} - -// ------------------------------------------------------------------- - -// UInt64Value - -// uint64 value = 1; -inline void UInt64Value::clear_value() { - _impl_.value_ = uint64_t{0u}; -} -inline uint64_t UInt64Value::_internal_value() const { - return _impl_.value_; -} -inline uint64_t UInt64Value::value() const { - // @@protoc_insertion_point(field_get:google.protobuf.UInt64Value.value) - return _internal_value(); -} -inline void UInt64Value::_internal_set_value(uint64_t value) { - - _impl_.value_ = value; -} -inline void UInt64Value::set_value(uint64_t value) { - _internal_set_value(value); - // @@protoc_insertion_point(field_set:google.protobuf.UInt64Value.value) -} - -// ------------------------------------------------------------------- - -// Int32Value - -// int32 value = 1; -inline void Int32Value::clear_value() { - _impl_.value_ = 0; -} -inline int32_t Int32Value::_internal_value() const { - return _impl_.value_; -} -inline int32_t Int32Value::value() const { - // @@protoc_insertion_point(field_get:google.protobuf.Int32Value.value) - return _internal_value(); -} -inline void Int32Value::_internal_set_value(int32_t value) { - - _impl_.value_ = value; -} -inline void Int32Value::set_value(int32_t value) { - _internal_set_value(value); - // @@protoc_insertion_point(field_set:google.protobuf.Int32Value.value) -} - -// ------------------------------------------------------------------- - -// UInt32Value - -// uint32 value = 1; -inline void UInt32Value::clear_value() { - _impl_.value_ = 0u; -} -inline uint32_t UInt32Value::_internal_value() const { - return _impl_.value_; -} -inline uint32_t UInt32Value::value() const { - // @@protoc_insertion_point(field_get:google.protobuf.UInt32Value.value) - return _internal_value(); -} -inline void UInt32Value::_internal_set_value(uint32_t value) { - - _impl_.value_ = value; -} -inline void UInt32Value::set_value(uint32_t value) { - _internal_set_value(value); - // @@protoc_insertion_point(field_set:google.protobuf.UInt32Value.value) -} - -// ------------------------------------------------------------------- - -// BoolValue - -// bool value = 1; -inline void BoolValue::clear_value() { - _impl_.value_ = false; -} -inline bool BoolValue::_internal_value() const { - return _impl_.value_; -} -inline bool BoolValue::value() const { - // @@protoc_insertion_point(field_get:google.protobuf.BoolValue.value) - return _internal_value(); -} -inline void BoolValue::_internal_set_value(bool value) { - - _impl_.value_ = value; -} -inline void BoolValue::set_value(bool value) { - _internal_set_value(value); - // @@protoc_insertion_point(field_set:google.protobuf.BoolValue.value) -} - -// ------------------------------------------------------------------- - -// StringValue - -// string value = 1; -inline void StringValue::clear_value() { - _impl_.value_.ClearToEmpty(); -} -inline const std::string& StringValue::value() const { - // @@protoc_insertion_point(field_get:google.protobuf.StringValue.value) - return _internal_value(); -} -template <typename ArgT0, typename... ArgT> -inline PROTOBUF_ALWAYS_INLINE -void StringValue::set_value(ArgT0&& arg0, ArgT... args) { - - _impl_.value_.Set(static_cast<ArgT0 &&>(arg0), args..., GetArenaForAllocation()); - // @@protoc_insertion_point(field_set:google.protobuf.StringValue.value) -} -inline std::string* StringValue::mutable_value() { - std::string* _s = _internal_mutable_value(); - // @@protoc_insertion_point(field_mutable:google.protobuf.StringValue.value) - return _s; -} -inline const std::string& StringValue::_internal_value() const { - return _impl_.value_.Get(); -} -inline void StringValue::_internal_set_value(const std::string& value) { - - _impl_.value_.Set(value, GetArenaForAllocation()); -} -inline std::string* StringValue::_internal_mutable_value() { - - return _impl_.value_.Mutable(GetArenaForAllocation()); -} -inline std::string* StringValue::release_value() { - // @@protoc_insertion_point(field_release:google.protobuf.StringValue.value) - return _impl_.value_.Release(); -} -inline void StringValue::set_allocated_value(std::string* value) { - if (value != nullptr) { - - } else { - - } - _impl_.value_.SetAllocated(value, GetArenaForAllocation()); -#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING - if (_impl_.value_.IsDefault()) { - _impl_.value_.Set("", GetArenaForAllocation()); - } -#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING - // @@protoc_insertion_point(field_set_allocated:google.protobuf.StringValue.value) -} - -// ------------------------------------------------------------------- - -// BytesValue - -// bytes value = 1; -inline void BytesValue::clear_value() { - _impl_.value_.ClearToEmpty(); -} -inline const std::string& BytesValue::value() const { - // @@protoc_insertion_point(field_get:google.protobuf.BytesValue.value) - return _internal_value(); -} -template <typename ArgT0, typename... ArgT> -inline PROTOBUF_ALWAYS_INLINE -void BytesValue::set_value(ArgT0&& arg0, ArgT... args) { - - _impl_.value_.SetBytes(static_cast<ArgT0 &&>(arg0), args..., GetArenaForAllocation()); - // @@protoc_insertion_point(field_set:google.protobuf.BytesValue.value) -} -inline std::string* BytesValue::mutable_value() { - std::string* _s = _internal_mutable_value(); - // @@protoc_insertion_point(field_mutable:google.protobuf.BytesValue.value) - return _s; -} -inline const std::string& BytesValue::_internal_value() const { - return _impl_.value_.Get(); -} -inline void BytesValue::_internal_set_value(const std::string& value) { - - _impl_.value_.Set(value, GetArenaForAllocation()); -} -inline std::string* BytesValue::_internal_mutable_value() { - - return _impl_.value_.Mutable(GetArenaForAllocation()); -} -inline std::string* BytesValue::release_value() { - // @@protoc_insertion_point(field_release:google.protobuf.BytesValue.value) - return _impl_.value_.Release(); -} -inline void BytesValue::set_allocated_value(std::string* value) { - if (value != nullptr) { - - } else { - - } - _impl_.value_.SetAllocated(value, GetArenaForAllocation()); -#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING - if (_impl_.value_.IsDefault()) { - _impl_.value_.Set("", GetArenaForAllocation()); - } -#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING - // @@protoc_insertion_point(field_set_allocated:google.protobuf.BytesValue.value) -} - -#ifdef __GNUC__ - #pragma GCC diagnostic pop -#endif // __GNUC__ -// ------------------------------------------------------------------- - -// ------------------------------------------------------------------- - -// ------------------------------------------------------------------- - -// ------------------------------------------------------------------- - -// ------------------------------------------------------------------- - -// ------------------------------------------------------------------- - -// ------------------------------------------------------------------- - -// ------------------------------------------------------------------- - - -// @@protoc_insertion_point(namespace_scope) - -PROTOBUF_NAMESPACE_CLOSE - -// @@protoc_insertion_point(global_scope) - -#include <google/protobuf/port_undef.inc> -#endif // GOOGLE_PROTOBUF_INCLUDED_GOOGLE_PROTOBUF_INCLUDED_google_2fprotobuf_2fwrappers_2eproto diff --git a/include/google/protobuf/wrappers.proto b/include/google/protobuf/wrappers.proto deleted file mode 100644 index d49dd53c8d..0000000000 --- a/include/google/protobuf/wrappers.proto +++ /dev/null @@ -1,123 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// 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 -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -// Wrappers for primitive (non-message) types. These types are useful -// for embedding primitives in the `google.protobuf.Any` type and for places -// where we need to distinguish between the absence of a primitive -// typed field and its default value. -// -// These wrappers have no meaningful use within repeated fields as they lack -// the ability to detect presence on individual elements. -// These wrappers have no meaningful use within a map or a oneof since -// individual entries of a map or fields of a oneof can already detect presence. - -syntax = "proto3"; - -package google.protobuf; - -option csharp_namespace = "Google.Protobuf.WellKnownTypes"; -option cc_enable_arenas = true; -option go_package = "google.golang.org/protobuf/types/known/wrapperspb"; -option java_package = "com.google.protobuf"; -option java_outer_classname = "WrappersProto"; -option java_multiple_files = true; -option objc_class_prefix = "GPB"; - -// Wrapper message for `double`. -// -// The JSON representation for `DoubleValue` is JSON number. -message DoubleValue { - // The double value. - double value = 1; -} - -// Wrapper message for `float`. -// -// The JSON representation for `FloatValue` is JSON number. -message FloatValue { - // The float value. - float value = 1; -} - -// Wrapper message for `int64`. -// -// The JSON representation for `Int64Value` is JSON string. -message Int64Value { - // The int64 value. - int64 value = 1; -} - -// Wrapper message for `uint64`. -// -// The JSON representation for `UInt64Value` is JSON string. -message UInt64Value { - // The uint64 value. - uint64 value = 1; -} - -// Wrapper message for `int32`. -// -// The JSON representation for `Int32Value` is JSON number. -message Int32Value { - // The int32 value. - int32 value = 1; -} - -// Wrapper message for `uint32`. -// -// The JSON representation for `UInt32Value` is JSON number. -message UInt32Value { - // The uint32 value. - uint32 value = 1; -} - -// Wrapper message for `bool`. -// -// The JSON representation for `BoolValue` is JSON `true` and `false`. -message BoolValue { - // The bool value. - bool value = 1; -} - -// Wrapper message for `string`. -// -// The JSON representation for `StringValue` is JSON string. -message StringValue { - // The string value. - string value = 1; -} - -// Wrapper message for `bytes`. -// -// The JSON representation for `BytesValue` is JSON string. -message BytesValue { - // The bytes value. - bytes value = 1; -} diff --git a/libs/win32/libprotobuf.lib b/libs/win32/libprotobuf.lib Binary files differdeleted file mode 100644 index c2eb732c82..0000000000 --- a/libs/win32/libprotobuf.lib +++ /dev/null diff --git a/libs/win64/libprotobuf.lib b/libs/win64/libprotobuf.lib Binary files differdeleted file mode 100644 index 79754b0990..0000000000 --- a/libs/win64/libprotobuf.lib +++ /dev/null |