From 1d29e7816a1c9029b4f70abe9e13cc1fcad4ba05 Mon Sep 17 00:00:00 2001 From: Viktor Govako Date: Wed, 2 Jul 2025 22:05:34 -0300 Subject: [PATCH] [coding] Rename non-empty string serialization. Signed-off-by: Viktor Govako --- generator/boundary_postcodes_enricher.cpp | 2 +- generator/collector_boundary_postcode.cpp | 2 +- .../collector_boundary_postcode_tests.cpp | 2 +- generator/road_access_generator.hpp | 5 ++- libs/coding/string_utf8_multilang.hpp | 36 +++++++------------ libs/indexer/feature_data.hpp | 8 ++--- libs/indexer/feature_meta.hpp | 4 +-- libs/kml/serdes_common.hpp | 1 + 8 files changed, 24 insertions(+), 36 deletions(-) diff --git a/generator/boundary_postcodes_enricher.cpp b/generator/boundary_postcodes_enricher.cpp index e7b6488af..5bac09836 100644 --- a/generator/boundary_postcodes_enricher.cpp +++ b/generator/boundary_postcodes_enricher.cpp @@ -22,7 +22,7 @@ BoundaryPostcodesEnricher::BoundaryPostcodesEnricher(std::string const & boundar while (src.Size() > 0) { std::string postcode; - utils::ReadString(src, postcode); + rw::ReadNonEmpty(src, postcode); std::vector geometry; rw::ReadVectorOfPOD(src, geometry); CHECK(!postcode.empty() && !geometry.empty(), ()); diff --git a/generator/collector_boundary_postcode.cpp b/generator/collector_boundary_postcode.cpp index d5f5c25b7..5033c6fdf 100644 --- a/generator/collector_boundary_postcode.cpp +++ b/generator/collector_boundary_postcode.cpp @@ -57,7 +57,7 @@ void BoundaryPostcodeCollector::Save() FileWriter writer(GetFilename()); for (auto const & p : m_data) { - utils::WriteString(writer, p.first); + rw::WriteNonEmpty(writer, p.first); rw::WriteVectorOfPOD(writer, p.second); } } diff --git a/generator/generator_tests/collector_boundary_postcode_tests.cpp b/generator/generator_tests/collector_boundary_postcode_tests.cpp index 33649e34c..0d82ac216 100644 --- a/generator/generator_tests/collector_boundary_postcode_tests.cpp +++ b/generator/generator_tests/collector_boundary_postcode_tests.cpp @@ -91,7 +91,7 @@ unordered_map> Read(string const & dumpFilename) while (src.Size() > 0) { string postcode; - utils::ReadString(src, postcode); + rw::ReadNonEmpty(src, postcode); vector geometry; rw::ReadVectorOfPOD(src, geometry); result.emplace(std::move(postcode), std::move(geometry)); diff --git a/generator/road_access_generator.hpp b/generator/road_access_generator.hpp index 766291a06..f24c0ef09 100644 --- a/generator/road_access_generator.hpp +++ b/generator/road_access_generator.hpp @@ -14,7 +14,6 @@ #include #include #include -#include #include namespace routing @@ -74,7 +73,7 @@ void Save(Sink & sink, ConditionalRAVectorT const & ac) for (auto const & e : ac) { Save(sink, e.m_accessType); - utils::WriteString(sink, e.m_openingHours); + rw::WriteNonEmpty(sink, e.m_openingHours); } } @@ -86,7 +85,7 @@ void Load(Source & src, ConditionalRAVectorT & vec) for (uint32_t i = 0; i < count; ++i) { Load(src, vec[i].m_accessType); - utils::ReadString(src, vec[i].m_openingHours); + rw::ReadNonEmpty(src, vec[i].m_openingHours); } } diff --git a/libs/coding/string_utf8_multilang.hpp b/libs/coding/string_utf8_multilang.hpp index f11eebec6..257e3d862 100644 --- a/libs/coding/string_utf8_multilang.hpp +++ b/libs/coding/string_utf8_multilang.hpp @@ -1,46 +1,35 @@ #pragma once -#include "coding/reader.hpp" +#include "coding/read_write_utils.hpp" #include "coding/varint.hpp" -#include "coding/writer.hpp" #include "base/assert.hpp" #include "base/buffer_vector.hpp" #include "base/control_flow.hpp" -#include #include #include #include -namespace utils +namespace rw { -template -void WriteString(TSink & sink, std::string const & s) +template +void WriteNonEmpty(TSink & sink, std::string const & s) { - if (EnableExceptions && s.empty()) - MYTHROW(Writer::WriteException, ("String is empty")); - else - CHECK(!s.empty(), ()); - + CHECK(!s.empty(), ()); size_t const sz = s.size(); WriteVarUint(sink, static_cast(sz - 1)); sink.Write(s.c_str(), sz); } -template -void ReadString(TSource & src, std::string & s) +template +void ReadNonEmpty(TSource & src, std::string & s) { uint32_t const sz = ReadVarUint(src) + 1; s.resize(sz); src.Read(&s[0], sz); - - if (EnableExceptions && s.empty()) - MYTHROW(Reader::ReadException, ("String is empty")); - else - CHECK(!s.empty(), ()); } -} // namespace utils +} // namespace rw // A class to store strings in multiple languages. // May be used e.g. to store several translations of a feature's name. @@ -201,15 +190,14 @@ public: /// @name Used for serdes. /// @{ template - void Write(TSink & sink) const + void WriteNonEmpty(TSink & sink) const { - utils::WriteString(sink, m_s); + rw::WriteNonEmpty(sink, m_s); } - template - void Read(TSource & src) + void ReadNonEmpty(TSource & src) { - utils::ReadString(src, m_s); + rw::ReadNonEmpty(src, m_s); } std::string const & GetBuffer() const { return m_s; } diff --git a/libs/indexer/feature_data.hpp b/libs/indexer/feature_data.hpp index c0930a085..8b98c1cb5 100644 --- a/libs/indexer/feature_data.hpp +++ b/libs/indexer/feature_data.hpp @@ -176,7 +176,7 @@ struct FeatureParamsBase using namespace feature; if (header & HEADER_MASK_HAS_NAME) - name.Write(sink); + name.WriteNonEmpty(sink); if (header & HEADER_MASK_HAS_LAYER) WriteToSink(sink, layer); @@ -187,7 +187,7 @@ struct FeatureParamsBase switch (headerGeomType) { case HeaderGeomType::Point: WriteToSink(sink, rank); break; - case HeaderGeomType::Line: utils::WriteString(sink, ref); break; + case HeaderGeomType::Line: rw::WriteNonEmpty(sink, ref); break; case HeaderGeomType::Area: case HeaderGeomType::PointEx: house.Write(sink); break; } @@ -200,7 +200,7 @@ struct FeatureParamsBase using namespace feature; if (header & HEADER_MASK_HAS_NAME) - name.Read(src); + name.ReadNonEmpty(src); if (header & HEADER_MASK_HAS_LAYER) layer = ReadPrimitiveFromSource(src); @@ -211,7 +211,7 @@ struct FeatureParamsBase switch (headerGeomType) { case HeaderGeomType::Point: rank = ReadPrimitiveFromSource(src); break; - case HeaderGeomType::Line: utils::ReadString(src, ref); break; + case HeaderGeomType::Line: rw::ReadNonEmpty(src, ref); break; case HeaderGeomType::Area: case HeaderGeomType::PointEx: house.Read(src); break; } diff --git a/libs/indexer/feature_meta.hpp b/libs/indexer/feature_meta.hpp index 4ff611c3b..94c8badb0 100644 --- a/libs/indexer/feature_meta.hpp +++ b/libs/indexer/feature_meta.hpp @@ -46,7 +46,7 @@ public: for (auto const & it : m_metadata) { WriteVarUint(sink, static_cast(it.first)); - utils::WriteString(sink, it.second); + rw::WriteNonEmpty(sink, it.second); } } @@ -57,7 +57,7 @@ public: for (size_t i = 0; i < sz; ++i) { auto const key = ReadVarUint(src); - utils::ReadString(src, m_metadata[key]); + rw::ReadNonEmpty(src, m_metadata[key]); } } diff --git a/libs/kml/serdes_common.hpp b/libs/kml/serdes_common.hpp index cab89da17..8c05cfa94 100644 --- a/libs/kml/serdes_common.hpp +++ b/libs/kml/serdes_common.hpp @@ -1,6 +1,7 @@ #pragma once #include "coding/string_utf8_multilang.hpp" +#include "coding/writer.hpp" #include "geometry/point2d.hpp" #include "geometry/point_with_altitude.hpp"