From 485c280e20b0ab5459ab6af48574feab9940483d Mon Sep 17 00:00:00 2001 From: vng Date: Fri, 21 Oct 2011 15:26:04 +0300 Subject: Add read write functions for some std containers. --- coding/read_write_utils.hpp | 46 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 coding/read_write_utils.hpp (limited to 'coding/read_write_utils.hpp') diff --git a/coding/read_write_utils.hpp b/coding/read_write_utils.hpp new file mode 100644 index 0000000000..fb961834f2 --- /dev/null +++ b/coding/read_write_utils.hpp @@ -0,0 +1,46 @@ +#pragma once + +#include "varint.hpp" + +#include "../std/string.hpp" +#include "../std/vector.hpp" + + +namespace rw +{ + template + void Write(TSink & sink, string const & s) + { + uint32_t const count = static_cast(s.size()); + WriteVarUint(sink, count); + if (!s.empty()) + sink.Write(&s[0], count); + } + + template + void Read(TSource & src, string & s) + { + uint32_t const count = ReadVarUint(src); + s.resize(count); + if (count > 0) + src.Read(&s[0], count); + } + + template + void Write(TSink & sink, vector const & v) + { + uint32_t const count = static_cast(v.size()); + WriteVarUint(sink, count); + for (uint32_t i = 0; i < count; ++i) + Write(sink, v[i]); + } + + template + void Read(TSource & src, vector & v) + { + uint32_t const count = ReadVarUint(src); + v.resize(count); + for (size_t i = 0; i < count; ++i) + Read(src, v[i]); + } +} -- cgit v1.2.3