From b6edadee03efb86ea7cfbd57ada29337e8535f8e Mon Sep 17 00:00:00 2001 From: "Timur A. Fatkhullin" Date: Tue, 30 Apr 2024 11:47:42 +0300 Subject: [PATCH] ... --- common/adc_utils.h | 2 +- common/adc_value.h | 50 +++++++++++++++++++++++----------------------- 2 files changed, 26 insertions(+), 26 deletions(-) diff --git a/common/adc_utils.h b/common/adc_utils.h index 936a9e1..48b0103 100644 --- a/common/adc_utils.h +++ b/common/adc_utils.h @@ -379,7 +379,7 @@ public: if constexpr (traits::adc_is_tuple_v) { AdcTupleFromCharRange(res, value, _delimiter); } else if constexpr (traits::adc_output_char_range) { - AdcValuRangeFromCharRange(res, value, _delimiter); + AdcValueRangeFromCharRange(res, value, _delimiter); } else { res = AdcTrivialDeserializer(value); } diff --git a/common/adc_value.h b/common/adc_value.h index 63c2d80..3e8f6ec 100644 --- a/common/adc_value.h +++ b/common/adc_value.h @@ -387,46 +387,46 @@ template class AdcSerializingValueHolder : public AdcValueHolder { protected: - std::function _serializerWrapper = []() { - - }; + std::function _serializerWrapper; std::function _deserializerWrapper; - template - void init(GT&& getter, ST&& setter, VT&& validator, SRT&& serializer, DSRT&& deserializer) + template + void initWrappers(SRT&& serializer, DSRT&& deserializer) { - _serializerWrapper = [wrapper = - traits::adc_pf_wrapper(std::forward(getter), std::forward(serializer))]() { - auto& getter = std::get<0>(wrapper); - auto& serializer = std::get<1>(wrapper); + _serializerWrapper = [wrapper = traits::adc_pf_wrapper(std::forward(serializer)), this]() { + auto& serializer = std::get<0>(wrapper); + + auto val = _getterFunc[this](); - auto val = getter(); return serializer(val); }; - using v_t = traits::adc_retval_t; + _serializerWrapper = [wrapper = traits::adc_pf_wrapper(std::forward(deserializer)), + this](const SerializedT& sval) { + auto& deserializer = std::get<0>(wrapper); - _serializerWrapper = [wrapper = - traits::adc_pf_wrapper(std::forward(setter), std::forward(validator), - std::forward(deserializer))](const SerializedT& sval) { - auto& setter = std::get<0>(wrapper); - auto& validator = std::get<1>(wrapper); - auto& deserializer = std::get<2>(wrapper); + VALUET val = deserializer(sval); - v_t val = deserializer(sval); - - if (validator(val)) { - setter(val); - } else { - throw std::system_error(AdcValueHolderErrorCode::ERROR_VALUE_IS_NOT_VALID); - } + _setterFunc[this](val); }; } public: - using AdcValueHolder::AdcValueHolder; + template >, + typename VT = decltype(AdcValueHolder::AdcValueHolderDummyValidator), + typename SRT, + typename DSRT> + AdcSerializingValueHolder(GT&& getter, ST&& setter, VT&& validator, SRT&& serializer, DSRT&& deserializer) + : AdcValueHolder(std::forward(getter), std::forward(setter), std::forward(validator)) + { + using value_t = std::decay_t>; + + initWrappers(std::forward(serializer), std::forward(deserializer)); + } virtual ~AdcSerializingValueHolder() = default; };