// Generated by the protocol buffer compiler.  DO NOT EDIT!
// source: ignition/msgs/statistic.proto

#ifndef GOOGLE_PROTOBUF_INCLUDED_ignition_2fmsgs_2fstatistic_2eproto
#define GOOGLE_PROTOBUF_INCLUDED_ignition_2fmsgs_2fstatistic_2eproto

#include <limits>
#include <string>

#include <google/protobuf/port_def.inc>
#if PROTOBUF_VERSION < 3018000
#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 3018000 < 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_table_driven.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 "ignition/msgs/header.pb.h"
#ifndef _MSC_VER
#pragma GCC system_header
#else
#pragma warning(push)
#pragma warning(disable: 4244 4267 4100 4244 4512 4127 4068 4275 4251)
#endif
#ifdef __linux__
#include <sys/sysmacros.h>
#endif
#include <memory>
#include <ignition/msgs/Export.hh>
// @@protoc_insertion_point(includes)
#include <google/protobuf/port_def.inc>
#define PROTOBUF_INTERNAL_EXPORT_ignition_2fmsgs_2fstatistic_2eproto IGNITION_MSGS_VISIBLE
PROTOBUF_NAMESPACE_OPEN
namespace internal {
class AnyMetadata;
}  // namespace internal
PROTOBUF_NAMESPACE_CLOSE

// Internal implementation detail -- do not use these members.
struct IGNITION_MSGS_VISIBLE TableStruct_ignition_2fmsgs_2fstatistic_2eproto {
  static const ::PROTOBUF_NAMESPACE_ID::internal::ParseTableField entries[]
    PROTOBUF_SECTION_VARIABLE(protodesc_cold);
  static const ::PROTOBUF_NAMESPACE_ID::internal::AuxiliaryParseTableField aux[]
    PROTOBUF_SECTION_VARIABLE(protodesc_cold);
  static const ::PROTOBUF_NAMESPACE_ID::internal::ParseTable schema[3]
    PROTOBUF_SECTION_VARIABLE(protodesc_cold);
  static const ::PROTOBUF_NAMESPACE_ID::internal::FieldMetadata field_metadata[];
  static const ::PROTOBUF_NAMESPACE_ID::internal::SerializationTable serialization_table[];
  static const ::PROTOBUF_NAMESPACE_ID::uint32 offsets[];
};
IGNITION_MSGS_VISIBLE extern const ::PROTOBUF_NAMESPACE_ID::internal::DescriptorTable descriptor_table_ignition_2fmsgs_2fstatistic_2eproto;
namespace ignition {
namespace msgs {
class Metric;
struct MetricDefaultTypeInternal;
IGNITION_MSGS_VISIBLE extern MetricDefaultTypeInternal _Metric_default_instance_;
class Statistic;
struct StatisticDefaultTypeInternal;
IGNITION_MSGS_VISIBLE extern StatisticDefaultTypeInternal _Statistic_default_instance_;
class StatisticsGroup;
struct StatisticsGroupDefaultTypeInternal;
IGNITION_MSGS_VISIBLE extern StatisticsGroupDefaultTypeInternal _StatisticsGroup_default_instance_;
}  // namespace msgs
}  // namespace ignition
PROTOBUF_NAMESPACE_OPEN
template<> IGNITION_MSGS_VISIBLE ::ignition::msgs::Metric* Arena::CreateMaybeMessage<::ignition::msgs::Metric>(Arena*);
template<> IGNITION_MSGS_VISIBLE ::ignition::msgs::Statistic* Arena::CreateMaybeMessage<::ignition::msgs::Statistic>(Arena*);
template<> IGNITION_MSGS_VISIBLE ::ignition::msgs::StatisticsGroup* Arena::CreateMaybeMessage<::ignition::msgs::StatisticsGroup>(Arena*);
PROTOBUF_NAMESPACE_CLOSE
namespace ignition {
namespace msgs {

enum Statistic_DataType : int {
  Statistic_DataType_UNINITIALIZED = 0,
  Statistic_DataType_AVERAGE = 1,
  Statistic_DataType_MINIMUM = 2,
  Statistic_DataType_MAXIMUM = 3,
  Statistic_DataType_VARIANCE = 4,
  Statistic_DataType_STDDEV = 5,
  Statistic_DataType_SAMPLE_COUNT = 6,
  Statistic_DataType_ROOT_MEAN_SQUARE = 7,
  Statistic_DataType_MAX_ABS_VALUE = 8,
  Statistic_DataType_Statistic_DataType_INT_MIN_SENTINEL_DO_NOT_USE_ = std::numeric_limits<::PROTOBUF_NAMESPACE_ID::int32>::min(),
  Statistic_DataType_Statistic_DataType_INT_MAX_SENTINEL_DO_NOT_USE_ = std::numeric_limits<::PROTOBUF_NAMESPACE_ID::int32>::max()
};
IGNITION_MSGS_VISIBLE bool Statistic_DataType_IsValid(int value);
constexpr Statistic_DataType Statistic_DataType_DataType_MIN = Statistic_DataType_UNINITIALIZED;
constexpr Statistic_DataType Statistic_DataType_DataType_MAX = Statistic_DataType_MAX_ABS_VALUE;
constexpr int Statistic_DataType_DataType_ARRAYSIZE = Statistic_DataType_DataType_MAX + 1;

IGNITION_MSGS_VISIBLE const ::PROTOBUF_NAMESPACE_ID::EnumDescriptor* Statistic_DataType_descriptor();
template<typename T>
inline const std::string& Statistic_DataType_Name(T enum_t_value) {
  static_assert(::std::is_same<T, Statistic_DataType>::value ||
    ::std::is_integral<T>::value,
    "Incorrect type passed to function Statistic_DataType_Name.");
  return ::PROTOBUF_NAMESPACE_ID::internal::NameOfEnum(
    Statistic_DataType_descriptor(), enum_t_value);
}
inline bool Statistic_DataType_Parse(
    ::PROTOBUF_NAMESPACE_ID::ConstStringParam name, Statistic_DataType* value) {
  return ::PROTOBUF_NAMESPACE_ID::internal::ParseNamedEnum<Statistic_DataType>(
    Statistic_DataType_descriptor(), name, value);
}
// ===================================================================

class IGNITION_MSGS_VISIBLE Statistic final :
    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:ignition.msgs.Statistic) */ {
 public:
  inline Statistic() : Statistic(nullptr) {}
  ~Statistic() override;
  explicit constexpr Statistic(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);

  Statistic(const Statistic& from);
  Statistic(Statistic&& from) noexcept
    : Statistic() {
    *this = ::std::move(from);
  }

  inline Statistic& operator=(const Statistic& from) {
    CopyFrom(from);
    return *this;
  }
  inline Statistic& operator=(Statistic&& 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 Statistic& default_instance() {
    return *internal_default_instance();
  }
  static inline const Statistic* internal_default_instance() {
    return reinterpret_cast<const Statistic*>(
               &_Statistic_default_instance_);
  }
  static constexpr int kIndexInFileMessages =
    0;

  friend void swap(Statistic& a, Statistic& b) {
    a.Swap(&b);
  }
  inline void Swap(Statistic* other) {
    if (other == this) return;
    if (GetOwningArena() == other->GetOwningArena()) {
      InternalSwap(other);
    } else {
      ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(Statistic* other) {
    if (other == this) return;
    GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena());
    InternalSwap(other);
  }

  // implements Message ----------------------------------------------

  inline Statistic* New() const final {
    return new Statistic();
  }

  Statistic* New(::PROTOBUF_NAMESPACE_ID::Arena* arena) const final {
    return CreateMaybeMessage<Statistic>(arena);
  }
  using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom;
  void CopyFrom(const Statistic& from);
  using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom;
  void MergeFrom(const Statistic& from);
  private:
  static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to, const ::PROTOBUF_NAMESPACE_ID::Message& from);
  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;
  ::PROTOBUF_NAMESPACE_ID::uint8* _InternalSerialize(
      ::PROTOBUF_NAMESPACE_ID::uint8* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final;
  int GetCachedSize() const final { return _cached_size_.Get(); }

  private:
  void SharedCtor();
  void SharedDtor();
  void SetCachedSize(int size) const final;
  void InternalSwap(Statistic* other);
  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
    return "ignition.msgs.Statistic";
  }
  protected:
  explicit Statistic(::PROTOBUF_NAMESPACE_ID::Arena* arena,
                       bool is_message_owned = false);
  private:
  static void ArenaDtor(void* object);
  inline void RegisterArenaDtor(::PROTOBUF_NAMESPACE_ID::Arena* arena);
  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 Statistic_DataType DataType;
  static constexpr DataType UNINITIALIZED =
    Statistic_DataType_UNINITIALIZED;
  static constexpr DataType AVERAGE =
    Statistic_DataType_AVERAGE;
  static constexpr DataType MINIMUM =
    Statistic_DataType_MINIMUM;
  static constexpr DataType MAXIMUM =
    Statistic_DataType_MAXIMUM;
  static constexpr DataType VARIANCE =
    Statistic_DataType_VARIANCE;
  static constexpr DataType STDDEV =
    Statistic_DataType_STDDEV;
  static constexpr DataType SAMPLE_COUNT =
    Statistic_DataType_SAMPLE_COUNT;
  static constexpr DataType ROOT_MEAN_SQUARE =
    Statistic_DataType_ROOT_MEAN_SQUARE;
  static constexpr DataType MAX_ABS_VALUE =
    Statistic_DataType_MAX_ABS_VALUE;
  static inline bool DataType_IsValid(int value) {
    return Statistic_DataType_IsValid(value);
  }
  static constexpr DataType DataType_MIN =
    Statistic_DataType_DataType_MIN;
  static constexpr DataType DataType_MAX =
    Statistic_DataType_DataType_MAX;
  static constexpr int DataType_ARRAYSIZE =
    Statistic_DataType_DataType_ARRAYSIZE;
  static inline const ::PROTOBUF_NAMESPACE_ID::EnumDescriptor*
  DataType_descriptor() {
    return Statistic_DataType_descriptor();
  }
  template<typename T>
  static inline const std::string& DataType_Name(T enum_t_value) {
    static_assert(::std::is_same<T, DataType>::value ||
      ::std::is_integral<T>::value,
      "Incorrect type passed to function DataType_Name.");
    return Statistic_DataType_Name(enum_t_value);
  }
  static inline bool DataType_Parse(::PROTOBUF_NAMESPACE_ID::ConstStringParam name,
      DataType* value) {
    return Statistic_DataType_Parse(name, value);
  }

  // accessors -------------------------------------------------------

  enum : int {
    kNameFieldNumber = 3,
    kHeaderFieldNumber = 1,
    kValueFieldNumber = 4,
    kTypeFieldNumber = 2,
  };
  // string name = 3;
  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_MUST_USE_RESULT 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:

  // .ignition.msgs.Header header = 1;
  bool has_header() const;
  private:
  bool _internal_has_header() const;
  public:
  void clear_header();
  const ::ignition::msgs::Header& header() const;
  PROTOBUF_MUST_USE_RESULT ::ignition::msgs::Header* release_header();
  ::ignition::msgs::Header* mutable_header();
  void set_allocated_header(::ignition::msgs::Header* header);
  private:
  const ::ignition::msgs::Header& _internal_header() const;
  ::ignition::msgs::Header* _internal_mutable_header();
  public:
  void unsafe_arena_set_allocated_header(
      ::ignition::msgs::Header* header);
  ::ignition::msgs::Header* unsafe_arena_release_header();

  // double value = 4;
  void clear_value();
  double value() const;
  void set_value(double value);
  private:
  double _internal_value() const;
  void _internal_set_value(double value);
  public:

  // .ignition.msgs.Statistic.DataType type = 2;
  void clear_type();
  ::ignition::msgs::Statistic_DataType type() const;
  void set_type(::ignition::msgs::Statistic_DataType value);
  private:
  ::ignition::msgs::Statistic_DataType _internal_type() const;
  void _internal_set_type(::ignition::msgs::Statistic_DataType value);
  public:

  // @@protoc_insertion_point(class_scope:ignition.msgs.Statistic)
 private:
  class _Internal;

  template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
  typedef void InternalArenaConstructable_;
  typedef void DestructorSkippable_;
  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr name_;
  ::ignition::msgs::Header* header_;
  double value_;
  int type_;
  mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
  friend struct ::TableStruct_ignition_2fmsgs_2fstatistic_2eproto;
};
// -------------------------------------------------------------------

class IGNITION_MSGS_VISIBLE StatisticsGroup final :
    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:ignition.msgs.StatisticsGroup) */ {
 public:
  inline StatisticsGroup() : StatisticsGroup(nullptr) {}
  ~StatisticsGroup() override;
  explicit constexpr StatisticsGroup(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);

  StatisticsGroup(const StatisticsGroup& from);
  StatisticsGroup(StatisticsGroup&& from) noexcept
    : StatisticsGroup() {
    *this = ::std::move(from);
  }

  inline StatisticsGroup& operator=(const StatisticsGroup& from) {
    CopyFrom(from);
    return *this;
  }
  inline StatisticsGroup& operator=(StatisticsGroup&& 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 StatisticsGroup& default_instance() {
    return *internal_default_instance();
  }
  static inline const StatisticsGroup* internal_default_instance() {
    return reinterpret_cast<const StatisticsGroup*>(
               &_StatisticsGroup_default_instance_);
  }
  static constexpr int kIndexInFileMessages =
    1;

  friend void swap(StatisticsGroup& a, StatisticsGroup& b) {
    a.Swap(&b);
  }
  inline void Swap(StatisticsGroup* other) {
    if (other == this) return;
    if (GetOwningArena() == other->GetOwningArena()) {
      InternalSwap(other);
    } else {
      ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(StatisticsGroup* other) {
    if (other == this) return;
    GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena());
    InternalSwap(other);
  }

  // implements Message ----------------------------------------------

  inline StatisticsGroup* New() const final {
    return new StatisticsGroup();
  }

  StatisticsGroup* New(::PROTOBUF_NAMESPACE_ID::Arena* arena) const final {
    return CreateMaybeMessage<StatisticsGroup>(arena);
  }
  using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom;
  void CopyFrom(const StatisticsGroup& from);
  using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom;
  void MergeFrom(const StatisticsGroup& from);
  private:
  static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to, const ::PROTOBUF_NAMESPACE_ID::Message& from);
  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;
  ::PROTOBUF_NAMESPACE_ID::uint8* _InternalSerialize(
      ::PROTOBUF_NAMESPACE_ID::uint8* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final;
  int GetCachedSize() const final { return _cached_size_.Get(); }

  private:
  void SharedCtor();
  void SharedDtor();
  void SetCachedSize(int size) const final;
  void InternalSwap(StatisticsGroup* other);
  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
    return "ignition.msgs.StatisticsGroup";
  }
  protected:
  explicit StatisticsGroup(::PROTOBUF_NAMESPACE_ID::Arena* arena,
                       bool is_message_owned = false);
  private:
  static void ArenaDtor(void* object);
  inline void RegisterArenaDtor(::PROTOBUF_NAMESPACE_ID::Arena* arena);
  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 {
    kStatisticsFieldNumber = 3,
    kNameFieldNumber = 2,
    kHeaderFieldNumber = 1,
  };
  // repeated .ignition.msgs.Statistic statistics = 3;
  int statistics_size() const;
  private:
  int _internal_statistics_size() const;
  public:
  void clear_statistics();
  ::ignition::msgs::Statistic* mutable_statistics(int index);
  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::ignition::msgs::Statistic >*
      mutable_statistics();
  private:
  const ::ignition::msgs::Statistic& _internal_statistics(int index) const;
  ::ignition::msgs::Statistic* _internal_add_statistics();
  public:
  const ::ignition::msgs::Statistic& statistics(int index) const;
  ::ignition::msgs::Statistic* add_statistics();
  const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::ignition::msgs::Statistic >&
      statistics() const;

  // string name = 2;
  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_MUST_USE_RESULT 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:

  // .ignition.msgs.Header header = 1;
  bool has_header() const;
  private:
  bool _internal_has_header() const;
  public:
  void clear_header();
  const ::ignition::msgs::Header& header() const;
  PROTOBUF_MUST_USE_RESULT ::ignition::msgs::Header* release_header();
  ::ignition::msgs::Header* mutable_header();
  void set_allocated_header(::ignition::msgs::Header* header);
  private:
  const ::ignition::msgs::Header& _internal_header() const;
  ::ignition::msgs::Header* _internal_mutable_header();
  public:
  void unsafe_arena_set_allocated_header(
      ::ignition::msgs::Header* header);
  ::ignition::msgs::Header* unsafe_arena_release_header();

  // @@protoc_insertion_point(class_scope:ignition.msgs.StatisticsGroup)
 private:
  class _Internal;

  template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
  typedef void InternalArenaConstructable_;
  typedef void DestructorSkippable_;
  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::ignition::msgs::Statistic > statistics_;
  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr name_;
  ::ignition::msgs::Header* header_;
  mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
  friend struct ::TableStruct_ignition_2fmsgs_2fstatistic_2eproto;
};
// -------------------------------------------------------------------

class IGNITION_MSGS_VISIBLE Metric final :
    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:ignition.msgs.Metric) */ {
 public:
  inline Metric() : Metric(nullptr) {}
  ~Metric() override;
  explicit constexpr Metric(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);

  Metric(const Metric& from);
  Metric(Metric&& from) noexcept
    : Metric() {
    *this = ::std::move(from);
  }

  inline Metric& operator=(const Metric& from) {
    CopyFrom(from);
    return *this;
  }
  inline Metric& operator=(Metric&& 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 Metric& default_instance() {
    return *internal_default_instance();
  }
  static inline const Metric* internal_default_instance() {
    return reinterpret_cast<const Metric*>(
               &_Metric_default_instance_);
  }
  static constexpr int kIndexInFileMessages =
    2;

  friend void swap(Metric& a, Metric& b) {
    a.Swap(&b);
  }
  inline void Swap(Metric* other) {
    if (other == this) return;
    if (GetOwningArena() == other->GetOwningArena()) {
      InternalSwap(other);
    } else {
      ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(Metric* other) {
    if (other == this) return;
    GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena());
    InternalSwap(other);
  }

  // implements Message ----------------------------------------------

  inline Metric* New() const final {
    return new Metric();
  }

  Metric* New(::PROTOBUF_NAMESPACE_ID::Arena* arena) const final {
    return CreateMaybeMessage<Metric>(arena);
  }
  using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom;
  void CopyFrom(const Metric& from);
  using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom;
  void MergeFrom(const Metric& from);
  private:
  static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to, const ::PROTOBUF_NAMESPACE_ID::Message& from);
  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;
  ::PROTOBUF_NAMESPACE_ID::uint8* _InternalSerialize(
      ::PROTOBUF_NAMESPACE_ID::uint8* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final;
  int GetCachedSize() const final { return _cached_size_.Get(); }

  private:
  void SharedCtor();
  void SharedDtor();
  void SetCachedSize(int size) const final;
  void InternalSwap(Metric* other);
  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
    return "ignition.msgs.Metric";
  }
  protected:
  explicit Metric(::PROTOBUF_NAMESPACE_ID::Arena* arena,
                       bool is_message_owned = false);
  private:
  static void ArenaDtor(void* object);
  inline void RegisterArenaDtor(::PROTOBUF_NAMESPACE_ID::Arena* arena);
  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 {
    kStatisticsGroupsFieldNumber = 3,
    kStatisticsFieldNumber = 4,
    kUnitFieldNumber = 2,
    kHeaderFieldNumber = 1,
  };
  // repeated .ignition.msgs.StatisticsGroup statistics_groups = 3;
  int statistics_groups_size() const;
  private:
  int _internal_statistics_groups_size() const;
  public:
  void clear_statistics_groups();
  ::ignition::msgs::StatisticsGroup* mutable_statistics_groups(int index);
  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::ignition::msgs::StatisticsGroup >*
      mutable_statistics_groups();
  private:
  const ::ignition::msgs::StatisticsGroup& _internal_statistics_groups(int index) const;
  ::ignition::msgs::StatisticsGroup* _internal_add_statistics_groups();
  public:
  const ::ignition::msgs::StatisticsGroup& statistics_groups(int index) const;
  ::ignition::msgs::StatisticsGroup* add_statistics_groups();
  const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::ignition::msgs::StatisticsGroup >&
      statistics_groups() const;

  // repeated .ignition.msgs.Statistic statistics = 4;
  int statistics_size() const;
  private:
  int _internal_statistics_size() const;
  public:
  void clear_statistics();
  ::ignition::msgs::Statistic* mutable_statistics(int index);
  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::ignition::msgs::Statistic >*
      mutable_statistics();
  private:
  const ::ignition::msgs::Statistic& _internal_statistics(int index) const;
  ::ignition::msgs::Statistic* _internal_add_statistics();
  public:
  const ::ignition::msgs::Statistic& statistics(int index) const;
  ::ignition::msgs::Statistic* add_statistics();
  const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::ignition::msgs::Statistic >&
      statistics() const;

  // string unit = 2;
  void clear_unit();
  const std::string& unit() const;
  template <typename ArgT0 = const std::string&, typename... ArgT>
  void set_unit(ArgT0&& arg0, ArgT... args);
  std::string* mutable_unit();
  PROTOBUF_MUST_USE_RESULT std::string* release_unit();
  void set_allocated_unit(std::string* unit);
  private:
  const std::string& _internal_unit() const;
  inline PROTOBUF_ALWAYS_INLINE void _internal_set_unit(const std::string& value);
  std::string* _internal_mutable_unit();
  public:

  // .ignition.msgs.Header header = 1;
  bool has_header() const;
  private:
  bool _internal_has_header() const;
  public:
  void clear_header();
  const ::ignition::msgs::Header& header() const;
  PROTOBUF_MUST_USE_RESULT ::ignition::msgs::Header* release_header();
  ::ignition::msgs::Header* mutable_header();
  void set_allocated_header(::ignition::msgs::Header* header);
  private:
  const ::ignition::msgs::Header& _internal_header() const;
  ::ignition::msgs::Header* _internal_mutable_header();
  public:
  void unsafe_arena_set_allocated_header(
      ::ignition::msgs::Header* header);
  ::ignition::msgs::Header* unsafe_arena_release_header();

  // @@protoc_insertion_point(class_scope:ignition.msgs.Metric)
 private:
  class _Internal;

  template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
  typedef void InternalArenaConstructable_;
  typedef void DestructorSkippable_;
  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::ignition::msgs::StatisticsGroup > statistics_groups_;
  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::ignition::msgs::Statistic > statistics_;
  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr unit_;
  ::ignition::msgs::Header* header_;
  mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
  friend struct ::TableStruct_ignition_2fmsgs_2fstatistic_2eproto;
};
// ===================================================================


// ===================================================================

#ifdef __GNUC__
  #pragma GCC diagnostic push
  #pragma GCC diagnostic ignored "-Wstrict-aliasing"
#endif  // __GNUC__
// Statistic

// .ignition.msgs.Header header = 1;
inline bool Statistic::_internal_has_header() const {
  return this != internal_default_instance() && header_ != nullptr;
}
inline bool Statistic::has_header() const {
  return _internal_has_header();
}
inline const ::ignition::msgs::Header& Statistic::_internal_header() const {
  const ::ignition::msgs::Header* p = header_;
  return p != nullptr ? *p : reinterpret_cast<const ::ignition::msgs::Header&>(
      ::ignition::msgs::_Header_default_instance_);
}
inline const ::ignition::msgs::Header& Statistic::header() const {
  // @@protoc_insertion_point(field_get:ignition.msgs.Statistic.header)
  return _internal_header();
}
inline void Statistic::unsafe_arena_set_allocated_header(
    ::ignition::msgs::Header* header) {
  if (GetArenaForAllocation() == nullptr) {
    delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(header_);
  }
  header_ = header;
  if (header) {
    
  } else {
    
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:ignition.msgs.Statistic.header)
}
inline ::ignition::msgs::Header* Statistic::release_header() {
  
  ::ignition::msgs::Header* temp = header_;
  header_ = 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 ::ignition::msgs::Header* Statistic::unsafe_arena_release_header() {
  // @@protoc_insertion_point(field_release:ignition.msgs.Statistic.header)
  
  ::ignition::msgs::Header* temp = header_;
  header_ = nullptr;
  return temp;
}
inline ::ignition::msgs::Header* Statistic::_internal_mutable_header() {
  
  if (header_ == nullptr) {
    auto* p = CreateMaybeMessage<::ignition::msgs::Header>(GetArenaForAllocation());
    header_ = p;
  }
  return header_;
}
inline ::ignition::msgs::Header* Statistic::mutable_header() {
  ::ignition::msgs::Header* _msg = _internal_mutable_header();
  // @@protoc_insertion_point(field_mutable:ignition.msgs.Statistic.header)
  return _msg;
}
inline void Statistic::set_allocated_header(::ignition::msgs::Header* header) {
  ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation();
  if (message_arena == nullptr) {
    delete reinterpret_cast< ::PROTOBUF_NAMESPACE_ID::MessageLite*>(header_);
  }
  if (header) {
    ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena =
        ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper<
            ::PROTOBUF_NAMESPACE_ID::MessageLite>::GetOwningArena(
                reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(header));
    if (message_arena != submessage_arena) {
      header = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
          message_arena, header, submessage_arena);
    }
    
  } else {
    
  }
  header_ = header;
  // @@protoc_insertion_point(field_set_allocated:ignition.msgs.Statistic.header)
}

// .ignition.msgs.Statistic.DataType type = 2;
inline void Statistic::clear_type() {
  type_ = 0;
}
inline ::ignition::msgs::Statistic_DataType Statistic::_internal_type() const {
  return static_cast< ::ignition::msgs::Statistic_DataType >(type_);
}
inline ::ignition::msgs::Statistic_DataType Statistic::type() const {
  // @@protoc_insertion_point(field_get:ignition.msgs.Statistic.type)
  return _internal_type();
}
inline void Statistic::_internal_set_type(::ignition::msgs::Statistic_DataType value) {
  
  type_ = value;
}
inline void Statistic::set_type(::ignition::msgs::Statistic_DataType value) {
  _internal_set_type(value);
  // @@protoc_insertion_point(field_set:ignition.msgs.Statistic.type)
}

// string name = 3;
inline void Statistic::clear_name() {
  name_.ClearToEmpty();
}
inline const std::string& Statistic::name() const {
  // @@protoc_insertion_point(field_get:ignition.msgs.Statistic.name)
  return _internal_name();
}
template <typename ArgT0, typename... ArgT>
inline PROTOBUF_ALWAYS_INLINE
void Statistic::set_name(ArgT0&& arg0, ArgT... args) {
 
 name_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, static_cast<ArgT0 &&>(arg0), args..., GetArenaForAllocation());
  // @@protoc_insertion_point(field_set:ignition.msgs.Statistic.name)
}
inline std::string* Statistic::mutable_name() {
  std::string* _s = _internal_mutable_name();
  // @@protoc_insertion_point(field_mutable:ignition.msgs.Statistic.name)
  return _s;
}
inline const std::string& Statistic::_internal_name() const {
  return name_.Get();
}
inline void Statistic::_internal_set_name(const std::string& value) {
  
  name_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, value, GetArenaForAllocation());
}
inline std::string* Statistic::_internal_mutable_name() {
  
  return name_.Mutable(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, GetArenaForAllocation());
}
inline std::string* Statistic::release_name() {
  // @@protoc_insertion_point(field_release:ignition.msgs.Statistic.name)
  return name_.Release(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), GetArenaForAllocation());
}
inline void Statistic::set_allocated_name(std::string* name) {
  if (name != nullptr) {
    
  } else {
    
  }
  name_.SetAllocated(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), name,
      GetArenaForAllocation());
  // @@protoc_insertion_point(field_set_allocated:ignition.msgs.Statistic.name)
}

// double value = 4;
inline void Statistic::clear_value() {
  value_ = 0;
}
inline double Statistic::_internal_value() const {
  return value_;
}
inline double Statistic::value() const {
  // @@protoc_insertion_point(field_get:ignition.msgs.Statistic.value)
  return _internal_value();
}
inline void Statistic::_internal_set_value(double value) {
  
  value_ = value;
}
inline void Statistic::set_value(double value) {
  _internal_set_value(value);
  // @@protoc_insertion_point(field_set:ignition.msgs.Statistic.value)
}

// -------------------------------------------------------------------

// StatisticsGroup

// .ignition.msgs.Header header = 1;
inline bool StatisticsGroup::_internal_has_header() const {
  return this != internal_default_instance() && header_ != nullptr;
}
inline bool StatisticsGroup::has_header() const {
  return _internal_has_header();
}
inline const ::ignition::msgs::Header& StatisticsGroup::_internal_header() const {
  const ::ignition::msgs::Header* p = header_;
  return p != nullptr ? *p : reinterpret_cast<const ::ignition::msgs::Header&>(
      ::ignition::msgs::_Header_default_instance_);
}
inline const ::ignition::msgs::Header& StatisticsGroup::header() const {
  // @@protoc_insertion_point(field_get:ignition.msgs.StatisticsGroup.header)
  return _internal_header();
}
inline void StatisticsGroup::unsafe_arena_set_allocated_header(
    ::ignition::msgs::Header* header) {
  if (GetArenaForAllocation() == nullptr) {
    delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(header_);
  }
  header_ = header;
  if (header) {
    
  } else {
    
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:ignition.msgs.StatisticsGroup.header)
}
inline ::ignition::msgs::Header* StatisticsGroup::release_header() {
  
  ::ignition::msgs::Header* temp = header_;
  header_ = 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 ::ignition::msgs::Header* StatisticsGroup::unsafe_arena_release_header() {
  // @@protoc_insertion_point(field_release:ignition.msgs.StatisticsGroup.header)
  
  ::ignition::msgs::Header* temp = header_;
  header_ = nullptr;
  return temp;
}
inline ::ignition::msgs::Header* StatisticsGroup::_internal_mutable_header() {
  
  if (header_ == nullptr) {
    auto* p = CreateMaybeMessage<::ignition::msgs::Header>(GetArenaForAllocation());
    header_ = p;
  }
  return header_;
}
inline ::ignition::msgs::Header* StatisticsGroup::mutable_header() {
  ::ignition::msgs::Header* _msg = _internal_mutable_header();
  // @@protoc_insertion_point(field_mutable:ignition.msgs.StatisticsGroup.header)
  return _msg;
}
inline void StatisticsGroup::set_allocated_header(::ignition::msgs::Header* header) {
  ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation();
  if (message_arena == nullptr) {
    delete reinterpret_cast< ::PROTOBUF_NAMESPACE_ID::MessageLite*>(header_);
  }
  if (header) {
    ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena =
        ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper<
            ::PROTOBUF_NAMESPACE_ID::MessageLite>::GetOwningArena(
                reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(header));
    if (message_arena != submessage_arena) {
      header = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
          message_arena, header, submessage_arena);
    }
    
  } else {
    
  }
  header_ = header;
  // @@protoc_insertion_point(field_set_allocated:ignition.msgs.StatisticsGroup.header)
}

// string name = 2;
inline void StatisticsGroup::clear_name() {
  name_.ClearToEmpty();
}
inline const std::string& StatisticsGroup::name() const {
  // @@protoc_insertion_point(field_get:ignition.msgs.StatisticsGroup.name)
  return _internal_name();
}
template <typename ArgT0, typename... ArgT>
inline PROTOBUF_ALWAYS_INLINE
void StatisticsGroup::set_name(ArgT0&& arg0, ArgT... args) {
 
 name_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, static_cast<ArgT0 &&>(arg0), args..., GetArenaForAllocation());
  // @@protoc_insertion_point(field_set:ignition.msgs.StatisticsGroup.name)
}
inline std::string* StatisticsGroup::mutable_name() {
  std::string* _s = _internal_mutable_name();
  // @@protoc_insertion_point(field_mutable:ignition.msgs.StatisticsGroup.name)
  return _s;
}
inline const std::string& StatisticsGroup::_internal_name() const {
  return name_.Get();
}
inline void StatisticsGroup::_internal_set_name(const std::string& value) {
  
  name_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, value, GetArenaForAllocation());
}
inline std::string* StatisticsGroup::_internal_mutable_name() {
  
  return name_.Mutable(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, GetArenaForAllocation());
}
inline std::string* StatisticsGroup::release_name() {
  // @@protoc_insertion_point(field_release:ignition.msgs.StatisticsGroup.name)
  return name_.Release(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), GetArenaForAllocation());
}
inline void StatisticsGroup::set_allocated_name(std::string* name) {
  if (name != nullptr) {
    
  } else {
    
  }
  name_.SetAllocated(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), name,
      GetArenaForAllocation());
  // @@protoc_insertion_point(field_set_allocated:ignition.msgs.StatisticsGroup.name)
}

// repeated .ignition.msgs.Statistic statistics = 3;
inline int StatisticsGroup::_internal_statistics_size() const {
  return statistics_.size();
}
inline int StatisticsGroup::statistics_size() const {
  return _internal_statistics_size();
}
inline void StatisticsGroup::clear_statistics() {
  statistics_.Clear();
}
inline ::ignition::msgs::Statistic* StatisticsGroup::mutable_statistics(int index) {
  // @@protoc_insertion_point(field_mutable:ignition.msgs.StatisticsGroup.statistics)
  return statistics_.Mutable(index);
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::ignition::msgs::Statistic >*
StatisticsGroup::mutable_statistics() {
  // @@protoc_insertion_point(field_mutable_list:ignition.msgs.StatisticsGroup.statistics)
  return &statistics_;
}
inline const ::ignition::msgs::Statistic& StatisticsGroup::_internal_statistics(int index) const {
  return statistics_.Get(index);
}
inline const ::ignition::msgs::Statistic& StatisticsGroup::statistics(int index) const {
  // @@protoc_insertion_point(field_get:ignition.msgs.StatisticsGroup.statistics)
  return _internal_statistics(index);
}
inline ::ignition::msgs::Statistic* StatisticsGroup::_internal_add_statistics() {
  return statistics_.Add();
}
inline ::ignition::msgs::Statistic* StatisticsGroup::add_statistics() {
  ::ignition::msgs::Statistic* _add = _internal_add_statistics();
  // @@protoc_insertion_point(field_add:ignition.msgs.StatisticsGroup.statistics)
  return _add;
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::ignition::msgs::Statistic >&
StatisticsGroup::statistics() const {
  // @@protoc_insertion_point(field_list:ignition.msgs.StatisticsGroup.statistics)
  return statistics_;
}

// -------------------------------------------------------------------

// Metric

// .ignition.msgs.Header header = 1;
inline bool Metric::_internal_has_header() const {
  return this != internal_default_instance() && header_ != nullptr;
}
inline bool Metric::has_header() const {
  return _internal_has_header();
}
inline const ::ignition::msgs::Header& Metric::_internal_header() const {
  const ::ignition::msgs::Header* p = header_;
  return p != nullptr ? *p : reinterpret_cast<const ::ignition::msgs::Header&>(
      ::ignition::msgs::_Header_default_instance_);
}
inline const ::ignition::msgs::Header& Metric::header() const {
  // @@protoc_insertion_point(field_get:ignition.msgs.Metric.header)
  return _internal_header();
}
inline void Metric::unsafe_arena_set_allocated_header(
    ::ignition::msgs::Header* header) {
  if (GetArenaForAllocation() == nullptr) {
    delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(header_);
  }
  header_ = header;
  if (header) {
    
  } else {
    
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:ignition.msgs.Metric.header)
}
inline ::ignition::msgs::Header* Metric::release_header() {
  
  ::ignition::msgs::Header* temp = header_;
  header_ = 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 ::ignition::msgs::Header* Metric::unsafe_arena_release_header() {
  // @@protoc_insertion_point(field_release:ignition.msgs.Metric.header)
  
  ::ignition::msgs::Header* temp = header_;
  header_ = nullptr;
  return temp;
}
inline ::ignition::msgs::Header* Metric::_internal_mutable_header() {
  
  if (header_ == nullptr) {
    auto* p = CreateMaybeMessage<::ignition::msgs::Header>(GetArenaForAllocation());
    header_ = p;
  }
  return header_;
}
inline ::ignition::msgs::Header* Metric::mutable_header() {
  ::ignition::msgs::Header* _msg = _internal_mutable_header();
  // @@protoc_insertion_point(field_mutable:ignition.msgs.Metric.header)
  return _msg;
}
inline void Metric::set_allocated_header(::ignition::msgs::Header* header) {
  ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation();
  if (message_arena == nullptr) {
    delete reinterpret_cast< ::PROTOBUF_NAMESPACE_ID::MessageLite*>(header_);
  }
  if (header) {
    ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena =
        ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper<
            ::PROTOBUF_NAMESPACE_ID::MessageLite>::GetOwningArena(
                reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(header));
    if (message_arena != submessage_arena) {
      header = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
          message_arena, header, submessage_arena);
    }
    
  } else {
    
  }
  header_ = header;
  // @@protoc_insertion_point(field_set_allocated:ignition.msgs.Metric.header)
}

// string unit = 2;
inline void Metric::clear_unit() {
  unit_.ClearToEmpty();
}
inline const std::string& Metric::unit() const {
  // @@protoc_insertion_point(field_get:ignition.msgs.Metric.unit)
  return _internal_unit();
}
template <typename ArgT0, typename... ArgT>
inline PROTOBUF_ALWAYS_INLINE
void Metric::set_unit(ArgT0&& arg0, ArgT... args) {
 
 unit_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, static_cast<ArgT0 &&>(arg0), args..., GetArenaForAllocation());
  // @@protoc_insertion_point(field_set:ignition.msgs.Metric.unit)
}
inline std::string* Metric::mutable_unit() {
  std::string* _s = _internal_mutable_unit();
  // @@protoc_insertion_point(field_mutable:ignition.msgs.Metric.unit)
  return _s;
}
inline const std::string& Metric::_internal_unit() const {
  return unit_.Get();
}
inline void Metric::_internal_set_unit(const std::string& value) {
  
  unit_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, value, GetArenaForAllocation());
}
inline std::string* Metric::_internal_mutable_unit() {
  
  return unit_.Mutable(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, GetArenaForAllocation());
}
inline std::string* Metric::release_unit() {
  // @@protoc_insertion_point(field_release:ignition.msgs.Metric.unit)
  return unit_.Release(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), GetArenaForAllocation());
}
inline void Metric::set_allocated_unit(std::string* unit) {
  if (unit != nullptr) {
    
  } else {
    
  }
  unit_.SetAllocated(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), unit,
      GetArenaForAllocation());
  // @@protoc_insertion_point(field_set_allocated:ignition.msgs.Metric.unit)
}

// repeated .ignition.msgs.StatisticsGroup statistics_groups = 3;
inline int Metric::_internal_statistics_groups_size() const {
  return statistics_groups_.size();
}
inline int Metric::statistics_groups_size() const {
  return _internal_statistics_groups_size();
}
inline void Metric::clear_statistics_groups() {
  statistics_groups_.Clear();
}
inline ::ignition::msgs::StatisticsGroup* Metric::mutable_statistics_groups(int index) {
  // @@protoc_insertion_point(field_mutable:ignition.msgs.Metric.statistics_groups)
  return statistics_groups_.Mutable(index);
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::ignition::msgs::StatisticsGroup >*
Metric::mutable_statistics_groups() {
  // @@protoc_insertion_point(field_mutable_list:ignition.msgs.Metric.statistics_groups)
  return &statistics_groups_;
}
inline const ::ignition::msgs::StatisticsGroup& Metric::_internal_statistics_groups(int index) const {
  return statistics_groups_.Get(index);
}
inline const ::ignition::msgs::StatisticsGroup& Metric::statistics_groups(int index) const {
  // @@protoc_insertion_point(field_get:ignition.msgs.Metric.statistics_groups)
  return _internal_statistics_groups(index);
}
inline ::ignition::msgs::StatisticsGroup* Metric::_internal_add_statistics_groups() {
  return statistics_groups_.Add();
}
inline ::ignition::msgs::StatisticsGroup* Metric::add_statistics_groups() {
  ::ignition::msgs::StatisticsGroup* _add = _internal_add_statistics_groups();
  // @@protoc_insertion_point(field_add:ignition.msgs.Metric.statistics_groups)
  return _add;
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::ignition::msgs::StatisticsGroup >&
Metric::statistics_groups() const {
  // @@protoc_insertion_point(field_list:ignition.msgs.Metric.statistics_groups)
  return statistics_groups_;
}

// repeated .ignition.msgs.Statistic statistics = 4;
inline int Metric::_internal_statistics_size() const {
  return statistics_.size();
}
inline int Metric::statistics_size() const {
  return _internal_statistics_size();
}
inline void Metric::clear_statistics() {
  statistics_.Clear();
}
inline ::ignition::msgs::Statistic* Metric::mutable_statistics(int index) {
  // @@protoc_insertion_point(field_mutable:ignition.msgs.Metric.statistics)
  return statistics_.Mutable(index);
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::ignition::msgs::Statistic >*
Metric::mutable_statistics() {
  // @@protoc_insertion_point(field_mutable_list:ignition.msgs.Metric.statistics)
  return &statistics_;
}
inline const ::ignition::msgs::Statistic& Metric::_internal_statistics(int index) const {
  return statistics_.Get(index);
}
inline const ::ignition::msgs::Statistic& Metric::statistics(int index) const {
  // @@protoc_insertion_point(field_get:ignition.msgs.Metric.statistics)
  return _internal_statistics(index);
}
inline ::ignition::msgs::Statistic* Metric::_internal_add_statistics() {
  return statistics_.Add();
}
inline ::ignition::msgs::Statistic* Metric::add_statistics() {
  ::ignition::msgs::Statistic* _add = _internal_add_statistics();
  // @@protoc_insertion_point(field_add:ignition.msgs.Metric.statistics)
  return _add;
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::ignition::msgs::Statistic >&
Metric::statistics() const {
  // @@protoc_insertion_point(field_list:ignition.msgs.Metric.statistics)
  return statistics_;
}

#ifdef __GNUC__
  #pragma GCC diagnostic pop
#endif  // __GNUC__
// -------------------------------------------------------------------

// -------------------------------------------------------------------


typedef std::unique_ptr<Statistic> StatisticUniquePtr;
typedef std::unique_ptr<const Statistic> ConstStatisticUniquePtr;
typedef std::shared_ptr<Statistic> StatisticSharedPtr;
typedef std::shared_ptr<const Statistic> ConstStatisticSharedPtr;
typedef std::unique_ptr<StatisticsGroup> StatisticsGroupUniquePtr;
typedef std::unique_ptr<const StatisticsGroup> ConstStatisticsGroupUniquePtr;
typedef std::shared_ptr<StatisticsGroup> StatisticsGroupSharedPtr;
typedef std::shared_ptr<const StatisticsGroup> ConstStatisticsGroupSharedPtr;
typedef std::unique_ptr<Metric> MetricUniquePtr;
typedef std::unique_ptr<const Metric> ConstMetricUniquePtr;
typedef std::shared_ptr<Metric> MetricSharedPtr;
typedef std::shared_ptr<const Metric> ConstMetricSharedPtr;
// @@protoc_insertion_point(namespace_scope)

}  // namespace msgs
}  // namespace ignition

PROTOBUF_NAMESPACE_OPEN

template <> struct is_proto_enum< ::ignition::msgs::Statistic_DataType> : ::std::true_type {};
template <>
inline const EnumDescriptor* GetEnumDescriptor< ::ignition::msgs::Statistic_DataType>() {
  return ::ignition::msgs::Statistic_DataType_descriptor();
}

PROTOBUF_NAMESPACE_CLOSE

#ifdef _MSC_VER
#pragma warning(pop)
#endif
// @@protoc_insertion_point(global_scope)

#include <google/protobuf/port_undef.inc>
#endif  // GOOGLE_PROTOBUF_INCLUDED_GOOGLE_PROTOBUF_INCLUDED_ignition_2fmsgs_2fstatistic_2eproto
