This commit is contained in:
2026-07-29 17:52:34 +03:00
parent b90a59c3ed
commit 13b22b0d1c

View File

@@ -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!");
}
};