14#include "comms/details/tag.h"
22COMMS_MSVC_WARNING_PUSH
23COMMS_MSVC_WARNING_DISABLE(4100)
24COMMS_MSVC_WARNING_DISABLE(4127)
35template <
typename TField>
36using ScalingRatioOf =
typename TField::ScalingRatio;
38template <
typename TField,
typename TConvRatio>
39using FullUnitsRatioOf =
40 typename std::ratio_divide<
41 typename std::ratio_multiply<
42 ScalingRatioOf<TField>,
43 typename TField::UnitsRatio
49struct UnitsValueConverter
51 template <
typename TRet,
typename TConvRatio,
typename TField>
52 static TRet getValue(
const TField& field)
54 using Ratio = FullUnitsRatioOf<TField, TConvRatio>;
55 using Tag = RatioTag<TField, TConvRatio>;
56 return getValueInternal<TRet, Ratio>(field, Tag());
59 template <
typename TConvRatio,
typename TField,
typename TVal>
60 static void setValue(TField& field, TVal&& value)
62 using Ratio = FullUnitsRatioOf<TField, TConvRatio>;
63 using Tag = RatioTag<TField, TConvRatio>;
64 return setValueInternal<Ratio>(field, std::forward<TVal>(value), Tag());
68 template <
typename...>
69 using HasConversionTag = comms::details::tag::Tag1<>;
71 template <
typename...>
72 using NoConversionTag = comms::details::tag::Tag2<>;
74 template <
typename...>
75 using ConvertToFpTag = comms::details::tag::Tag3<>;
77 template <
typename...>
78 using ConvertToIntTag = comms::details::tag::Tag4<>;
80 template <
typename TField,
typename TConvRatio>
82 typename comms::util::LazyShallowConditional<
83 std::is_same<FullUnitsRatioOf<TField, TConvRatio>, std::ratio<1, 1> >::value
89 template <
typename TRet>
91 typename comms::util::LazyShallowConditional<
92 std::is_floating_point<TRet>::value
98 template <
typename TRet,
typename TRatio,
typename TField,
typename... TParams>
99 static TRet getValueInternal(
const TField& field, NoConversionTag<TParams...>)
101 return static_cast<TRet
>(field.value());
104 template <
typename TRet,
typename TRatio,
typename TField,
typename... TParams>
105 static TRet getValueInternal(
const TField& field, HasConversionTag<TParams...>)
107 using Tag = TypeTag<TRet>;
108 return getValueInternal<TRet, TRatio>(field, Tag());
111 template <
typename TRet,
typename TRatio,
typename TField,
typename... TParams>
112 static TRet getValueInternal(
const TField& field, ConvertToFpTag<TParams...>)
114 static_assert(std::is_floating_point<TRet>::value,
115 "TRet is expected to be floating point type");
116 return static_cast<TRet
>(field.value()) * (
static_cast<TRet
>(TRatio::num) /
static_cast<TRet
>(TRatio::den));
119 template <
typename TRet,
typename TRatio,
typename TField,
typename... TParams>
120 static TRet getValueInternal(
const TField& field, ConvertToIntTag<TParams...>)
122 static_assert(std::is_integral<TRet>::value,
123 "TRet is expected to be integral type");
125 using FieldType =
typename std::decay<
decltype(field)>::type;
126 using ValueType =
typename FieldType::ValueType;
129 std::is_integral<ValueType>::value ||
130 std::is_floating_point<ValueType>::value ||
131 std::is_enum<ValueType>::value,
132 "Unexpected field in units conversion");
136 std::is_floating_point<ValueType>::value
139 std::is_same<ValueType, float>::value
145 std::is_signed<TRet>::value
154 (
static_cast<CastType
>(field.value()) * TRatio::num) / TRatio::den);
157 template <
typename TRatio,
typename TField,
typename TVal,
typename... TParams>
158 static void setValueInternal(TField& field, TVal&& value, NoConversionTag<TParams...>)
160 using FieldType =
typename std::decay<
decltype(field)>::type;
161 using ValueType =
typename FieldType::ValueType;
162 field.value() =
static_cast<ValueType
>(value);
165 template <
typename TRatio,
typename TField,
typename TVal,
typename... TParams>
166 static void setValueInternal(TField& field, TVal&& value, HasConversionTag<TParams...>)
168 using Tag = TypeTag<
typename std::decay<
decltype(value)>::type>;
169 setValueInternal<TRatio>(field, std::forward<TVal>(value), Tag());
172 template <
typename TRatio,
typename TField,
typename TVal,
typename... TParams>
173 static void setValueInternal(TField& field, TVal&& value, ConvertToIntTag<TParams...>)
175 using FieldType =
typename std::decay<
decltype(field)>::type;
176 using ValueType =
typename FieldType::ValueType;
179 std::is_integral<ValueType>::value ||
180 std::is_floating_point<ValueType>::value ||
181 std::is_enum<ValueType>::value,
182 "Unexpected field in units conversion");
186 std::is_floating_point<ValueType>::value
189 std::is_same<ValueType, float>::value
195 std::is_signed<
typename std::decay<
decltype(value)>::type>::value
203 static_cast<ValueType
>(
204 (
static_cast<CastType
>(value) * TRatio::den) /
static_cast<CastType
>(TRatio::num));
207 template <
typename TRatio,
typename TField,
typename TVal,
typename... TParams>
208 static void setValueInternal(TField& field, TVal&& value, ConvertToFpTag<TParams...>)
210 using DecayedType =
typename std::decay<
decltype(value)>::type;
211 using FieldType =
typename std::decay<
decltype(field)>::type;
212 using ValueType =
typename FieldType::ValueType;
214 auto epsilon = DecayedType(0);
215 if ((TRatio::num < TRatio::den) && std::is_integral<ValueType>::value) {
216 epsilon =
static_cast<DecayedType
>(TRatio::num) /
static_cast<DecayedType
>(TRatio::den + 1);
219 if (epsilon < DecayedType(0)) {
223 if (value < DecayedType(0)) {
228 static_cast<ValueType
>(
229 ((value + epsilon) *
static_cast<DecayedType
>(TRatio::den)) /
static_cast<DecayedType
>(TRatio::num));
234template <
typename TField,
typename TType>
235constexpr bool hasExpectedUnits()
237 return std::is_same<typename TField::UnitsType, TType>::value;
240template <
typename TRet,
typename TConvRatio,
typename TField>
241TRet getTime(
const TField& field)
244 "The field is expected to contain \"time\" units.");
245 return UnitsValueConverter<>::getValue<TRet, TConvRatio>(field);
248template <
typename TConvRatio,
typename TField,
typename TVal>
249void setTime(TField& field, TVal&& val)
252 "The field is expected to contain \"time\" units.");
253 UnitsValueConverter<>::setValue<TConvRatio>(field, std::forward<TVal>(val));
256template <
typename TRet,
typename TConvRatio,
typename TField>
257TRet getDistance(
const TField& field)
260 "The field is expected to contain \"distance\" units.");
261 return UnitsValueConverter<>::getValue<TRet, TConvRatio>(field);
264template <
typename TConvRatio,
typename TField,
typename TVal>
265void setDistance(TField& field, TVal&& val)
268 "The field is expected to contain \"distance\" units.");
269 UnitsValueConverter<>::setValue<TConvRatio>(field, std::forward<TVal>(val));
272template <
typename TRet,
typename TConvRatio,
typename TField>
273TRet getSpeed(
const TField& field)
276 "The field is expected to contain \"speed\" units.");
277 return UnitsValueConverter<>::getValue<TRet, TConvRatio>(field);
280template <
typename TConvRatio,
typename TField,
typename TVal>
281void setSpeed(TField& field, TVal&& val)
284 "The field is expected to contain \"speed\" units.");
285 UnitsValueConverter<>::setValue<TConvRatio>(field, std::forward<TVal>(val));
288template <
typename TRet,
typename TConvRatio,
typename TField>
289TRet getFrequency(
const TField& field)
292 "The field is expected to contain \"frequency\" units.");
293 return UnitsValueConverter<>::getValue<TRet, TConvRatio>(field);
296template <
typename TConvRatio,
typename TField,
typename TVal>
297void setFrequency(TField& field, TVal&& val)
300 "The field is expected to contain \"frequency\" units.");
301 UnitsValueConverter<>::setValue<TConvRatio>(field, std::forward<TVal>(val));
307 static constexpr T Value =
static_cast<T
>(3.14159265358979323846264338327950288419716939937510582097494459230781640628620899L);
310template <
typename...>
311struct AngleValueConverter
313 template <
typename TRet,
typename TConvRatio,
typename TField>
314 static TRet getValue(
const TField& field)
316 using FieldType =
typename std::decay<
decltype(field)>::type;
317 static_assert(details::hasExpectedUnits<FieldType, comms::traits::units::Angle>(),
318 "The field is expected to contain \"angle\" units.");
320 using Tag = GetTag<FieldType, TConvRatio>;
321 return getValueInternal<TRet, TConvRatio>(field, Tag());
324 template <
typename TConvRatio,
typename TField,
typename TVal>
325 static void setValue(TField& field, TVal&& val)
327 using FieldType =
typename std::decay<
decltype(field)>::type;
328 static_assert(details::hasExpectedUnits<FieldType, comms::traits::units::Angle>(),
329 "The field is expected to contain \"angle\" units.");
331 using Tag = SetTag<FieldType, TConvRatio>;
332 setValueInternal<TConvRatio>(field, std::forward<TVal>(val), Tag());
336 template <
typename... TParams>
337 using SameUnitsTag = comms::details::tag::Tag1<>;
339 template <
typename... TParams>
340 using DegreesToRadiansTag = comms::details::tag::Tag2<>;
342 template <
typename... TParams>
343 using RadiansToDegreesTag = comms::details::tag::Tag3<>;
345 template <
typename TConvRatio>
347 typename comms::util::LazyShallowConditional<
348 std::is_same<TConvRatio, typename comms::traits::units::RadiansRatio>::value
354 template <
typename TConvRatio>
356 typename comms::util::LazyShallowConditional<
357 std::is_same<TConvRatio, typename comms::traits::units::RadiansRatio>::value
363 template <
typename TField,
typename TConvRatio>
365 typename comms::util::LazyShallowConditional<
366 std::is_same<TConvRatio, typename TField::UnitsRatio>::value
373 template <
typename TField,
typename TConvRatio>
375 typename comms::util::LazyShallowConditional<
376 std::is_same<TConvRatio, typename TField::UnitsRatio>::value
383 template <
typename TRet,
typename TConvRatio,
typename TField,
typename... TParams>
384 static TRet getValueInternal(
const TField& field, SameUnitsTag<TParams...>)
386 return field.template getScaled<TRet>();
389 template <
typename TRet,
typename TConvRatio,
typename TField,
typename... TParams>
390 static TRet getValueInternal(
const TField& field, DegreesToRadiansTag<TParams...>)
392 using FieldType =
typename std::decay<
decltype(field)>::type;
393 static_assert(std::is_same<typename FieldType::UnitsRatio, comms::traits::units::DegreesRatio>::value,
394 "The field is expected to contain degrees.");
396 return PI<TRet>::Value * UnitsValueConverter<>::getValue<TRet, TConvRatio>(field);
399 template <
typename TRet,
typename TConvRatio,
typename TField,
typename... TParams>
400 static TRet getValueInternal(
const TField& field, RadiansToDegreesTag<TParams...>)
402 using FieldType =
typename std::decay<
decltype(field)>::type;
403 static_assert(std::is_same<typename FieldType::UnitsRatio, comms::traits::units::RadiansRatio>::value,
404 "The field is expected to contain radians.");
406 return UnitsValueConverter<>::getValue<TRet, TConvRatio>(field) / PI<TRet>::Value;
409 template <
typename TConvRatio,
typename TField,
typename TVal,
typename... TParams>
410 static void setValueInternal(TField& field, TVal&& val, SameUnitsTag<TParams...>)
412 field.setScaled(std::forward<TVal>(val));
415 template <
typename TConvRatio,
typename TField,
typename TVal,
typename... TParams>
416 static void setValueInternal(TField& field, TVal&& val, DegreesToRadiansTag<TParams...>)
418 using FieldType =
typename std::decay<
decltype(field)>::type;
419 static_assert(std::is_same<typename FieldType::UnitsRatio, comms::traits::units::RadiansRatio>::value,
420 "The field is expected to contain radians.");
422 using ValueType =
typename std::decay<
decltype(val)>::type;
425 std::is_floating_point<ValueType>::value
431 UnitsValueConverter<>::setValue<TConvRatio>(field, val * PI<PiType>::Value);
434 template <
typename TConvRatio,
typename TField,
typename TVal,
typename... TParams>
435 static void setValueInternal(TField& field, TVal&& val, RadiansToDegreesTag<TParams...>)
437 using FieldType =
typename std::decay<
decltype(field)>::type;
438 static_assert(std::is_same<typename FieldType::UnitsRatio, comms::traits::units::DegreesRatio>::value,
439 "The field is expected to contain degrees.");
441 using ValueType =
typename std::decay<
decltype(val)>::type;
444 std::is_floating_point<ValueType>::value
450 UnitsValueConverter<>::setValue<TConvRatio>(field,
static_cast<PiType
>(val) / PI<PiType>::Value);
454template <
typename TRet,
typename TConvRatio,
typename TField>
455TRet getAngle(
const TField& field)
457 return AngleValueConverter<>::getValue<TRet, TConvRatio>(field);
460template <
typename TConvRatio,
typename TField,
typename TVal>
461void setAngle(TField& field, TVal&& val)
463 AngleValueConverter<>::setValue<TConvRatio>(field, std::forward<TVal>(val));
466template <
typename TRet,
typename TConvRatio,
typename TField>
467TRet getCurrent(
const TField& field)
470 "The field is expected to contain \"current\" units.");
471 return UnitsValueConverter<>::getValue<TRet, TConvRatio>(field);
474template <
typename TConvRatio,
typename TField,
typename TVal>
475void setCurrent(TField& field, TVal&& val)
478 "The field is expected to contain \"current\" units.");
479 UnitsValueConverter<>::setValue<TConvRatio>(field, std::forward<TVal>(val));
482template <
typename TRet,
typename TConvRatio,
typename TField>
483TRet getVoltage(
const TField& field)
486 "The field is expected to contain \"voltage\" units.");
487 return UnitsValueConverter<>::getValue<TRet, TConvRatio>(field);
490template <
typename TConvRatio,
typename TField,
typename TVal>
491void setVoltage(TField& field, TVal&& val)
494 "The field is expected to contain \"voltage\" units.");
495 UnitsValueConverter<>::setValue<TConvRatio>(field, std::forward<TVal>(val));
498template <
typename TRet,
typename TConvRatio,
typename TField>
499TRet getMemory(
const TField& field)
502 "The field is expected to contain \"memory\" units.");
503 return UnitsValueConverter<>::getValue<TRet, TConvRatio>(field);
506template <
typename TConvRatio,
typename TField,
typename TVal>
507void setMemory(TField& field, TVal&& val)
510 "The field is expected to contain \"memory\" units.");
511 UnitsValueConverter<>::setValue<TConvRatio>(field, std::forward<TVal>(val));
526template <
typename TRet,
typename TField>
529 return details::getTime<TRet, comms::traits::units::NanosecondsRatio>(field);
542template <
typename TField,
typename TVal>
545 details::setTime<comms::traits::units::NanosecondsRatio>(field, std::forward<TVal>(val));
550template <
typename TField>
554 TField::hasUnits() &&
555 std::is_same<typename TField::UnitsType, comms::traits::units::Time>::value &&
556 std::is_same<typename TField::UnitsRatio, comms::traits::units::NanosecondsRatio>::value;
563template <
typename TField>
566 return isNanoseconds<
typename std::decay<
decltype(field)>::type>();
579template <
typename TRet,
typename TField>
582 return details::getTime<TRet, comms::traits::units::MicrosecondsRatio>(field);
595template <
typename TField,
typename TVal>
598 details::setTime<comms::traits::units::MicrosecondsRatio>(field, std::forward<TVal>(val));
603template <
typename TField>
607 TField::hasUnits() &&
608 std::is_same<typename TField::UnitsType, comms::traits::units::Time>::value &&
609 std::is_same<typename TField::UnitsRatio, comms::traits::units::MicrosecondsRatio>::value;
616template <
typename TField>
619 return isMicroseconds<
typename std::decay<
decltype(field)>::type>();
632template <
typename TRet,
typename TField>
635 return details::getTime<TRet, comms::traits::units::MillisecondsRatio>(field);
648template <
typename TField,
typename TVal>
651 details::setTime<comms::traits::units::MillisecondsRatio>(field, std::forward<TVal>(val));
656template <
typename TField>
660 TField::hasUnits() &&
661 std::is_same<typename TField::UnitsType, comms::traits::units::Time>::value &&
662 std::is_same<typename TField::UnitsRatio, comms::traits::units::MillisecondsRatio>::value;
669template <
typename TField>
672 return isMilliseconds<
typename std::decay<
decltype(field)>::type>();
685template <
typename TRet,
typename TField>
688 return details::getTime<TRet, comms::traits::units::SecondsRatio>(field);
701template <
typename TField,
typename TVal>
704 details::setTime<comms::traits::units::SecondsRatio>(field, std::forward<TVal>(val));
709template <
typename TField>
713 TField::hasUnits() &&
714 std::is_same<typename TField::UnitsType, comms::traits::units::Time>::value &&
715 std::is_same<typename TField::UnitsRatio, comms::traits::units::SecondsRatio>::value;
722template <
typename TField>
725 return isSeconds<
typename std::decay<
decltype(field)>::type>();
738template <
typename TRet,
typename TField>
741 return details::getTime<TRet, comms::traits::units::MinutesRatio>(field);
754template <
typename TField,
typename TVal>
757 details::setTime<comms::traits::units::MinutesRatio>(field, std::forward<TVal>(val));
762template <
typename TField>
766 TField::hasUnits() &&
767 std::is_same<typename TField::UnitsType, comms::traits::units::Time>::value &&
768 std::is_same<typename TField::UnitsRatio, comms::traits::units::MinutesRatio>::value;
775template <
typename TField>
778 return isMinutes<
typename std::decay<
decltype(field)>::type>();
791template <
typename TRet,
typename TField>
794 return details::getTime<TRet, comms::traits::units::HoursRatio>(field);
807template <
typename TField,
typename TVal>
810 details::setTime<comms::traits::units::HoursRatio>(field, std::forward<TVal>(val));
815template <
typename TField>
819 TField::hasUnits() &&
820 std::is_same<typename TField::UnitsType, comms::traits::units::Time>::value &&
821 std::is_same<typename TField::UnitsRatio, comms::traits::units::HoursRatio>::value;
828template <
typename TField>
831 return isHours<
typename std::decay<
decltype(field)>::type>();
844template <
typename TRet,
typename TField>
847 return details::getTime<TRet, comms::traits::units::DaysRatio>(field);
860template <
typename TField,
typename TVal>
863 details::setTime<comms::traits::units::DaysRatio>(field, std::forward<TVal>(val));
868template <
typename TField>
872 TField::hasUnits() &&
873 std::is_same<typename TField::UnitsType, comms::traits::units::Time>::value &&
874 std::is_same<typename TField::UnitsRatio, comms::traits::units::DaysRatio>::value;
881template <
typename TField>
882constexpr bool isDays(
const TField& field)
884 return isDays<
typename std::decay<
decltype(field)>::type>();
897template <
typename TRet,
typename TField>
900 return details::getTime<TRet, comms::traits::units::WeeksRatio>(field);
913template <
typename TField,
typename TVal>
916 details::setTime<comms::traits::units::WeeksRatio>(field, std::forward<TVal>(val));
921template <
typename TField>
925 TField::hasUnits() &&
926 std::is_same<typename TField::UnitsType, comms::traits::units::Time>::value &&
927 std::is_same<typename TField::UnitsRatio, comms::traits::units::WeeksRatio>::value;
934template <
typename TField>
937 return isWeeks<
typename std::decay<
decltype(field)>::type>();
950template <
typename TRet,
typename TField>
953 return details::getDistance<TRet, comms::traits::units::NanometersRatio>(field);
966template <
typename TField,
typename TVal>
969 details::setDistance<comms::traits::units::NanometersRatio>(field, std::forward<TVal>(val));
974template <
typename TField>
978 TField::hasUnits() &&
979 std::is_same<typename TField::UnitsType, comms::traits::units::Distance>::value &&
980 std::is_same<typename TField::UnitsRatio, comms::traits::units::NanometersRatio>::value;
987template <
typename TField>
990 return isNanometers<
typename std::decay<
decltype(field)>::type>();
1003template <
typename TRet,
typename TField>
1006 return details::getDistance<TRet, comms::traits::units::MicrometersRatio>(field);
1019template <
typename TField,
typename TVal>
1022 details::setDistance<comms::traits::units::MicrometersRatio>(field, std::forward<TVal>(val));
1027template <
typename TField>
1031 TField::hasUnits() &&
1032 std::is_same<typename TField::UnitsType, comms::traits::units::Distance>::value &&
1033 std::is_same<typename TField::UnitsRatio, comms::traits::units::MicrometersRatio>::value;
1040template <
typename TField>
1043 return isMicrometers<
typename std::decay<
decltype(field)>::type>();
1056template <
typename TRet,
typename TField>
1059 return details::getDistance<TRet, comms::traits::units::MillimetersRatio>(field);
1072template <
typename TField,
typename TVal>
1075 details::setDistance<comms::traits::units::MillimetersRatio>(field, std::forward<TVal>(val));
1080template <
typename TField>
1084 TField::hasUnits() &&
1085 std::is_same<typename TField::UnitsType, comms::traits::units::Distance>::value &&
1086 std::is_same<typename TField::UnitsRatio, comms::traits::units::MillimetersRatio>::value;
1093template <
typename TField>
1096 return isMillimeters<
typename std::decay<
decltype(field)>::type>();
1109template <
typename TRet,
typename TField>
1112 return details::getDistance<TRet, comms::traits::units::CentimetersRatio>(field);
1125template <
typename TField,
typename TVal>
1128 details::setDistance<comms::traits::units::CentimetersRatio>(field, std::forward<TVal>(val));
1133template <
typename TField>
1137 TField::hasUnits() &&
1138 std::is_same<typename TField::UnitsType, comms::traits::units::Distance>::value &&
1139 std::is_same<typename TField::UnitsRatio, comms::traits::units::CentimetersRatio>::value;
1146template <
typename TField>
1149 return isCentimeters<
typename std::decay<
decltype(field)>::type>();
1162template <
typename TRet,
typename TField>
1165 return details::getDistance<TRet, comms::traits::units::MetersRatio>(field);
1178template <
typename TField,
typename TVal>
1181 details::setDistance<comms::traits::units::MetersRatio>(field, std::forward<TVal>(val));
1186template <
typename TField>
1190 TField::hasUnits() &&
1191 std::is_same<typename TField::UnitsType, comms::traits::units::Distance>::value &&
1192 std::is_same<typename TField::UnitsRatio, comms::traits::units::MetersRatio>::value;
1199template <
typename TField>
1202 return isMeters<
typename std::decay<
decltype(field)>::type>();
1215template <
typename TRet,
typename TField>
1218 return details::getDistance<TRet, comms::traits::units::KilometersRatio>(field);
1231template <
typename TField,
typename TVal>
1234 details::setDistance<comms::traits::units::KilometersRatio>(field, std::forward<TVal>(val));
1239template <
typename TField>
1243 TField::hasUnits() &&
1244 std::is_same<typename TField::UnitsType, comms::traits::units::Distance>::value &&
1245 std::is_same<typename TField::UnitsRatio, comms::traits::units::KilometersRatio>::value;
1252template <
typename TField>
1255 return isKilometers<
typename std::decay<
decltype(field)>::type>();
1268template <
typename TRet,
typename TField>
1271 return details::getSpeed<TRet, comms::traits::units::NanometersPerSecondRatio>(field);
1284template <
typename TField,
typename TVal>
1287 details::setSpeed<comms::traits::units::NanometersPerSecondRatio>(field, std::forward<TVal>(val));
1292template <
typename TField>
1296 TField::hasUnits() &&
1297 std::is_same<typename TField::UnitsType, comms::traits::units::Speed>::value &&
1298 std::is_same<typename TField::UnitsRatio, comms::traits::units::NanometersPerSecondRatio>::value;
1305template <
typename TField>
1321template <
typename TRet,
typename TField>
1324 return details::getSpeed<TRet, comms::traits::units::MicrometersPerSecondRatio>(field);
1337template <
typename TField,
typename TVal>
1340 details::setSpeed<comms::traits::units::MicrometersPerSecondRatio>(field, std::forward<TVal>(val));
1345template <
typename TField>
1349 TField::hasUnits() &&
1350 std::is_same<typename TField::UnitsType, comms::traits::units::Speed>::value &&
1351 std::is_same<typename TField::UnitsRatio, comms::traits::units::MicrometersPerSecondRatio>::value;
1358template <
typename TField>
1374template <
typename TRet,
typename TField>
1377 return details::getSpeed<TRet, comms::traits::units::MillimetersPerSecondRatio>(field);
1390template <
typename TField,
typename TVal>
1393 details::setSpeed<comms::traits::units::MillimetersPerSecondRatio>(field, std::forward<TVal>(val));
1398template <
typename TField>
1402 TField::hasUnits() &&
1403 std::is_same<typename TField::UnitsType, comms::traits::units::Speed>::value &&
1404 std::is_same<typename TField::UnitsRatio, comms::traits::units::MillimetersPerSecondRatio>::value;
1411template <
typename TField>
1427template <
typename TRet,
typename TField>
1430 return details::getSpeed<TRet, comms::traits::units::CentimetersPerSecondRatio>(field);
1443template <
typename TField,
typename TVal>
1446 details::setSpeed<comms::traits::units::CentimetersPerSecondRatio>(field, std::forward<TVal>(val));
1451template <
typename TField>
1455 TField::hasUnits() &&
1456 std::is_same<typename TField::UnitsType, comms::traits::units::Speed>::value &&
1457 std::is_same<typename TField::UnitsRatio, comms::traits::units::CentimetersPerSecondRatio>::value;
1464template <
typename TField>
1480template <
typename TRet,
typename TField>
1483 return details::getSpeed<TRet, comms::traits::units::MetersPerSecondRatio>(field);
1496template <
typename TField,
typename TVal>
1499 details::setSpeed<comms::traits::units::MetersPerSecondRatio>(field, std::forward<TVal>(val));
1504template <
typename TField>
1508 TField::hasUnits() &&
1509 std::is_same<typename TField::UnitsType, comms::traits::units::Speed>::value &&
1510 std::is_same<typename TField::UnitsRatio, comms::traits::units::MetersPerSecondRatio>::value;
1517template <
typename TField>
1533template <
typename TRet,
typename TField>
1536 return details::getSpeed<TRet, comms::traits::units::KilometersPerSecondRatio>(field);
1549template <
typename TField,
typename TVal>
1552 details::setSpeed<comms::traits::units::KilometersPerSecondRatio>(field, std::forward<TVal>(val));
1557template <
typename TField>
1561 TField::hasUnits() &&
1562 std::is_same<typename TField::UnitsType, comms::traits::units::Speed>::value &&
1563 std::is_same<typename TField::UnitsRatio, comms::traits::units::KilometersPerSecondRatio>::value;
1570template <
typename TField>
1586template <
typename TRet,
typename TField>
1589 return details::getSpeed<TRet, comms::traits::units::KilometersPerHourRatio>(field);
1602template <
typename TField,
typename TVal>
1605 details::setSpeed<comms::traits::units::KilometersPerHourRatio>(field, std::forward<TVal>(val));
1610template <
typename TField>
1614 TField::hasUnits() &&
1615 std::is_same<typename TField::UnitsType, comms::traits::units::Speed>::value &&
1616 std::is_same<typename TField::UnitsRatio, comms::traits::units::KilometersPerHourRatio>::value;
1623template <
typename TField>
1639template <
typename TRet,
typename TField>
1642 return details::getFrequency<TRet, comms::traits::units::HzRatio>(field);
1655template <
typename TField,
typename TVal>
1658 details::setFrequency<comms::traits::units::HzRatio>(field, std::forward<TVal>(val));
1663template <
typename TField>
1667 TField::hasUnits() &&
1668 std::is_same<typename TField::UnitsType, comms::traits::units::Frequency>::value &&
1669 std::is_same<typename TField::UnitsRatio, comms::traits::units::HzRatio>::value;
1676template <
typename TField>
1679 return isHertz<
typename std::decay<
decltype(field)>::type>();
1692template <
typename TRet,
typename TField>
1695 return details::getFrequency<TRet, comms::traits::units::KiloHzRatio>(field);
1708template <
typename TField,
typename TVal>
1711 details::setFrequency<comms::traits::units::KiloHzRatio>(field, std::forward<TVal>(val));
1716template <
typename TField>
1720 TField::hasUnits() &&
1721 std::is_same<typename TField::UnitsType, comms::traits::units::Frequency>::value &&
1722 std::is_same<typename TField::UnitsRatio, comms::traits::units::KiloHzRatio>::value;
1729template <
typename TField>
1732 return isKilohertz<
typename std::decay<
decltype(field)>::type>();
1745template <
typename TRet,
typename TField>
1748 return details::getFrequency<TRet, comms::traits::units::MegaHzRatio>(field);
1761template <
typename TField,
typename TVal>
1764 details::setFrequency<comms::traits::units::MegaHzRatio>(field, std::forward<TVal>(val));
1769template <
typename TField>
1773 TField::hasUnits() &&
1774 std::is_same<typename TField::UnitsType, comms::traits::units::Frequency>::value &&
1775 std::is_same<typename TField::UnitsRatio, comms::traits::units::MegaHzRatio>::value;
1782template <
typename TField>
1785 return isMegahertz<
typename std::decay<
decltype(field)>::type>();
1798template <
typename TRet,
typename TField>
1801 return details::getFrequency<TRet, comms::traits::units::GigaHzRatio>(field);
1814template <
typename TField,
typename TVal>
1817 details::setFrequency<comms::traits::units::GigaHzRatio>(field, std::forward<TVal>(val));
1822template <
typename TField>
1826 TField::hasUnits() &&
1827 std::is_same<typename TField::UnitsType, comms::traits::units::Frequency>::value &&
1828 std::is_same<typename TField::UnitsRatio, comms::traits::units::GigaHzRatio>::value;
1835template <
typename TField>
1838 return isGigahertz<
typename std::decay<
decltype(field)>::type>();
1851template <
typename TRet,
typename TField>
1854 return details::getAngle<TRet, comms::traits::units::DegreesRatio>(field);
1867template <
typename TField,
typename TVal>
1870 details::setAngle<comms::traits::units::DegreesRatio>(field, std::forward<TVal>(val));
1875template <
typename TField>
1879 TField::hasUnits() &&
1880 std::is_same<typename TField::UnitsType, comms::traits::units::Angle>::value &&
1881 std::is_same<typename TField::UnitsRatio, comms::traits::units::DegreesRatio>::value;
1888template <
typename TField>
1891 return isDegrees<
typename std::decay<
decltype(field)>::type>();
1904template <
typename TRet,
typename TField>
1907 return details::getAngle<TRet, comms::traits::units::RadiansRatio>(field);
1920template <
typename TField,
typename TVal>
1923 details::setAngle<comms::traits::units::RadiansRatio>(field, std::forward<TVal>(val));
1928template <
typename TField>
1932 TField::hasUnits() &&
1933 std::is_same<typename TField::UnitsType, comms::traits::units::Angle>::value &&
1934 std::is_same<typename TField::UnitsRatio, comms::traits::units::RadiansRatio>::value;
1941template <
typename TField>
1944 return isRadians<
typename std::decay<
decltype(field)>::type>();
1957template <
typename TRet,
typename TField>
1960 return details::getCurrent<TRet, comms::traits::units::NanoampsRatio>(field);
1973template <
typename TField,
typename TVal>
1976 details::setCurrent<comms::traits::units::NanoampsRatio>(field, std::forward<TVal>(val));
1981template <
typename TField>
1985 TField::hasUnits() &&
1986 std::is_same<typename TField::UnitsType, comms::traits::units::Current>::value &&
1987 std::is_same<typename TField::UnitsRatio, comms::traits::units::NanoampsRatio>::value;
1994template <
typename TField>
1997 return isNanoamps<
typename std::decay<
decltype(field)>::type>();
2010template <
typename TRet,
typename TField>
2013 return details::getCurrent<TRet, comms::traits::units::MicroampsRatio>(field);
2026template <
typename TField,
typename TVal>
2029 details::setCurrent<comms::traits::units::MicroampsRatio>(field, std::forward<TVal>(val));
2034template <
typename TField>
2038 TField::hasUnits() &&
2039 std::is_same<typename TField::UnitsType, comms::traits::units::Current>::value &&
2040 std::is_same<typename TField::UnitsRatio, comms::traits::units::MicroampsRatio>::value;
2047template <
typename TField>
2050 return isMicroamps<
typename std::decay<
decltype(field)>::type>();
2064template <
typename TRet,
typename TField>
2067 return details::getCurrent<TRet, comms::traits::units::MilliampsRatio>(field);
2080template <
typename TField,
typename TVal>
2083 details::setCurrent<comms::traits::units::MilliampsRatio>(field, std::forward<TVal>(val));
2088template <
typename TField>
2092 TField::hasUnits() &&
2093 std::is_same<typename TField::UnitsType, comms::traits::units::Current>::value &&
2094 std::is_same<typename TField::UnitsRatio, comms::traits::units::MilliampsRatio>::value;
2101template <
typename TField>
2104 return isMilliamps<
typename std::decay<
decltype(field)>::type>();
2117template <
typename TRet,
typename TField>
2120 return details::getCurrent<TRet, comms::traits::units::AmpsRatio>(field);
2133template <
typename TField,
typename TVal>
2136 details::setCurrent<comms::traits::units::AmpsRatio>(field, std::forward<TVal>(val));
2141template <
typename TField>
2145 TField::hasUnits() &&
2146 std::is_same<typename TField::UnitsType, comms::traits::units::Current>::value &&
2147 std::is_same<typename TField::UnitsRatio, comms::traits::units::AmpsRatio>::value;
2154template <
typename TField>
2157 return isAmps<
typename std::decay<
decltype(field)>::type>();
2170template <
typename TRet,
typename TField>
2173 return details::getCurrent<TRet, comms::traits::units::KiloampsRatio>(field);
2186template <
typename TField,
typename TVal>
2189 details::setCurrent<comms::traits::units::KiloampsRatio>(field, std::forward<TVal>(val));
2194template <
typename TField>
2198 TField::hasUnits() &&
2199 std::is_same<typename TField::UnitsType, comms::traits::units::Current>::value &&
2200 std::is_same<typename TField::UnitsRatio, comms::traits::units::KiloampsRatio>::value;
2207template <
typename TField>
2210 return isKiloamps<
typename std::decay<
decltype(field)>::type>();
2223template <
typename TRet,
typename TField>
2226 return details::getVoltage<TRet, comms::traits::units::NanovoltsRatio>(field);
2239template <
typename TField,
typename TVal>
2242 details::setVoltage<comms::traits::units::NanovoltsRatio>(field, std::forward<TVal>(val));
2247template <
typename TField>
2251 TField::hasUnits() &&
2252 std::is_same<typename TField::UnitsType, comms::traits::units::Voltage>::value &&
2253 std::is_same<typename TField::UnitsRatio, comms::traits::units::NanovoltsRatio>::value;
2260template <
typename TField>
2263 return isNanovolts<
typename std::decay<
decltype(field)>::type>();
2276template <
typename TRet,
typename TField>
2279 return details::getVoltage<TRet, comms::traits::units::MicrovoltsRatio>(field);
2292template <
typename TField,
typename TVal>
2295 details::setVoltage<comms::traits::units::MicrovoltsRatio>(field, std::forward<TVal>(val));
2300template <
typename TField>
2304 TField::hasUnits() &&
2305 std::is_same<typename TField::UnitsType, comms::traits::units::Voltage>::value &&
2306 std::is_same<typename TField::UnitsRatio, comms::traits::units::MicrovoltsRatio>::value;
2313template <
typename TField>
2316 return isMicrovolts<
typename std::decay<
decltype(field)>::type>();
2329template <
typename TRet,
typename TField>
2332 return details::getVoltage<TRet, comms::traits::units::MillivoltsRatio>(field);
2345template <
typename TField,
typename TVal>
2348 details::setVoltage<comms::traits::units::MillivoltsRatio>(field, std::forward<TVal>(val));
2353template <
typename TField>
2357 TField::hasUnits() &&
2358 std::is_same<typename TField::UnitsType, comms::traits::units::Voltage>::value &&
2359 std::is_same<typename TField::UnitsRatio, comms::traits::units::MillivoltsRatio>::value;
2366template <
typename TField>
2369 return isMillivolts<
typename std::decay<
decltype(field)>::type>();
2382template <
typename TRet,
typename TField>
2385 return details::getVoltage<TRet, comms::traits::units::VoltsRatio>(field);
2398template <
typename TField,
typename TVal>
2401 details::setVoltage<comms::traits::units::VoltsRatio>(field, std::forward<TVal>(val));
2406template <
typename TField>
2410 TField::hasUnits() &&
2411 std::is_same<typename TField::UnitsType, comms::traits::units::Voltage>::value &&
2412 std::is_same<typename TField::UnitsRatio, comms::traits::units::VoltsRatio>::value;
2419template <
typename TField>
2422 return isVolts<
typename std::decay<
decltype(field)>::type>();
2435template <
typename TRet,
typename TField>
2438 return details::getVoltage<TRet, comms::traits::units::KilovoltsRatio>(field);
2451template <
typename TField,
typename TVal>
2454 details::setVoltage<comms::traits::units::KilovoltsRatio>(field, std::forward<TVal>(val));
2459template <
typename TField>
2463 TField::hasUnits() &&
2464 std::is_same<typename TField::UnitsType, comms::traits::units::Voltage>::value &&
2465 std::is_same<typename TField::UnitsRatio, comms::traits::units::KilovoltsRatio>::value;
2472template <
typename TField>
2475 return isKilovolts<
typename std::decay<
decltype(field)>::type>();
2488template <
typename TRet,
typename TField>
2491 return details::getMemory<TRet, comms::traits::units::BytesRatio>(field);
2504template <
typename TField,
typename TVal>
2507 details::setMemory<comms::traits::units::BytesRatio>(field, std::forward<TVal>(val));
2512template <
typename TField>
2516 TField::hasUnits() &&
2517 std::is_same<typename TField::UnitsType, comms::traits::units::Memory>::value &&
2518 std::is_same<typename TField::UnitsRatio, comms::traits::units::BytesRatio>::value;
2525template <
typename TField>
2528 return isBytes<
typename std::decay<
decltype(field)>::type>();
2541template <
typename TRet,
typename TField>
2544 return details::getMemory<TRet, comms::traits::units::KilobytesRatio>(field);
2557template <
typename TField,
typename TVal>
2560 details::setMemory<comms::traits::units::KilobytesRatio>(field, std::forward<TVal>(val));
2565template <
typename TField>
2569 TField::hasUnits() &&
2570 std::is_same<typename TField::UnitsType, comms::traits::units::Memory>::value &&
2571 std::is_same<typename TField::UnitsRatio, comms::traits::units::KilobytesRatio>::value;
2578template <
typename TField>
2581 return isKilobytes<
typename std::decay<
decltype(field)>::type>();
2594template <
typename TRet,
typename TField>
2597 return details::getMemory<TRet, comms::traits::units::MegabytesRatio>(field);
2610template <
typename TField,
typename TVal>
2613 details::setMemory<comms::traits::units::MegabytesRatio>(field, std::forward<TVal>(val));
2618template <
typename TField>
2622 TField::hasUnits() &&
2623 std::is_same<typename TField::UnitsType, comms::traits::units::Memory>::value &&
2624 std::is_same<typename TField::UnitsRatio, comms::traits::units::MegabytesRatio>::value;
2631template <
typename TField>
2634 return isMegabytes<
typename std::decay<
decltype(field)>::type>();
2648template <
typename TRet,
typename TField>
2651 return details::getMemory<TRet, comms::traits::units::GigabytesRatio>(field);
2664template <
typename TField,
typename TVal>
2667 details::setMemory<comms::traits::units::GigabytesRatio>(field, std::forward<TVal>(val));
2672template <
typename TField>
2676 TField::hasUnits() &&
2677 std::is_same<typename TField::UnitsType, comms::traits::units::Memory>::value &&
2678 std::is_same<typename TField::UnitsRatio, comms::traits::units::GigabytesRatio>::value;
2685template <
typename TField>
2688 return isGigabytes<
typename std::decay<
decltype(field)>::type>();
2701template <
typename TRet,
typename TField>
2704 return details::getMemory<TRet, comms::traits::units::TerabytesRatio>(field);
2717template <
typename TField,
typename TVal>
2720 details::setMemory<comms::traits::units::TerabytesRatio>(field, std::forward<TVal>(val));
2725template <
typename TField>
2729 TField::hasUnits() &&
2730 std::is_same<typename TField::UnitsType, comms::traits::units::Memory>::value &&
2731 std::is_same<typename TField::UnitsRatio, comms::traits::units::TerabytesRatio>::value;
2738template <
typename TField>
2741 return isTerabytes<
typename std::decay<
decltype(field)>::type>();
2748COMMS_MSVC_WARNING_POP
Contains various compiler related definitions.
comms::option::def::FieldType< TMsg > FieldType
Same as comms::option::def::FieldType.
Definition options.h:1492
constexpr bool isMinutes()
Compile time check whether the field type holds minutes.
Definition units.h:763
TRet getNanovolts(const TField &field)
Retrieve field's value as nanovolts.
Definition units.h:2224
constexpr bool isMillimetersPerSecond()
Compile time check whether the field type holds millimeters per second.
Definition units.h:1399
TRet getMicrovolts(const TField &field)
Retrieve field's value as microvolts.
Definition units.h:2277
void setMicroamps(TField &field, TVal &&val)
Update field's value accordingly, while providing microamps value.
Definition units.h:2027
TRet getMilliseconds(const TField &field)
Retrieve field's value as milliseconds.
Definition units.h:633
constexpr bool isMegahertz()
Compile time check whether the field type holds megahertz.
Definition units.h:1770
void setBytes(TField &field, TVal &&val)
Update field's value accordingly, while providing bytes value.
Definition units.h:2505
void setMillimetersPerSecond(TField &field, TVal &&val)
Update field's value accordingly, while providing millimeters per second value.
Definition units.h:1391
TRet getGigabytes(const TField &field)
Retrieve field's value as gigabytes.
Definition units.h:2649
TRet getVolts(const TField &field)
Retrieve field's value as volts.
Definition units.h:2383
void setHours(TField &field, TVal &&val)
Update field's value accordingly, while providing hours value.
Definition units.h:808
void setMillivolts(TField &field, TVal &&val)
Update field's value accordingly, while providing millivolts value.
Definition units.h:2346
constexpr bool isMegabytes()
Compile time check whether the field type holds megabytes.
Definition units.h:2619
void setNanometersPerSecond(TField &field, TVal &&val)
Update field's value accordingly, while providing nanometers per second value.
Definition units.h:1285
TRet getCentimeters(const TField &field)
Retrieve field's value as centimeters.
Definition units.h:1110
constexpr bool isMeters()
Compile time check whether the field type holds meters.
Definition units.h:1187
constexpr bool isMillimeters()
Compile time check whether the field type holds millimeters.
Definition units.h:1081
TRet getMillivolts(const TField &field)
Retrieve field's value as millivolts.
Definition units.h:2330
TRet getHertz(const TField &field)
Retrieve field's value as hertz.
Definition units.h:1640
void setKilobytes(TField &field, TVal &&val)
Update field's value accordingly, while providing kilobytes value.
Definition units.h:2558
TRet getNanoamps(const TField &field)
Retrieve field's value as nanoamps.
Definition units.h:1958
constexpr bool isKilovolts()
Compile time check whether the field type holds kilovolts.
Definition units.h:2460
constexpr bool isCentimetersPerSecond()
Compile time check whether the field type holds centimeters per second.
Definition units.h:1452
constexpr bool isBytes()
Compile time check whether the field type holds bytes.
Definition units.h:2513
TRet getDays(const TField &field)
Retrieve field's value as days.
Definition units.h:845
constexpr bool isNanometers()
Compile time check whether the field type holds nanometers.
Definition units.h:975
void setWeeks(TField &field, TVal &&val)
Update field's value accordingly, while providing weeks value.
Definition units.h:914
TRet getMinutes(const TField &field)
Retrieve field's value as minutes.
Definition units.h:739
void setGigahertz(TField &field, TVal &&val)
Update field's value accordingly, while providing gigahertz value.
Definition units.h:1815
void setGigabytes(TField &field, TVal &&val)
Update field's value accordingly, while providing gigabytes value.
Definition units.h:2665
void setMicrometersPerSecond(TField &field, TVal &&val)
Update field's value accordingly, while providing micrometers per second value.
Definition units.h:1338
TRet getNanometersPerSecond(const TField &field)
Retrieve field's value as nanometers per second.
Definition units.h:1269
TRet getNanometers(const TField &field)
Retrieve field's value as nanometers.
Definition units.h:951
void setTerabytes(TField &field, TVal &&val)
Update field's value accordingly, while providing terabytes value.
Definition units.h:2718
TRet getMilliamps(const TField &field)
Retrieve field's value as milliamps.
Definition units.h:2065
TRet getMicroseconds(const TField &field)
Retrieve field's value as microseconds.
Definition units.h:580
TRet getMicrometers(const TField &field)
Retrieve field's value as micrometers.
Definition units.h:1004
constexpr bool isMicrometersPerSecond()
Compile time check whether the field type holds micrometers per second.
Definition units.h:1346
constexpr bool isKilometers()
Compile time check whether the field type holds kilometers.
Definition units.h:1240
constexpr bool isKilometersPerHour()
Compile time check whether the field type holds kilometers per hour.
Definition units.h:1611
TRet getMicroamps(const TField &field)
Retrieve field's value as microamps.
Definition units.h:2011
TRet getKiloamps(const TField &field)
Retrieve field's value as kiloamps.
Definition units.h:2171
constexpr bool isTerabytes()
Compile time check whether the field type holds terabytes.
Definition units.h:2726
void setMilliamps(TField &field, TVal &&val)
Update field's value accordingly, while providing milliamps value.
Definition units.h:2081
void setAmps(TField &field, TVal &&val)
Update field's value accordingly, while providing amps value.
Definition units.h:2134
TRet getKilohertz(const TField &field)
Retrieve field's value as kilohertz.
Definition units.h:1693
constexpr bool isMetersPerSecond()
Compile time check whether the field type holds meters per second.
Definition units.h:1505
constexpr bool isMicrometers()
Compile time check whether the field type holds micrometers.
Definition units.h:1028
void setDays(TField &field, TVal &&val)
Update field's value accordingly, while providing days value.
Definition units.h:861
constexpr bool isGigabytes()
Compile time check whether the field type holds gigabytes.
Definition units.h:2673
constexpr bool isVolts()
Compile time check whether the field type holds volts.
Definition units.h:2407
TRet getKilometersPerSecond(const TField &field)
Retrieve field's value as kilometers per second.
Definition units.h:1534
constexpr bool isHours()
Compile time check whether the field type holds hours.
Definition units.h:816
TRet getHours(const TField &field)
Retrieve field's value as hours.
Definition units.h:792
void setMetersPerSecond(TField &field, TVal &&val)
Update field's value accordingly, while providing meters per second value.
Definition units.h:1497
TRet getWeeks(const TField &field)
Retrieve field's value as weeks.
Definition units.h:898
TRet getNanoseconds(const TField &field)
Retrieve field's value as nanoseconds.
Definition units.h:527
constexpr bool isMicroamps()
Compile time check whether the field type holds microamps.
Definition units.h:2035
TRet getMeters(const TField &field)
Retrieve field's value as meters.
Definition units.h:1163
void setCentimeters(TField &field, TVal &&val)
Update field's value accordingly, while providing centimeters value.
Definition units.h:1126
void setKilovolts(TField &field, TVal &&val)
Update field's value accordingly, while providing kilovolts value.
Definition units.h:2452
void setMilliseconds(TField &field, TVal &&val)
Update field's value accordingly, while providing milliseconds value.
Definition units.h:649
constexpr bool isNanometersPerSecond()
Compile time check whether the field type holds nanometers per second.
Definition units.h:1293
TRet getKilometersPerHour(const TField &field)
Retrieve field's value as kilometers per hour.
Definition units.h:1587
void setSeconds(TField &field, TVal &&val)
Update field's value accordingly, while providing seconds value.
Definition units.h:702
void setMillimeters(TField &field, TVal &&val)
Update field's value accordingly, while providing millimeters value.
Definition units.h:1073
constexpr bool isMicrovolts()
Compile time check whether the field type holds microvolts.
Definition units.h:2301
constexpr bool isMicroseconds()
Compile time check whether the field type holds microseconds.
Definition units.h:604
TRet getTerabytes(const TField &field)
Retrieve field's value as terabytes.
Definition units.h:2702
constexpr bool isNanoamps()
Compile time check whether the field type holds nanoamps.
Definition units.h:1982
void setKilometers(TField &field, TVal &&val)
Update field's value accordingly, while providing kilometers value.
Definition units.h:1232
void setKiloamps(TField &field, TVal &&val)
Update field's value accordingly, while providing kiloamps value.
Definition units.h:2187
TRet getAmps(const TField &field)
Retrieve field's value as amps.
Definition units.h:2118
constexpr bool isMilliseconds()
Compile time check whether the field type holds milliseconds.
Definition units.h:657
constexpr bool isWeeks()
Compile time check whether the field type holds weeks.
Definition units.h:922
void setCentimetersPerSecond(TField &field, TVal &&val)
Update field's value accordingly, while providing centimeters per second value.
Definition units.h:1444
void setNanoamps(TField &field, TVal &&val)
Update field's value accordingly, while providing nanoamps value.
Definition units.h:1974
constexpr bool isKilohertz()
Compile time check whether the field type holds kilohertz.
Definition units.h:1717
constexpr bool isGigahertz()
Compile time check whether the field type holds gigahertz.
Definition units.h:1823
TRet getKilovolts(const TField &field)
Retrieve field's value as kilovolts.
Definition units.h:2436
TRet getBytes(const TField &field)
Retrieve field's value as bytes.
Definition units.h:2489
TRet getMetersPerSecond(const TField &field)
Retrieve field's value as meters per second.
Definition units.h:1481
void setMegahertz(TField &field, TVal &&val)
Update field's value accordingly, while providing megahertz value.
Definition units.h:1762
constexpr bool isNanoseconds()
Compile time check whether the field type holds nanoseconds.
Definition units.h:551
constexpr bool isKilobytes()
Compile time check whether the field type holds kilobytes.
Definition units.h:2566
void setHertz(TField &field, TVal &&val)
Update field's value accordingly, while providing hertz value.
Definition units.h:1656
TRet getMillimetersPerSecond(const TField &field)
Retrieve field's value as millimeters per second.
Definition units.h:1375
constexpr bool isMilliamps()
Compile time check whether the field type holds milliamps.
Definition units.h:2089
constexpr bool isKiloamps()
Compile time check whether the field type holds kiloamps.
Definition units.h:2195
TRet getKilobytes(const TField &field)
Retrieve field's value as kilobytes.
Definition units.h:2542
TRet getGigahertz(const TField &field)
Retrieve field's value as gigahertz.
Definition units.h:1799
void setMinutes(TField &field, TVal &&val)
Update field's value accordingly, while providing minutes value.
Definition units.h:755
void setDegrees(TField &field, TVal &&val)
Update field's value accordingly, while providing degrees value.
Definition units.h:1868
void setNanometers(TField &field, TVal &&val)
Update field's value accordingly, while providing nanometers value.
Definition units.h:967
void setMicroseconds(TField &field, TVal &&val)
Update field's value accordingly, while providing microseconds value.
Definition units.h:596
TRet getSeconds(const TField &field)
Retrieve field's value as seconds.
Definition units.h:686
void setMicrometers(TField &field, TVal &&val)
Update field's value accordingly, while providing micrometers value.
Definition units.h:1020
TRet getMicrometersPerSecond(const TField &field)
Retrieve field's value as micrometers per second.
Definition units.h:1322
void setMeters(TField &field, TVal &&val)
Update field's value accordingly, while providing meters value.
Definition units.h:1179
void setNanoseconds(TField &field, TVal &&val)
Update field's value accordingly, while providing nanoseconds value.
Definition units.h:543
void setRadians(TField &field, TVal &&val)
Update field's value accordingly, while providing radians value.
Definition units.h:1921
constexpr bool isDegrees()
Compile time check whether the field type holds degrees.
Definition units.h:1876
TRet getKilometers(const TField &field)
Retrieve field's value as kilometers.
Definition units.h:1216
TRet getCentimetersPerSecond(const TField &field)
Retrieve field's value as centimeters per second.
Definition units.h:1428
TRet getMegahertz(const TField &field)
Retrieve field's value as megahertz.
Definition units.h:1746
void setMegabytes(TField &field, TVal &&val)
Update field's value accordingly, while providing megabytes value.
Definition units.h:2611
void setKilometersPerSecond(TField &field, TVal &&val)
Update field's value accordingly, while providing kilometers per second value.
Definition units.h:1550
void setNanovolts(TField &field, TVal &&val)
Update field's value accordingly, while providing nanovolts value.
Definition units.h:2240
void setVolts(TField &field, TVal &&val)
Update field's value accordingly, while providing volts value.
Definition units.h:2399
constexpr bool isRadians()
Compile time check whether the field type holds radians.
Definition units.h:1929
constexpr bool isCentimeters()
Compile time check whether the field type holds centimeters.
Definition units.h:1134
void setKilometersPerHour(TField &field, TVal &&val)
Update field's value accordingly, while providing kilometers per hour value.
Definition units.h:1603
void setMicrovolts(TField &field, TVal &&val)
Update field's value accordingly, while providing microvolts value.
Definition units.h:2293
TRet getMegabytes(const TField &field)
Retrieve field's value as megabytes.
Definition units.h:2595
constexpr bool isDays()
Compile time check whether the field type holds days.
Definition units.h:869
constexpr bool isHertz()
Compile time check whether the field type holds hertz.
Definition units.h:1664
constexpr bool isSeconds()
Compile time check whether the field type holds seconds.
Definition units.h:710
void setKilohertz(TField &field, TVal &&val)
Update field's value accordingly, while providing kilohertz value.
Definition units.h:1709
constexpr bool isNanovolts()
Compile time check whether the field type holds nanovolts.
Definition units.h:2248
TRet getDegrees(const TField &field)
Retrieve field's value as degrees.
Definition units.h:1852
TRet getRadians(const TField &field)
Retrieve field's value as radians.
Definition units.h:1905
constexpr bool isMillivolts()
Compile time check whether the field type holds millivolts.
Definition units.h:2354
TRet getMillimeters(const TField &field)
Retrieve field's value as millimeters.
Definition units.h:1057
constexpr bool isAmps()
Compile time check whether the field type holds amps.
Definition units.h:2142
constexpr bool isKilometersPerSecond()
Compile time check whether the field type holds kilometers per second.
Definition units.h:1558
Main namespace for all classes / functions of COMMS library.
Tag class used to indicate electrical current value.
Definition traits.h:55
Tag class used to indicate distance value.
Definition traits.h:43
Tag class used to indicate frequency value.
Definition traits.h:49
Tag class used to indicate memory size value.
Definition traits.h:61
Tag class used to indicate speed value.
Definition traits.h:46
Tag class used to indicate time value.
Definition traits.h:40
Tag class used to indicate electrical voltage value.
Definition traits.h:58
Replacement to std::conditional.
Definition type_traits.h:29
This file contains all the classes necessary to properly define message traits.
Replacement to some types from standard type_traits.