diff --git a/include/adclib/adclib_device1.h b/include/adclib/adclib_device1.h index 2af49b9..dd379b1 100644 --- a/include/adclib/adclib_device1.h +++ b/include/adclib/adclib_device1.h @@ -171,15 +171,7 @@ protected: typedef std::function attr_deserial_func_t; struct attr_t { - template SerialFuncT, - std::convertible_to DeserialFuncT> - attr_t(AdcGenericDevice& dev, ATTR_ID_T id, SerialFuncT&& serial_func, DeserialFuncT&& deserial_func) - : _dev(dev), - _id(std::move(id)), - _serializer(std::forward(serial_func)), - _deserializer(std::forward(deserial_func)) - { - } + attr_t(AdcGenericDevice& dev, ATTR_ID_T id) : _dev(dev), _id(std::move(id)) {} template operator adc_result_t() 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) { - } - } - - 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> _commands{}; + std::unordered_map _attrs{}; snplib::HeterogenMap _attrGetter{}; snplib::HeterogenMap _attrSetter{}; @@ -301,7 +280,23 @@ public: static_assert(std::invocable, "Invalid setter argument type!"); } - // _attrGetter.push() + _attrGetter.push(id, attr_getter_t>(std::forward(getter)), + std::tuple...>{}); + + _attrSetter.push(id, attr_setter_t>(std::forward(setter)), + std::tuple...>{}); + } + + template + 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; + static_assert(!std::is_void_v, "Getter and setter cannot be nullptr_t at the same time!"); } };