diff --git a/include/sp/common/DataBuffer.h b/include/sp/common/DataBuffer.h index 32ac95b..c387eb9 100644 --- a/include/sp/common/DataBuffer.h +++ b/include/sp/common/DataBuffer.h @@ -13,6 +13,7 @@ #include #include #include +#include namespace sp { @@ -88,6 +89,19 @@ class DataBuffer { return *this; } + /** + * \brief Append a map to the buffer by first writing the size + * \param data The map to append + */ + template + DataBuffer& operator<<(const std::map& data) { + *this << VarInt{data.size()}; + for (const auto& element : data) { + *this << element.first << element.second; + } + return *this; + } + /** * \brief Append an array to the buffer by first writing the size * \param data The buffer to append @@ -140,6 +154,23 @@ class DataBuffer { return *this; } + /** + * \brief Read a map (size + data) from the buffer + * \pre The map is assumed to be empty + */ + template + DataBuffer& operator>>(std::map& data) { + VarInt mapSize; + *this >> mapSize; + for (std::size_t i = 0; i < mapSize.GetValue(); i++) { + K newKey; + V newValue; + *this >> newKey >> newValue; + data.insert({newKey, newValue}); + } + return *this; + } + /** * \brief Read an array from the buffer */