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:
2026-05-28 17:39:30 +03:00
parent 3497850e1f
commit e1a136a839
5 changed files with 173 additions and 90 deletions

View File

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