diff --git a/include/mcc/mcc_keyvalue.h b/include/mcc/mcc_keyvalue.h index 77ce774..c1de7da 100644 --- a/include/mcc/mcc_keyvalue.h +++ b/include/mcc/mcc_keyvalue.h @@ -130,6 +130,8 @@ public: 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 : COMM_SEQ[0] == '\0' ? constants::MCC_KV_COMMENT_SEQ_ARR : COMM_SEQ}; @@ -226,7 +228,8 @@ public: traits::mcc_input_char_range RecDelimT = std::string_view, mcc_serialization_params_c SerParamsT = mcc_serialization_params_t> 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 { @@ -254,7 +257,7 @@ public: // set values to its defaults 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) { rec = mcc::utils::trimSpaces(el, utils::TrimType::TRIM_LEFT); @@ -318,7 +321,7 @@ public: template - 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>) { // char*, const char*, char[], conat char[] return toCharRange(output_buffer, std::string_view{rec_delim}); @@ -485,7 +488,7 @@ struct mcc_simple_kv_record_t { }; template -mcc_simple_kv_record_t mcc_make_simple_kv_record( +static mcc_simple_kv_record_t mcc_make_simple_kv_record( std::string_view key, T const& def_value, mcc_serialization_params_t const& spars = mcc_serialization_params_t{})