From a6f4179f4fe2ef0af4f41f396893c3aceba6be56 Mon Sep 17 00:00:00 2001 From: vng Date: Tue, 13 Dec 2011 17:17:52 +0300 Subject: [PATCH] Add generic Read, Write functions for buffer_vector. --- coding/read_write_utils.hpp | 57 +++++++++++++++++++++++++++++++------ 1 file changed, 49 insertions(+), 8 deletions(-) diff --git a/coding/read_write_utils.hpp b/coding/read_write_utils.hpp index fb961834f2..d1aa716b0e 100644 --- a/coding/read_write_utils.hpp +++ b/coding/read_write_utils.hpp @@ -2,12 +2,26 @@ #include "varint.hpp" +#include "../base/buffer_vector.hpp" + #include "../std/string.hpp" #include "../std/vector.hpp" namespace rw { + template + void Write(TSink & sink, uint32_t i) + { + WriteVarUint(sink, i); + } + + template + void Read(TSource & src, uint32_t & i) + { + i = ReadVarUint(src); + } + template void Write(TSink & sink, string const & s) { @@ -26,21 +40,48 @@ namespace rw src.Read(&s[0], count); } + namespace impl + { + template + void WriteCont(TSink & sink, TCont 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 ReadCont(TSource & src, TCont & v) + { + uint32_t const count = ReadVarUint(src); + v.resize(count); + for (size_t i = 0; i < count; ++i) + Read(src, v[i]); + } + } + 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]); + impl::WriteCont(sink, v); } 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]); + impl::ReadCont(src, v); + } + + template + void Write(TSink & sink, buffer_vector const & v) + { + impl::WriteCont(sink, v); + } + + template + void Read(TSource & src, buffer_vector & v) + { + impl::ReadCont(src, v); } }