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

#ifndef GOOGLE_PROTOBUF_INCLUDED_ignition_2fmsgs_2ffriction_2eproto
#define GOOGLE_PROTOBUF_INCLUDED_ignition_2fmsgs_2ffriction_2eproto

#include <limits>
#include <string>

#include <google/protobuf/port_def.inc>
#if PROTOBUF_VERSION < 3014000
#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 3014000 < 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/unknown_field_set.h>
#include "ignition/msgs/vector3d.pb.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_2ffriction_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_2ffriction_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[];
};
extern IGNITION_MSGS_VISIBLE const ::PROTOBUF_NAMESPACE_ID::internal::DescriptorTable descriptor_table_ignition_2fmsgs_2ffriction_2eproto;
namespace ignition {
namespace msgs {
class Friction;
class FrictionDefaultTypeInternal;
IGNITION_MSGS_VISIBLE extern FrictionDefaultTypeInternal _Friction_default_instance_;
class Friction_Torsional;
class Friction_TorsionalDefaultTypeInternal;
IGNITION_MSGS_VISIBLE extern Friction_TorsionalDefaultTypeInternal _Friction_Torsional_default_instance_;
class Friction_Torsional_ODE;
class Friction_Torsional_ODEDefaultTypeInternal;
IGNITION_MSGS_VISIBLE extern Friction_Torsional_ODEDefaultTypeInternal _Friction_Torsional_ODE_default_instance_;
}  // namespace msgs
}  // namespace ignition
PROTOBUF_NAMESPACE_OPEN
template<> IGNITION_MSGS_VISIBLE ::ignition::msgs::Friction* Arena::CreateMaybeMessage<::ignition::msgs::Friction>(Arena*);
template<> IGNITION_MSGS_VISIBLE ::ignition::msgs::Friction_Torsional* Arena::CreateMaybeMessage<::ignition::msgs::Friction_Torsional>(Arena*);
template<> IGNITION_MSGS_VISIBLE ::ignition::msgs::Friction_Torsional_ODE* Arena::CreateMaybeMessage<::ignition::msgs::Friction_Torsional_ODE>(Arena*);
PROTOBUF_NAMESPACE_CLOSE
namespace ignition {
namespace msgs {

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

class IGNITION_MSGS_VISIBLE Friction_Torsional_ODE PROTOBUF_FINAL :
    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:ignition.msgs.Friction.Torsional.ODE) */ {
 public:
  inline Friction_Torsional_ODE() : Friction_Torsional_ODE(nullptr) {}
  virtual ~Friction_Torsional_ODE();

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

  inline Friction_Torsional_ODE& operator=(const Friction_Torsional_ODE& from) {
    CopyFrom(from);
    return *this;
  }
  inline Friction_Torsional_ODE& operator=(Friction_Torsional_ODE&& from) noexcept {
    if (GetArena() == from.GetArena()) {
      if (this != &from) InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
    return GetDescriptor();
  }
  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
    return GetMetadataStatic().descriptor;
  }
  static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
    return GetMetadataStatic().reflection;
  }
  static const Friction_Torsional_ODE& default_instance();

  static inline const Friction_Torsional_ODE* internal_default_instance() {
    return reinterpret_cast<const Friction_Torsional_ODE*>(
               &_Friction_Torsional_ODE_default_instance_);
  }
  static constexpr int kIndexInFileMessages =
    0;

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

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

  inline Friction_Torsional_ODE* New() const final {
    return CreateMaybeMessage<Friction_Torsional_ODE>(nullptr);
  }

  Friction_Torsional_ODE* New(::PROTOBUF_NAMESPACE_ID::Arena* arena) const final {
    return CreateMaybeMessage<Friction_Torsional_ODE>(arena);
  }
  void CopyFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) final;
  void MergeFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) final;
  void CopyFrom(const Friction_Torsional_ODE& from);
  void MergeFrom(const Friction_Torsional_ODE& from);
  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:
  inline void SharedCtor();
  inline void SharedDtor();
  void SetCachedSize(int size) const final;
  void InternalSwap(Friction_Torsional_ODE* other);
  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
    return "ignition.msgs.Friction.Torsional.ODE";
  }
  protected:
  explicit Friction_Torsional_ODE(::PROTOBUF_NAMESPACE_ID::Arena* arena);
  private:
  static void ArenaDtor(void* object);
  inline void RegisterArenaDtor(::PROTOBUF_NAMESPACE_ID::Arena* arena);
  public:

  ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;
  private:
  static ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadataStatic() {
    ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(&::descriptor_table_ignition_2fmsgs_2ffriction_2eproto);
    return ::descriptor_table_ignition_2fmsgs_2ffriction_2eproto.file_level_metadata[kIndexInFileMessages];
  }

  public:

  // nested types ----------------------------------------------------

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

  enum : int {
    kSlipFieldNumber = 1,
  };
  // double slip = 1;
  void clear_slip();
  double slip() const;
  void set_slip(double value);
  private:
  double _internal_slip() const;
  void _internal_set_slip(double value);
  public:

  // @@protoc_insertion_point(class_scope:ignition.msgs.Friction.Torsional.ODE)
 private:
  class _Internal;

  template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
  typedef void InternalArenaConstructable_;
  typedef void DestructorSkippable_;
  double slip_;
  mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
  friend struct ::TableStruct_ignition_2fmsgs_2ffriction_2eproto;
};
// -------------------------------------------------------------------

class IGNITION_MSGS_VISIBLE Friction_Torsional PROTOBUF_FINAL :
    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:ignition.msgs.Friction.Torsional) */ {
 public:
  inline Friction_Torsional() : Friction_Torsional(nullptr) {}
  virtual ~Friction_Torsional();

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

  inline Friction_Torsional& operator=(const Friction_Torsional& from) {
    CopyFrom(from);
    return *this;
  }
  inline Friction_Torsional& operator=(Friction_Torsional&& from) noexcept {
    if (GetArena() == from.GetArena()) {
      if (this != &from) InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
    return GetDescriptor();
  }
  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
    return GetMetadataStatic().descriptor;
  }
  static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
    return GetMetadataStatic().reflection;
  }
  static const Friction_Torsional& default_instance();

  static inline const Friction_Torsional* internal_default_instance() {
    return reinterpret_cast<const Friction_Torsional*>(
               &_Friction_Torsional_default_instance_);
  }
  static constexpr int kIndexInFileMessages =
    1;

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

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

  inline Friction_Torsional* New() const final {
    return CreateMaybeMessage<Friction_Torsional>(nullptr);
  }

  Friction_Torsional* New(::PROTOBUF_NAMESPACE_ID::Arena* arena) const final {
    return CreateMaybeMessage<Friction_Torsional>(arena);
  }
  void CopyFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) final;
  void MergeFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) final;
  void CopyFrom(const Friction_Torsional& from);
  void MergeFrom(const Friction_Torsional& from);
  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:
  inline void SharedCtor();
  inline void SharedDtor();
  void SetCachedSize(int size) const final;
  void InternalSwap(Friction_Torsional* other);
  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
    return "ignition.msgs.Friction.Torsional";
  }
  protected:
  explicit Friction_Torsional(::PROTOBUF_NAMESPACE_ID::Arena* arena);
  private:
  static void ArenaDtor(void* object);
  inline void RegisterArenaDtor(::PROTOBUF_NAMESPACE_ID::Arena* arena);
  public:

  ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;
  private:
  static ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadataStatic() {
    ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(&::descriptor_table_ignition_2fmsgs_2ffriction_2eproto);
    return ::descriptor_table_ignition_2fmsgs_2ffriction_2eproto.file_level_metadata[kIndexInFileMessages];
  }

  public:

  // nested types ----------------------------------------------------

  typedef Friction_Torsional_ODE ODE;

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

  enum : int {
    kOdeFieldNumber = 5,
    kCoefficientFieldNumber = 1,
    kPatchRadiusFieldNumber = 3,
    kSurfaceRadiusFieldNumber = 4,
    kUsePatchRadiusFieldNumber = 2,
  };
  // .ignition.msgs.Friction.Torsional.ODE ode = 5;
  bool has_ode() const;
  private:
  bool _internal_has_ode() const;
  public:
  void clear_ode();
  const ::ignition::msgs::Friction_Torsional_ODE& ode() const;
  ::ignition::msgs::Friction_Torsional_ODE* release_ode();
  ::ignition::msgs::Friction_Torsional_ODE* mutable_ode();
  void set_allocated_ode(::ignition::msgs::Friction_Torsional_ODE* ode);
  private:
  const ::ignition::msgs::Friction_Torsional_ODE& _internal_ode() const;
  ::ignition::msgs::Friction_Torsional_ODE* _internal_mutable_ode();
  public:
  void unsafe_arena_set_allocated_ode(
      ::ignition::msgs::Friction_Torsional_ODE* ode);
  ::ignition::msgs::Friction_Torsional_ODE* unsafe_arena_release_ode();

  // double coefficient = 1;
  void clear_coefficient();
  double coefficient() const;
  void set_coefficient(double value);
  private:
  double _internal_coefficient() const;
  void _internal_set_coefficient(double value);
  public:

  // double patch_radius = 3;
  void clear_patch_radius();
  double patch_radius() const;
  void set_patch_radius(double value);
  private:
  double _internal_patch_radius() const;
  void _internal_set_patch_radius(double value);
  public:

  // double surface_radius = 4;
  void clear_surface_radius();
  double surface_radius() const;
  void set_surface_radius(double value);
  private:
  double _internal_surface_radius() const;
  void _internal_set_surface_radius(double value);
  public:

  // bool use_patch_radius = 2;
  void clear_use_patch_radius();
  bool use_patch_radius() const;
  void set_use_patch_radius(bool value);
  private:
  bool _internal_use_patch_radius() const;
  void _internal_set_use_patch_radius(bool value);
  public:

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

  template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
  typedef void InternalArenaConstructable_;
  typedef void DestructorSkippable_;
  ::ignition::msgs::Friction_Torsional_ODE* ode_;
  double coefficient_;
  double patch_radius_;
  double surface_radius_;
  bool use_patch_radius_;
  mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
  friend struct ::TableStruct_ignition_2fmsgs_2ffriction_2eproto;
};
// -------------------------------------------------------------------

class IGNITION_MSGS_VISIBLE Friction PROTOBUF_FINAL :
    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:ignition.msgs.Friction) */ {
 public:
  inline Friction() : Friction(nullptr) {}
  virtual ~Friction();

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

  inline Friction& operator=(const Friction& from) {
    CopyFrom(from);
    return *this;
  }
  inline Friction& operator=(Friction&& from) noexcept {
    if (GetArena() == from.GetArena()) {
      if (this != &from) InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
    return GetDescriptor();
  }
  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
    return GetMetadataStatic().descriptor;
  }
  static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
    return GetMetadataStatic().reflection;
  }
  static const Friction& default_instance();

  static inline const Friction* internal_default_instance() {
    return reinterpret_cast<const Friction*>(
               &_Friction_default_instance_);
  }
  static constexpr int kIndexInFileMessages =
    2;

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

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

  inline Friction* New() const final {
    return CreateMaybeMessage<Friction>(nullptr);
  }

  Friction* New(::PROTOBUF_NAMESPACE_ID::Arena* arena) const final {
    return CreateMaybeMessage<Friction>(arena);
  }
  void CopyFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) final;
  void MergeFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) final;
  void CopyFrom(const Friction& from);
  void MergeFrom(const Friction& from);
  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:
  inline void SharedCtor();
  inline void SharedDtor();
  void SetCachedSize(int size) const final;
  void InternalSwap(Friction* other);
  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
    return "ignition.msgs.Friction";
  }
  protected:
  explicit Friction(::PROTOBUF_NAMESPACE_ID::Arena* arena);
  private:
  static void ArenaDtor(void* object);
  inline void RegisterArenaDtor(::PROTOBUF_NAMESPACE_ID::Arena* arena);
  public:

  ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;
  private:
  static ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadataStatic() {
    ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(&::descriptor_table_ignition_2fmsgs_2ffriction_2eproto);
    return ::descriptor_table_ignition_2fmsgs_2ffriction_2eproto.file_level_metadata[kIndexInFileMessages];
  }

  public:

  // nested types ----------------------------------------------------

  typedef Friction_Torsional Torsional;

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

  enum : int {
    kHeaderFieldNumber = 1,
    kFdir1FieldNumber = 4,
    kTorsionalFieldNumber = 7,
    kMuFieldNumber = 2,
    kMu2FieldNumber = 3,
    kSlip1FieldNumber = 5,
    kSlip2FieldNumber = 6,
  };
  // .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;
  ::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();

  // .ignition.msgs.Vector3d fdir1 = 4;
  bool has_fdir1() const;
  private:
  bool _internal_has_fdir1() const;
  public:
  void clear_fdir1();
  const ::ignition::msgs::Vector3d& fdir1() const;
  ::ignition::msgs::Vector3d* release_fdir1();
  ::ignition::msgs::Vector3d* mutable_fdir1();
  void set_allocated_fdir1(::ignition::msgs::Vector3d* fdir1);
  private:
  const ::ignition::msgs::Vector3d& _internal_fdir1() const;
  ::ignition::msgs::Vector3d* _internal_mutable_fdir1();
  public:
  void unsafe_arena_set_allocated_fdir1(
      ::ignition::msgs::Vector3d* fdir1);
  ::ignition::msgs::Vector3d* unsafe_arena_release_fdir1();

  // .ignition.msgs.Friction.Torsional torsional = 7;
  bool has_torsional() const;
  private:
  bool _internal_has_torsional() const;
  public:
  void clear_torsional();
  const ::ignition::msgs::Friction_Torsional& torsional() const;
  ::ignition::msgs::Friction_Torsional* release_torsional();
  ::ignition::msgs::Friction_Torsional* mutable_torsional();
  void set_allocated_torsional(::ignition::msgs::Friction_Torsional* torsional);
  private:
  const ::ignition::msgs::Friction_Torsional& _internal_torsional() const;
  ::ignition::msgs::Friction_Torsional* _internal_mutable_torsional();
  public:
  void unsafe_arena_set_allocated_torsional(
      ::ignition::msgs::Friction_Torsional* torsional);
  ::ignition::msgs::Friction_Torsional* unsafe_arena_release_torsional();

  // double mu = 2;
  void clear_mu();
  double mu() const;
  void set_mu(double value);
  private:
  double _internal_mu() const;
  void _internal_set_mu(double value);
  public:

  // double mu2 = 3;
  void clear_mu2();
  double mu2() const;
  void set_mu2(double value);
  private:
  double _internal_mu2() const;
  void _internal_set_mu2(double value);
  public:

  // double slip1 = 5;
  void clear_slip1();
  double slip1() const;
  void set_slip1(double value);
  private:
  double _internal_slip1() const;
  void _internal_set_slip1(double value);
  public:

  // double slip2 = 6;
  void clear_slip2();
  double slip2() const;
  void set_slip2(double value);
  private:
  double _internal_slip2() const;
  void _internal_set_slip2(double value);
  public:

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

  template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
  typedef void InternalArenaConstructable_;
  typedef void DestructorSkippable_;
  ::ignition::msgs::Header* header_;
  ::ignition::msgs::Vector3d* fdir1_;
  ::ignition::msgs::Friction_Torsional* torsional_;
  double mu_;
  double mu2_;
  double slip1_;
  double slip2_;
  mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
  friend struct ::TableStruct_ignition_2fmsgs_2ffriction_2eproto;
};
// ===================================================================


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

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

// double slip = 1;
inline void Friction_Torsional_ODE::clear_slip() {
  slip_ = 0;
}
inline double Friction_Torsional_ODE::_internal_slip() const {
  return slip_;
}
inline double Friction_Torsional_ODE::slip() const {
  // @@protoc_insertion_point(field_get:ignition.msgs.Friction.Torsional.ODE.slip)
  return _internal_slip();
}
inline void Friction_Torsional_ODE::_internal_set_slip(double value) {
  
  slip_ = value;
}
inline void Friction_Torsional_ODE::set_slip(double value) {
  _internal_set_slip(value);
  // @@protoc_insertion_point(field_set:ignition.msgs.Friction.Torsional.ODE.slip)
}

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

// Friction_Torsional

// double coefficient = 1;
inline void Friction_Torsional::clear_coefficient() {
  coefficient_ = 0;
}
inline double Friction_Torsional::_internal_coefficient() const {
  return coefficient_;
}
inline double Friction_Torsional::coefficient() const {
  // @@protoc_insertion_point(field_get:ignition.msgs.Friction.Torsional.coefficient)
  return _internal_coefficient();
}
inline void Friction_Torsional::_internal_set_coefficient(double value) {
  
  coefficient_ = value;
}
inline void Friction_Torsional::set_coefficient(double value) {
  _internal_set_coefficient(value);
  // @@protoc_insertion_point(field_set:ignition.msgs.Friction.Torsional.coefficient)
}

// bool use_patch_radius = 2;
inline void Friction_Torsional::clear_use_patch_radius() {
  use_patch_radius_ = false;
}
inline bool Friction_Torsional::_internal_use_patch_radius() const {
  return use_patch_radius_;
}
inline bool Friction_Torsional::use_patch_radius() const {
  // @@protoc_insertion_point(field_get:ignition.msgs.Friction.Torsional.use_patch_radius)
  return _internal_use_patch_radius();
}
inline void Friction_Torsional::_internal_set_use_patch_radius(bool value) {
  
  use_patch_radius_ = value;
}
inline void Friction_Torsional::set_use_patch_radius(bool value) {
  _internal_set_use_patch_radius(value);
  // @@protoc_insertion_point(field_set:ignition.msgs.Friction.Torsional.use_patch_radius)
}

// double patch_radius = 3;
inline void Friction_Torsional::clear_patch_radius() {
  patch_radius_ = 0;
}
inline double Friction_Torsional::_internal_patch_radius() const {
  return patch_radius_;
}
inline double Friction_Torsional::patch_radius() const {
  // @@protoc_insertion_point(field_get:ignition.msgs.Friction.Torsional.patch_radius)
  return _internal_patch_radius();
}
inline void Friction_Torsional::_internal_set_patch_radius(double value) {
  
  patch_radius_ = value;
}
inline void Friction_Torsional::set_patch_radius(double value) {
  _internal_set_patch_radius(value);
  // @@protoc_insertion_point(field_set:ignition.msgs.Friction.Torsional.patch_radius)
}

// double surface_radius = 4;
inline void Friction_Torsional::clear_surface_radius() {
  surface_radius_ = 0;
}
inline double Friction_Torsional::_internal_surface_radius() const {
  return surface_radius_;
}
inline double Friction_Torsional::surface_radius() const {
  // @@protoc_insertion_point(field_get:ignition.msgs.Friction.Torsional.surface_radius)
  return _internal_surface_radius();
}
inline void Friction_Torsional::_internal_set_surface_radius(double value) {
  
  surface_radius_ = value;
}
inline void Friction_Torsional::set_surface_radius(double value) {
  _internal_set_surface_radius(value);
  // @@protoc_insertion_point(field_set:ignition.msgs.Friction.Torsional.surface_radius)
}

// .ignition.msgs.Friction.Torsional.ODE ode = 5;
inline bool Friction_Torsional::_internal_has_ode() const {
  return this != internal_default_instance() && ode_ != nullptr;
}
inline bool Friction_Torsional::has_ode() const {
  return _internal_has_ode();
}
inline void Friction_Torsional::clear_ode() {
  if (GetArena() == nullptr && ode_ != nullptr) {
    delete ode_;
  }
  ode_ = nullptr;
}
inline const ::ignition::msgs::Friction_Torsional_ODE& Friction_Torsional::_internal_ode() const {
  const ::ignition::msgs::Friction_Torsional_ODE* p = ode_;
  return p != nullptr ? *p : reinterpret_cast<const ::ignition::msgs::Friction_Torsional_ODE&>(
      ::ignition::msgs::_Friction_Torsional_ODE_default_instance_);
}
inline const ::ignition::msgs::Friction_Torsional_ODE& Friction_Torsional::ode() const {
  // @@protoc_insertion_point(field_get:ignition.msgs.Friction.Torsional.ode)
  return _internal_ode();
}
inline void Friction_Torsional::unsafe_arena_set_allocated_ode(
    ::ignition::msgs::Friction_Torsional_ODE* ode) {
  if (GetArena() == nullptr) {
    delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(ode_);
  }
  ode_ = ode;
  if (ode) {
    
  } else {
    
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:ignition.msgs.Friction.Torsional.ode)
}
inline ::ignition::msgs::Friction_Torsional_ODE* Friction_Torsional::release_ode() {
  
  ::ignition::msgs::Friction_Torsional_ODE* temp = ode_;
  ode_ = nullptr;
  if (GetArena() != nullptr) {
    temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  }
  return temp;
}
inline ::ignition::msgs::Friction_Torsional_ODE* Friction_Torsional::unsafe_arena_release_ode() {
  // @@protoc_insertion_point(field_release:ignition.msgs.Friction.Torsional.ode)
  
  ::ignition::msgs::Friction_Torsional_ODE* temp = ode_;
  ode_ = nullptr;
  return temp;
}
inline ::ignition::msgs::Friction_Torsional_ODE* Friction_Torsional::_internal_mutable_ode() {
  
  if (ode_ == nullptr) {
    auto* p = CreateMaybeMessage<::ignition::msgs::Friction_Torsional_ODE>(GetArena());
    ode_ = p;
  }
  return ode_;
}
inline ::ignition::msgs::Friction_Torsional_ODE* Friction_Torsional::mutable_ode() {
  // @@protoc_insertion_point(field_mutable:ignition.msgs.Friction.Torsional.ode)
  return _internal_mutable_ode();
}
inline void Friction_Torsional::set_allocated_ode(::ignition::msgs::Friction_Torsional_ODE* ode) {
  ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArena();
  if (message_arena == nullptr) {
    delete ode_;
  }
  if (ode) {
    ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena =
      ::PROTOBUF_NAMESPACE_ID::Arena::GetArena(ode);
    if (message_arena != submessage_arena) {
      ode = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
          message_arena, ode, submessage_arena);
    }
    
  } else {
    
  }
  ode_ = ode;
  // @@protoc_insertion_point(field_set_allocated:ignition.msgs.Friction.Torsional.ode)
}

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

// Friction

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

// double mu = 2;
inline void Friction::clear_mu() {
  mu_ = 0;
}
inline double Friction::_internal_mu() const {
  return mu_;
}
inline double Friction::mu() const {
  // @@protoc_insertion_point(field_get:ignition.msgs.Friction.mu)
  return _internal_mu();
}
inline void Friction::_internal_set_mu(double value) {
  
  mu_ = value;
}
inline void Friction::set_mu(double value) {
  _internal_set_mu(value);
  // @@protoc_insertion_point(field_set:ignition.msgs.Friction.mu)
}

// double mu2 = 3;
inline void Friction::clear_mu2() {
  mu2_ = 0;
}
inline double Friction::_internal_mu2() const {
  return mu2_;
}
inline double Friction::mu2() const {
  // @@protoc_insertion_point(field_get:ignition.msgs.Friction.mu2)
  return _internal_mu2();
}
inline void Friction::_internal_set_mu2(double value) {
  
  mu2_ = value;
}
inline void Friction::set_mu2(double value) {
  _internal_set_mu2(value);
  // @@protoc_insertion_point(field_set:ignition.msgs.Friction.mu2)
}

// .ignition.msgs.Vector3d fdir1 = 4;
inline bool Friction::_internal_has_fdir1() const {
  return this != internal_default_instance() && fdir1_ != nullptr;
}
inline bool Friction::has_fdir1() const {
  return _internal_has_fdir1();
}
inline const ::ignition::msgs::Vector3d& Friction::_internal_fdir1() const {
  const ::ignition::msgs::Vector3d* p = fdir1_;
  return p != nullptr ? *p : reinterpret_cast<const ::ignition::msgs::Vector3d&>(
      ::ignition::msgs::_Vector3d_default_instance_);
}
inline const ::ignition::msgs::Vector3d& Friction::fdir1() const {
  // @@protoc_insertion_point(field_get:ignition.msgs.Friction.fdir1)
  return _internal_fdir1();
}
inline void Friction::unsafe_arena_set_allocated_fdir1(
    ::ignition::msgs::Vector3d* fdir1) {
  if (GetArena() == nullptr) {
    delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(fdir1_);
  }
  fdir1_ = fdir1;
  if (fdir1) {
    
  } else {
    
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:ignition.msgs.Friction.fdir1)
}
inline ::ignition::msgs::Vector3d* Friction::release_fdir1() {
  
  ::ignition::msgs::Vector3d* temp = fdir1_;
  fdir1_ = nullptr;
  if (GetArena() != nullptr) {
    temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  }
  return temp;
}
inline ::ignition::msgs::Vector3d* Friction::unsafe_arena_release_fdir1() {
  // @@protoc_insertion_point(field_release:ignition.msgs.Friction.fdir1)
  
  ::ignition::msgs::Vector3d* temp = fdir1_;
  fdir1_ = nullptr;
  return temp;
}
inline ::ignition::msgs::Vector3d* Friction::_internal_mutable_fdir1() {
  
  if (fdir1_ == nullptr) {
    auto* p = CreateMaybeMessage<::ignition::msgs::Vector3d>(GetArena());
    fdir1_ = p;
  }
  return fdir1_;
}
inline ::ignition::msgs::Vector3d* Friction::mutable_fdir1() {
  // @@protoc_insertion_point(field_mutable:ignition.msgs.Friction.fdir1)
  return _internal_mutable_fdir1();
}
inline void Friction::set_allocated_fdir1(::ignition::msgs::Vector3d* fdir1) {
  ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArena();
  if (message_arena == nullptr) {
    delete reinterpret_cast< ::PROTOBUF_NAMESPACE_ID::MessageLite*>(fdir1_);
  }
  if (fdir1) {
    ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena =
      reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(fdir1)->GetArena();
    if (message_arena != submessage_arena) {
      fdir1 = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
          message_arena, fdir1, submessage_arena);
    }
    
  } else {
    
  }
  fdir1_ = fdir1;
  // @@protoc_insertion_point(field_set_allocated:ignition.msgs.Friction.fdir1)
}

// double slip1 = 5;
inline void Friction::clear_slip1() {
  slip1_ = 0;
}
inline double Friction::_internal_slip1() const {
  return slip1_;
}
inline double Friction::slip1() const {
  // @@protoc_insertion_point(field_get:ignition.msgs.Friction.slip1)
  return _internal_slip1();
}
inline void Friction::_internal_set_slip1(double value) {
  
  slip1_ = value;
}
inline void Friction::set_slip1(double value) {
  _internal_set_slip1(value);
  // @@protoc_insertion_point(field_set:ignition.msgs.Friction.slip1)
}

// double slip2 = 6;
inline void Friction::clear_slip2() {
  slip2_ = 0;
}
inline double Friction::_internal_slip2() const {
  return slip2_;
}
inline double Friction::slip2() const {
  // @@protoc_insertion_point(field_get:ignition.msgs.Friction.slip2)
  return _internal_slip2();
}
inline void Friction::_internal_set_slip2(double value) {
  
  slip2_ = value;
}
inline void Friction::set_slip2(double value) {
  _internal_set_slip2(value);
  // @@protoc_insertion_point(field_set:ignition.msgs.Friction.slip2)
}

// .ignition.msgs.Friction.Torsional torsional = 7;
inline bool Friction::_internal_has_torsional() const {
  return this != internal_default_instance() && torsional_ != nullptr;
}
inline bool Friction::has_torsional() const {
  return _internal_has_torsional();
}
inline void Friction::clear_torsional() {
  if (GetArena() == nullptr && torsional_ != nullptr) {
    delete torsional_;
  }
  torsional_ = nullptr;
}
inline const ::ignition::msgs::Friction_Torsional& Friction::_internal_torsional() const {
  const ::ignition::msgs::Friction_Torsional* p = torsional_;
  return p != nullptr ? *p : reinterpret_cast<const ::ignition::msgs::Friction_Torsional&>(
      ::ignition::msgs::_Friction_Torsional_default_instance_);
}
inline const ::ignition::msgs::Friction_Torsional& Friction::torsional() const {
  // @@protoc_insertion_point(field_get:ignition.msgs.Friction.torsional)
  return _internal_torsional();
}
inline void Friction::unsafe_arena_set_allocated_torsional(
    ::ignition::msgs::Friction_Torsional* torsional) {
  if (GetArena() == nullptr) {
    delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(torsional_);
  }
  torsional_ = torsional;
  if (torsional) {
    
  } else {
    
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:ignition.msgs.Friction.torsional)
}
inline ::ignition::msgs::Friction_Torsional* Friction::release_torsional() {
  
  ::ignition::msgs::Friction_Torsional* temp = torsional_;
  torsional_ = nullptr;
  if (GetArena() != nullptr) {
    temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  }
  return temp;
}
inline ::ignition::msgs::Friction_Torsional* Friction::unsafe_arena_release_torsional() {
  // @@protoc_insertion_point(field_release:ignition.msgs.Friction.torsional)
  
  ::ignition::msgs::Friction_Torsional* temp = torsional_;
  torsional_ = nullptr;
  return temp;
}
inline ::ignition::msgs::Friction_Torsional* Friction::_internal_mutable_torsional() {
  
  if (torsional_ == nullptr) {
    auto* p = CreateMaybeMessage<::ignition::msgs::Friction_Torsional>(GetArena());
    torsional_ = p;
  }
  return torsional_;
}
inline ::ignition::msgs::Friction_Torsional* Friction::mutable_torsional() {
  // @@protoc_insertion_point(field_mutable:ignition.msgs.Friction.torsional)
  return _internal_mutable_torsional();
}
inline void Friction::set_allocated_torsional(::ignition::msgs::Friction_Torsional* torsional) {
  ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArena();
  if (message_arena == nullptr) {
    delete torsional_;
  }
  if (torsional) {
    ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena =
      ::PROTOBUF_NAMESPACE_ID::Arena::GetArena(torsional);
    if (message_arena != submessage_arena) {
      torsional = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
          message_arena, torsional, submessage_arena);
    }
    
  } else {
    
  }
  torsional_ = torsional;
  // @@protoc_insertion_point(field_set_allocated:ignition.msgs.Friction.torsional)
}

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

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


typedef std::unique_ptr<Friction> FrictionUniquePtr;
typedef std::unique_ptr<const Friction> ConstFrictionUniquePtr;
typedef std::shared_ptr<Friction> FrictionSharedPtr;
typedef std::shared_ptr<const Friction> ConstFrictionSharedPtr;
// @@protoc_insertion_point(namespace_scope)

}  // namespace msgs
}  // namespace ignition

#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_2ffriction_2eproto
