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

#ifndef GOOGLE_PROTOBUF_INCLUDED_friction_2eproto
#define GOOGLE_PROTOBUF_INCLUDED_friction_2eproto

#include <limits>
#include <string>

#include <google/protobuf/port_def.inc>
#if PROTOBUF_VERSION < 3020000
#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 3020001 < 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 "vector3d.pb.h"
#ifndef _MSC_VER
#pragma GCC system_header
#pragma GCC diagnostic ignored "-Wshadow"
#pragma GCC diagnostic ignored "-Wunused-parameter"
#endif
#include <boost/shared_ptr.hpp>
#include <gazebo/util/system.hh>
#include "gazebo/msgs/MsgFactory.hh"
// @@protoc_insertion_point(includes)
#include <google/protobuf/port_def.inc>
#define PROTOBUF_INTERNAL_EXPORT_friction_2eproto GZ_MSGS_VISIBLE
PROTOBUF_NAMESPACE_OPEN
namespace internal {
class AnyMetadata;
}  // namespace internal
PROTOBUF_NAMESPACE_CLOSE

// Internal implementation detail -- do not use these members.
struct GZ_MSGS_VISIBLE TableStruct_friction_2eproto {
  static const uint32_t offsets[];
};
GZ_MSGS_VISIBLE extern const ::PROTOBUF_NAMESPACE_ID::internal::DescriptorTable descriptor_table_friction_2eproto;
namespace gazebo {
namespace msgs {
class Friction;
struct FrictionDefaultTypeInternal;
GZ_MSGS_VISIBLE extern FrictionDefaultTypeInternal _Friction_default_instance_;
class Friction_Torsional;
struct Friction_TorsionalDefaultTypeInternal;
GZ_MSGS_VISIBLE extern Friction_TorsionalDefaultTypeInternal _Friction_Torsional_default_instance_;
class Friction_Torsional_ODE;
struct Friction_Torsional_ODEDefaultTypeInternal;
GZ_MSGS_VISIBLE extern Friction_Torsional_ODEDefaultTypeInternal _Friction_Torsional_ODE_default_instance_;
}  // namespace msgs
}  // namespace gazebo
PROTOBUF_NAMESPACE_OPEN
template<> GZ_MSGS_VISIBLE ::gazebo::msgs::Friction* Arena::CreateMaybeMessage<::gazebo::msgs::Friction>(Arena*);
template<> GZ_MSGS_VISIBLE ::gazebo::msgs::Friction_Torsional* Arena::CreateMaybeMessage<::gazebo::msgs::Friction_Torsional>(Arena*);
template<> GZ_MSGS_VISIBLE ::gazebo::msgs::Friction_Torsional_ODE* Arena::CreateMaybeMessage<::gazebo::msgs::Friction_Torsional_ODE>(Arena*);
PROTOBUF_NAMESPACE_CLOSE
namespace gazebo {
namespace msgs {

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

class GZ_MSGS_VISIBLE Friction_Torsional_ODE final :
    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:gazebo.msgs.Friction.Torsional.ODE) */ {
 public:
  inline Friction_Torsional_ODE() : Friction_Torsional_ODE(nullptr) {}
  ~Friction_Torsional_ODE() override;
  explicit PROTOBUF_CONSTEXPR Friction_Torsional_ODE(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);

  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 (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 Friction_Torsional_ODE& default_instance() {
    return *internal_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;
  #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(Friction_Torsional_ODE* other) {
    if (other == this) return;
    GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena());
    InternalSwap(other);
  }

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

  Friction_Torsional_ODE* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final {
    return CreateMaybeMessage<Friction_Torsional_ODE>(arena);
  }
  using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom;
  void CopyFrom(const Friction_Torsional_ODE& from);
  using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom;
  void MergeFrom(const Friction_Torsional_ODE& 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;
  uint8_t* _InternalSerialize(
      uint8_t* 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(Friction_Torsional_ODE* other);

  private:
  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
    return "gazebo.msgs.Friction.Torsional.ODE";
  }
  protected:
  explicit Friction_Torsional_ODE(::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 {
    kSlipFieldNumber = 1,
  };
  // optional double slip = 1;
  bool has_slip() const;
  private:
  bool _internal_has_slip() const;
  public:
  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:gazebo.msgs.Friction.Torsional.ODE)
 private:
  class _Internal;

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

class GZ_MSGS_VISIBLE Friction_Torsional final :
    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:gazebo.msgs.Friction.Torsional) */ {
 public:
  inline Friction_Torsional() : Friction_Torsional(nullptr) {}
  ~Friction_Torsional() override;
  explicit PROTOBUF_CONSTEXPR Friction_Torsional(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);

  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 (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 Friction_Torsional& default_instance() {
    return *internal_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;
  #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(Friction_Torsional* other) {
    if (other == this) return;
    GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena());
    InternalSwap(other);
  }

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

  Friction_Torsional* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final {
    return CreateMaybeMessage<Friction_Torsional>(arena);
  }
  using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom;
  void CopyFrom(const Friction_Torsional& from);
  using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom;
  void MergeFrom(const Friction_Torsional& 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;
  uint8_t* _InternalSerialize(
      uint8_t* 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(Friction_Torsional* other);

  private:
  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
    return "gazebo.msgs.Friction.Torsional";
  }
  protected:
  explicit Friction_Torsional(::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 Friction_Torsional_ODE ODE;

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

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

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

  // optional double patch_radius = 3;
  bool has_patch_radius() const;
  private:
  bool _internal_has_patch_radius() const;
  public:
  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:

  // optional double surface_radius = 4;
  bool has_surface_radius() const;
  private:
  bool _internal_has_surface_radius() const;
  public:
  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:

  // optional bool use_patch_radius = 2;
  bool has_use_patch_radius() const;
  private:
  bool _internal_has_use_patch_radius() const;
  public:
  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:gazebo.msgs.Friction.Torsional)
 private:
  class _Internal;

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

class GZ_MSGS_VISIBLE Friction final :
    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:gazebo.msgs.Friction) */ {
 public:
  inline Friction() : Friction(nullptr) {}
  ~Friction() override;
  explicit PROTOBUF_CONSTEXPR Friction(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);

  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 (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 Friction& default_instance() {
    return *internal_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;
  #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(Friction* other) {
    if (other == this) return;
    GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena());
    InternalSwap(other);
  }

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

  Friction* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final {
    return CreateMaybeMessage<Friction>(arena);
  }
  using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom;
  void CopyFrom(const Friction& from);
  using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom;
  void MergeFrom(const Friction& 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;
  uint8_t* _InternalSerialize(
      uint8_t* 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(Friction* other);

  private:
  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
    return "gazebo.msgs.Friction";
  }
  protected:
  explicit Friction(::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 Friction_Torsional Torsional;

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

  enum : int {
    kFdir1FieldNumber = 3,
    kTorsionalFieldNumber = 6,
    kMuFieldNumber = 1,
    kMu2FieldNumber = 2,
    kSlip1FieldNumber = 4,
    kSlip2FieldNumber = 5,
  };
  // optional .gazebo.msgs.Vector3d fdir1 = 3;
  bool has_fdir1() const;
  private:
  bool _internal_has_fdir1() const;
  public:
  void clear_fdir1();
  const ::gazebo::msgs::Vector3d& fdir1() const;
  PROTOBUF_NODISCARD ::gazebo::msgs::Vector3d* release_fdir1();
  ::gazebo::msgs::Vector3d* mutable_fdir1();
  void set_allocated_fdir1(::gazebo::msgs::Vector3d* fdir1);
  private:
  const ::gazebo::msgs::Vector3d& _internal_fdir1() const;
  ::gazebo::msgs::Vector3d* _internal_mutable_fdir1();
  public:
  void unsafe_arena_set_allocated_fdir1(
      ::gazebo::msgs::Vector3d* fdir1);
  ::gazebo::msgs::Vector3d* unsafe_arena_release_fdir1();

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

  // optional double mu = 1;
  bool has_mu() const;
  private:
  bool _internal_has_mu() const;
  public:
  void clear_mu();
  double mu() const;
  void set_mu(double value);
  private:
  double _internal_mu() const;
  void _internal_set_mu(double value);
  public:

  // optional double mu2 = 2;
  bool has_mu2() const;
  private:
  bool _internal_has_mu2() const;
  public:
  void clear_mu2();
  double mu2() const;
  void set_mu2(double value);
  private:
  double _internal_mu2() const;
  void _internal_set_mu2(double value);
  public:

  // optional double slip1 = 4;
  bool has_slip1() const;
  private:
  bool _internal_has_slip1() const;
  public:
  void clear_slip1();
  double slip1() const;
  void set_slip1(double value);
  private:
  double _internal_slip1() const;
  void _internal_set_slip1(double value);
  public:

  // optional double slip2 = 5;
  bool has_slip2() const;
  private:
  bool _internal_has_slip2() const;
  public:
  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:gazebo.msgs.Friction)
 private:
  class _Internal;

  template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
  typedef void InternalArenaConstructable_;
  typedef void DestructorSkippable_;
  ::PROTOBUF_NAMESPACE_ID::internal::HasBits<1> _has_bits_;
  mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
  ::gazebo::msgs::Vector3d* fdir1_;
  ::gazebo::msgs::Friction_Torsional* torsional_;
  double mu_;
  double mu2_;
  double slip1_;
  double slip2_;
  friend struct ::TableStruct_friction_2eproto;
};
// ===================================================================


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

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

// optional double slip = 1;
inline bool Friction_Torsional_ODE::_internal_has_slip() const {
  bool value = (_has_bits_[0] & 0x00000001u) != 0;
  return value;
}
inline bool Friction_Torsional_ODE::has_slip() const {
  return _internal_has_slip();
}
inline void Friction_Torsional_ODE::clear_slip() {
  slip_ = 0;
  _has_bits_[0] &= ~0x00000001u;
}
inline double Friction_Torsional_ODE::_internal_slip() const {
  return slip_;
}
inline double Friction_Torsional_ODE::slip() const {
  // @@protoc_insertion_point(field_get:gazebo.msgs.Friction.Torsional.ODE.slip)
  return _internal_slip();
}
inline void Friction_Torsional_ODE::_internal_set_slip(double value) {
  _has_bits_[0] |= 0x00000001u;
  slip_ = value;
}
inline void Friction_Torsional_ODE::set_slip(double value) {
  _internal_set_slip(value);
  // @@protoc_insertion_point(field_set:gazebo.msgs.Friction.Torsional.ODE.slip)
}

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

// Friction_Torsional

// optional double coefficient = 1;
inline bool Friction_Torsional::_internal_has_coefficient() const {
  bool value = (_has_bits_[0] & 0x00000002u) != 0;
  return value;
}
inline bool Friction_Torsional::has_coefficient() const {
  return _internal_has_coefficient();
}
inline void Friction_Torsional::clear_coefficient() {
  coefficient_ = 0;
  _has_bits_[0] &= ~0x00000002u;
}
inline double Friction_Torsional::_internal_coefficient() const {
  return coefficient_;
}
inline double Friction_Torsional::coefficient() const {
  // @@protoc_insertion_point(field_get:gazebo.msgs.Friction.Torsional.coefficient)
  return _internal_coefficient();
}
inline void Friction_Torsional::_internal_set_coefficient(double value) {
  _has_bits_[0] |= 0x00000002u;
  coefficient_ = value;
}
inline void Friction_Torsional::set_coefficient(double value) {
  _internal_set_coefficient(value);
  // @@protoc_insertion_point(field_set:gazebo.msgs.Friction.Torsional.coefficient)
}

// optional bool use_patch_radius = 2;
inline bool Friction_Torsional::_internal_has_use_patch_radius() const {
  bool value = (_has_bits_[0] & 0x00000010u) != 0;
  return value;
}
inline bool Friction_Torsional::has_use_patch_radius() const {
  return _internal_has_use_patch_radius();
}
inline void Friction_Torsional::clear_use_patch_radius() {
  use_patch_radius_ = false;
  _has_bits_[0] &= ~0x00000010u;
}
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:gazebo.msgs.Friction.Torsional.use_patch_radius)
  return _internal_use_patch_radius();
}
inline void Friction_Torsional::_internal_set_use_patch_radius(bool value) {
  _has_bits_[0] |= 0x00000010u;
  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:gazebo.msgs.Friction.Torsional.use_patch_radius)
}

// optional double patch_radius = 3;
inline bool Friction_Torsional::_internal_has_patch_radius() const {
  bool value = (_has_bits_[0] & 0x00000004u) != 0;
  return value;
}
inline bool Friction_Torsional::has_patch_radius() const {
  return _internal_has_patch_radius();
}
inline void Friction_Torsional::clear_patch_radius() {
  patch_radius_ = 0;
  _has_bits_[0] &= ~0x00000004u;
}
inline double Friction_Torsional::_internal_patch_radius() const {
  return patch_radius_;
}
inline double Friction_Torsional::patch_radius() const {
  // @@protoc_insertion_point(field_get:gazebo.msgs.Friction.Torsional.patch_radius)
  return _internal_patch_radius();
}
inline void Friction_Torsional::_internal_set_patch_radius(double value) {
  _has_bits_[0] |= 0x00000004u;
  patch_radius_ = value;
}
inline void Friction_Torsional::set_patch_radius(double value) {
  _internal_set_patch_radius(value);
  // @@protoc_insertion_point(field_set:gazebo.msgs.Friction.Torsional.patch_radius)
}

// optional double surface_radius = 4;
inline bool Friction_Torsional::_internal_has_surface_radius() const {
  bool value = (_has_bits_[0] & 0x00000008u) != 0;
  return value;
}
inline bool Friction_Torsional::has_surface_radius() const {
  return _internal_has_surface_radius();
}
inline void Friction_Torsional::clear_surface_radius() {
  surface_radius_ = 0;
  _has_bits_[0] &= ~0x00000008u;
}
inline double Friction_Torsional::_internal_surface_radius() const {
  return surface_radius_;
}
inline double Friction_Torsional::surface_radius() const {
  // @@protoc_insertion_point(field_get:gazebo.msgs.Friction.Torsional.surface_radius)
  return _internal_surface_radius();
}
inline void Friction_Torsional::_internal_set_surface_radius(double value) {
  _has_bits_[0] |= 0x00000008u;
  surface_radius_ = value;
}
inline void Friction_Torsional::set_surface_radius(double value) {
  _internal_set_surface_radius(value);
  // @@protoc_insertion_point(field_set:gazebo.msgs.Friction.Torsional.surface_radius)
}

// optional .gazebo.msgs.Friction.Torsional.ODE ode = 5;
inline bool Friction_Torsional::_internal_has_ode() const {
  bool value = (_has_bits_[0] & 0x00000001u) != 0;
  PROTOBUF_ASSUME(!value || ode_ != nullptr);
  return value;
}
inline bool Friction_Torsional::has_ode() const {
  return _internal_has_ode();
}
inline void Friction_Torsional::clear_ode() {
  if (ode_ != nullptr) ode_->Clear();
  _has_bits_[0] &= ~0x00000001u;
}
inline const ::gazebo::msgs::Friction_Torsional_ODE& Friction_Torsional::_internal_ode() const {
  const ::gazebo::msgs::Friction_Torsional_ODE* p = ode_;
  return p != nullptr ? *p : reinterpret_cast<const ::gazebo::msgs::Friction_Torsional_ODE&>(
      ::gazebo::msgs::_Friction_Torsional_ODE_default_instance_);
}
inline const ::gazebo::msgs::Friction_Torsional_ODE& Friction_Torsional::ode() const {
  // @@protoc_insertion_point(field_get:gazebo.msgs.Friction.Torsional.ode)
  return _internal_ode();
}
inline void Friction_Torsional::unsafe_arena_set_allocated_ode(
    ::gazebo::msgs::Friction_Torsional_ODE* ode) {
  if (GetArenaForAllocation() == nullptr) {
    delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(ode_);
  }
  ode_ = ode;
  if (ode) {
    _has_bits_[0] |= 0x00000001u;
  } else {
    _has_bits_[0] &= ~0x00000001u;
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:gazebo.msgs.Friction.Torsional.ode)
}
inline ::gazebo::msgs::Friction_Torsional_ODE* Friction_Torsional::release_ode() {
  _has_bits_[0] &= ~0x00000001u;
  ::gazebo::msgs::Friction_Torsional_ODE* temp = ode_;
  ode_ = 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 ::gazebo::msgs::Friction_Torsional_ODE* Friction_Torsional::unsafe_arena_release_ode() {
  // @@protoc_insertion_point(field_release:gazebo.msgs.Friction.Torsional.ode)
  _has_bits_[0] &= ~0x00000001u;
  ::gazebo::msgs::Friction_Torsional_ODE* temp = ode_;
  ode_ = nullptr;
  return temp;
}
inline ::gazebo::msgs::Friction_Torsional_ODE* Friction_Torsional::_internal_mutable_ode() {
  _has_bits_[0] |= 0x00000001u;
  if (ode_ == nullptr) {
    auto* p = CreateMaybeMessage<::gazebo::msgs::Friction_Torsional_ODE>(GetArenaForAllocation());
    ode_ = p;
  }
  return ode_;
}
inline ::gazebo::msgs::Friction_Torsional_ODE* Friction_Torsional::mutable_ode() {
  ::gazebo::msgs::Friction_Torsional_ODE* _msg = _internal_mutable_ode();
  // @@protoc_insertion_point(field_mutable:gazebo.msgs.Friction.Torsional.ode)
  return _msg;
}
inline void Friction_Torsional::set_allocated_ode(::gazebo::msgs::Friction_Torsional_ODE* ode) {
  ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation();
  if (message_arena == nullptr) {
    delete ode_;
  }
  if (ode) {
    ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena =
        ::PROTOBUF_NAMESPACE_ID::Arena::InternalGetOwningArena(ode);
    if (message_arena != submessage_arena) {
      ode = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
          message_arena, ode, submessage_arena);
    }
    _has_bits_[0] |= 0x00000001u;
  } else {
    _has_bits_[0] &= ~0x00000001u;
  }
  ode_ = ode;
  // @@protoc_insertion_point(field_set_allocated:gazebo.msgs.Friction.Torsional.ode)
}

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

// Friction

// optional double mu = 1;
inline bool Friction::_internal_has_mu() const {
  bool value = (_has_bits_[0] & 0x00000004u) != 0;
  return value;
}
inline bool Friction::has_mu() const {
  return _internal_has_mu();
}
inline void Friction::clear_mu() {
  mu_ = 0;
  _has_bits_[0] &= ~0x00000004u;
}
inline double Friction::_internal_mu() const {
  return mu_;
}
inline double Friction::mu() const {
  // @@protoc_insertion_point(field_get:gazebo.msgs.Friction.mu)
  return _internal_mu();
}
inline void Friction::_internal_set_mu(double value) {
  _has_bits_[0] |= 0x00000004u;
  mu_ = value;
}
inline void Friction::set_mu(double value) {
  _internal_set_mu(value);
  // @@protoc_insertion_point(field_set:gazebo.msgs.Friction.mu)
}

// optional double mu2 = 2;
inline bool Friction::_internal_has_mu2() const {
  bool value = (_has_bits_[0] & 0x00000008u) != 0;
  return value;
}
inline bool Friction::has_mu2() const {
  return _internal_has_mu2();
}
inline void Friction::clear_mu2() {
  mu2_ = 0;
  _has_bits_[0] &= ~0x00000008u;
}
inline double Friction::_internal_mu2() const {
  return mu2_;
}
inline double Friction::mu2() const {
  // @@protoc_insertion_point(field_get:gazebo.msgs.Friction.mu2)
  return _internal_mu2();
}
inline void Friction::_internal_set_mu2(double value) {
  _has_bits_[0] |= 0x00000008u;
  mu2_ = value;
}
inline void Friction::set_mu2(double value) {
  _internal_set_mu2(value);
  // @@protoc_insertion_point(field_set:gazebo.msgs.Friction.mu2)
}

// optional .gazebo.msgs.Vector3d fdir1 = 3;
inline bool Friction::_internal_has_fdir1() const {
  bool value = (_has_bits_[0] & 0x00000001u) != 0;
  PROTOBUF_ASSUME(!value || fdir1_ != nullptr);
  return value;
}
inline bool Friction::has_fdir1() const {
  return _internal_has_fdir1();
}
inline const ::gazebo::msgs::Vector3d& Friction::_internal_fdir1() const {
  const ::gazebo::msgs::Vector3d* p = fdir1_;
  return p != nullptr ? *p : reinterpret_cast<const ::gazebo::msgs::Vector3d&>(
      ::gazebo::msgs::_Vector3d_default_instance_);
}
inline const ::gazebo::msgs::Vector3d& Friction::fdir1() const {
  // @@protoc_insertion_point(field_get:gazebo.msgs.Friction.fdir1)
  return _internal_fdir1();
}
inline void Friction::unsafe_arena_set_allocated_fdir1(
    ::gazebo::msgs::Vector3d* fdir1) {
  if (GetArenaForAllocation() == nullptr) {
    delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(fdir1_);
  }
  fdir1_ = fdir1;
  if (fdir1) {
    _has_bits_[0] |= 0x00000001u;
  } else {
    _has_bits_[0] &= ~0x00000001u;
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:gazebo.msgs.Friction.fdir1)
}
inline ::gazebo::msgs::Vector3d* Friction::release_fdir1() {
  _has_bits_[0] &= ~0x00000001u;
  ::gazebo::msgs::Vector3d* temp = fdir1_;
  fdir1_ = 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 ::gazebo::msgs::Vector3d* Friction::unsafe_arena_release_fdir1() {
  // @@protoc_insertion_point(field_release:gazebo.msgs.Friction.fdir1)
  _has_bits_[0] &= ~0x00000001u;
  ::gazebo::msgs::Vector3d* temp = fdir1_;
  fdir1_ = nullptr;
  return temp;
}
inline ::gazebo::msgs::Vector3d* Friction::_internal_mutable_fdir1() {
  _has_bits_[0] |= 0x00000001u;
  if (fdir1_ == nullptr) {
    auto* p = CreateMaybeMessage<::gazebo::msgs::Vector3d>(GetArenaForAllocation());
    fdir1_ = p;
  }
  return fdir1_;
}
inline ::gazebo::msgs::Vector3d* Friction::mutable_fdir1() {
  ::gazebo::msgs::Vector3d* _msg = _internal_mutable_fdir1();
  // @@protoc_insertion_point(field_mutable:gazebo.msgs.Friction.fdir1)
  return _msg;
}
inline void Friction::set_allocated_fdir1(::gazebo::msgs::Vector3d* fdir1) {
  ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation();
  if (message_arena == nullptr) {
    delete reinterpret_cast< ::PROTOBUF_NAMESPACE_ID::MessageLite*>(fdir1_);
  }
  if (fdir1) {
    ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena =
        ::PROTOBUF_NAMESPACE_ID::Arena::InternalGetOwningArena(
                reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(fdir1));
    if (message_arena != submessage_arena) {
      fdir1 = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
          message_arena, fdir1, submessage_arena);
    }
    _has_bits_[0] |= 0x00000001u;
  } else {
    _has_bits_[0] &= ~0x00000001u;
  }
  fdir1_ = fdir1;
  // @@protoc_insertion_point(field_set_allocated:gazebo.msgs.Friction.fdir1)
}

// optional double slip1 = 4;
inline bool Friction::_internal_has_slip1() const {
  bool value = (_has_bits_[0] & 0x00000010u) != 0;
  return value;
}
inline bool Friction::has_slip1() const {
  return _internal_has_slip1();
}
inline void Friction::clear_slip1() {
  slip1_ = 0;
  _has_bits_[0] &= ~0x00000010u;
}
inline double Friction::_internal_slip1() const {
  return slip1_;
}
inline double Friction::slip1() const {
  // @@protoc_insertion_point(field_get:gazebo.msgs.Friction.slip1)
  return _internal_slip1();
}
inline void Friction::_internal_set_slip1(double value) {
  _has_bits_[0] |= 0x00000010u;
  slip1_ = value;
}
inline void Friction::set_slip1(double value) {
  _internal_set_slip1(value);
  // @@protoc_insertion_point(field_set:gazebo.msgs.Friction.slip1)
}

// optional double slip2 = 5;
inline bool Friction::_internal_has_slip2() const {
  bool value = (_has_bits_[0] & 0x00000020u) != 0;
  return value;
}
inline bool Friction::has_slip2() const {
  return _internal_has_slip2();
}
inline void Friction::clear_slip2() {
  slip2_ = 0;
  _has_bits_[0] &= ~0x00000020u;
}
inline double Friction::_internal_slip2() const {
  return slip2_;
}
inline double Friction::slip2() const {
  // @@protoc_insertion_point(field_get:gazebo.msgs.Friction.slip2)
  return _internal_slip2();
}
inline void Friction::_internal_set_slip2(double value) {
  _has_bits_[0] |= 0x00000020u;
  slip2_ = value;
}
inline void Friction::set_slip2(double value) {
  _internal_set_slip2(value);
  // @@protoc_insertion_point(field_set:gazebo.msgs.Friction.slip2)
}

// optional .gazebo.msgs.Friction.Torsional torsional = 6;
inline bool Friction::_internal_has_torsional() const {
  bool value = (_has_bits_[0] & 0x00000002u) != 0;
  PROTOBUF_ASSUME(!value || torsional_ != nullptr);
  return value;
}
inline bool Friction::has_torsional() const {
  return _internal_has_torsional();
}
inline void Friction::clear_torsional() {
  if (torsional_ != nullptr) torsional_->Clear();
  _has_bits_[0] &= ~0x00000002u;
}
inline const ::gazebo::msgs::Friction_Torsional& Friction::_internal_torsional() const {
  const ::gazebo::msgs::Friction_Torsional* p = torsional_;
  return p != nullptr ? *p : reinterpret_cast<const ::gazebo::msgs::Friction_Torsional&>(
      ::gazebo::msgs::_Friction_Torsional_default_instance_);
}
inline const ::gazebo::msgs::Friction_Torsional& Friction::torsional() const {
  // @@protoc_insertion_point(field_get:gazebo.msgs.Friction.torsional)
  return _internal_torsional();
}
inline void Friction::unsafe_arena_set_allocated_torsional(
    ::gazebo::msgs::Friction_Torsional* torsional) {
  if (GetArenaForAllocation() == nullptr) {
    delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(torsional_);
  }
  torsional_ = torsional;
  if (torsional) {
    _has_bits_[0] |= 0x00000002u;
  } else {
    _has_bits_[0] &= ~0x00000002u;
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:gazebo.msgs.Friction.torsional)
}
inline ::gazebo::msgs::Friction_Torsional* Friction::release_torsional() {
  _has_bits_[0] &= ~0x00000002u;
  ::gazebo::msgs::Friction_Torsional* temp = torsional_;
  torsional_ = 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 ::gazebo::msgs::Friction_Torsional* Friction::unsafe_arena_release_torsional() {
  // @@protoc_insertion_point(field_release:gazebo.msgs.Friction.torsional)
  _has_bits_[0] &= ~0x00000002u;
  ::gazebo::msgs::Friction_Torsional* temp = torsional_;
  torsional_ = nullptr;
  return temp;
}
inline ::gazebo::msgs::Friction_Torsional* Friction::_internal_mutable_torsional() {
  _has_bits_[0] |= 0x00000002u;
  if (torsional_ == nullptr) {
    auto* p = CreateMaybeMessage<::gazebo::msgs::Friction_Torsional>(GetArenaForAllocation());
    torsional_ = p;
  }
  return torsional_;
}
inline ::gazebo::msgs::Friction_Torsional* Friction::mutable_torsional() {
  ::gazebo::msgs::Friction_Torsional* _msg = _internal_mutable_torsional();
  // @@protoc_insertion_point(field_mutable:gazebo.msgs.Friction.torsional)
  return _msg;
}
inline void Friction::set_allocated_torsional(::gazebo::msgs::Friction_Torsional* torsional) {
  ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation();
  if (message_arena == nullptr) {
    delete torsional_;
  }
  if (torsional) {
    ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena =
        ::PROTOBUF_NAMESPACE_ID::Arena::InternalGetOwningArena(torsional);
    if (message_arena != submessage_arena) {
      torsional = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
          message_arena, torsional, submessage_arena);
    }
    _has_bits_[0] |= 0x00000002u;
  } else {
    _has_bits_[0] &= ~0x00000002u;
  }
  torsional_ = torsional;
  // @@protoc_insertion_point(field_set_allocated:gazebo.msgs.Friction.torsional)
}

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

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


typedef boost::shared_ptr<gazebo::msgs::Friction> FrictionPtr;
// @@protoc_insertion_point(namespace_scope)

}  // namespace msgs
}  // namespace gazebo

typedef const boost::shared_ptr<gazebo::msgs::Friction const> ConstFrictionPtr;
// @@protoc_insertion_point(global_scope)

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