...
This commit is contained in:
@@ -171,15 +171,7 @@ protected:
|
||||
typedef std::function<adc_error_t(serialized_t const&)> attr_deserial_func_t;
|
||||
|
||||
struct attr_t {
|
||||
template <std::convertible_to<attr_serial_func_t> SerialFuncT,
|
||||
std::convertible_to<attr_deserial_func_t> DeserialFuncT>
|
||||
attr_t(AdcGenericDevice& dev, ATTR_ID_T id, SerialFuncT&& serial_func, DeserialFuncT&& deserial_func)
|
||||
: _dev(dev),
|
||||
_id(std::move(id)),
|
||||
_serializer(std::forward<SerialFuncT>(serial_func)),
|
||||
_deserializer(std::forward<DeserialFuncT>(deserial_func))
|
||||
{
|
||||
}
|
||||
attr_t(AdcGenericDevice& dev, ATTR_ID_T id) : _dev(dev), _id(std::move(id)) {}
|
||||
|
||||
template <typename VT>
|
||||
operator adc_result_t<VT>() const
|
||||
@@ -221,28 +213,15 @@ protected:
|
||||
return AdcDeviceErrorCode::ERROR_UNKNOWN;
|
||||
}
|
||||
|
||||
adc_error_t serialize(snplib::snplib_output_char_range_c auto& output,
|
||||
snplib::snplib_serialization_params_c auto const& params)
|
||||
{
|
||||
if constexpr (std::same_as<serialized_t, decltype(output)>) {
|
||||
}
|
||||
}
|
||||
|
||||
adc_error_t deserialize(snplib::snplib_input_char_range_c auto const& input,
|
||||
snplib::snplib_serialization_params_c auto const& params)
|
||||
{
|
||||
}
|
||||
|
||||
private:
|
||||
AdcGenericDevice& _dev;
|
||||
ATTR_ID_T _id;
|
||||
attr_serial_func_t _serializer;
|
||||
attr_deserial_func_t _deserializer;
|
||||
};
|
||||
|
||||
DEV_ID_T _devId;
|
||||
|
||||
std::unordered_map<CMD_ID_T, std::function<adc_error_t()>> _commands{};
|
||||
std::unordered_map<ATTR_ID_T, attr_t> _attrs{};
|
||||
|
||||
snplib::HeterogenMap<ATTR_ID_T> _attrGetter{};
|
||||
snplib::HeterogenMap<ATTR_ID_T> _attrSetter{};
|
||||
@@ -301,7 +280,23 @@ public:
|
||||
static_assert(std::invocable<ST, v_t const&>, "Invalid setter argument type!");
|
||||
}
|
||||
|
||||
// _attrGetter.push()
|
||||
_attrGetter.push(id, attr_getter_t<std::remove_cvref_t<GT>>(std::forward<GT>(getter)),
|
||||
std::tuple<attr_getter_t<VTs>...>{});
|
||||
|
||||
_attrSetter.push(id, attr_setter_t<std::remove_cvref_t<ST>>(std::forward<ST>(setter)),
|
||||
std::tuple<attr_setter_t<VTs>...>{});
|
||||
}
|
||||
|
||||
template <adclib_attr_getter_c GT, adclib_attr_setter_c ST, typename... FuncTs>
|
||||
requires(sizeof...(FuncTs) > 1)
|
||||
void addAttr(ATTR_ID_T id, GT&& getter, ST&& setter, FuncTs&&... cnv_pairs)
|
||||
{
|
||||
static constexpr size_t NFUNCS = sizeof...(FuncTs);
|
||||
|
||||
static_assert(NFUNCS % 2 == 0, "Number of conversional functions must be an even!");
|
||||
|
||||
using v_t = adclib_attr_value_deduced_t<GT, ST>;
|
||||
static_assert(!std::is_void_v<v_t>, "Getter and setter cannot be nullptr_t at the same time!");
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user