16#include "comms/details/tag.h"
24COMMS_MSVC_WARNING_PUSH
25COMMS_MSVC_WARNING_DISABLE(4100)
26COMMS_MSVC_WARNING_DISABLE(4127)
37template <
typename TField>
38using ScalingRatioOf =
typename TField::ScalingRatio;
40template <
typename TField,
typename TConvRatio>
41using FullUnitsRatioOf =
42 typename std::ratio_divide<
43 typename std::ratio_multiply<
44 ScalingRatioOf<TField>,
45 typename TField::UnitsRatio
51struct UnitsValueConverter
53 template <
typename TRet,
typename TConvRatio,
typename TField>
54 static TRet getValue(
const TField& field)
56 using Ratio = FullUnitsRatioOf<TField, TConvRatio>;
57 using Tag = RatioTag<TField, TConvRatio>;
58 return getValueInternal<TRet, Ratio>(field, Tag());
61 template <
typename TConvRatio,
typename TField,
typename TVal>
62 static void setValue(TField& field, TVal&& value)
64 using Ratio = FullUnitsRatioOf<TField, TConvRatio>;
65 using Tag = RatioTag<TField, TConvRatio>;
66 return setValueInternal<Ratio>(field, std::forward<TVal>(value), Tag());
70 template <
typename...>
71 using HasConversionTag = comms::details::tag::Tag1<>;
73 template <
typename...>
74 using NoConversionTag = comms::details::tag::Tag2<>;
76 template <
typename...>
77 using ConvertToFpTag = comms::details::tag::Tag3<>;
79 template <
typename...>
80 using ConvertToIntTag = comms::details::tag::Tag4<>;
82 template <
typename TField,
typename TConvRatio>
84 typename comms::util::LazyShallowConditional<
85 std::is_same<FullUnitsRatioOf<TField, TConvRatio>, std::ratio<1, 1> >::value
91 template <
typename TRet>
93 typename comms::util::LazyShallowConditional<
94 std::is_floating_point<TRet>::value
100 template <
typename TRet,
typename TRatio,
typename TField,
typename... TParams>
101 static TRet getValueInternal(
const TField& field, NoConversionTag<TParams...>)
103 return static_cast<TRet
>(field.value());
106 template <
typename TRet,
typename TRatio,
typename TField,
typename... TParams>
107 static TRet getValueInternal(
const TField& field, HasConversionTag<TParams...>)
109 using Tag = TypeTag<TRet>;
110 return getValueInternal<TRet, TRatio>(field, Tag());
113 template <
typename TRet,
typename TRatio,
typename TField,
typename... TParams>
114 static TRet getValueInternal(
const TField& field, ConvertToFpTag<TParams...>)
116 static_assert(std::is_floating_point<TRet>::value,
117 "TRet is expected to be floating point type");
118 return static_cast<TRet
>(field.value()) * (
static_cast<TRet
>(TRatio::num) /
static_cast<TRet
>(TRatio::den));
121 template <
typename TRet,
typename TRatio,
typename TField,
typename... TParams>
122 static TRet getValueInternal(
const TField& field, ConvertToIntTag<TParams...>)
124 static_assert(std::is_integral<TRet>::value,
125 "TRet is expected to be integral type");
127 using FieldType =
typename std::decay<
decltype(field)>::type;
128 using ValueType =
typename FieldType::ValueType;
131 std::is_integral<ValueType>::value ||
132 std::is_floating_point<ValueType>::value ||
133 std::is_enum<ValueType>::value,
134 "Unexpected field in units conversion");
138 std::is_floating_point<ValueType>::value
141 std::is_same<ValueType, float>::value
147 std::is_signed<TRet>::value
156 (
static_cast<CastType
>(field.value()) * TRatio::num) / TRatio::den);
159 template <
typename TRatio,
typename TField,
typename TVal,
typename... TParams>
160 static void setValueInternal(TField& field, TVal&& value, NoConversionTag<TParams...>)
162 using FieldType =
typename std::decay<
decltype(field)>::type;
163 using ValueType =
typename FieldType::ValueType;
164 field.value() =
static_cast<ValueType
>(value);
167 template <
typename TRatio,
typename TField,
typename TVal,
typename... TParams>
168 static void setValueInternal(TField& field, TVal&& value, HasConversionTag<TParams...>)
170 using Tag = TypeTag<
typename std::decay<
decltype(value)>::type>;
171 setValueInternal<TRatio>(field, std::forward<TVal>(value), Tag());
174 template <
typename TRatio,
typename TField,
typename TVal,
typename... TParams>
175 static void setValueInternal(TField& field, TVal&& value, ConvertToIntTag<TParams...>)
177 using FieldType =
typename std::decay<
decltype(field)>::type;
178 using ValueType =
typename FieldType::ValueType;
181 std::is_integral<ValueType>::value ||
182 std::is_floating_point<ValueType>::value ||
183 std::is_enum<ValueType>::value,
184 "Unexpected field in units conversion");
188 std::is_floating_point<ValueType>::value
191 std::is_same<ValueType, float>::value
197 std::is_signed<
typename std::decay<
decltype(value)>::type>::value
205 static_cast<ValueType
>(
206 (
static_cast<CastType
>(value) * TRatio::den) /
static_cast<CastType
>(TRatio::num));
209 template <
typename TRatio,
typename TField,
typename TVal,
typename... TParams>
210 static void setValueInternal(TField& field, TVal&& value, ConvertToFpTag<TParams...>)
212 using DecayedType =
typename std::decay<
decltype(value)>::type;
213 using FieldType =
typename std::decay<
decltype(field)>::type;
214 using ValueType =
typename FieldType::ValueType;
216 auto epsilon = DecayedType(0);
217 if ((TRatio::num < TRatio::den) && std::is_integral<ValueType>::value) {
218 epsilon =
static_cast<DecayedType
>(TRatio::num) /
static_cast<DecayedType
>(TRatio::den + 1);
221 if (epsilon < DecayedType(0)) {
225 if (value < DecayedType(0)) {
230 static_cast<ValueType
>(
231 ((value + epsilon) *
static_cast<DecayedType
>(TRatio::den)) /
static_cast<DecayedType
>(TRatio::num));
236template <
typename TField,
typename TType>
237constexpr bool hasExpectedUnits()
239 return std::is_same<typename TField::UnitsType, TType>::value;
242template <
typename TRet,
typename TConvRatio,
typename TField>
243TRet getTime(
const TField& field)
246 "The field is expected to contain \"time\" units.");
247 return UnitsValueConverter<>::getValue<TRet, TConvRatio>(field);
250template <
typename TConvRatio,
typename TField,
typename TVal>
251void setTime(TField& field, TVal&& val)
254 "The field is expected to contain \"time\" units.");
255 UnitsValueConverter<>::setValue<TConvRatio>(field, std::forward<TVal>(val));
258template <
typename TRet,
typename TConvRatio,
typename TField>
259TRet getDistance(
const TField& field)
262 "The field is expected to contain \"distance\" units.");
263 return UnitsValueConverter<>::getValue<TRet, TConvRatio>(field);
266template <
typename TConvRatio,
typename TField,
typename TVal>
267void setDistance(TField& field, TVal&& val)
270 "The field is expected to contain \"distance\" units.");
271 UnitsValueConverter<>::setValue<TConvRatio>(field, std::forward<TVal>(val));
274template <
typename TRet,
typename TConvRatio,
typename TField>
275TRet getSpeed(
const TField& field)
278 "The field is expected to contain \"speed\" units.");
279 return UnitsValueConverter<>::getValue<TRet, TConvRatio>(field);
282template <
typename TConvRatio,
typename TField,
typename TVal>
283void setSpeed(TField& field, TVal&& val)
286 "The field is expected to contain \"speed\" units.");
287 UnitsValueConverter<>::setValue<TConvRatio>(field, std::forward<TVal>(val));
290template <
typename TRet,
typename TConvRatio,
typename TField>
291TRet getFrequency(
const TField& field)
294 "The field is expected to contain \"frequency\" units.");
295 return UnitsValueConverter<>::getValue<TRet, TConvRatio>(field);
298template <
typename TConvRatio,
typename TField,
typename TVal>
299void setFrequency(TField& field, TVal&& val)
302 "The field is expected to contain \"frequency\" units.");
303 UnitsValueConverter<>::setValue<TConvRatio>(field, std::forward<TVal>(val));
309 static constexpr T Value =
static_cast<T
>(3.14159265358979323846264338327950288419716939937510582097494459230781640628620899L);
312template <
typename...>
313struct AngleValueConverter
315 template <
typename TRet,
typename TConvRatio,
typename TField>
316 static TRet getValue(
const TField& field)
318 using FieldType =
typename std::decay<
decltype(field)>::type;
319 static_assert(details::hasExpectedUnits<FieldType, comms::traits::units::Angle>(),
320 "The field is expected to contain \"angle\" units.");
322 using Tag = GetTag<FieldType, TConvRatio>;
323 return getValueInternal<TRet, TConvRatio>(field, Tag());
326 template <
typename TConvRatio,
typename TField,
typename TVal>
327 static void setValue(TField& field, TVal&& val)
329 using FieldType =
typename std::decay<
decltype(field)>::type;
330 static_assert(details::hasExpectedUnits<FieldType, comms::traits::units::Angle>(),
331 "The field is expected to contain \"angle\" units.");
333 using Tag = SetTag<FieldType, TConvRatio>;
334 setValueInternal<TConvRatio>(field, std::forward<TVal>(val), Tag());
338 template <
typename... TParams>
339 using SameUnitsTag = comms::details::tag::Tag1<>;
341 template <
typename... TParams>
342 using DegreesToRadiansTag = comms::details::tag::Tag2<>;
344 template <
typename... TParams>
345 using RadiansToDegreesTag = comms::details::tag::Tag3<>;
347 template <
typename TConvRatio>
349 typename comms::util::LazyShallowConditional<
350 std::is_same<TConvRatio, typename comms::traits::units::RadiansRatio>::value
356 template <
typename TConvRatio>
358 typename comms::util::LazyShallowConditional<
359 std::is_same<TConvRatio, typename comms::traits::units::RadiansRatio>::value
365 template <
typename TField,
typename TConvRatio>
367 typename comms::util::LazyShallowConditional<
368 std::is_same<TConvRatio, typename TField::UnitsRatio>::value
375 template <
typename TField,
typename TConvRatio>
377 typename comms::util::LazyShallowConditional<
378 std::is_same<TConvRatio, typename TField::UnitsRatio>::value
385 template <
typename TRet,
typename TConvRatio,
typename TField,
typename... TParams>
386 static TRet getValueInternal(
const TField& field, SameUnitsTag<TParams...>)
388 return field.template getScaled<TRet>();
391 template <
typename TRet,
typename TConvRatio,
typename TField,
typename... TParams>
392 static TRet getValueInternal(
const TField& field, DegreesToRadiansTag<TParams...>)
394 using FieldType =
typename std::decay<
decltype(field)>::type;
395 static_assert(std::is_same<typename FieldType::UnitsRatio, comms::traits::units::DegreesRatio>::value,
396 "The field is expected to contain degrees.");
398 return PI<TRet>::Value * UnitsValueConverter<>::getValue<TRet, TConvRatio>(field);
401 template <
typename TRet,
typename TConvRatio,
typename TField,
typename... TParams>
402 static TRet getValueInternal(
const TField& field, RadiansToDegreesTag<TParams...>)
404 using FieldType =
typename std::decay<
decltype(field)>::type;
405 static_assert(std::is_same<typename FieldType::UnitsRatio, comms::traits::units::RadiansRatio>::value,
406 "The field is expected to contain radians.");
408 return UnitsValueConverter<>::getValue<TRet, TConvRatio>(field) / PI<TRet>::Value;
411 template <
typename TConvRatio,
typename TField,
typename TVal,
typename... TParams>
412 static void setValueInternal(TField& field, TVal&& val, SameUnitsTag<TParams...>)
414 field.setScaled(std::forward<TVal>(val));
417 template <
typename TConvRatio,
typename TField,
typename TVal,
typename... TParams>
418 static void setValueInternal(TField& field, TVal&& val, DegreesToRadiansTag<TParams...>)
420 using FieldType =
typename std::decay<
decltype(field)>::type;
421 static_assert(std::is_same<typename FieldType::UnitsRatio, comms::traits::units::RadiansRatio>::value,
422 "The field is expected to contain radians.");
424 using ValueType =
typename std::decay<
decltype(val)>::type;
427 std::is_floating_point<ValueType>::value
433 UnitsValueConverter<>::setValue<TConvRatio>(field, val * PI<PiType>::Value);
436 template <
typename TConvRatio,
typename TField,
typename TVal,
typename... TParams>
437 static void setValueInternal(TField& field, TVal&& val, RadiansToDegreesTag<TParams...>)
439 using FieldType =
typename std::decay<
decltype(field)>::type;
440 static_assert(std::is_same<typename FieldType::UnitsRatio, comms::traits::units::DegreesRatio>::value,
441 "The field is expected to contain degrees.");
443 using ValueType =
typename std::decay<
decltype(val)>::type;
446 std::is_floating_point<ValueType>::value
452 UnitsValueConverter<>::setValue<TConvRatio>(field,
static_cast<PiType
>(val) / PI<PiType>::Value);
456template <
typename TRet,
typename TConvRatio,
typename TField>
457TRet getAngle(
const TField& field)
459 return AngleValueConverter<>::getValue<TRet, TConvRatio>(field);
462template <
typename TConvRatio,
typename TField,
typename TVal>
463void setAngle(TField& field, TVal&& val)
465 AngleValueConverter<>::setValue<TConvRatio>(field, std::forward<TVal>(val));
468template <
typename TRet,
typename TConvRatio,
typename TField>
469TRet getCurrent(
const TField& field)
472 "The field is expected to contain \"current\" units.");
473 return UnitsValueConverter<>::getValue<TRet, TConvRatio>(field);
476template <
typename TConvRatio,
typename TField,
typename TVal>
477void setCurrent(TField& field, TVal&& val)
480 "The field is expected to contain \"current\" units.");
481 UnitsValueConverter<>::setValue<TConvRatio>(field, std::forward<TVal>(val));
484template <
typename TRet,
typename TConvRatio,
typename TField>
485TRet getVoltage(
const TField& field)
488 "The field is expected to contain \"voltage\" units.");
489 return UnitsValueConverter<>::getValue<TRet, TConvRatio>(field);
492template <
typename TConvRatio,
typename TField,
typename TVal>
493void setVoltage(TField& field, TVal&& val)
496 "The field is expected to contain \"voltage\" units.");
497 UnitsValueConverter<>::setValue<TConvRatio>(field, std::forward<TVal>(val));
500template <
typename TRet,
typename TConvRatio,
typename TField>
501TRet getMemory(
const TField& field)
504 "The field is expected to contain \"memory\" units.");
505 return UnitsValueConverter<>::getValue<TRet, TConvRatio>(field);
508template <
typename TConvRatio,
typename TField,
typename TVal>
509void setMemory(TField& field, TVal&& val)
512 "The field is expected to contain \"memory\" units.");
513 UnitsValueConverter<>::setValue<TConvRatio>(field, std::forward<TVal>(val));
528template <
typename TRet,
typename TField>
531 return details::getTime<TRet, comms::traits::units::NanosecondsRatio>(field);
544template <
typename TField,
typename TVal>
547 details::setTime<comms::traits::units::NanosecondsRatio>(field, std::forward<TVal>(val));
552template <
typename TField>
556 TField::hasUnits() &&
557 std::is_same<typename TField::UnitsType, comms::traits::units::Time>::value &&
558 std::is_same<typename TField::UnitsRatio, comms::traits::units::NanosecondsRatio>::value;
565template <
typename TField>
568 return isNanoseconds<
typename std::decay<
decltype(field)>::type>();
581template <
typename TRet,
typename TField>
584 return details::getTime<TRet, comms::traits::units::MicrosecondsRatio>(field);
597template <
typename TField,
typename TVal>
600 details::setTime<comms::traits::units::MicrosecondsRatio>(field, std::forward<TVal>(val));
605template <
typename TField>
609 TField::hasUnits() &&
610 std::is_same<typename TField::UnitsType, comms::traits::units::Time>::value &&
611 std::is_same<typename TField::UnitsRatio, comms::traits::units::MicrosecondsRatio>::value;
618template <
typename TField>
621 return isMicroseconds<
typename std::decay<
decltype(field)>::type>();
634template <
typename TRet,
typename TField>
637 return details::getTime<TRet, comms::traits::units::MillisecondsRatio>(field);
650template <
typename TField,
typename TVal>
653 details::setTime<comms::traits::units::MillisecondsRatio>(field, std::forward<TVal>(val));
658template <
typename TField>
662 TField::hasUnits() &&
663 std::is_same<typename TField::UnitsType, comms::traits::units::Time>::value &&
664 std::is_same<typename TField::UnitsRatio, comms::traits::units::MillisecondsRatio>::value;
671template <
typename TField>
674 return isMilliseconds<
typename std::decay<
decltype(field)>::type>();
687template <
typename TRet,
typename TField>
690 return details::getTime<TRet, comms::traits::units::SecondsRatio>(field);
703template <
typename TField,
typename TVal>
706 details::setTime<comms::traits::units::SecondsRatio>(field, std::forward<TVal>(val));
711template <
typename TField>
715 TField::hasUnits() &&
716 std::is_same<typename TField::UnitsType, comms::traits::units::Time>::value &&
717 std::is_same<typename TField::UnitsRatio, comms::traits::units::SecondsRatio>::value;
724template <
typename TField>
727 return isSeconds<
typename std::decay<
decltype(field)>::type>();
740template <
typename TRet,
typename TField>
743 return details::getTime<TRet, comms::traits::units::MinutesRatio>(field);
756template <
typename TField,
typename TVal>
759 details::setTime<comms::traits::units::MinutesRatio>(field, std::forward<TVal>(val));
764template <
typename TField>
768 TField::hasUnits() &&
769 std::is_same<typename TField::UnitsType, comms::traits::units::Time>::value &&
770 std::is_same<typename TField::UnitsRatio, comms::traits::units::MinutesRatio>::value;
777template <
typename TField>
780 return isMinutes<
typename std::decay<
decltype(field)>::type>();
793template <
typename TRet,
typename TField>
796 return details::getTime<TRet, comms::traits::units::HoursRatio>(field);
809template <
typename TField,
typename TVal>
812 details::setTime<comms::traits::units::HoursRatio>(field, std::forward<TVal>(val));
817template <
typename TField>
821 TField::hasUnits() &&
822 std::is_same<typename TField::UnitsType, comms::traits::units::Time>::value &&
823 std::is_same<typename TField::UnitsRatio, comms::traits::units::HoursRatio>::value;
830template <
typename TField>
833 return isHours<
typename std::decay<
decltype(field)>::type>();
846template <
typename TRet,
typename TField>
849 return details::getTime<TRet, comms::traits::units::DaysRatio>(field);
862template <
typename TField,
typename TVal>
865 details::setTime<comms::traits::units::DaysRatio>(field, std::forward<TVal>(val));
870template <
typename TField>
874 TField::hasUnits() &&
875 std::is_same<typename TField::UnitsType, comms::traits::units::Time>::value &&
876 std::is_same<typename TField::UnitsRatio, comms::traits::units::DaysRatio>::value;
883template <
typename TField>
884constexpr bool isDays(
const TField& field)
886 return isDays<
typename std::decay<
decltype(field)>::type>();
899template <
typename TRet,
typename TField>
902 return details::getTime<TRet, comms::traits::units::WeeksRatio>(field);
915template <
typename TField,
typename TVal>
918 details::setTime<comms::traits::units::WeeksRatio>(field, std::forward<TVal>(val));
923template <
typename TField>
927 TField::hasUnits() &&
928 std::is_same<typename TField::UnitsType, comms::traits::units::Time>::value &&
929 std::is_same<typename TField::UnitsRatio, comms::traits::units::WeeksRatio>::value;
936template <
typename TField>
939 return isWeeks<
typename std::decay<
decltype(field)>::type>();
952template <
typename TRet,
typename TField>
955 return details::getDistance<TRet, comms::traits::units::NanometersRatio>(field);
968template <
typename TField,
typename TVal>
971 details::setDistance<comms::traits::units::NanometersRatio>(field, std::forward<TVal>(val));
976template <
typename TField>
980 TField::hasUnits() &&
981 std::is_same<typename TField::UnitsType, comms::traits::units::Distance>::value &&
982 std::is_same<typename TField::UnitsRatio, comms::traits::units::NanometersRatio>::value;
989template <
typename TField>
992 return isNanometers<
typename std::decay<
decltype(field)>::type>();
1005template <
typename TRet,
typename TField>
1008 return details::getDistance<TRet, comms::traits::units::MicrometersRatio>(field);
1021template <
typename TField,
typename TVal>
1024 details::setDistance<comms::traits::units::MicrometersRatio>(field, std::forward<TVal>(val));
1029template <
typename TField>
1033 TField::hasUnits() &&
1034 std::is_same<typename TField::UnitsType, comms::traits::units::Distance>::value &&
1035 std::is_same<typename TField::UnitsRatio, comms::traits::units::MicrometersRatio>::value;
1042template <
typename TField>
1045 return isMicrometers<
typename std::decay<
decltype(field)>::type>();
1058template <
typename TRet,
typename TField>
1061 return details::getDistance<TRet, comms::traits::units::MillimetersRatio>(field);
1074template <
typename TField,
typename TVal>
1077 details::setDistance<comms::traits::units::MillimetersRatio>(field, std::forward<TVal>(val));
1082template <
typename TField>
1086 TField::hasUnits() &&
1087 std::is_same<typename TField::UnitsType, comms::traits::units::Distance>::value &&
1088 std::is_same<typename TField::UnitsRatio, comms::traits::units::MillimetersRatio>::value;
1095template <
typename TField>
1098 return isMillimeters<
typename std::decay<
decltype(field)>::type>();
1111template <
typename TRet,
typename TField>
1114 return details::getDistance<TRet, comms::traits::units::CentimetersRatio>(field);
1127template <
typename TField,
typename TVal>
1130 details::setDistance<comms::traits::units::CentimetersRatio>(field, std::forward<TVal>(val));
1135template <
typename TField>
1139 TField::hasUnits() &&
1140 std::is_same<typename TField::UnitsType, comms::traits::units::Distance>::value &&
1141 std::is_same<typename TField::UnitsRatio, comms::traits::units::CentimetersRatio>::value;
1148template <
typename TField>
1151 return isCentimeters<
typename std::decay<
decltype(field)>::type>();
1164template <
typename TRet,
typename TField>
1167 return details::getDistance<TRet, comms::traits::units::MetersRatio>(field);
1180template <
typename TField,
typename TVal>
1183 details::setDistance<comms::traits::units::MetersRatio>(field, std::forward<TVal>(val));
1188template <
typename TField>
1192 TField::hasUnits() &&
1193 std::is_same<typename TField::UnitsType, comms::traits::units::Distance>::value &&
1194 std::is_same<typename TField::UnitsRatio, comms::traits::units::MetersRatio>::value;
1201template <
typename TField>
1204 return isMeters<
typename std::decay<
decltype(field)>::type>();
1217template <
typename TRet,
typename TField>
1220 return details::getDistance<TRet, comms::traits::units::KilometersRatio>(field);
1233template <
typename TField,
typename TVal>
1236 details::setDistance<comms::traits::units::KilometersRatio>(field, std::forward<TVal>(val));
1241template <
typename TField>
1245 TField::hasUnits() &&
1246 std::is_same<typename TField::UnitsType, comms::traits::units::Distance>::value &&
1247 std::is_same<typename TField::UnitsRatio, comms::traits::units::KilometersRatio>::value;
1254template <
typename TField>
1257 return isKilometers<
typename std::decay<
decltype(field)>::type>();
1270template <
typename TRet,
typename TField>
1273 return details::getSpeed<TRet, comms::traits::units::NanometersPerSecondRatio>(field);
1286template <
typename TField,
typename TVal>
1289 details::setSpeed<comms::traits::units::NanometersPerSecondRatio>(field, std::forward<TVal>(val));
1294template <
typename TField>
1298 TField::hasUnits() &&
1299 std::is_same<typename TField::UnitsType, comms::traits::units::Speed>::value &&
1300 std::is_same<typename TField::UnitsRatio, comms::traits::units::NanometersPerSecondRatio>::value;
1307template <
typename TField>
1323template <
typename TRet,
typename TField>
1326 return details::getSpeed<TRet, comms::traits::units::MicrometersPerSecondRatio>(field);
1339template <
typename TField,
typename TVal>
1342 details::setSpeed<comms::traits::units::MicrometersPerSecondRatio>(field, std::forward<TVal>(val));
1347template <
typename TField>
1351 TField::hasUnits() &&
1352 std::is_same<typename TField::UnitsType, comms::traits::units::Speed>::value &&
1353 std::is_same<typename TField::UnitsRatio, comms::traits::units::MicrometersPerSecondRatio>::value;
1360template <
typename TField>
1376template <
typename TRet,
typename TField>
1379 return details::getSpeed<TRet, comms::traits::units::MillimetersPerSecondRatio>(field);
1392template <
typename TField,
typename TVal>
1395 details::setSpeed<comms::traits::units::MillimetersPerSecondRatio>(field, std::forward<TVal>(val));
1400template <
typename TField>
1404 TField::hasUnits() &&
1405 std::is_same<typename TField::UnitsType, comms::traits::units::Speed>::value &&
1406 std::is_same<typename TField::UnitsRatio, comms::traits::units::MillimetersPerSecondRatio>::value;
1413template <
typename TField>
1429template <
typename TRet,
typename TField>
1432 return details::getSpeed<TRet, comms::traits::units::CentimetersPerSecondRatio>(field);
1445template <
typename TField,
typename TVal>
1448 details::setSpeed<comms::traits::units::CentimetersPerSecondRatio>(field, std::forward<TVal>(val));
1453template <
typename TField>
1457 TField::hasUnits() &&
1458 std::is_same<typename TField::UnitsType, comms::traits::units::Speed>::value &&
1459 std::is_same<typename TField::UnitsRatio, comms::traits::units::CentimetersPerSecondRatio>::value;
1466template <
typename TField>
1482template <
typename TRet,
typename TField>
1485 return details::getSpeed<TRet, comms::traits::units::MetersPerSecondRatio>(field);
1498template <
typename TField,
typename TVal>
1501 details::setSpeed<comms::traits::units::MetersPerSecondRatio>(field, std::forward<TVal>(val));
1506template <
typename TField>
1510 TField::hasUnits() &&
1511 std::is_same<typename TField::UnitsType, comms::traits::units::Speed>::value &&
1512 std::is_same<typename TField::UnitsRatio, comms::traits::units::MetersPerSecondRatio>::value;
1519template <
typename TField>
1535template <
typename TRet,
typename TField>
1538 return details::getSpeed<TRet, comms::traits::units::KilometersPerSecondRatio>(field);
1551template <
typename TField,
typename TVal>
1554 details::setSpeed<comms::traits::units::KilometersPerSecondRatio>(field, std::forward<TVal>(val));
1559template <
typename TField>
1563 TField::hasUnits() &&
1564 std::is_same<typename TField::UnitsType, comms::traits::units::Speed>::value &&
1565 std::is_same<typename TField::UnitsRatio, comms::traits::units::KilometersPerSecondRatio>::value;
1572template <
typename TField>
1588template <
typename TRet,
typename TField>
1591 return details::getSpeed<TRet, comms::traits::units::KilometersPerHourRatio>(field);
1604template <
typename TField,
typename TVal>
1607 details::setSpeed<comms::traits::units::KilometersPerHourRatio>(field, std::forward<TVal>(val));
1612template <
typename TField>
1616 TField::hasUnits() &&
1617 std::is_same<typename TField::UnitsType, comms::traits::units::Speed>::value &&
1618 std::is_same<typename TField::UnitsRatio, comms::traits::units::KilometersPerHourRatio>::value;
1625template <
typename TField>
1641template <
typename TRet,
typename TField>
1644 return details::getFrequency<TRet, comms::traits::units::HzRatio>(field);
1657template <
typename TField,
typename TVal>
1660 details::setFrequency<comms::traits::units::HzRatio>(field, std::forward<TVal>(val));
1665template <
typename TField>
1669 TField::hasUnits() &&
1670 std::is_same<typename TField::UnitsType, comms::traits::units::Frequency>::value &&
1671 std::is_same<typename TField::UnitsRatio, comms::traits::units::HzRatio>::value;
1678template <
typename TField>
1681 return isHertz<
typename std::decay<
decltype(field)>::type>();
1694template <
typename TRet,
typename TField>
1697 return details::getFrequency<TRet, comms::traits::units::KiloHzRatio>(field);
1710template <
typename TField,
typename TVal>
1713 details::setFrequency<comms::traits::units::KiloHzRatio>(field, std::forward<TVal>(val));
1718template <
typename TField>
1722 TField::hasUnits() &&
1723 std::is_same<typename TField::UnitsType, comms::traits::units::Frequency>::value &&
1724 std::is_same<typename TField::UnitsRatio, comms::traits::units::KiloHzRatio>::value;
1731template <
typename TField>
1734 return isKilohertz<
typename std::decay<
decltype(field)>::type>();
1747template <
typename TRet,
typename TField>
1750 return details::getFrequency<TRet, comms::traits::units::MegaHzRatio>(field);
1763template <
typename TField,
typename TVal>
1766 details::setFrequency<comms::traits::units::MegaHzRatio>(field, std::forward<TVal>(val));
1771template <
typename TField>
1775 TField::hasUnits() &&
1776 std::is_same<typename TField::UnitsType, comms::traits::units::Frequency>::value &&
1777 std::is_same<typename TField::UnitsRatio, comms::traits::units::MegaHzRatio>::value;
1784template <
typename TField>
1787 return isMegahertz<
typename std::decay<
decltype(field)>::type>();
1800template <
typename TRet,
typename TField>
1803 return details::getFrequency<TRet, comms::traits::units::GigaHzRatio>(field);
1816template <
typename TField,
typename TVal>
1819 details::setFrequency<comms::traits::units::GigaHzRatio>(field, std::forward<TVal>(val));
1824template <
typename TField>
1828 TField::hasUnits() &&
1829 std::is_same<typename TField::UnitsType, comms::traits::units::Frequency>::value &&
1830 std::is_same<typename TField::UnitsRatio, comms::traits::units::GigaHzRatio>::value;
1837template <
typename TField>
1840 return isGigahertz<
typename std::decay<
decltype(field)>::type>();
1853template <
typename TRet,
typename TField>
1856 return details::getAngle<TRet, comms::traits::units::DegreesRatio>(field);
1869template <
typename TField,
typename TVal>
1872 details::setAngle<comms::traits::units::DegreesRatio>(field, std::forward<TVal>(val));
1877template <
typename TField>
1881 TField::hasUnits() &&
1882 std::is_same<typename TField::UnitsType, comms::traits::units::Angle>::value &&
1883 std::is_same<typename TField::UnitsRatio, comms::traits::units::DegreesRatio>::value;
1890template <
typename TField>
1893 return isDegrees<
typename std::decay<
decltype(field)>::type>();
1906template <
typename TRet,
typename TField>
1909 return details::getAngle<TRet, comms::traits::units::RadiansRatio>(field);
1922template <
typename TField,
typename TVal>
1925 details::setAngle<comms::traits::units::RadiansRatio>(field, std::forward<TVal>(val));
1930template <
typename TField>
1934 TField::hasUnits() &&
1935 std::is_same<typename TField::UnitsType, comms::traits::units::Angle>::value &&
1936 std::is_same<typename TField::UnitsRatio, comms::traits::units::RadiansRatio>::value;
1943template <
typename TField>
1946 return isRadians<
typename std::decay<
decltype(field)>::type>();
1959template <
typename TRet,
typename TField>
1962 return details::getCurrent<TRet, comms::traits::units::NanoampsRatio>(field);
1975template <
typename TField,
typename TVal>
1978 details::setCurrent<comms::traits::units::NanoampsRatio>(field, std::forward<TVal>(val));
1983template <
typename TField>
1987 TField::hasUnits() &&
1988 std::is_same<typename TField::UnitsType, comms::traits::units::Current>::value &&
1989 std::is_same<typename TField::UnitsRatio, comms::traits::units::NanoampsRatio>::value;
1996template <
typename TField>
1999 return isNanoamps<
typename std::decay<
decltype(field)>::type>();
2012template <
typename TRet,
typename TField>
2015 return details::getCurrent<TRet, comms::traits::units::MicroampsRatio>(field);
2028template <
typename TField,
typename TVal>
2031 details::setCurrent<comms::traits::units::MicroampsRatio>(field, std::forward<TVal>(val));
2036template <
typename TField>
2040 TField::hasUnits() &&
2041 std::is_same<typename TField::UnitsType, comms::traits::units::Current>::value &&
2042 std::is_same<typename TField::UnitsRatio, comms::traits::units::MicroampsRatio>::value;
2049template <
typename TField>
2052 return isMicroamps<
typename std::decay<
decltype(field)>::type>();
2065template <
typename TRet,
typename TField>
2068 return details::getCurrent<TRet, comms::traits::units::MilliampsRatio>(field);
2081template <
typename TField,
typename TVal>
2084 details::setCurrent<comms::traits::units::MilliampsRatio>(field, std::forward<TVal>(val));
2089template <
typename TField>
2093 TField::hasUnits() &&
2094 std::is_same<typename TField::UnitsType, comms::traits::units::Current>::value &&
2095 std::is_same<typename TField::UnitsRatio, comms::traits::units::MilliampsRatio>::value;
2102template <
typename TField>
2105 return isMilliamps<
typename std::decay<
decltype(field)>::type>();
2118template <
typename TRet,
typename TField>
2121 return details::getCurrent<TRet, comms::traits::units::AmpsRatio>(field);
2134template <
typename TField,
typename TVal>
2137 details::setCurrent<comms::traits::units::AmpsRatio>(field, std::forward<TVal>(val));
2142template <
typename TField>
2146 TField::hasUnits() &&
2147 std::is_same<typename TField::UnitsType, comms::traits::units::Current>::value &&
2148 std::is_same<typename TField::UnitsRatio, comms::traits::units::AmpsRatio>::value;
2155template <
typename TField>
2158 return isAmps<
typename std::decay<
decltype(field)>::type>();
2171template <
typename TRet,
typename TField>
2174 return details::getCurrent<TRet, comms::traits::units::KiloampsRatio>(field);
2187template <
typename TField,
typename TVal>
2190 details::setCurrent<comms::traits::units::KiloampsRatio>(field, std::forward<TVal>(val));
2195template <
typename TField>
2199 TField::hasUnits() &&
2200 std::is_same<typename TField::UnitsType, comms::traits::units::Current>::value &&
2201 std::is_same<typename TField::UnitsRatio, comms::traits::units::KiloampsRatio>::value;
2208template <
typename TField>
2211 return isKiloamps<
typename std::decay<
decltype(field)>::type>();
2224template <
typename TRet,
typename TField>
2227 return details::getVoltage<TRet, comms::traits::units::NanovoltsRatio>(field);
2240template <
typename TField,
typename TVal>
2243 details::setVoltage<comms::traits::units::NanovoltsRatio>(field, std::forward<TVal>(val));
2248template <
typename TField>
2252 TField::hasUnits() &&
2253 std::is_same<typename TField::UnitsType, comms::traits::units::Voltage>::value &&
2254 std::is_same<typename TField::UnitsRatio, comms::traits::units::NanovoltsRatio>::value;
2261template <
typename TField>
2264 return isNanovolts<
typename std::decay<
decltype(field)>::type>();
2277template <
typename TRet,
typename TField>
2280 return details::getVoltage<TRet, comms::traits::units::MicrovoltsRatio>(field);
2293template <
typename TField,
typename TVal>
2296 details::setVoltage<comms::traits::units::MicrovoltsRatio>(field, std::forward<TVal>(val));
2301template <
typename TField>
2305 TField::hasUnits() &&
2306 std::is_same<typename TField::UnitsType, comms::traits::units::Voltage>::value &&
2307 std::is_same<typename TField::UnitsRatio, comms::traits::units::MicrovoltsRatio>::value;
2314template <
typename TField>
2317 return isMicrovolts<
typename std::decay<
decltype(field)>::type>();
2330template <
typename TRet,
typename TField>
2333 return details::getVoltage<TRet, comms::traits::units::MillivoltsRatio>(field);
2346template <
typename TField,
typename TVal>
2349 details::setVoltage<comms::traits::units::MillivoltsRatio>(field, std::forward<TVal>(val));
2354template <
typename TField>
2358 TField::hasUnits() &&
2359 std::is_same<typename TField::UnitsType, comms::traits::units::Voltage>::value &&
2360 std::is_same<typename TField::UnitsRatio, comms::traits::units::MillivoltsRatio>::value;
2367template <
typename TField>
2370 return isMillivolts<
typename std::decay<
decltype(field)>::type>();
2383template <
typename TRet,
typename TField>
2386 return details::getVoltage<TRet, comms::traits::units::VoltsRatio>(field);
2399template <
typename TField,
typename TVal>
2402 details::setVoltage<comms::traits::units::VoltsRatio>(field, std::forward<TVal>(val));
2407template <
typename TField>
2411 TField::hasUnits() &&
2412 std::is_same<typename TField::UnitsType, comms::traits::units::Voltage>::value &&
2413 std::is_same<typename TField::UnitsRatio, comms::traits::units::VoltsRatio>::value;
2420template <
typename TField>
2423 return isVolts<
typename std::decay<
decltype(field)>::type>();
2436template <
typename TRet,
typename TField>
2439 return details::getVoltage<TRet, comms::traits::units::KilovoltsRatio>(field);
2452template <
typename TField,
typename TVal>
2455 details::setVoltage<comms::traits::units::KilovoltsRatio>(field, std::forward<TVal>(val));
2460template <
typename TField>
2464 TField::hasUnits() &&
2465 std::is_same<typename TField::UnitsType, comms::traits::units::Voltage>::value &&
2466 std::is_same<typename TField::UnitsRatio, comms::traits::units::KilovoltsRatio>::value;
2473template <
typename TField>
2476 return isKilovolts<
typename std::decay<
decltype(field)>::type>();
2489template <
typename TRet,
typename TField>
2492 return details::getMemory<TRet, comms::traits::units::BytesRatio>(field);
2505template <
typename TField,
typename TVal>
2508 details::setMemory<comms::traits::units::BytesRatio>(field, std::forward<TVal>(val));
2513template <
typename TField>
2517 TField::hasUnits() &&
2518 std::is_same<typename TField::UnitsType, comms::traits::units::Memory>::value &&
2519 std::is_same<typename TField::UnitsRatio, comms::traits::units::BytesRatio>::value;
2526template <
typename TField>
2529 return isBytes<
typename std::decay<
decltype(field)>::type>();
2542template <
typename TRet,
typename TField>
2545 return details::getMemory<TRet, comms::traits::units::KilobytesRatio>(field);
2558template <
typename TField,
typename TVal>
2561 details::setMemory<comms::traits::units::KilobytesRatio>(field, std::forward<TVal>(val));
2566template <
typename TField>
2570 TField::hasUnits() &&
2571 std::is_same<typename TField::UnitsType, comms::traits::units::Memory>::value &&
2572 std::is_same<typename TField::UnitsRatio, comms::traits::units::KilobytesRatio>::value;
2579template <
typename TField>
2582 return isKilobytes<
typename std::decay<
decltype(field)>::type>();
2595template <
typename TRet,
typename TField>
2598 return details::getMemory<TRet, comms::traits::units::MegabytesRatio>(field);
2611template <
typename TField,
typename TVal>
2614 details::setMemory<comms::traits::units::MegabytesRatio>(field, std::forward<TVal>(val));
2619template <
typename TField>
2623 TField::hasUnits() &&
2624 std::is_same<typename TField::UnitsType, comms::traits::units::Memory>::value &&
2625 std::is_same<typename TField::UnitsRatio, comms::traits::units::MegabytesRatio>::value;
2632template <
typename TField>
2635 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:1505
constexpr bool isMinutes()
Compile time check whether the field type holds minutes.
Definition units.h:765
TRet getNanovolts(const TField &field)
Retrieve field's value as nanovolts.
Definition units.h:2225
constexpr bool isMillimetersPerSecond()
Compile time check whether the field type holds millimeters per second.
Definition units.h:1401
TRet getMicrovolts(const TField &field)
Retrieve field's value as microvolts.
Definition units.h:2278
void setMicroamps(TField &field, TVal &&val)
Update field's value accordingly, while providing microamps value.
Definition units.h:2029
TRet getMilliseconds(const TField &field)
Retrieve field's value as milliseconds.
Definition units.h:635
constexpr bool isMegahertz()
Compile time check whether the field type holds megahertz.
Definition units.h:1772
void setBytes(TField &field, TVal &&val)
Update field's value accordingly, while providing bytes value.
Definition units.h:2506
void setMillimetersPerSecond(TField &field, TVal &&val)
Update field's value accordingly, while providing millimeters per second value.
Definition units.h:1393
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:2384
void setHours(TField &field, TVal &&val)
Update field's value accordingly, while providing hours value.
Definition units.h:810
void setMillivolts(TField &field, TVal &&val)
Update field's value accordingly, while providing millivolts value.
Definition units.h:2347
constexpr bool isMegabytes()
Compile time check whether the field type holds megabytes.
Definition units.h:2620
void setNanometersPerSecond(TField &field, TVal &&val)
Update field's value accordingly, while providing nanometers per second value.
Definition units.h:1287
TRet getCentimeters(const TField &field)
Retrieve field's value as centimeters.
Definition units.h:1112
constexpr bool isMeters()
Compile time check whether the field type holds meters.
Definition units.h:1189
constexpr bool isMillimeters()
Compile time check whether the field type holds millimeters.
Definition units.h:1083
TRet getMillivolts(const TField &field)
Retrieve field's value as millivolts.
Definition units.h:2331
TRet getHertz(const TField &field)
Retrieve field's value as hertz.
Definition units.h:1642
void setKilobytes(TField &field, TVal &&val)
Update field's value accordingly, while providing kilobytes value.
Definition units.h:2559
TRet getNanoamps(const TField &field)
Retrieve field's value as nanoamps.
Definition units.h:1960
constexpr bool isKilovolts()
Compile time check whether the field type holds kilovolts.
Definition units.h:2461
constexpr bool isCentimetersPerSecond()
Compile time check whether the field type holds centimeters per second.
Definition units.h:1454
constexpr bool isBytes()
Compile time check whether the field type holds bytes.
Definition units.h:2514
TRet getDays(const TField &field)
Retrieve field's value as days.
Definition units.h:847
constexpr bool isNanometers()
Compile time check whether the field type holds nanometers.
Definition units.h:977
void setWeeks(TField &field, TVal &&val)
Update field's value accordingly, while providing weeks value.
Definition units.h:916
TRet getMinutes(const TField &field)
Retrieve field's value as minutes.
Definition units.h:741
void setGigahertz(TField &field, TVal &&val)
Update field's value accordingly, while providing gigahertz value.
Definition units.h:1817
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:1340
TRet getNanometersPerSecond(const TField &field)
Retrieve field's value as nanometers per second.
Definition units.h:1271
TRet getNanometers(const TField &field)
Retrieve field's value as nanometers.
Definition units.h:953
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:2066
TRet getMicroseconds(const TField &field)
Retrieve field's value as microseconds.
Definition units.h:582
TRet getMicrometers(const TField &field)
Retrieve field's value as micrometers.
Definition units.h:1006
constexpr bool isMicrometersPerSecond()
Compile time check whether the field type holds micrometers per second.
Definition units.h:1348
constexpr bool isKilometers()
Compile time check whether the field type holds kilometers.
Definition units.h:1242
constexpr bool isKilometersPerHour()
Compile time check whether the field type holds kilometers per hour.
Definition units.h:1613
TRet getMicroamps(const TField &field)
Retrieve field's value as microamps.
Definition units.h:2013
TRet getKiloamps(const TField &field)
Retrieve field's value as kiloamps.
Definition units.h:2172
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:2082
void setAmps(TField &field, TVal &&val)
Update field's value accordingly, while providing amps value.
Definition units.h:2135
TRet getKilohertz(const TField &field)
Retrieve field's value as kilohertz.
Definition units.h:1695
constexpr bool isMetersPerSecond()
Compile time check whether the field type holds meters per second.
Definition units.h:1507
constexpr bool isMicrometers()
Compile time check whether the field type holds micrometers.
Definition units.h:1030
void setDays(TField &field, TVal &&val)
Update field's value accordingly, while providing days value.
Definition units.h:863
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:2408
TRet getKilometersPerSecond(const TField &field)
Retrieve field's value as kilometers per second.
Definition units.h:1536
constexpr bool isHours()
Compile time check whether the field type holds hours.
Definition units.h:818
TRet getHours(const TField &field)
Retrieve field's value as hours.
Definition units.h:794
void setMetersPerSecond(TField &field, TVal &&val)
Update field's value accordingly, while providing meters per second value.
Definition units.h:1499
TRet getWeeks(const TField &field)
Retrieve field's value as weeks.
Definition units.h:900
TRet getNanoseconds(const TField &field)
Retrieve field's value as nanoseconds.
Definition units.h:529
constexpr bool isMicroamps()
Compile time check whether the field type holds microamps.
Definition units.h:2037
TRet getMeters(const TField &field)
Retrieve field's value as meters.
Definition units.h:1165
void setCentimeters(TField &field, TVal &&val)
Update field's value accordingly, while providing centimeters value.
Definition units.h:1128
void setKilovolts(TField &field, TVal &&val)
Update field's value accordingly, while providing kilovolts value.
Definition units.h:2453
void setMilliseconds(TField &field, TVal &&val)
Update field's value accordingly, while providing milliseconds value.
Definition units.h:651
constexpr bool isNanometersPerSecond()
Compile time check whether the field type holds nanometers per second.
Definition units.h:1295
TRet getKilometersPerHour(const TField &field)
Retrieve field's value as kilometers per hour.
Definition units.h:1589
void setSeconds(TField &field, TVal &&val)
Update field's value accordingly, while providing seconds value.
Definition units.h:704
void setMillimeters(TField &field, TVal &&val)
Update field's value accordingly, while providing millimeters value.
Definition units.h:1075
constexpr bool isMicrovolts()
Compile time check whether the field type holds microvolts.
Definition units.h:2302
constexpr bool isMicroseconds()
Compile time check whether the field type holds microseconds.
Definition units.h:606
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:1984
void setKilometers(TField &field, TVal &&val)
Update field's value accordingly, while providing kilometers value.
Definition units.h:1234
void setKiloamps(TField &field, TVal &&val)
Update field's value accordingly, while providing kiloamps value.
Definition units.h:2188
TRet getAmps(const TField &field)
Retrieve field's value as amps.
Definition units.h:2119
constexpr bool isMilliseconds()
Compile time check whether the field type holds milliseconds.
Definition units.h:659
constexpr bool isWeeks()
Compile time check whether the field type holds weeks.
Definition units.h:924
void setCentimetersPerSecond(TField &field, TVal &&val)
Update field's value accordingly, while providing centimeters per second value.
Definition units.h:1446
void setNanoamps(TField &field, TVal &&val)
Update field's value accordingly, while providing nanoamps value.
Definition units.h:1976
constexpr bool isKilohertz()
Compile time check whether the field type holds kilohertz.
Definition units.h:1719
constexpr bool isGigahertz()
Compile time check whether the field type holds gigahertz.
Definition units.h:1825
TRet getKilovolts(const TField &field)
Retrieve field's value as kilovolts.
Definition units.h:2437
TRet getBytes(const TField &field)
Retrieve field's value as bytes.
Definition units.h:2490
TRet getMetersPerSecond(const TField &field)
Retrieve field's value as meters per second.
Definition units.h:1483
void setMegahertz(TField &field, TVal &&val)
Update field's value accordingly, while providing megahertz value.
Definition units.h:1764
constexpr bool isNanoseconds()
Compile time check whether the field type holds nanoseconds.
Definition units.h:553
constexpr bool isKilobytes()
Compile time check whether the field type holds kilobytes.
Definition units.h:2567
void setHertz(TField &field, TVal &&val)
Update field's value accordingly, while providing hertz value.
Definition units.h:1658
TRet getMillimetersPerSecond(const TField &field)
Retrieve field's value as millimeters per second.
Definition units.h:1377
constexpr bool isMilliamps()
Compile time check whether the field type holds milliamps.
Definition units.h:2090
constexpr bool isKiloamps()
Compile time check whether the field type holds kiloamps.
Definition units.h:2196
TRet getKilobytes(const TField &field)
Retrieve field's value as kilobytes.
Definition units.h:2543
TRet getGigahertz(const TField &field)
Retrieve field's value as gigahertz.
Definition units.h:1801
void setMinutes(TField &field, TVal &&val)
Update field's value accordingly, while providing minutes value.
Definition units.h:757
void setDegrees(TField &field, TVal &&val)
Update field's value accordingly, while providing degrees value.
Definition units.h:1870
void setNanometers(TField &field, TVal &&val)
Update field's value accordingly, while providing nanometers value.
Definition units.h:969
void setMicroseconds(TField &field, TVal &&val)
Update field's value accordingly, while providing microseconds value.
Definition units.h:598
TRet getSeconds(const TField &field)
Retrieve field's value as seconds.
Definition units.h:688
void setMicrometers(TField &field, TVal &&val)
Update field's value accordingly, while providing micrometers value.
Definition units.h:1022
TRet getMicrometersPerSecond(const TField &field)
Retrieve field's value as micrometers per second.
Definition units.h:1324
void setMeters(TField &field, TVal &&val)
Update field's value accordingly, while providing meters value.
Definition units.h:1181
void setNanoseconds(TField &field, TVal &&val)
Update field's value accordingly, while providing nanoseconds value.
Definition units.h:545
void setRadians(TField &field, TVal &&val)
Update field's value accordingly, while providing radians value.
Definition units.h:1923
constexpr bool isDegrees()
Compile time check whether the field type holds degrees.
Definition units.h:1878
TRet getKilometers(const TField &field)
Retrieve field's value as kilometers.
Definition units.h:1218
TRet getCentimetersPerSecond(const TField &field)
Retrieve field's value as centimeters per second.
Definition units.h:1430
TRet getMegahertz(const TField &field)
Retrieve field's value as megahertz.
Definition units.h:1748
void setMegabytes(TField &field, TVal &&val)
Update field's value accordingly, while providing megabytes value.
Definition units.h:2612
void setKilometersPerSecond(TField &field, TVal &&val)
Update field's value accordingly, while providing kilometers per second value.
Definition units.h:1552
void setNanovolts(TField &field, TVal &&val)
Update field's value accordingly, while providing nanovolts value.
Definition units.h:2241
void setVolts(TField &field, TVal &&val)
Update field's value accordingly, while providing volts value.
Definition units.h:2400
constexpr bool isRadians()
Compile time check whether the field type holds radians.
Definition units.h:1931
constexpr bool isCentimeters()
Compile time check whether the field type holds centimeters.
Definition units.h:1136
void setKilometersPerHour(TField &field, TVal &&val)
Update field's value accordingly, while providing kilometers per hour value.
Definition units.h:1605
void setMicrovolts(TField &field, TVal &&val)
Update field's value accordingly, while providing microvolts value.
Definition units.h:2294
TRet getMegabytes(const TField &field)
Retrieve field's value as megabytes.
Definition units.h:2596
constexpr bool isDays()
Compile time check whether the field type holds days.
Definition units.h:871
constexpr bool isHertz()
Compile time check whether the field type holds hertz.
Definition units.h:1666
constexpr bool isSeconds()
Compile time check whether the field type holds seconds.
Definition units.h:712
void setKilohertz(TField &field, TVal &&val)
Update field's value accordingly, while providing kilohertz value.
Definition units.h:1711
constexpr bool isNanovolts()
Compile time check whether the field type holds nanovolts.
Definition units.h:2249
TRet getDegrees(const TField &field)
Retrieve field's value as degrees.
Definition units.h:1854
TRet getRadians(const TField &field)
Retrieve field's value as radians.
Definition units.h:1907
constexpr bool isMillivolts()
Compile time check whether the field type holds millivolts.
Definition units.h:2355
TRet getMillimeters(const TField &field)
Retrieve field's value as millimeters.
Definition units.h:1059
constexpr bool isAmps()
Compile time check whether the field type holds amps.
Definition units.h:2143
constexpr bool isKilometersPerSecond()
Compile time check whether the field type holds kilometers per second.
Definition units.h:1560
Main namespace for all classes / functions of COMMS library.
Tag class used to indicate electrical current value.
Definition traits.h:56
Tag class used to indicate distance value.
Definition traits.h:44
Tag class used to indicate frequency value.
Definition traits.h:50
Tag class used to indicate memory size value.
Definition traits.h:62
Tag class used to indicate speed value.
Definition traits.h:47
Tag class used to indicate time value.
Definition traits.h:41
Tag class used to indicate electrical voltage value.
Definition traits.h:59
Replacement to std::conditional.
Definition type_traits.h:32
This file contains all the classes necessary to properly define message traits.
Replacement to some types from standard type_traits.