diff options
author | Olga Khlopkova <o.khlopkova@corp.mail.ru> | 2020-09-03 10:52:49 +0300 |
---|---|---|
committer | Maksim Andrianov <maksimandrianov1@gmail.com> | 2020-09-18 12:41:49 +0300 |
commit | e548527b0d0cd018832f035fb16c3fa08e9c8c9b (patch) | |
tree | dfe78c5c84f8ab2b96d62f5380049973fe07d95c /transit/transit_serdes.hpp | |
parent | c4d4f8fd98c982a433b5e25b6bbdcc503a7e3ad7 (diff) |
[transit] Replace osmoh::OpeningHours with Schedule.
Diffstat (limited to 'transit/transit_serdes.hpp')
-rw-r--r-- | transit/transit_serdes.hpp | 37 |
1 files changed, 33 insertions, 4 deletions
diff --git a/transit/transit_serdes.hpp b/transit/transit_serdes.hpp index 37b25eece3..fd5d63e8a1 100644 --- a/transit/transit_serdes.hpp +++ b/transit/transit_serdes.hpp @@ -20,6 +20,7 @@ #include <cmath> #include <cstdint> #include <limits> +#include <map> #include <sstream> #include <string> #include <type_traits> @@ -170,8 +171,20 @@ public: (*this)(v); } - template <class K, class V> - void operator()(std::unordered_map<K, V> const & container, char const * /* name */ = nullptr) + template <class K, class V, class H> + void operator()(std::unordered_map<K, V, H> const & container, char const * /* name */ = nullptr) + { + CHECK_LESS_OR_EQUAL(container.size(), std::numeric_limits<uint64_t>::max(), ()); + WriteVarUint(m_sink, static_cast<uint64_t>(container.size())); + for (auto const & [key, val] : container) + { + (*this)(key); + (*this)(val); + } + } + + template <class K, class V, class H> + void operator()(std::map<K, V, H> const & container, char const * /* name */ = nullptr) { CHECK_LESS_OR_EQUAL(container.size(), std::numeric_limits<uint64_t>::max(), ()); WriteVarUint(m_sink, static_cast<uint64_t>(container.size())); @@ -347,8 +360,24 @@ public: (*this)(v); } - template <class K, class V> - void operator()(std::unordered_map<K, V> & container, char const * /* name */ = nullptr) + template <class K, class V, class H> + void operator()(std::unordered_map<K, V, H> & container, char const * /* name */ = nullptr) + { + auto const size = static_cast<size_t>(ReadVarUint<uint64_t, Source>(m_source)); + for (size_t i = 0; i < size; ++i) + { + K key; + V val; + + (*this)(key); + (*this)(val); + + container.emplace(key, val); + } + } + + template <class K, class V, class H> + void operator()(std::map<K, V, H> & container, char const * /* name */ = nullptr) { auto const size = static_cast<size_t>(ReadVarUint<uint64_t, Source>(m_source)); for (size_t i = 0; i < size; ++i) |