This commit is contained in:
2026-05-20 17:57:18 +03:00
parent c5f17b7403
commit 47ba7342e7

View File

@@ -130,6 +130,8 @@ public:
OPOLICY_FULL // serialize entire set of key-value pairs OPOLICY_FULL // serialize entire set of key-value pairs
}; };
static constexpr std::string_view DEFAULT_RECORD_DELIMITER{"\n"};
static constexpr std::string_view COMMENT_SEQ{COMM_SEQ == nullptr ? constants::MCC_KV_COMMENT_SEQ_ARR static constexpr std::string_view COMMENT_SEQ{COMM_SEQ == nullptr ? constants::MCC_KV_COMMENT_SEQ_ARR
: COMM_SEQ[0] == '\0' ? constants::MCC_KV_COMMENT_SEQ_ARR : COMM_SEQ[0] == '\0' ? constants::MCC_KV_COMMENT_SEQ_ARR
: COMM_SEQ}; : COMM_SEQ};
@@ -226,7 +228,8 @@ public:
traits::mcc_input_char_range RecDelimT = std::string_view, traits::mcc_input_char_range RecDelimT = std::string_view,
mcc_serialization_params_c SerParamsT = mcc_serialization_params_t> mcc_serialization_params_c SerParamsT = mcc_serialization_params_t>
std::error_code fromCharRange(const R& buffer, std::error_code fromCharRange(const R& buffer,
RecDelimT rec_delim = std::string_view("\n") // records delimiter size_t skip_records = 0, // number of skipped records (from the beginning)
RecDelimT rec_delim = DEFAULT_RECORD_DELIMITER // records delimiter
) )
requires std::ranges::contiguous_range<R> requires std::ranges::contiguous_range<R>
{ {
@@ -254,7 +257,7 @@ public:
// set values to its defaults // set values to its defaults
setToDefaults(); setToDefaults();
auto recs = std::views::split(buffer, std::move(rec_delim)); auto recs = std::views::split(buffer, std::move(rec_delim)) | std::views::drop(skip_records);
for (auto const& el : recs) { for (auto const& el : recs) {
rec = mcc::utils::trimSpaces(el, utils::TrimType::TRIM_LEFT); rec = mcc::utils::trimSpaces(el, utils::TrimType::TRIM_LEFT);
@@ -318,7 +321,7 @@ public:
template <OutputPolicy OPOLICY = MccKeyValueHolder::OPOLICY_CHANGED_ONLY, template <OutputPolicy OPOLICY = MccKeyValueHolder::OPOLICY_CHANGED_ONLY,
traits::mcc_output_char_range R, traits::mcc_output_char_range R,
traits::mcc_input_char_range RecDelimT = std::string_view> traits::mcc_input_char_range RecDelimT = std::string_view>
std::error_code toCharRange(R& output_buffer, RecDelimT rec_delim = std::string_view{"\n"}) std::error_code toCharRange(R& output_buffer, RecDelimT rec_delim = DEFAULT_RECORD_DELIMITER)
{ {
if (std::is_pointer_v<std::decay_t<RecDelimT>>) { // char*, const char*, char[], conat char[] if (std::is_pointer_v<std::decay_t<RecDelimT>>) { // char*, const char*, char[], conat char[]
return toCharRange(output_buffer, std::string_view{rec_delim}); return toCharRange(output_buffer, std::string_view{rec_delim});
@@ -485,7 +488,7 @@ struct mcc_simple_kv_record_t {
}; };
template <mcc_variant_valid_type_c T> template <mcc_variant_valid_type_c T>
mcc_simple_kv_record_t<T> mcc_make_simple_kv_record( static mcc_simple_kv_record_t<T> mcc_make_simple_kv_record(
std::string_view key, std::string_view key,
T const& def_value, T const& def_value,
mcc_serialization_params_t const& spars = mcc_serialization_params_t{}) mcc_serialization_params_t const& spars = mcc_serialization_params_t{})