...
This commit is contained in:
parent
5dcc57707b
commit
2661a60b47
@ -42,6 +42,60 @@ static constexpr std::tuple<bool,
|
||||
namespace traits
|
||||
{
|
||||
|
||||
/* concepts */
|
||||
|
||||
// attribute setter concept
|
||||
template <typename T>
|
||||
concept adc_attr_getter_c = std::is_null_pointer_v<T> ||
|
||||
(traits::adc_func_traits<T>::arity == 0 && !std::same_as<traits::adc_retval_t<T>, void>);
|
||||
|
||||
|
||||
// attribute setter concept
|
||||
template <typename T>
|
||||
concept adc_attr_setter_c = std::is_null_pointer_v<T> || (traits::adc_func_traits<T>::arity == 1);
|
||||
|
||||
|
||||
// internal-to-user and user-to-internal type conversional function concept
|
||||
template <typename T>
|
||||
concept adc_attr_convfunc_c = std::is_null_pointer_v<T> ||
|
||||
(traits::adc_func_traits<T>::arity == 1 && !std::same_as<traits::adc_retval_t<T>, void>);
|
||||
|
||||
|
||||
// deduce attribute type from getter and setter functions signatures
|
||||
template <adc_attr_getter_c GT, adc_attr_setter_c ST>
|
||||
using attr_value_t =
|
||||
std::conditional_t<std::is_null_pointer_v<GT>,
|
||||
std::conditional_t<std::is_null_pointer_v<ST>, std::nullptr_t, traits::adc_func_arg1_t<ST>>,
|
||||
traits::adc_retval_t<GT>>;
|
||||
|
||||
|
||||
|
||||
// deduce attribute internal type from conversional functions signatures
|
||||
template <adc_attr_convfunc_c FromFuncT, adc_attr_convfunc_c ToFuncT>
|
||||
using attr_internal_t = std::conditional_t<
|
||||
std::is_null_pointer_v<ToFuncT>,
|
||||
std::conditional_t<std::is_null_pointer_v<FromFuncT>, std::nullptr_t, traits::adc_retval_t<FromFuncT>>,
|
||||
traits::adc_retval_t<ToFuncT>>;
|
||||
|
||||
|
||||
// deduce user-defined type from conversional functions signatures
|
||||
template <adc_attr_convfunc_c FromFuncT, adc_attr_convfunc_c ToFuncT>
|
||||
using attr_user_t = std::conditional_t<
|
||||
std::is_null_pointer_v<FromFuncT>,
|
||||
std::conditional_t<std::is_null_pointer_v<ToFuncT>, std::nullptr_t, traits::adc_retval_t<ToFuncT>>,
|
||||
traits::adc_retval_t<FromFuncT>>;
|
||||
|
||||
|
||||
// attribute serializer function concept
|
||||
template <typename T, typename VT>
|
||||
concept adc_serializer_c = std::invocable<T, const VT&> && !std::same_as<void, traits::adc_retval_t<T>>;
|
||||
|
||||
|
||||
// attribute deserializer function concept
|
||||
template <typename T, typename ST>
|
||||
concept adc_deserializer_c = std::invocable<T, const ST&> && !std::same_as<void, traits::adc_retval_t<T>>;
|
||||
|
||||
|
||||
// a callable and it has exactly one argument
|
||||
template <typename T>
|
||||
concept adc_is_setter = adc_func_traits<T>::arity == 1;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user