4 #ifndef GOOGLE_PROTOBUF_INCLUDED_jaiabot_2fmessages_2fmotor_2eproto
5 #define GOOGLE_PROTOBUF_INCLUDED_jaiabot_2fmessages_2fmotor_2eproto
10 #include <google/protobuf/port_def.inc>
11 #if PROTOBUF_VERSION < 3012000
12 #error This file was generated by a newer version of protoc which is
13 #error incompatible with your Protocol Buffer headers. Please update
16 #if 3012004 < PROTOBUF_MIN_PROTOC_VERSION
17 #error This file was generated by an older version of protoc which is
18 #error incompatible with your Protocol Buffer headers. Please
19 #error regenerate this file with a newer version of protoc.
22 #include <google/protobuf/port_undef.inc>
23 #include <google/protobuf/io/coded_stream.h>
24 #include <google/protobuf/arena.h>
25 #include <google/protobuf/arenastring.h>
26 #include <google/protobuf/generated_message_table_driven.h>
27 #include <google/protobuf/generated_message_util.h>
28 #include <google/protobuf/inlined_string_field.h>
29 #include <google/protobuf/metadata_lite.h>
30 #include <google/protobuf/generated_message_reflection.h>
31 #include <google/protobuf/message.h>
32 #include <google/protobuf/repeated_field.h>
33 #include <google/protobuf/extension_set.h>
34 #include <google/protobuf/generated_enum_reflection.h>
35 #include <google/protobuf/unknown_field_set.h>
36 #include "dccl/option_extensions.pb.h"
37 #include <boost/units/quantity.hpp>
38 #include <boost/units/absolute.hpp>
39 #include <boost/units/dimensionless_type.hpp>
40 #include <boost/units/make_scaled_unit.hpp>
42 #include <boost/units/systems/temperature/celsius.hpp>
44 #include <google/protobuf/port_def.inc>
45 #define PROTOBUF_INTERNAL_EXPORT_jaiabot_2fmessages_2fmotor_2eproto
46 PROTOBUF_NAMESPACE_OPEN
50 PROTOBUF_NAMESPACE_CLOSE
54 static const ::PROTOBUF_NAMESPACE_ID::internal::ParseTableField entries[]
56 static const ::PROTOBUF_NAMESPACE_ID::internal::AuxillaryParseTableField aux[]
58 static const ::PROTOBUF_NAMESPACE_ID::internal::ParseTable schema[2]
60 static const ::PROTOBUF_NAMESPACE_ID::internal::FieldMetadata
field_metadata[];
62 static const ::PROTOBUF_NAMESPACE_ID::uint32
offsets[];
68 class MotorDefaultTypeInternal;
70 class Motor_Thermistor;
71 class Motor_ThermistorDefaultTypeInternal;
75 PROTOBUF_NAMESPACE_OPEN
76 template<> ::jaiabot::protobuf::Motor* Arena::CreateMaybeMessage<::jaiabot::protobuf::Motor>(Arena*);
77 template<> ::jaiabot::protobuf::Motor_Thermistor* Arena::CreateMaybeMessage<::jaiabot::protobuf::Motor_Thermistor>(Arena*);
78 PROTOBUF_NAMESPACE_CLOSE
94 static_assert(::std::is_same<T, MotorHarnessType>::value ||
95 ::std::is_integral<T>::value,
96 "Incorrect type passed to function MotorHarnessType_Name.");
97 return ::PROTOBUF_NAMESPACE_ID::internal::NameOfEnum(
102 return ::PROTOBUF_NAMESPACE_ID::internal::ParseNamedEnum<MotorHarnessType>(
107 class Motor_Thermistor PROTOBUF_FINAL :
108 public ::PROTOBUF_NAMESPACE_ID::Message {
115 : Motor_Thermistor() {
116 *
this = ::std::move(from);
119 inline Motor_Thermistor&
operator=(
const Motor_Thermistor& from) {
123 inline Motor_Thermistor&
operator=(Motor_Thermistor&& from) noexcept {
124 if (GetArena() == from.GetArena()) {
125 if (
this != &from) InternalSwap(&from);
133 return _internal_metadata_.unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(::PROTOBUF_NAMESPACE_ID::UnknownFieldSet::default_instance);
136 return _internal_metadata_.mutable_unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>();
139 static const ::PROTOBUF_NAMESPACE_ID::Descriptor*
descriptor() {
140 return GetDescriptor();
143 return GetMetadataStatic().descriptor;
146 return GetMetadataStatic().reflection;
152 return reinterpret_cast<const Motor_Thermistor*
>(
155 static constexpr
int kIndexInFileMessages =
158 friend void swap(Motor_Thermistor& a, Motor_Thermistor& b) {
161 inline void Swap(Motor_Thermistor* other) {
162 if (other ==
this)
return;
163 if (GetArena() == other->GetArena()) {
166 ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(
this, other);
170 if (other ==
this)
return;
171 GOOGLE_DCHECK(GetArena() == other->GetArena());
177 inline Motor_Thermistor*
New() const final {
178 return CreateMaybeMessage<Motor_Thermistor>(
nullptr);
181 Motor_Thermistor*
New(::PROTOBUF_NAMESPACE_ID::Arena* arena)
const final {
182 return CreateMaybeMessage<Motor_Thermistor>(arena);
184 void CopyFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from)
final;
185 void MergeFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from)
final;
188 PROTOBUF_ATTRIBUTE_REINITIALIZES
void Clear() final;
189 bool IsInitialized() const final;
191 size_t ByteSizeLong() const final;
192 const
char* _InternalParse(const
char* ptr, ::PROTOBUF_NAMESPACE_ID::
internal::ParseContext* ctx) final;
193 ::PROTOBUF_NAMESPACE_ID::uint8* _InternalSerialize(
194 ::PROTOBUF_NAMESPACE_ID::uint8* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final;
195 int GetCachedSize() const final {
return _cached_size_.Get(); }
198 inline void SharedCtor();
199 inline void SharedDtor();
200 void SetCachedSize(
int size)
const final;
201 void InternalSwap(Motor_Thermistor* other);
202 friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
203 static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
204 return "jaiabot.protobuf.Motor.Thermistor";
209 static void ArenaDtor(
void*
object);
210 inline void RegisterArenaDtor(::PROTOBUF_NAMESPACE_ID::Arena* arena);
215 static ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadataStatic() {
227 kTemperatureFieldNumber = 1,
228 kResistanceFieldNumber = 2,
229 kVoltageFieldNumber = 3,
234 bool _internal_has_temperature()
const;
240 float _internal_temperature()
const;
241 void _internal_set_temperature(
float value);
247 bool _internal_has_resistance()
const;
253 float _internal_resistance()
const;
254 void _internal_set_resistance(
float value);
260 bool _internal_has_voltage()
const;
266 float _internal_voltage()
const;
267 void _internal_set_voltage(
float value);
272 typedef boost::units::absolute<boost::units::unit<temperature_dimension,boost::units::celsius::system> >
temperature_unit;
274 template<
typename Quantity >
276 { set_temperature(boost::units::quantity<temperature_unit,float >(value_w_units).value() ); };
278 template<
typename Quantity >
283 {
return temperature_with_units<boost::units::quantity< temperature_unit,float > >(); };
289 template <
typename T>
friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
290 typedef void InternalArenaConstructable_;
291 typedef void DestructorSkippable_;
292 ::PROTOBUF_NAMESPACE_ID::internal::HasBits<1> _has_bits_;
293 mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
297 friend struct ::TableStruct_jaiabot_2fmessages_2fmotor_2eproto;
302 public ::PROTOBUF_NAMESPACE_ID::Message {
310 *
this = ::std::move(from);
318 if (GetArena() == from.GetArena()) {
319 if (
this != &from) InternalSwap(&from);
327 return _internal_metadata_.unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(::PROTOBUF_NAMESPACE_ID::UnknownFieldSet::default_instance);
330 return _internal_metadata_.mutable_unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>();
333 static const ::PROTOBUF_NAMESPACE_ID::Descriptor*
descriptor() {
334 return GetDescriptor();
337 return GetMetadataStatic().descriptor;
340 return GetMetadataStatic().reflection;
346 return reinterpret_cast<const Motor*
>(
349 static constexpr
int kIndexInFileMessages =
352 friend void swap(Motor& a, Motor& b) {
355 inline void Swap(Motor* other) {
356 if (other ==
this)
return;
357 if (GetArena() == other->GetArena()) {
360 ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(
this, other);
364 if (other ==
this)
return;
365 GOOGLE_DCHECK(GetArena() == other->GetArena());
371 inline Motor*
New() const final {
372 return CreateMaybeMessage<Motor>(
nullptr);
375 Motor*
New(::PROTOBUF_NAMESPACE_ID::Arena* arena)
const final {
376 return CreateMaybeMessage<Motor>(arena);
378 void CopyFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from)
final;
379 void MergeFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from)
final;
382 PROTOBUF_ATTRIBUTE_REINITIALIZES
void Clear() final;
383 bool IsInitialized() const final;
385 size_t ByteSizeLong() const final;
386 const
char* _InternalParse(const
char* ptr, ::PROTOBUF_NAMESPACE_ID::
internal::ParseContext* ctx) final;
387 ::PROTOBUF_NAMESPACE_ID::uint8* _InternalSerialize(
388 ::PROTOBUF_NAMESPACE_ID::uint8* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final;
389 int GetCachedSize() const final {
return _cached_size_.Get(); }
392 inline void SharedCtor();
393 inline void SharedDtor();
394 void SetCachedSize(
int size)
const final;
395 void InternalSwap(Motor* other);
396 friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
397 static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
398 return "jaiabot.protobuf.Motor";
401 explicit Motor(::PROTOBUF_NAMESPACE_ID::Arena* arena);
403 static void ArenaDtor(
void*
object);
404 inline void RegisterArenaDtor(::PROTOBUF_NAMESPACE_ID::Arena* arena);
409 static ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadataStatic() {
423 kThermistorFieldNumber = 2,
425 kMotorHarnessTypeFieldNumber = 3,
430 bool _internal_has_thermistor()
const;
433 const ::jaiabot::protobuf::Motor_Thermistor&
thermistor()
const;
438 const ::jaiabot::protobuf::Motor_Thermistor& _internal_thermistor()
const;
439 ::jaiabot::protobuf::Motor_Thermistor* _internal_mutable_thermistor();
442 ::jaiabot::protobuf::Motor_Thermistor* thermistor);
448 bool _internal_has_rpm()
const;
454 double _internal_rpm()
const;
455 void _internal_set_rpm(
double value);
461 bool _internal_has_motor_harness_type()
const;
475 template <
typename T>
friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
476 typedef void InternalArenaConstructable_;
477 typedef void DestructorSkippable_;
478 ::PROTOBUF_NAMESPACE_ID::internal::HasBits<1> _has_bits_;
479 mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
480 ::jaiabot::protobuf::Motor_Thermistor* thermistor_;
482 int motor_harness_type_;
483 friend struct ::TableStruct_jaiabot_2fmessages_2fmotor_2eproto;
491 #pragma GCC diagnostic push
492 #pragma GCC diagnostic ignored "-Wstrict-aliasing"
497 inline bool Motor_Thermistor::_internal_has_temperature()
const {
498 bool value = (_has_bits_[0] & 0x00000001u) != 0;
501 inline bool Motor_Thermistor::has_temperature()
const {
502 return _internal_has_temperature();
504 inline void Motor_Thermistor::clear_temperature() {
506 _has_bits_[0] &= ~0x00000001u;
508 inline float Motor_Thermistor::_internal_temperature()
const {
511 inline float Motor_Thermistor::temperature()
const {
513 return _internal_temperature();
515 inline void Motor_Thermistor::_internal_set_temperature(
float value) {
516 _has_bits_[0] |= 0x00000001u;
517 temperature_ = value;
519 inline void Motor_Thermistor::set_temperature(
float value) {
520 _internal_set_temperature(value);
525 inline bool Motor_Thermistor::_internal_has_resistance()
const {
526 bool value = (_has_bits_[0] & 0x00000002u) != 0;
529 inline bool Motor_Thermistor::has_resistance()
const {
530 return _internal_has_resistance();
532 inline void Motor_Thermistor::clear_resistance() {
534 _has_bits_[0] &= ~0x00000002u;
536 inline float Motor_Thermistor::_internal_resistance()
const {
539 inline float Motor_Thermistor::resistance()
const {
541 return _internal_resistance();
543 inline void Motor_Thermistor::_internal_set_resistance(
float value) {
544 _has_bits_[0] |= 0x00000002u;
547 inline void Motor_Thermistor::set_resistance(
float value) {
548 _internal_set_resistance(value);
553 inline bool Motor_Thermistor::_internal_has_voltage()
const {
554 bool value = (_has_bits_[0] & 0x00000004u) != 0;
557 inline bool Motor_Thermistor::has_voltage()
const {
558 return _internal_has_voltage();
560 inline void Motor_Thermistor::clear_voltage() {
562 _has_bits_[0] &= ~0x00000004u;
564 inline float Motor_Thermistor::_internal_voltage()
const {
567 inline float Motor_Thermistor::voltage()
const {
569 return _internal_voltage();
571 inline void Motor_Thermistor::_internal_set_voltage(
float value) {
572 _has_bits_[0] |= 0x00000004u;
575 inline void Motor_Thermistor::set_voltage(
float value) {
576 _internal_set_voltage(value);
585 inline bool Motor::_internal_has_rpm()
const {
586 bool value = (_has_bits_[0] & 0x00000002u) != 0;
589 inline bool Motor::has_rpm()
const {
590 return _internal_has_rpm();
592 inline void Motor::clear_rpm() {
594 _has_bits_[0] &= ~0x00000002u;
596 inline double Motor::_internal_rpm()
const {
599 inline double Motor::rpm()
const {
601 return _internal_rpm();
603 inline void Motor::_internal_set_rpm(
double value) {
604 _has_bits_[0] |= 0x00000002u;
607 inline void Motor::set_rpm(
double value) {
608 _internal_set_rpm(value);
613 inline bool Motor::_internal_has_thermistor()
const {
614 bool value = (_has_bits_[0] & 0x00000001u) != 0;
615 PROTOBUF_ASSUME(!value || thermistor_ !=
nullptr);
618 inline bool Motor::has_thermistor()
const {
619 return _internal_has_thermistor();
621 inline void Motor::clear_thermistor() {
622 if (thermistor_ !=
nullptr) thermistor_->Clear();
623 _has_bits_[0] &= ~0x00000001u;
625 inline const ::jaiabot::protobuf::Motor_Thermistor& Motor::_internal_thermistor()
const {
626 const ::jaiabot::protobuf::Motor_Thermistor* p = thermistor_;
627 return p !=
nullptr ? *p : *
reinterpret_cast<const ::jaiabot::protobuf::Motor_Thermistor*
>(
630 inline const ::jaiabot::protobuf::Motor_Thermistor& Motor::thermistor()
const {
632 return _internal_thermistor();
634 inline void Motor::unsafe_arena_set_allocated_thermistor(
635 ::jaiabot::protobuf::Motor_Thermistor* thermistor) {
636 if (GetArena() ==
nullptr) {
637 delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*
>(thermistor_);
639 thermistor_ = thermistor;
641 _has_bits_[0] |= 0x00000001u;
643 _has_bits_[0] &= ~0x00000001u;
647 inline ::jaiabot::protobuf::Motor_Thermistor* Motor::release_thermistor() {
648 auto temp = unsafe_arena_release_thermistor();
649 if (GetArena() !=
nullptr) {
650 temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
654 inline ::jaiabot::protobuf::Motor_Thermistor* Motor::unsafe_arena_release_thermistor() {
656 _has_bits_[0] &= ~0x00000001u;
657 ::jaiabot::protobuf::Motor_Thermistor* temp = thermistor_;
658 thermistor_ =
nullptr;
661 inline ::jaiabot::protobuf::Motor_Thermistor* Motor::_internal_mutable_thermistor() {
662 _has_bits_[0] |= 0x00000001u;
663 if (thermistor_ ==
nullptr) {
664 auto* p = CreateMaybeMessage<::jaiabot::protobuf::Motor_Thermistor>(GetArena());
669 inline ::jaiabot::protobuf::Motor_Thermistor* Motor::mutable_thermistor() {
671 return _internal_mutable_thermistor();
673 inline void Motor::set_allocated_thermistor(::jaiabot::protobuf::Motor_Thermistor* thermistor) {
674 ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArena();
675 if (message_arena ==
nullptr) {
679 ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena =
680 ::PROTOBUF_NAMESPACE_ID::Arena::GetArena(thermistor);
681 if (message_arena != submessage_arena) {
682 thermistor = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
683 message_arena, thermistor, submessage_arena);
685 _has_bits_[0] |= 0x00000001u;
687 _has_bits_[0] &= ~0x00000001u;
689 thermistor_ = thermistor;
694 inline bool Motor::_internal_has_motor_harness_type()
const {
695 bool value = (_has_bits_[0] & 0x00000004u) != 0;
698 inline bool Motor::has_motor_harness_type()
const {
699 return _internal_has_motor_harness_type();
701 inline void Motor::clear_motor_harness_type() {
702 motor_harness_type_ = 1;
703 _has_bits_[0] &= ~0x00000004u;
710 return _internal_motor_harness_type();
714 _has_bits_[0] |= 0x00000004u;
715 motor_harness_type_ = value;
718 _internal_set_motor_harness_type(value);
723 #pragma GCC diagnostic pop
733 PROTOBUF_NAMESPACE_OPEN
737 inline const EnumDescriptor* GetEnumDescriptor< ::jaiabot::protobuf::MotorHarnessType>() {
741 PROTOBUF_NAMESPACE_CLOSE
745 #include <google/protobuf/port_undef.inc>
void CopyFrom(const Motor_Thermistor &from)
Motor & operator=(const Motor &from)
void set_allocated_thermistor(::jaiabot::protobuf::Motor_Thermistor *thermistor)
void UnsafeArenaSwap(Motor_Thermistor *other)
virtual ~Motor_Thermistor()
const ::PROTOBUF_NAMESPACE_ID::UnknownFieldSet & unknown_fields() const
void set_motor_harness_type(::jaiabot::protobuf::MotorHarnessType value)
static const Motor_Thermistor & default_instance()
::jaiabot::protobuf::Motor_Thermistor * unsafe_arena_release_thermistor()
static const Motor * internal_default_instance()
void clear_motor_harness_type()
bool has_thermistor() const
Motor_Thermistor(::PROTOBUF_NAMESPACE_ID::Arena *arena)
void set_rpm(double value)
boost::units::absolute< boost::units::unit< temperature_dimension, boost::units::celsius::system > > temperature_unit
Motor_Thermistor Thermistor
const ::jaiabot::protobuf::Motor_Thermistor & thermistor() const
Motor(Motor &&from) noexcept
::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final
void MergeFrom(const Motor_Thermistor &from)
boost::units::temperature_dimension temperature_dimension
::jaiabot::protobuf::MotorHarnessType motor_harness_type() const
void UnsafeArenaSwap(Motor *other)
Motor(::PROTOBUF_NAMESPACE_ID::Arena *arena)
::jaiabot::protobuf::Motor_Thermistor * mutable_thermistor()
PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final
Motor_Thermistor & operator=(Motor_Thermistor &&from) noexcept
Motor & operator=(Motor &&from) noexcept
inline ::PROTOBUF_NAMESPACE_ID::UnknownFieldSet * mutable_unknown_fields()
static const Motor_Thermistor * internal_default_instance()
Motor * New() const final
Motor_Thermistor * New(::PROTOBUF_NAMESPACE_ID::Arena *arena) const final
void set_resistance(float value)
void Swap(Motor_Thermistor *other)
void CopyFrom(const Motor &from)
friend void swap(Motor_Thermistor &a, Motor_Thermistor &b)
float temperature() const
void CopyFrom(const ::PROTOBUF_NAMESPACE_ID::Message &from) final
static const ::PROTOBUF_NAMESPACE_ID::Descriptor * GetDescriptor()
Motor * New(::PROTOBUF_NAMESPACE_ID::Arena *arena) const final
Quantity temperature_with_units() const
Motor_Thermistor(const Motor_Thermistor &from)
void MergeFrom(const ::PROTOBUF_NAMESPACE_ID::Message &from) final
Motor_Thermistor & operator=(const Motor_Thermistor &from)
static void InitAsDefaultInstance()
::jaiabot::protobuf::Motor_Thermistor * release_thermistor()
friend void swap(Motor &a, Motor &b)
void set_temperature_with_units(Quantity value_w_units)
void unsafe_arena_set_allocated_thermistor(::jaiabot::protobuf::Motor_Thermistor *thermistor)
static const ::PROTOBUF_NAMESPACE_ID::Reflection * GetReflection()
Motor_Thermistor(Motor_Thermistor &&from) noexcept
void MergeFrom(const Motor &from)
void set_temperature(float value)
Motor_Thermistor * New() const final
bool has_motor_harness_type() const
bool has_resistance() const
bool has_temperature() const
void set_voltage(float value)
static const Motor & default_instance()
static const ::PROTOBUF_NAMESPACE_ID::Descriptor * descriptor()
boost::units::quantity< temperature_unit, float > temperature_with_units() const
const ::PROTOBUF_NAMESPACE_ID::internal::DescriptorTable descriptor_table_jaiabot_2fmessages_2fmotor_2eproto
constexpr int MotorHarnessType_ARRAYSIZE
const ::PROTOBUF_NAMESPACE_ID::EnumDescriptor * MotorHarnessType_descriptor()
constexpr MotorHarnessType MotorHarnessType_MIN
constexpr MotorHarnessType MotorHarnessType_MAX
MotorDefaultTypeInternal _Motor_default_instance_
Motor_ThermistorDefaultTypeInternal _Motor_Thermistor_default_instance_
bool MotorHarnessType_IsValid(int value)
const std::string & MotorHarnessType_Name(T enum_t_value)
bool MotorHarnessType_Parse(const std::string &name, MotorHarnessType *value)
static const ::PROTOBUF_NAMESPACE_ID::internal::SerializationTable serialization_table[]
static const ::PROTOBUF_NAMESPACE_ID::internal::AuxillaryParseTableField aux[] PROTOBUF_SECTION_VARIABLE(protodesc_cold)
static const ::PROTOBUF_NAMESPACE_ID::internal::FieldMetadata field_metadata[]
static const ::PROTOBUF_NAMESPACE_ID::internal::ParseTable schema[2] PROTOBUF_SECTION_VARIABLE(protodesc_cold)
static const ::PROTOBUF_NAMESPACE_ID::uint32 offsets[]
static const ::PROTOBUF_NAMESPACE_ID::internal::ParseTableField entries[] PROTOBUF_SECTION_VARIABLE(protodesc_cold)