diff options
author | Arsentiy Milchakov <milcars@mapswithme.com> | 2017-03-23 14:50:19 +0300 |
---|---|---|
committer | Arsentiy Milchakov <milcars@mapswithme.com> | 2017-03-23 14:50:19 +0300 |
commit | 4b1318238b1b7544d1156e9525b85f654ba2dc2d (patch) | |
tree | 659373b72d9af6233c5772d9c02a41a4450ce1bb /coding/writer.hpp | |
parent | 431299e98329b863b2518ed863c918bc0501256d (diff) |
review fixes
Diffstat (limited to 'coding/writer.hpp')
-rw-r--r-- | coding/writer.hpp | 36 |
1 files changed, 17 insertions, 19 deletions
diff --git a/coding/writer.hpp b/coding/writer.hpp index c7177499cd..59f56a623e 100644 --- a/coding/writer.hpp +++ b/coding/writer.hpp @@ -1,6 +1,7 @@ #pragma once #include "base/assert.hpp" #include "base/base.hpp" +#include "base/checked_cast.hpp" #include "base/exception.hpp" #include "std/algorithm.hpp" #include "std/shared_ptr.hpp" @@ -9,7 +10,6 @@ #include "std/vector.hpp" // Generic Writer. Not thread-safe. -// When SubWriter is used, pos can negative, so int64_t is used to store pos. class Writer { public: @@ -30,24 +30,22 @@ template <typename ContainerT> class MemWriter : public Writer { public: - inline MemWriter(ContainerT & data) : m_Data(data), m_Pos(0) + inline explicit MemWriter(ContainerT & data) : m_Data(data), m_Pos(0) { static_assert(sizeof(typename ContainerT::value_type) == 1, ""); } - inline void Seek(uint64_t pos) + inline void Seek(uint64_t pos) override { - ASSERT_EQUAL(pos, static_cast<uintptr_t>(pos), ()); - ASSERT_GREATER_OR_EQUAL(pos, 0, ()); - m_Pos = static_cast<uintptr_t>(pos); + m_Pos = base::asserted_cast<uintptr_t>(pos); } - inline uint64_t Pos() const + inline uint64_t Pos() const override { return m_Pos; } - inline void Write(void const * p, size_t size) + inline void Write(void const * p, size_t size) override { intptr_t freeSize = m_Data.size() - m_Pos; if (freeSize < 0) @@ -75,7 +73,7 @@ private: // Original writer should not be used when SubWriter is active! // In destructor, SubWriter calls Seek() of original writer to the end of what has been written. template <typename WriterT> -class SubWriter +class SubWriter : public Writer { public: inline explicit SubWriter(WriterT & writer) @@ -86,14 +84,14 @@ public: { } - ~SubWriter() + ~SubWriter() override { ASSERT_EQUAL(m_offset, GetOffset(), ()); if (m_pos != m_maxPos) Seek(m_maxPos); } - inline void Seek(uint64_t pos) + inline void Seek(uint64_t pos) override { ASSERT_EQUAL(m_offset, GetOffset(), ()); m_writer.Seek(GetOffset() + pos); @@ -102,13 +100,13 @@ public: m_maxPos = max(m_maxPos, m_pos); } - inline uint64_t Pos() const + inline uint64_t Pos() const override { ASSERT_EQUAL(m_offset, GetOffset(), ()); return m_pos; } - inline void Write(void const * p, size_t size) + inline void Write(void const * p, size_t size) override { ASSERT_EQUAL(m_offset, GetOffset(), ()); m_writer.Write(p, size); @@ -132,22 +130,22 @@ private: }; template<typename WriterT> -class WriterPtr +class WriterPtr : public Writer { public: - WriterPtr(WriterT * p = 0) : m_p(p) {} + explicit WriterPtr(WriterT * p = 0) : m_p(p) {} - void Seek(uint64_t pos) + void Seek(uint64_t pos) override { m_p->Seek(pos); } - uint64_t Pos() const + uint64_t Pos() const override { return m_p->Pos(); } - void Write(void const * p, size_t size) + void Write(void const * p, size_t size) override { m_p->Write(p, size); } @@ -162,7 +160,7 @@ template <typename WriterT> class WriterSink { public: - inline WriterSink(WriterT & writer) : m_writer(writer), m_pos(0) {} + inline explicit WriterSink(WriterT & writer) : m_writer(writer), m_pos(0) {} inline void Write(void const * p, size_t size) { |