14 #include <type_traits>
19 #include "comms/details/tag.h"
21 COMMS_MSVC_WARNING_PUSH
22 COMMS_MSVC_WARNING_DISABLE(4100)
23 COMMS_MSVC_WARNING_DISABLE(4127)
34 template <
typename TField>
37 template <
typename TField,
typename TConvRatio>
38 using FullUnitsRatioOf =
39 typename std::ratio_divide<
40 typename std::ratio_multiply<
41 ScalingRatioOf<TField>,
42 typename TField::UnitsRatio
47 template <
typename...>
48 struct UnitsValueConverter
50 template <
typename TRet,
typename TConvRatio,
typename TField>
51 static TRet getValue(
const TField& field)
53 using Ratio = FullUnitsRatioOf<TField, TConvRatio>;
54 using Tag = RatioTag<TField, TConvRatio>;
55 return getValueInternal<TRet, Ratio>(field, Tag());
58 template <
typename TConvRatio,
typename TField,
typename TVal>
59 static void setValue(TField& field, TVal&& value)
61 using Ratio = FullUnitsRatioOf<TField, TConvRatio>;
62 using Tag = RatioTag<TField, TConvRatio>;
63 return setValueInternal<Ratio>(field, std::forward<TVal>(value), Tag());
67 template <
typename...>
68 using HasConversionTag = comms::details::tag::Tag1<>;
70 template <
typename...>
71 using NoConversionTag = comms::details::tag::Tag2<>;
73 template <
typename...>
74 using ConvertToFpTag = comms::details::tag::Tag3<>;
76 template <
typename...>
77 using ConvertToIntTag = comms::details::tag::Tag4<>;
79 template <
typename TField,
typename TConvRatio>
81 typename comms::util::LazyShallowConditional<
82 std::is_same<FullUnitsRatioOf<TField, TConvRatio>, std::ratio<1, 1> >::value
88 template <
typename TRet>
90 typename comms::util::LazyShallowConditional<
91 std::is_floating_point<TRet>::value
97 template <
typename TRet,
typename TRatio,
typename TField,
typename... TParams>
98 static TRet getValueInternal(
const TField& field, NoConversionTag<TParams...>)
100 return static_cast<TRet
>(field.value());
103 template <
typename TRet,
typename TRatio,
typename TField,
typename... TParams>
104 static TRet getValueInternal(
const TField& field, HasConversionTag<TParams...>)
106 using Tag = TypeTag<TRet>;
107 return getValueInternal<TRet, TRatio>(field, Tag());
110 template <
typename TRet,
typename TRatio,
typename TField,
typename... TParams>
111 static TRet getValueInternal(
const TField& field, ConvertToFpTag<TParams...>)
113 static_assert(std::is_floating_point<TRet>::value,
114 "TRet is expected to be floating point type");
115 return static_cast<TRet
>(field.value()) * (
static_cast<TRet
>(TRatio::num) /
static_cast<TRet
>(TRatio::den));
118 template <
typename TRet,
typename TRatio,
typename TField,
typename... TParams>
119 static TRet getValueInternal(
const TField& field, ConvertToIntTag<TParams...>)
121 static_assert(std::is_integral<TRet>::value,
122 "TRet is expected to be integral type");
124 using FieldType =
typename std::decay<decltype(field)>::type;
125 using ValueType =
typename FieldType::ValueType;
128 std::is_integral<ValueType>::value ||
129 std::is_floating_point<ValueType>::value ||
130 std::is_enum<ValueType>::value,
131 "Unexpected field in units conversion");
135 std::is_floating_point<ValueType>::value
138 std::is_same<ValueType, float>::value
144 std::is_signed<TRet>::value
153 (
static_cast<CastType
>(field.value()) * TRatio::num) / TRatio::den);
156 template <
typename TRatio,
typename TField,
typename TVal,
typename... TParams>
157 static void setValueInternal(TField& field, TVal&& value, NoConversionTag<TParams...>)
159 using FieldType =
typename std::decay<decltype(field)>::type;
160 using ValueType =
typename FieldType::ValueType;
161 field.value() =
static_cast<ValueType
>(value);
164 template <
typename TRatio,
typename TField,
typename TVal,
typename... TParams>
165 static void setValueInternal(TField& field, TVal&& value, HasConversionTag<TParams...>)
167 using Tag = TypeTag<
typename std::decay<decltype(value)>::type>;
168 setValueInternal<TRatio>(field, std::forward<TVal>(value), Tag());
171 template <
typename TRatio,
typename TField,
typename TVal,
typename... TParams>
172 static void setValueInternal(TField& field, TVal&& value, ConvertToIntTag<TParams...>)
174 using FieldType =
typename std::decay<decltype(field)>::type;
175 using ValueType =
typename FieldType::ValueType;
178 std::is_integral<ValueType>::value ||
179 std::is_floating_point<ValueType>::value ||
180 std::is_enum<ValueType>::value,
181 "Unexpected field in units conversion");
185 std::is_floating_point<ValueType>::value
188 std::is_same<ValueType, float>::value
194 std::is_signed<
typename std::decay<decltype(value)>::type>::value
202 static_cast<ValueType
>(
203 (
static_cast<CastType
>(value) * TRatio::den) /
static_cast<CastType
>(TRatio::num));
206 template <
typename TRatio,
typename TField,
typename TVal,
typename... TParams>
207 static void setValueInternal(TField& field, TVal&& value, ConvertToFpTag<TParams...>)
209 using DecayedType =
typename std::decay<decltype(value)>::type;
210 using FieldType =
typename std::decay<decltype(field)>::type;
211 using ValueType =
typename FieldType::ValueType;
213 auto epsilon = DecayedType(0);
214 if ((TRatio::num < TRatio::den) && std::is_integral<ValueType>::value) {
215 epsilon =
static_cast<DecayedType
>(TRatio::num) /
static_cast<DecayedType
>(TRatio::den + 1);
218 if (epsilon < DecayedType(0)) {
222 if (value < DecayedType(0)) {
227 static_cast<ValueType
>(
228 ((value + epsilon) *
static_cast<DecayedType
>(TRatio::den)) /
static_cast<DecayedType
>(TRatio::num));
233 template <
typename TField,
typename TType>
234 constexpr
bool hasExpectedUnits()
236 return std::is_same<typename TField::UnitsType, TType>::value;
239 template <
typename TRet,
typename TConvRatio,
typename TField>
240 TRet getTime(
const TField& field)
243 "The field is expected to contain \"time\" units.");
244 return UnitsValueConverter<>::getValue<TRet, TConvRatio>(field);
247 template <
typename TConvRatio,
typename TField,
typename TVal>
248 void setTime(TField& field, TVal&& val)
251 "The field is expected to contain \"time\" units.");
252 UnitsValueConverter<>::setValue<TConvRatio>(field, std::forward<TVal>(val));
255 template <
typename TRet,
typename TConvRatio,
typename TField>
256 TRet getDistance(
const TField& field)
259 "The field is expected to contain \"distance\" units.");
260 return UnitsValueConverter<>::getValue<TRet, TConvRatio>(field);
263 template <
typename TConvRatio,
typename TField,
typename TVal>
264 void setDistance(TField& field, TVal&& val)
267 "The field is expected to contain \"distance\" units.");
268 UnitsValueConverter<>::setValue<TConvRatio>(field, std::forward<TVal>(val));
271 template <
typename TRet,
typename TConvRatio,
typename TField>
272 TRet getSpeed(
const TField& field)
275 "The field is expected to contain \"speed\" units.");
276 return UnitsValueConverter<>::getValue<TRet, TConvRatio>(field);
279 template <
typename TConvRatio,
typename TField,
typename TVal>
280 void setSpeed(TField& field, TVal&& val)
283 "The field is expected to contain \"speed\" units.");
284 UnitsValueConverter<>::setValue<TConvRatio>(field, std::forward<TVal>(val));
287 template <
typename TRet,
typename TConvRatio,
typename TField>
288 TRet getFrequency(
const TField& field)
291 "The field is expected to contain \"frequency\" units.");
292 return UnitsValueConverter<>::getValue<TRet, TConvRatio>(field);
295 template <
typename TConvRatio,
typename TField,
typename TVal>
296 void setFrequency(TField& field, TVal&& val)
299 "The field is expected to contain \"frequency\" units.");
300 UnitsValueConverter<>::setValue<TConvRatio>(field, std::forward<TVal>(val));
303 template <
typename T>
306 static constexpr T Value =
static_cast<T
>(3.14159265358979323846264338327950288419716939937510582097494459230781640628620899L);
309 template <
typename...>
310 struct AngleValueConverter
312 template <
typename TRet,
typename TConvRatio,
typename TField>
313 static TRet getValue(
const TField& field)
315 using FieldType =
typename std::decay<decltype(field)>::type;
316 static_assert(details::hasExpectedUnits<FieldType, comms::traits::units::Angle>(),
317 "The field is expected to contain \"angle\" units.");
319 using Tag = GetTag<FieldType, TConvRatio>;
320 return getValueInternal<TRet, TConvRatio>(field, Tag());
323 template <
typename TConvRatio,
typename TField,
typename TVal>
324 static void setValue(TField& field, TVal&& val)
326 using FieldType =
typename std::decay<decltype(field)>::type;
327 static_assert(details::hasExpectedUnits<FieldType, comms::traits::units::Angle>(),
328 "The field is expected to contain \"angle\" units.");
330 using Tag = SetTag<FieldType, TConvRatio>;
331 setValueInternal<TConvRatio>(field, std::forward<TVal>(val), Tag());
335 template <
typename... TParams>
336 using SameUnitsTag = comms::details::tag::Tag1<>;
338 template <
typename... TParams>
339 using DegreesToRadiansTag = comms::details::tag::Tag2<>;
341 template <
typename... TParams>
342 using RadiansToDegreesTag = comms::details::tag::Tag3<>;
344 template <
typename TConvRatio>
346 typename comms::util::LazyShallowConditional<
347 std::is_same<TConvRatio, typename comms::traits::units::RadiansRatio>::value
353 template <
typename TConvRatio>
355 typename comms::util::LazyShallowConditional<
356 std::is_same<TConvRatio, typename comms::traits::units::RadiansRatio>::value
362 template <
typename TField,
typename TConvRatio>
364 typename comms::util::LazyShallowConditional<
365 std::is_same<TConvRatio, typename TField::UnitsRatio>::value
372 template <
typename TField,
typename TConvRatio>
374 typename comms::util::LazyShallowConditional<
375 std::is_same<TConvRatio, typename TField::UnitsRatio>::value
382 template <
typename TRet,
typename TConvRatio,
typename TField,
typename... TParams>
383 static TRet getValueInternal(
const TField& field, SameUnitsTag<TParams...>)
385 return field.template getScaled<TRet>();
388 template <
typename TRet,
typename TConvRatio,
typename TField,
typename... TParams>
389 static TRet getValueInternal(
const TField& field, DegreesToRadiansTag<TParams...>)
391 using FieldType =
typename std::decay<decltype(field)>::type;
392 static_assert(std::is_same<typename FieldType::UnitsRatio, comms::traits::units::DegreesRatio>::value,
393 "The field is expected to contain degrees.");
395 return PI<TRet>::Value * UnitsValueConverter<>::getValue<TRet, TConvRatio>(field);
398 template <
typename TRet,
typename TConvRatio,
typename TField,
typename... TParams>
399 static TRet getValueInternal(
const TField& field, RadiansToDegreesTag<TParams...>)
401 using FieldType =
typename std::decay<decltype(field)>::type;
402 static_assert(std::is_same<typename FieldType::UnitsRatio, comms::traits::units::RadiansRatio>::value,
403 "The field is expected to contain radians.");
405 return UnitsValueConverter<>::getValue<TRet, TConvRatio>(field) / PI<TRet>::Value;
408 template <
typename TConvRatio,
typename TField,
typename TVal,
typename... TParams>
409 static void setValueInternal(TField& field, TVal&& val, SameUnitsTag<TParams...>)
411 field.setScaled(std::forward<TVal>(val));
414 template <
typename TConvRatio,
typename TField,
typename TVal,
typename... TParams>
415 static void setValueInternal(TField& field, TVal&& val, DegreesToRadiansTag<TParams...>)
417 using FieldType =
typename std::decay<decltype(field)>::type;
418 static_assert(std::is_same<typename FieldType::UnitsRatio, comms::traits::units::RadiansRatio>::value,
419 "The field is expected to contain radians.");
421 using ValueType =
typename std::decay<decltype(val)>::type;
424 std::is_floating_point<ValueType>::value
430 UnitsValueConverter<>::setValue<TConvRatio>(field, val * PI<PiType>::Value);
433 template <
typename TConvRatio,
typename TField,
typename TVal,
typename... TParams>
434 static void setValueInternal(TField& field, TVal&& val, RadiansToDegreesTag<TParams...>)
436 using FieldType =
typename std::decay<decltype(field)>::type;
437 static_assert(std::is_same<typename FieldType::UnitsRatio, comms::traits::units::DegreesRatio>::value,
438 "The field is expected to contain degrees.");
440 using ValueType =
typename std::decay<decltype(val)>::type;
443 std::is_floating_point<ValueType>::value
449 UnitsValueConverter<>::setValue<TConvRatio>(field,
static_cast<PiType
>(val) / PI<PiType>::Value);
453 template <
typename TRet,
typename TConvRatio,
typename TField>
454 TRet getAngle(
const TField& field)
456 return AngleValueConverter<>::getValue<TRet, TConvRatio>(field);
459 template <
typename TConvRatio,
typename TField,
typename TVal>
460 void setAngle(TField& field, TVal&& val)
462 AngleValueConverter<>::setValue<TConvRatio>(field, std::forward<TVal>(val));
465 template <
typename TRet,
typename TConvRatio,
typename TField>
466 TRet getCurrent(
const TField& field)
469 "The field is expected to contain \"current\" units.");
470 return UnitsValueConverter<>::getValue<TRet, TConvRatio>(field);
473 template <
typename TConvRatio,
typename TField,
typename TVal>
474 void setCurrent(TField& field, TVal&& val)
477 "The field is expected to contain \"current\" units.");
478 UnitsValueConverter<>::setValue<TConvRatio>(field, std::forward<TVal>(val));
481 template <
typename TRet,
typename TConvRatio,
typename TField>
482 TRet getVoltage(
const TField& field)
485 "The field is expected to contain \"voltage\" units.");
486 return UnitsValueConverter<>::getValue<TRet, TConvRatio>(field);
489 template <
typename TConvRatio,
typename TField,
typename TVal>
490 void setVoltage(TField& field, TVal&& val)
493 "The field is expected to contain \"voltage\" units.");
494 UnitsValueConverter<>::setValue<TConvRatio>(field, std::forward<TVal>(val));
497 template <
typename TRet,
typename TConvRatio,
typename TField>
498 TRet getMemory(
const TField& field)
501 "The field is expected to contain \"memory\" units.");
502 return UnitsValueConverter<>::getValue<TRet, TConvRatio>(field);
505 template <
typename TConvRatio,
typename TField,
typename TVal>
506 void setMemory(TField& field, TVal&& val)
509 "The field is expected to contain \"memory\" units.");
510 UnitsValueConverter<>::setValue<TConvRatio>(field, std::forward<TVal>(val));
525 template <
typename TRet,
typename TField>
528 return details::getTime<TRet, comms::traits::units::NanosecondsRatio>(field);
541 template <
typename TField,
typename TVal>
544 details::setTime<comms::traits::units::NanosecondsRatio>(field, std::forward<TVal>(val));
549 template <
typename TField>
553 TField::hasUnits() &&
554 std::is_same<typename TField::UnitsType, comms::traits::units::Time>::value &&
555 std::is_same<typename TField::UnitsRatio, comms::traits::units::NanosecondsRatio>::value;
562 template <
typename TField>
565 return isNanoseconds<
typename std::decay<decltype(field)>::type>();
578 template <
typename TRet,
typename TField>
581 return details::getTime<TRet, comms::traits::units::MicrosecondsRatio>(field);
594 template <
typename TField,
typename TVal>
597 details::setTime<comms::traits::units::MicrosecondsRatio>(field, std::forward<TVal>(val));
602 template <
typename TField>
606 TField::hasUnits() &&
607 std::is_same<typename TField::UnitsType, comms::traits::units::Time>::value &&
608 std::is_same<typename TField::UnitsRatio, comms::traits::units::MicrosecondsRatio>::value;
615 template <
typename TField>
618 return isMicroseconds<
typename std::decay<decltype(field)>::type>();
631 template <
typename TRet,
typename TField>
634 return details::getTime<TRet, comms::traits::units::MillisecondsRatio>(field);
647 template <
typename TField,
typename TVal>
650 details::setTime<comms::traits::units::MillisecondsRatio>(field, std::forward<TVal>(val));
655 template <
typename TField>
659 TField::hasUnits() &&
660 std::is_same<typename TField::UnitsType, comms::traits::units::Time>::value &&
661 std::is_same<typename TField::UnitsRatio, comms::traits::units::MillisecondsRatio>::value;
668 template <
typename TField>
671 return isMilliseconds<
typename std::decay<decltype(field)>::type>();
684 template <
typename TRet,
typename TField>
687 return details::getTime<TRet, comms::traits::units::SecondsRatio>(field);
700 template <
typename TField,
typename TVal>
703 details::setTime<comms::traits::units::SecondsRatio>(field, std::forward<TVal>(val));
708 template <
typename TField>
712 TField::hasUnits() &&
713 std::is_same<typename TField::UnitsType, comms::traits::units::Time>::value &&
714 std::is_same<typename TField::UnitsRatio, comms::traits::units::SecondsRatio>::value;
721 template <
typename TField>
724 return isSeconds<
typename std::decay<decltype(field)>::type>();
737 template <
typename TRet,
typename TField>
740 return details::getTime<TRet, comms::traits::units::MinutesRatio>(field);
753 template <
typename TField,
typename TVal>
756 details::setTime<comms::traits::units::MinutesRatio>(field, std::forward<TVal>(val));
761 template <
typename TField>
765 TField::hasUnits() &&
766 std::is_same<typename TField::UnitsType, comms::traits::units::Time>::value &&
767 std::is_same<typename TField::UnitsRatio, comms::traits::units::MinutesRatio>::value;
774 template <
typename TField>
777 return isMinutes<
typename std::decay<decltype(field)>::type>();
790 template <
typename TRet,
typename TField>
793 return details::getTime<TRet, comms::traits::units::HoursRatio>(field);
806 template <
typename TField,
typename TVal>
809 details::setTime<comms::traits::units::HoursRatio>(field, std::forward<TVal>(val));
814 template <
typename TField>
818 TField::hasUnits() &&
819 std::is_same<typename TField::UnitsType, comms::traits::units::Time>::value &&
820 std::is_same<typename TField::UnitsRatio, comms::traits::units::HoursRatio>::value;
827 template <
typename TField>
830 return isHours<
typename std::decay<decltype(field)>::type>();
843 template <
typename TRet,
typename TField>
846 return details::getTime<TRet, comms::traits::units::DaysRatio>(field);
859 template <
typename TField,
typename TVal>
862 details::setTime<comms::traits::units::DaysRatio>(field, std::forward<TVal>(val));
867 template <
typename TField>
871 TField::hasUnits() &&
872 std::is_same<typename TField::UnitsType, comms::traits::units::Time>::value &&
873 std::is_same<typename TField::UnitsRatio, comms::traits::units::DaysRatio>::value;
880 template <
typename TField>
881 constexpr
bool isDays(
const TField& field)
883 return isDays<
typename std::decay<decltype(field)>::type>();
896 template <
typename TRet,
typename TField>
899 return details::getTime<TRet, comms::traits::units::WeeksRatio>(field);
912 template <
typename TField,
typename TVal>
915 details::setTime<comms::traits::units::WeeksRatio>(field, std::forward<TVal>(val));
920 template <
typename TField>
924 TField::hasUnits() &&
925 std::is_same<typename TField::UnitsType, comms::traits::units::Time>::value &&
926 std::is_same<typename TField::UnitsRatio, comms::traits::units::WeeksRatio>::value;
933 template <
typename TField>
936 return isWeeks<
typename std::decay<decltype(field)>::type>();
949 template <
typename TRet,
typename TField>
952 return details::getDistance<TRet, comms::traits::units::NanometersRatio>(field);
965 template <
typename TField,
typename TVal>
968 details::setDistance<comms::traits::units::NanometersRatio>(field, std::forward<TVal>(val));
973 template <
typename TField>
977 TField::hasUnits() &&
978 std::is_same<typename TField::UnitsType, comms::traits::units::Distance>::value &&
979 std::is_same<typename TField::UnitsRatio, comms::traits::units::NanometersRatio>::value;
986 template <
typename TField>
989 return isNanometers<
typename std::decay<decltype(field)>::type>();
1002 template <
typename TRet,
typename TField>
1005 return details::getDistance<TRet, comms::traits::units::MicrometersRatio>(field);
1018 template <
typename TField,
typename TVal>
1021 details::setDistance<comms::traits::units::MicrometersRatio>(field, std::forward<TVal>(val));
1026 template <
typename TField>
1030 TField::hasUnits() &&
1031 std::is_same<typename TField::UnitsType, comms::traits::units::Distance>::value &&
1032 std::is_same<typename TField::UnitsRatio, comms::traits::units::MicrometersRatio>::value;
1039 template <
typename TField>
1042 return isMicrometers<
typename std::decay<decltype(field)>::type>();
1055 template <
typename TRet,
typename TField>
1058 return details::getDistance<TRet, comms::traits::units::MillimetersRatio>(field);
1071 template <
typename TField,
typename TVal>
1074 details::setDistance<comms::traits::units::MillimetersRatio>(field, std::forward<TVal>(val));
1079 template <
typename TField>
1083 TField::hasUnits() &&
1084 std::is_same<typename TField::UnitsType, comms::traits::units::Distance>::value &&
1085 std::is_same<typename TField::UnitsRatio, comms::traits::units::MillimetersRatio>::value;
1092 template <
typename TField>
1095 return isMillimeters<
typename std::decay<decltype(field)>::type>();
1108 template <
typename TRet,
typename TField>
1111 return details::getDistance<TRet, comms::traits::units::CentimetersRatio>(field);
1124 template <
typename TField,
typename TVal>
1127 details::setDistance<comms::traits::units::CentimetersRatio>(field, std::forward<TVal>(val));
1132 template <
typename TField>
1136 TField::hasUnits() &&
1137 std::is_same<typename TField::UnitsType, comms::traits::units::Distance>::value &&
1138 std::is_same<typename TField::UnitsRatio, comms::traits::units::CentimetersRatio>::value;
1145 template <
typename TField>
1148 return isCentimeters<
typename std::decay<decltype(field)>::type>();
1161 template <
typename TRet,
typename TField>
1164 return details::getDistance<TRet, comms::traits::units::MetersRatio>(field);
1177 template <
typename TField,
typename TVal>
1180 details::setDistance<comms::traits::units::MetersRatio>(field, std::forward<TVal>(val));
1185 template <
typename TField>
1189 TField::hasUnits() &&
1190 std::is_same<typename TField::UnitsType, comms::traits::units::Distance>::value &&
1191 std::is_same<typename TField::UnitsRatio, comms::traits::units::MetersRatio>::value;
1198 template <
typename TField>
1201 return isMeters<
typename std::decay<decltype(field)>::type>();
1214 template <
typename TRet,
typename TField>
1217 return details::getDistance<TRet, comms::traits::units::KilometersRatio>(field);
1230 template <
typename TField,
typename TVal>
1233 details::setDistance<comms::traits::units::KilometersRatio>(field, std::forward<TVal>(val));
1238 template <
typename TField>
1242 TField::hasUnits() &&
1243 std::is_same<typename TField::UnitsType, comms::traits::units::Distance>::value &&
1244 std::is_same<typename TField::UnitsRatio, comms::traits::units::KilometersRatio>::value;
1251 template <
typename TField>
1254 return isKilometers<
typename std::decay<decltype(field)>::type>();
1267 template <
typename TRet,
typename TField>
1270 return details::getSpeed<TRet, comms::traits::units::NanometersPerSecondRatio>(field);
1283 template <
typename TField,
typename TVal>
1286 details::setSpeed<comms::traits::units::NanometersPerSecondRatio>(field, std::forward<TVal>(val));
1291 template <
typename TField>
1295 TField::hasUnits() &&
1296 std::is_same<typename TField::UnitsType, comms::traits::units::Speed>::value &&
1297 std::is_same<typename TField::UnitsRatio, comms::traits::units::NanometersPerSecondRatio>::value;
1304 template <
typename TField>
1320 template <
typename TRet,
typename TField>
1323 return details::getSpeed<TRet, comms::traits::units::MicrometersPerSecondRatio>(field);
1336 template <
typename TField,
typename TVal>
1339 details::setSpeed<comms::traits::units::MicrometersPerSecondRatio>(field, std::forward<TVal>(val));
1344 template <
typename TField>
1348 TField::hasUnits() &&
1349 std::is_same<typename TField::UnitsType, comms::traits::units::Speed>::value &&
1350 std::is_same<typename TField::UnitsRatio, comms::traits::units::MicrometersPerSecondRatio>::value;
1357 template <
typename TField>
1373 template <
typename TRet,
typename TField>
1376 return details::getSpeed<TRet, comms::traits::units::MillimetersPerSecondRatio>(field);
1389 template <
typename TField,
typename TVal>
1392 details::setSpeed<comms::traits::units::MillimetersPerSecondRatio>(field, std::forward<TVal>(val));
1397 template <
typename TField>
1401 TField::hasUnits() &&
1402 std::is_same<typename TField::UnitsType, comms::traits::units::Speed>::value &&
1403 std::is_same<typename TField::UnitsRatio, comms::traits::units::MillimetersPerSecondRatio>::value;
1410 template <
typename TField>
1426 template <
typename TRet,
typename TField>
1429 return details::getSpeed<TRet, comms::traits::units::CentimetersPerSecondRatio>(field);
1442 template <
typename TField,
typename TVal>
1445 details::setSpeed<comms::traits::units::CentimetersPerSecondRatio>(field, std::forward<TVal>(val));
1450 template <
typename TField>
1454 TField::hasUnits() &&
1455 std::is_same<typename TField::UnitsType, comms::traits::units::Speed>::value &&
1456 std::is_same<typename TField::UnitsRatio, comms::traits::units::CentimetersPerSecondRatio>::value;
1463 template <
typename TField>
1479 template <
typename TRet,
typename TField>
1482 return details::getSpeed<TRet, comms::traits::units::MetersPerSecondRatio>(field);
1495 template <
typename TField,
typename TVal>
1498 details::setSpeed<comms::traits::units::MetersPerSecondRatio>(field, std::forward<TVal>(val));
1503 template <
typename TField>
1507 TField::hasUnits() &&
1508 std::is_same<typename TField::UnitsType, comms::traits::units::Speed>::value &&
1509 std::is_same<typename TField::UnitsRatio, comms::traits::units::MetersPerSecondRatio>::value;
1516 template <
typename TField>
1532 template <
typename TRet,
typename TField>
1535 return details::getSpeed<TRet, comms::traits::units::KilometersPerSecondRatio>(field);
1548 template <
typename TField,
typename TVal>
1551 details::setSpeed<comms::traits::units::KilometersPerSecondRatio>(field, std::forward<TVal>(val));
1556 template <
typename TField>
1560 TField::hasUnits() &&
1561 std::is_same<typename TField::UnitsType, comms::traits::units::Speed>::value &&
1562 std::is_same<typename TField::UnitsRatio, comms::traits::units::KilometersPerSecondRatio>::value;
1569 template <
typename TField>
1585 template <
typename TRet,
typename TField>
1588 return details::getSpeed<TRet, comms::traits::units::KilometersPerHourRatio>(field);
1601 template <
typename TField,
typename TVal>
1604 details::setSpeed<comms::traits::units::KilometersPerHourRatio>(field, std::forward<TVal>(val));
1609 template <
typename TField>
1613 TField::hasUnits() &&
1614 std::is_same<typename TField::UnitsType, comms::traits::units::Speed>::value &&
1615 std::is_same<typename TField::UnitsRatio, comms::traits::units::KilometersPerHourRatio>::value;
1622 template <
typename TField>
1638 template <
typename TRet,
typename TField>
1641 return details::getFrequency<TRet, comms::traits::units::HzRatio>(field);
1654 template <
typename TField,
typename TVal>
1657 details::setFrequency<comms::traits::units::HzRatio>(field, std::forward<TVal>(val));
1662 template <
typename TField>
1666 TField::hasUnits() &&
1667 std::is_same<typename TField::UnitsType, comms::traits::units::Frequency>::value &&
1668 std::is_same<typename TField::UnitsRatio, comms::traits::units::HzRatio>::value;
1675 template <
typename TField>
1678 return isHertz<
typename std::decay<decltype(field)>::type>();
1691 template <
typename TRet,
typename TField>
1694 return details::getFrequency<TRet, comms::traits::units::KiloHzRatio>(field);
1707 template <
typename TField,
typename TVal>
1710 details::setFrequency<comms::traits::units::KiloHzRatio>(field, std::forward<TVal>(val));
1715 template <
typename TField>
1719 TField::hasUnits() &&
1720 std::is_same<typename TField::UnitsType, comms::traits::units::Frequency>::value &&
1721 std::is_same<typename TField::UnitsRatio, comms::traits::units::KiloHzRatio>::value;
1728 template <
typename TField>
1731 return isKilohertz<
typename std::decay<decltype(field)>::type>();
1744 template <
typename TRet,
typename TField>
1747 return details::getFrequency<TRet, comms::traits::units::MegaHzRatio>(field);
1760 template <
typename TField,
typename TVal>
1763 details::setFrequency<comms::traits::units::MegaHzRatio>(field, std::forward<TVal>(val));
1768 template <
typename TField>
1772 TField::hasUnits() &&
1773 std::is_same<typename TField::UnitsType, comms::traits::units::Frequency>::value &&
1774 std::is_same<typename TField::UnitsRatio, comms::traits::units::MegaHzRatio>::value;
1781 template <
typename TField>
1784 return isMegahertz<
typename std::decay<decltype(field)>::type>();
1797 template <
typename TRet,
typename TField>
1800 return details::getFrequency<TRet, comms::traits::units::GigaHzRatio>(field);
1813 template <
typename TField,
typename TVal>
1816 details::setFrequency<comms::traits::units::GigaHzRatio>(field, std::forward<TVal>(val));
1821 template <
typename TField>
1825 TField::hasUnits() &&
1826 std::is_same<typename TField::UnitsType, comms::traits::units::Frequency>::value &&
1827 std::is_same<typename TField::UnitsRatio, comms::traits::units::GigaHzRatio>::value;
1834 template <
typename TField>
1837 return isGigahertz<
typename std::decay<decltype(field)>::type>();
1850 template <
typename TRet,
typename TField>
1853 return details::getAngle<TRet, comms::traits::units::DegreesRatio>(field);
1866 template <
typename TField,
typename TVal>
1869 details::setAngle<comms::traits::units::DegreesRatio>(field, std::forward<TVal>(val));
1874 template <
typename TField>
1878 TField::hasUnits() &&
1879 std::is_same<typename TField::UnitsType, comms::traits::units::Angle>::value &&
1880 std::is_same<typename TField::UnitsRatio, comms::traits::units::DegreesRatio>::value;
1887 template <
typename TField>
1890 return isDegrees<
typename std::decay<decltype(field)>::type>();
1903 template <
typename TRet,
typename TField>
1906 return details::getAngle<TRet, comms::traits::units::RadiansRatio>(field);
1919 template <
typename TField,
typename TVal>
1922 details::setAngle<comms::traits::units::RadiansRatio>(field, std::forward<TVal>(val));
1927 template <
typename TField>
1931 TField::hasUnits() &&
1932 std::is_same<typename TField::UnitsType, comms::traits::units::Angle>::value &&
1933 std::is_same<typename TField::UnitsRatio, comms::traits::units::RadiansRatio>::value;
1940 template <
typename TField>
1943 return isRadians<
typename std::decay<decltype(field)>::type>();
1956 template <
typename TRet,
typename TField>
1959 return details::getCurrent<TRet, comms::traits::units::NanoampsRatio>(field);
1972 template <
typename TField,
typename TVal>
1975 details::setCurrent<comms::traits::units::NanoampsRatio>(field, std::forward<TVal>(val));
1980 template <
typename TField>
1984 TField::hasUnits() &&
1985 std::is_same<typename TField::UnitsType, comms::traits::units::Current>::value &&
1986 std::is_same<typename TField::UnitsRatio, comms::traits::units::NanoampsRatio>::value;
1993 template <
typename TField>
1996 return isNanoamps<
typename std::decay<decltype(field)>::type>();
2009 template <
typename TRet,
typename TField>
2012 return details::getCurrent<TRet, comms::traits::units::MicroampsRatio>(field);
2025 template <
typename TField,
typename TVal>
2028 details::setCurrent<comms::traits::units::MicroampsRatio>(field, std::forward<TVal>(val));
2033 template <
typename TField>
2037 TField::hasUnits() &&
2038 std::is_same<typename TField::UnitsType, comms::traits::units::Current>::value &&
2039 std::is_same<typename TField::UnitsRatio, comms::traits::units::MicroampsRatio>::value;
2046 template <
typename TField>
2049 return isMicroamps<
typename std::decay<decltype(field)>::type>();
2063 template <
typename TRet,
typename TField>
2066 return details::getCurrent<TRet, comms::traits::units::MilliampsRatio>(field);
2079 template <
typename TField,
typename TVal>
2082 details::setCurrent<comms::traits::units::MilliampsRatio>(field, std::forward<TVal>(val));
2087 template <
typename TField>
2091 TField::hasUnits() &&
2092 std::is_same<typename TField::UnitsType, comms::traits::units::Current>::value &&
2093 std::is_same<typename TField::UnitsRatio, comms::traits::units::MilliampsRatio>::value;
2100 template <
typename TField>
2103 return isMilliamps<
typename std::decay<decltype(field)>::type>();
2116 template <
typename TRet,
typename TField>
2119 return details::getCurrent<TRet, comms::traits::units::AmpsRatio>(field);
2132 template <
typename TField,
typename TVal>
2135 details::setCurrent<comms::traits::units::AmpsRatio>(field, std::forward<TVal>(val));
2140 template <
typename TField>
2144 TField::hasUnits() &&
2145 std::is_same<typename TField::UnitsType, comms::traits::units::Current>::value &&
2146 std::is_same<typename TField::UnitsRatio, comms::traits::units::AmpsRatio>::value;
2153 template <
typename TField>
2156 return isAmps<
typename std::decay<decltype(field)>::type>();
2169 template <
typename TRet,
typename TField>
2172 return details::getCurrent<TRet, comms::traits::units::KiloampsRatio>(field);
2185 template <
typename TField,
typename TVal>
2188 details::setCurrent<comms::traits::units::KiloampsRatio>(field, std::forward<TVal>(val));
2193 template <
typename TField>
2197 TField::hasUnits() &&
2198 std::is_same<typename TField::UnitsType, comms::traits::units::Current>::value &&
2199 std::is_same<typename TField::UnitsRatio, comms::traits::units::KiloampsRatio>::value;
2206 template <
typename TField>
2209 return isKiloamps<
typename std::decay<decltype(field)>::type>();
2222 template <
typename TRet,
typename TField>
2225 return details::getVoltage<TRet, comms::traits::units::NanovoltsRatio>(field);
2238 template <
typename TField,
typename TVal>
2241 details::setVoltage<comms::traits::units::NanovoltsRatio>(field, std::forward<TVal>(val));
2246 template <
typename TField>
2250 TField::hasUnits() &&
2251 std::is_same<typename TField::UnitsType, comms::traits::units::Voltage>::value &&
2252 std::is_same<typename TField::UnitsRatio, comms::traits::units::NanovoltsRatio>::value;
2259 template <
typename TField>
2262 return isNanovolts<
typename std::decay<decltype(field)>::type>();
2275 template <
typename TRet,
typename TField>
2278 return details::getVoltage<TRet, comms::traits::units::MicrovoltsRatio>(field);
2291 template <
typename TField,
typename TVal>
2294 details::setVoltage<comms::traits::units::MicrovoltsRatio>(field, std::forward<TVal>(val));
2299 template <
typename TField>
2303 TField::hasUnits() &&
2304 std::is_same<typename TField::UnitsType, comms::traits::units::Voltage>::value &&
2305 std::is_same<typename TField::UnitsRatio, comms::traits::units::MicrovoltsRatio>::value;
2312 template <
typename TField>
2315 return isMicrovolts<
typename std::decay<decltype(field)>::type>();
2328 template <
typename TRet,
typename TField>
2331 return details::getVoltage<TRet, comms::traits::units::MillivoltsRatio>(field);
2344 template <
typename TField,
typename TVal>
2347 details::setVoltage<comms::traits::units::MillivoltsRatio>(field, std::forward<TVal>(val));
2352 template <
typename TField>
2356 TField::hasUnits() &&
2357 std::is_same<typename TField::UnitsType, comms::traits::units::Voltage>::value &&
2358 std::is_same<typename TField::UnitsRatio, comms::traits::units::MillivoltsRatio>::value;
2365 template <
typename TField>
2368 return isMillivolts<
typename std::decay<decltype(field)>::type>();
2381 template <
typename TRet,
typename TField>
2384 return details::getVoltage<TRet, comms::traits::units::VoltsRatio>(field);
2397 template <
typename TField,
typename TVal>
2400 details::setVoltage<comms::traits::units::VoltsRatio>(field, std::forward<TVal>(val));
2405 template <
typename TField>
2409 TField::hasUnits() &&
2410 std::is_same<typename TField::UnitsType, comms::traits::units::Voltage>::value &&
2411 std::is_same<typename TField::UnitsRatio, comms::traits::units::VoltsRatio>::value;
2418 template <
typename TField>
2421 return isVolts<
typename std::decay<decltype(field)>::type>();
2434 template <
typename TRet,
typename TField>
2437 return details::getVoltage<TRet, comms::traits::units::KilovoltsRatio>(field);
2450 template <
typename TField,
typename TVal>
2453 details::setVoltage<comms::traits::units::KilovoltsRatio>(field, std::forward<TVal>(val));
2458 template <
typename TField>
2462 TField::hasUnits() &&
2463 std::is_same<typename TField::UnitsType, comms::traits::units::Voltage>::value &&
2464 std::is_same<typename TField::UnitsRatio, comms::traits::units::KilovoltsRatio>::value;
2471 template <
typename TField>
2474 return isKilovolts<
typename std::decay<decltype(field)>::type>();
2487 template <
typename TRet,
typename TField>
2490 return details::getMemory<TRet, comms::traits::units::BytesRatio>(field);
2503 template <
typename TField,
typename TVal>
2506 details::setMemory<comms::traits::units::BytesRatio>(field, std::forward<TVal>(val));
2511 template <
typename TField>
2515 TField::hasUnits() &&
2516 std::is_same<typename TField::UnitsType, comms::traits::units::Memory>::value &&
2517 std::is_same<typename TField::UnitsRatio, comms::traits::units::BytesRatio>::value;
2524 template <
typename TField>
2527 return isBytes<
typename std::decay<decltype(field)>::type>();
2540 template <
typename TRet,
typename TField>
2543 return details::getMemory<TRet, comms::traits::units::KilobytesRatio>(field);
2556 template <
typename TField,
typename TVal>
2559 details::setMemory<comms::traits::units::KilobytesRatio>(field, std::forward<TVal>(val));
2564 template <
typename TField>
2568 TField::hasUnits() &&
2569 std::is_same<typename TField::UnitsType, comms::traits::units::Memory>::value &&
2570 std::is_same<typename TField::UnitsRatio, comms::traits::units::KilobytesRatio>::value;
2577 template <
typename TField>
2580 return isKilobytes<
typename std::decay<decltype(field)>::type>();
2593 template <
typename TRet,
typename TField>
2596 return details::getMemory<TRet, comms::traits::units::MegabytesRatio>(field);
2609 template <
typename TField,
typename TVal>
2612 details::setMemory<comms::traits::units::MegabytesRatio>(field, std::forward<TVal>(val));
2617 template <
typename TField>
2621 TField::hasUnits() &&
2622 std::is_same<typename TField::UnitsType, comms::traits::units::Memory>::value &&
2623 std::is_same<typename TField::UnitsRatio, comms::traits::units::MegabytesRatio>::value;
2630 template <
typename TField>
2633 return isMegabytes<
typename std::decay<decltype(field)>::type>();
2647 template <
typename TRet,
typename TField>
2650 return details::getMemory<TRet, comms::traits::units::GigabytesRatio>(field);
2663 template <
typename TField,
typename TVal>
2666 details::setMemory<comms::traits::units::GigabytesRatio>(field, std::forward<TVal>(val));
2671 template <
typename TField>
2675 TField::hasUnits() &&
2676 std::is_same<typename TField::UnitsType, comms::traits::units::Memory>::value &&
2677 std::is_same<typename TField::UnitsRatio, comms::traits::units::GigabytesRatio>::value;
2684 template <
typename TField>
2687 return isGigabytes<
typename std::decay<decltype(field)>::type>();
2700 template <
typename TRet,
typename TField>
2703 return details::getMemory<TRet, comms::traits::units::TerabytesRatio>(field);
2716 template <
typename TField,
typename TVal>
2719 details::setMemory<comms::traits::units::TerabytesRatio>(field, std::forward<TVal>(val));
2724 template <
typename TField>
2728 TField::hasUnits() &&
2729 std::is_same<typename TField::UnitsType, comms::traits::units::Memory>::value &&
2730 std::is_same<typename TField::UnitsRatio, comms::traits::units::TerabytesRatio>::value;
2737 template <
typename TField>
2740 return isTerabytes<
typename std::decay<decltype(field)>::type>();
2747 COMMS_MSVC_WARNING_POP
Contains various compiler related definitions.
comms::option::def::FieldType< TMsg > FieldType
Same as comms::option::def::FieldType.
Definition: options.h:1463
comms::option::def::ScalingRatio< TNum, TDenom > ScalingRatio
Same as comms::option::def::ScalingRatio.
Definition: options.h:1504
TRet getNanovolts(const TField &field)
Retrieve field's value as nanovolts.
Definition: units.h:2223
TRet getMicrovolts(const TField &field)
Retrieve field's value as microvolts.
Definition: units.h:2276
constexpr bool isKilometersPerSecond(const TField &field)
Compile time check whether the field type holds kilometers per second.
Definition: units.h:1570
void setMicroamps(TField &field, TVal &&val)
Update field's value accordingly, while providing microamps value.
Definition: units.h:2026
TRet getMilliseconds(const TField &field)
Retrieve field's value as milliseconds.
Definition: units.h:632
constexpr bool isWeeks(const TField &field)
Compile time check whether the field type holds weeks.
Definition: units.h:934
constexpr bool isBytes(const TField &field)
Compile time check whether the field type holds bytes.
Definition: units.h:2525
void setBytes(TField &field, TVal &&val)
Update field's value accordingly, while providing bytes value.
Definition: units.h:2504
void setMillimetersPerSecond(TField &field, TVal &&val)
Update field's value accordingly, while providing millimeters per second value.
Definition: units.h:1390
constexpr bool isMillimeters(const TField &field)
Compile time check whether the field type holds millimeters.
Definition: units.h:1093
TRet getGigabytes(const TField &field)
Retrieve field's value as gigabytes.
Definition: units.h:2648
TRet getVolts(const TField &field)
Retrieve field's value as volts.
Definition: units.h:2382
void setHours(TField &field, TVal &&val)
Update field's value accordingly, while providing hours value.
Definition: units.h:807
void setMillivolts(TField &field, TVal &&val)
Update field's value accordingly, while providing millivolts value.
Definition: units.h:2345
void setNanometersPerSecond(TField &field, TVal &&val)
Update field's value accordingly, while providing nanometers per second value.
Definition: units.h:1284
TRet getCentimeters(const TField &field)
Retrieve field's value as centimeters.
Definition: units.h:1109
constexpr bool isMicrometersPerSecond(const TField &field)
Compile time check whether the field type holds micrometers per second.
Definition: units.h:1358
constexpr bool isNanometers(const TField &field)
Compile time check whether the field type holds nanometers.
Definition: units.h:987
TRet getMillivolts(const TField &field)
Retrieve field's value as millivolts.
Definition: units.h:2329
TRet getHertz(const TField &field)
Retrieve field's value as hertz.
Definition: units.h:1639
constexpr bool isHertz(const TField &field)
Compile time check whether the field type holds hertz.
Definition: units.h:1676
void setKilobytes(TField &field, TVal &&val)
Update field's value accordingly, while providing kilobytes value.
Definition: units.h:2557
TRet getNanoamps(const TField &field)
Retrieve field's value as nanoamps.
Definition: units.h:1957
TRet getDays(const TField &field)
Retrieve field's value as days.
Definition: units.h:844
constexpr bool isMegahertz(const TField &field)
Compile time check whether the field type holds megahertz.
Definition: units.h:1782
constexpr bool isMillimetersPerSecond(const TField &field)
Compile time check whether the field type holds millimeters per second.
Definition: units.h:1411
void setWeeks(TField &field, TVal &&val)
Update field's value accordingly, while providing weeks value.
Definition: units.h:913
TRet getMinutes(const TField &field)
Retrieve field's value as minutes.
Definition: units.h:738
void setGigahertz(TField &field, TVal &&val)
Update field's value accordingly, while providing gigahertz value.
Definition: units.h:1814
void setGigabytes(TField &field, TVal &&val)
Update field's value accordingly, while providing gigabytes value.
Definition: units.h:2664
void setMicrometersPerSecond(TField &field, TVal &&val)
Update field's value accordingly, while providing micrometers per second value.
Definition: units.h:1337
TRet getNanometersPerSecond(const TField &field)
Retrieve field's value as nanometers per second.
Definition: units.h:1268
TRet getNanometers(const TField &field)
Retrieve field's value as nanometers.
Definition: units.h:950
void setTerabytes(TField &field, TVal &&val)
Update field's value accordingly, while providing terabytes value.
Definition: units.h:2717
TRet getMilliamps(const TField &field)
Retrieve field's value as milliamps.
Definition: units.h:2064
TRet getMicroseconds(const TField &field)
Retrieve field's value as microseconds.
Definition: units.h:579
constexpr bool isMillivolts(const TField &field)
Compile time check whether the field type holds millivolts.
Definition: units.h:2366
TRet getMicrometers(const TField &field)
Retrieve field's value as micrometers.
Definition: units.h:1003
constexpr bool isAmps(const TField &field)
Compile time check whether the field type holds amps.
Definition: units.h:2154
TRet getMicroamps(const TField &field)
Retrieve field's value as microamps.
Definition: units.h:2010
TRet getKiloamps(const TField &field)
Retrieve field's value as kiloamps.
Definition: units.h:2170
void setMilliamps(TField &field, TVal &&val)
Update field's value accordingly, while providing milliamps value.
Definition: units.h:2080
void setAmps(TField &field, TVal &&val)
Update field's value accordingly, while providing amps value.
Definition: units.h:2133
TRet getKilohertz(const TField &field)
Retrieve field's value as kilohertz.
Definition: units.h:1692
constexpr bool isCentimetersPerSecond(const TField &field)
Compile time check whether the field type holds centimeters per second.
Definition: units.h:1464
void setDays(TField &field, TVal &&val)
Update field's value accordingly, while providing days value.
Definition: units.h:860
constexpr bool isCentimeters(const TField &field)
Compile time check whether the field type holds centimeters.
Definition: units.h:1146
TRet getKilometersPerSecond(const TField &field)
Retrieve field's value as kilometers per second.
Definition: units.h:1533
constexpr bool isNanoseconds(const TField &field)
Compile time check whether the field type holds nanoseconds.
Definition: units.h:563
constexpr bool isDays(const TField &field)
Compile time check whether the field type holds days.
Definition: units.h:881
constexpr bool isKilovolts(const TField &field)
Compile time check whether the field type holds kilovolts.
Definition: units.h:2472
TRet getHours(const TField &field)
Retrieve field's value as hours.
Definition: units.h:791
void setMetersPerSecond(TField &field, TVal &&val)
Update field's value accordingly, while providing meters per second value.
Definition: units.h:1496
TRet getWeeks(const TField &field)
Retrieve field's value as weeks.
Definition: units.h:897
TRet getNanoseconds(const TField &field)
Retrieve field's value as nanoseconds.
Definition: units.h:526
constexpr bool isMinutes(const TField &field)
Compile time check whether the field type holds minutes.
Definition: units.h:775
TRet getMeters(const TField &field)
Retrieve field's value as meters.
Definition: units.h:1162
constexpr bool isNanoamps(const TField &field)
Compile time check whether the field type holds nanoamps.
Definition: units.h:1994
void setCentimeters(TField &field, TVal &&val)
Update field's value accordingly, while providing centimeters value.
Definition: units.h:1125
constexpr bool isMilliseconds(const TField &field)
Compile time check whether the field type holds milliseconds.
Definition: units.h:669
constexpr bool isMicrometers(const TField &field)
Compile time check whether the field type holds micrometers.
Definition: units.h:1040
void setKilovolts(TField &field, TVal &&val)
Update field's value accordingly, while providing kilovolts value.
Definition: units.h:2451
void setMilliseconds(TField &field, TVal &&val)
Update field's value accordingly, while providing milliseconds value.
Definition: units.h:648
TRet getKilometersPerHour(const TField &field)
Retrieve field's value as kilometers per hour.
Definition: units.h:1586
void setSeconds(TField &field, TVal &&val)
Update field's value accordingly, while providing seconds value.
Definition: units.h:701
constexpr bool isRadians(const TField &field)
Compile time check whether the field type holds radia s.
Definition: units.h:1941
void setMillimeters(TField &field, TVal &&val)
Update field's value accordingly, while providing millimeters value.
Definition: units.h:1072
TRet getTerabytes(const TField &field)
Retrieve field's value as terabytes.
Definition: units.h:2701
void setKilometers(TField &field, TVal &&val)
Update field's value accordingly, while providing kilometers value.
Definition: units.h:1231
void setKiloamps(TField &field, TVal &&val)
Update field's value accordingly, while providing kiloamps value.
Definition: units.h:2186
TRet getAmps(const TField &field)
Retrieve field's value as amps.
Definition: units.h:2117
constexpr bool isKilometers(const TField &field)
Compile time check whether the field type holds kilometers.
Definition: units.h:1252
void setCentimetersPerSecond(TField &field, TVal &&val)
Update field's value accordingly, while providing centimeters per second value.
Definition: units.h:1443
void setNanoamps(TField &field, TVal &&val)
Update field's value accordingly, while providing nanoamps value.
Definition: units.h:1973
constexpr bool isKiloamps(const TField &field)
Compile time check whether the field type holds kiloamps.
Definition: units.h:2207
constexpr bool isTerabytes(const TField &field)
Compile time check whether the field type holds terabytes.
Definition: units.h:2738
TRet getKilovolts(const TField &field)
Retrieve field's value as kilovolts.
Definition: units.h:2435
constexpr bool isGigabytes(const TField &field)
Compile time check whether the field type holds gigabytes.
Definition: units.h:2685
TRet getBytes(const TField &field)
Retrieve field's value as bytes.
Definition: units.h:2488
constexpr bool isKilobytes(const TField &field)
Compile time check whether the field type holds kilobytes.
Definition: units.h:2578
constexpr bool isHours(const TField &field)
Compile time check whether the field type holds hours.
Definition: units.h:828
TRet getMetersPerSecond(const TField &field)
Retrieve field's value as meters per second.
Definition: units.h:1480
void setMegahertz(TField &field, TVal &&val)
Update field's value accordingly, while providing megahertz value.
Definition: units.h:1761
void setHertz(TField &field, TVal &&val)
Update field's value accordingly, while providing hertz value.
Definition: units.h:1655
constexpr bool isKilohertz(const TField &field)
Compile time check whether the field type holds kilohertz.
Definition: units.h:1729
constexpr bool isMicrovolts(const TField &field)
Compile time check whether the field type holds microvolts.
Definition: units.h:2313
TRet getMillimetersPerSecond(const TField &field)
Retrieve field's value as millimeters per second.
Definition: units.h:1374
TRet getKilobytes(const TField &field)
Retrieve field's value as kilobytes.
Definition: units.h:2541
constexpr bool isMetersPerSecond(const TField &field)
Compile time check whether the field type holds meters per second.
Definition: units.h:1517
TRet getGigahertz(const TField &field)
Retrieve field's value as gigahertz.
Definition: units.h:1798
void setMinutes(TField &field, TVal &&val)
Update field's value accordingly, while providing minutes value.
Definition: units.h:754
void setDegrees(TField &field, TVal &&val)
Update field's value accordingly, while providing degrees value.
Definition: units.h:1867
void setNanometers(TField &field, TVal &&val)
Update field's value accordingly, while providing nanometers value.
Definition: units.h:966
constexpr bool isNanometersPerSecond(const TField &field)
Compile time check whether the field type holds nanometers per second.
Definition: units.h:1305
constexpr bool isMicroseconds(const TField &field)
Compile time check whether the field type holds microseconds.
Definition: units.h:616
constexpr bool isNanovolts(const TField &field)
Compile time check whether the field type holds nanovolts.
Definition: units.h:2260
void setMicroseconds(TField &field, TVal &&val)
Update field's value accordingly, while providing microseconds value.
Definition: units.h:595
constexpr bool isKilometersPerHour(const TField &field)
Compile time check whether the field type holds kilometers per hour.
Definition: units.h:1623
TRet getSeconds(const TField &field)
Retrieve field's value as seconds.
Definition: units.h:685
void setMicrometers(TField &field, TVal &&val)
Update field's value accordingly, while providing micrometers value.
Definition: units.h:1019
TRet getMicrometersPerSecond(const TField &field)
Retrieve field's value as micrometers per second.
Definition: units.h:1321
void setMeters(TField &field, TVal &&val)
Update field's value accordingly, while providing meters value.
Definition: units.h:1178
void setNanoseconds(TField &field, TVal &&val)
Update field's value accordingly, while providing nanoseconds value.
Definition: units.h:542
constexpr bool isVolts(const TField &field)
Compile time check whether the field type holds volts.
Definition: units.h:2419
void setRadians(TField &field, TVal &&val)
Update field's value accordingly, while providing radians value.
Definition: units.h:1920
constexpr bool isMegabytes(const TField &field)
Compile time check whether the field type holds megabytes.
Definition: units.h:2631
TRet getKilometers(const TField &field)
Retrieve field's value as kilometers.
Definition: units.h:1215
TRet getCentimetersPerSecond(const TField &field)
Retrieve field's value as centimeters per second.
Definition: units.h:1427
TRet getMegahertz(const TField &field)
Retrieve field's value as megahertz.
Definition: units.h:1745
void setMegabytes(TField &field, TVal &&val)
Update field's value accordingly, while providing megabytes value.
Definition: units.h:2610
constexpr bool isGigahertz(const TField &field)
Compile time check whether the field type holds gigahertz.
Definition: units.h:1835
void setKilometersPerSecond(TField &field, TVal &&val)
Update field's value accordingly, while providing kilometers per second value.
Definition: units.h:1549
constexpr bool isMilliamps(const TField &field)
Compile time check whether the field type holds milliamps.
Definition: units.h:2101
void setNanovolts(TField &field, TVal &&val)
Update field's value accordingly, while providing nanovolts value.
Definition: units.h:2239
void setVolts(TField &field, TVal &&val)
Update field's value accordingly, while providing volts value.
Definition: units.h:2398
constexpr bool isDegrees(const TField &field)
Compile time check whether the field type holds degrees.
Definition: units.h:1888
void setKilometersPerHour(TField &field, TVal &&val)
Update field's value accordingly, while providing kilometers per hour value.
Definition: units.h:1602
constexpr bool isMeters(const TField &field)
Compile time check whether the field type holds meters.
Definition: units.h:1199
void setMicrovolts(TField &field, TVal &&val)
Update field's value accordingly, while providing microvolts value.
Definition: units.h:2292
TRet getMegabytes(const TField &field)
Retrieve field's value as megabytes.
Definition: units.h:2594
void setKilohertz(TField &field, TVal &&val)
Update field's value accordingly, while providing kilohertz value.
Definition: units.h:1708
TRet getDegrees(const TField &field)
Retrieve field's value as degrees.
Definition: units.h:1851
TRet getRadians(const TField &field)
Retrieve field's value as radians.
Definition: units.h:1904
constexpr bool isSeconds(const TField &field)
Compile time check whether the field type holds seconds.
Definition: units.h:722
TRet getMillimeters(const TField &field)
Retrieve field's value as millimeters.
Definition: units.h:1056
constexpr bool isMicroamps(const TField &field)
Compile time check whether the field type holds microamps.
Definition: units.h:2047
Main namespace for all classes / functions of COMMS library.
Tag class used to indicate electrical current value.
Definition: traits.h:54
Tag class used to indicate distance value.
Definition: traits.h:42
Tag class used to indicate frequency value.
Definition: traits.h:48
Tag class used to indicate memory size value.
Definition: traits.h:60
Tag class used to indicate speed value.
Definition: traits.h:45
Tag class used to indicate time value.
Definition: traits.h:39
Tag class used to indicate electrical voltage value.
Definition: traits.h:57
Replacement to std::conditional.
Definition: type_traits.h:28
This file contains all the classes necessary to properly define message traits.
Replacement to some types from standard type_traits.