mcc_keyvalue.h: fix for working with non-default constructible record
values, more smart 'set' operations for range values mcc_epoch.h: add constructors mcc_traits.h: add mcc_fixed_size_range and mcc_non_resizable_range concepts mcc_deserializer.h: fixes compilation issues for mcc_fixed_size_range and mcc_non_resizable_range ranges
This commit is contained in:
@@ -4,6 +4,59 @@
|
||||
|
||||
using namespace mcc::impl;
|
||||
|
||||
|
||||
// example of non-default constructible class
|
||||
struct VT {
|
||||
VT(int v) : _v(v) {}
|
||||
|
||||
void set(int v)
|
||||
{
|
||||
_v = v;
|
||||
}
|
||||
|
||||
int v() const
|
||||
{
|
||||
return _v;
|
||||
}
|
||||
|
||||
protected:
|
||||
int _v{};
|
||||
};
|
||||
|
||||
|
||||
template <>
|
||||
struct mcc::impl::MccSerializer<VT> : MccSerializerBase {
|
||||
static constexpr std::string_view serializerName{"MCC-VT-SERIALIZER"};
|
||||
|
||||
template <mcc_serialization_params_c ParamsT = mcc_serialization_params_t>
|
||||
error_t operator()(traits::mcc_output_char_range auto& output,
|
||||
VT const& value,
|
||||
ParamsT const& params = mcc_serialization_params_t{})
|
||||
{
|
||||
return MccSerializer<int>{}(output, value.v(), params);
|
||||
}
|
||||
};
|
||||
|
||||
template <>
|
||||
struct mcc::impl::MccDeserializer<VT> : MccDeserializerBase {
|
||||
static constexpr std::string_view deserializerName{"MCC-VT-DESERIALIZER"};
|
||||
|
||||
template <mcc_serialization_params_c ParamsT = mcc_serialization_params_t>
|
||||
error_t operator()(traits::mcc_input_char_range auto const& input,
|
||||
VT& value,
|
||||
ParamsT const& params = mcc_serialization_params_t{})
|
||||
{
|
||||
int v;
|
||||
auto err = MccDeserializer<int>{}(input, v, params);
|
||||
if (!err) {
|
||||
value.set(v);
|
||||
}
|
||||
|
||||
return err;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
static auto kv_desc = std::make_tuple(
|
||||
mcc_simple_kv_record_t{"bb", MccAngle{11.5_degs}, MccAngle{11.5_degs}, mcc_serialization_params_t{}},
|
||||
mcc_simple_kv_record_t{"aaa", std::string("AAA"), std::string("AAA"), mcc_serialization_params_t{}},
|
||||
@@ -12,7 +65,9 @@ static auto kv_desc = std::make_tuple(
|
||||
"ddd", MccAngle{11.5_degs}, MccAngle{11.5_degs},
|
||||
mcc_serialization_params_t{.angle_format = mcc::MccSerializedAngleFormat::MCC_SERIALIZED_FORMAT_SXGM_HOURS}},
|
||||
mcc_make_simple_kv_record("eee", 1.5),
|
||||
mcc_make_simple_kv_record("arr", std::vector<int>{1, 2, 3, 4, 5, 6, 7}));
|
||||
mcc_make_simple_kv_record("arr", std::vector<int>{1, 2, 3, 4, 5, 6, 7}),
|
||||
mcc_make_simple_kv_record("vt", VT(77)),
|
||||
mcc_make_simple_kv_record("sarr", std::array<double, 3>{1, 2, 3}));
|
||||
|
||||
|
||||
|
||||
@@ -88,6 +143,18 @@ int main()
|
||||
// return 1;
|
||||
}
|
||||
|
||||
err = kv.setValue("arr", std::array{10, 20, 30});
|
||||
if (err) {
|
||||
std::println("ERR = {}", err);
|
||||
// return 1;
|
||||
}
|
||||
|
||||
err = kv.setValue("sarr", std::vector{10, 20, 30, 40, 50});
|
||||
if (err) {
|
||||
std::println("ERR = {}", err);
|
||||
// return 1;
|
||||
}
|
||||
|
||||
std::println("------------------------------------");
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user