26template <
typename TRanges,
typename TBase>
27class NumValueMultiRangeValidator :
public TBase
29 using BaseImpl = TBase;
31 static_assert(comms::util::isTuple<TRanges>(),
"TRanges must be a tuple");
35 using ValueType =
typename BaseImpl::ValueType;
38 std::is_integral<ValueType>::value || std::is_enum<ValueType>::value || std::is_floating_point<ValueType>::value,
39 "Only numeric fields are supported for multi range validation.");
41 NumValueMultiRangeValidator() =
default;
43 explicit NumValueMultiRangeValidator(
const ValueType& val)
48 explicit NumValueMultiRangeValidator(ValueType&& val)
49 : BaseImpl(
std::move(val))
53 NumValueMultiRangeValidator(
const NumValueMultiRangeValidator&) =
default;
54 NumValueMultiRangeValidator(NumValueMultiRangeValidator&&) =
default;
55 NumValueMultiRangeValidator& operator=(
const NumValueMultiRangeValidator&) =
default;
56 NumValueMultiRangeValidator& operator=(NumValueMultiRangeValidator&&) =
default;
60 return BaseImpl::valid() &&
61 comms::util::tupleTypeAccumulate<TRanges>(
false, Validator(BaseImpl::getValue()));
68 Validator(ValueType val) : m_val(val) {}
70 template <
typename TRange>
71 bool operator()(
bool val)
const
73 static_cast<void>(val);
74 static_assert(comms::util::isTuple<TRange>(),
"TRange must be a tuple");
75 static_assert(std::tuple_size<TRange>::value == 2,
"Tuple with 2 elements is expected");
76 using MinVal =
typename std::tuple_element<0, TRange>::type;
77 using MaxVal =
typename std::tuple_element<1, TRange>::type;
78 static_assert(MinVal::value <= MaxVal::value,
"Invalid range");
81 ((
static_cast<ValueType
>(MinVal::value) <= m_val) &&
82 (m_val <= static_cast<ValueType>(MaxVal::value)));
Contains various tuple type manipulation classes and functions.
Main namespace for all classes / functions of COMMS library.