From 8a6c4f394ee131eb9274e918f512165f87596567 Mon Sep 17 00:00:00 2001 From: Yury Melnichek Date: Sun, 29 Jul 2012 14:34:36 +0200 Subject: [PATCH] Minor refactoring. --- coding/coding_tests/dd_vector_test.cpp | 6 ++--- coding/coding_tests/diff_test.cpp | 32 +++++++++++++------------- coding/dd_vector.hpp | 23 +++++++++++++----- coding/polymorph_reader.hpp | 3 ++- words/sloynik_index.cpp | 3 +-- 5 files changed, 39 insertions(+), 28 deletions(-) diff --git a/coding/coding_tests/dd_vector_test.cpp b/coding/coding_tests/dd_vector_test.cpp index d8bc4b7f13..a166d6bd14 100644 --- a/coding/coding_tests/dd_vector_test.cpp +++ b/coding/coding_tests/dd_vector_test.cpp @@ -6,14 +6,14 @@ UNIT_TEST(DDVector) { - vector data; + vector data; // Push size. Big endian is used. data.push_back(1); data.push_back(2); data.push_back(3); - typedef DDVector Vector; + typedef DDVector Vector; MemReader reader(reinterpret_cast(&data[0]), data.size() * sizeof(data[0])); - Vector v(reader, reader.Size()); // since sizeof(unsigned char) == 1 + Vector v(reader); TEST_EQUAL(3, v.size(), ()); TEST_EQUAL(1, v[0], ()); TEST_EQUAL(2, v[1], ()); diff --git a/coding/coding_tests/diff_test.cpp b/coding/coding_tests/diff_test.cpp index ff8c67b0bd..3120871cda 100644 --- a/coding/coding_tests/diff_test.cpp +++ b/coding/coding_tests/diff_test.cpp @@ -128,8 +128,8 @@ UNIT_TEST(DiffSimpleReplace) char const dst[] = "abcyydef"; MemReader srcReader(src, ARRAY_SIZE(src) - 1); MemReader dstReader(dst, ARRAY_SIZE(dst) - 1); - DDVector srcV(srcReader, srcReader.Size()); // since sizeof(char) == 1 - DDVector dstV(dstReader, dstReader.Size()); // since sizeof(char) == 1 + DDVector srcV(srcReader); // since sizeof(char) == 1 + DDVector dstV(dstReader); // since sizeof(char) == 1 diff::SimpleReplaceDiffer differ; @@ -150,8 +150,8 @@ UNIT_TEST(DiffSimpleReplaceEmptyBegin) char const dst[] = "yydef"; MemReader srcReader(src, ARRAY_SIZE(src) - 1); MemReader dstReader(dst, ARRAY_SIZE(dst) - 1); - DDVector srcV(srcReader, srcReader.Size()); // since sizeof(char) == 1 - DDVector dstV(dstReader, dstReader.Size()); // since sizeof(char) == 1 + DDVector srcV(srcReader); // since sizeof(char) == 1 + DDVector dstV(dstReader); // since sizeof(char) == 1 diff::SimpleReplaceDiffer differ; @@ -172,8 +172,8 @@ UNIT_TEST(DiffSimpleReplaceEmptyEnd) char const dst[] = "abcyy"; MemReader srcReader(src, ARRAY_SIZE(src) - 1); MemReader dstReader(dst, ARRAY_SIZE(dst) - 1); - DDVector srcV(srcReader, srcReader.Size()); // since sizeof(char) == 1 - DDVector dstV(dstReader, dstReader.Size()); // since sizeof(char) == 1 + DDVector srcV(srcReader); // since sizeof(char) == 1 + DDVector dstV(dstReader); // since sizeof(char) == 1 diff::SimpleReplaceDiffer differ; @@ -194,8 +194,8 @@ UNIT_TEST(DiffSimpleReplaceAllEqual) char const dst[] = "abcdef"; MemReader srcReader(src, ARRAY_SIZE(src) - 1); MemReader dstReader(dst, ARRAY_SIZE(dst) - 1); - DDVector srcV(srcReader, srcReader.Size()); // since sizeof(char) == 1 - DDVector dstV(dstReader, dstReader.Size()); // since sizeof(char) == 1 + DDVector srcV(srcReader); // since sizeof(char) == 1 + DDVector dstV(dstReader); // since sizeof(char) == 1 diff::SimpleReplaceDiffer differ; @@ -216,8 +216,8 @@ UNIT_TEST(DiffWithRollingHashEqualStrings) char const dst[] = "abcdefklmno"; MemReader srcReader(src, ARRAY_SIZE(src) - 1); MemReader dstReader(dst, ARRAY_SIZE(dst) - 1); - DDVector srcV(srcReader, srcReader.Size()); // since sizeof(char) == 1 - DDVector dstV(dstReader, dstReader.Size()); // since sizeof(char) == 1 + DDVector srcV(srcReader); // since sizeof(char) == 1 + DDVector dstV(dstReader); // since sizeof(char) == 1 diff::RollingHashDiffer differ(3); @@ -232,8 +232,8 @@ UNIT_TEST(DiffWithRollingHashCompletelyDifferentStrings) char const dst[] = "abcdefgh"; MemReader srcReader(src, ARRAY_SIZE(src) - 1); MemReader dstReader(dst, ARRAY_SIZE(dst) - 1); - DDVector srcV(srcReader, srcReader.Size()); // since sizeof(char) == 1 - DDVector dstV(dstReader, dstReader.Size()); // since sizeof(char) == 1 + DDVector srcV(srcReader); // since sizeof(char) == 1 + DDVector dstV(dstReader); // since sizeof(char) == 1 diff::RollingHashDiffer differ(3); @@ -248,8 +248,8 @@ UNIT_TEST(DiffWithRollingHash1) char const dst[] = "abcdfeghikkklmnop"; MemReader srcReader(src, ARRAY_SIZE(src) - 1); MemReader dstReader(dst, ARRAY_SIZE(dst) - 1); - DDVector srcV(srcReader, srcReader.Size()); // since sizeof(char) == 1 - DDVector dstV(dstReader, dstReader.Size()); // since sizeof(char) == 1 + DDVector srcV(srcReader); // since sizeof(char) == 1 + DDVector dstV(dstReader); // since sizeof(char) == 1 diff::RollingHashDiffer differ(3); @@ -264,8 +264,8 @@ UNIT_TEST(DiffWithRollingHash2) char const dst[] = "abxdeflmnop"; MemReader srcReader(src, ARRAY_SIZE(src) - 1); MemReader dstReader(dst, ARRAY_SIZE(dst) - 1); - DDVector srcV(srcReader, srcReader.Size()); // since sizeof(char) == 1 - DDVector dstV(dstReader, dstReader.Size()); // since sizeof(char) == 1 + DDVector srcV(srcReader); // since sizeof(char) == 1 + DDVector dstV(dstReader); // since sizeof(char) == 1 diff::RollingHashDiffer differ(3); diff --git a/coding/dd_vector.hpp b/coding/dd_vector.hpp index ea578a8f04..3661c18f64 100644 --- a/coding/dd_vector.hpp +++ b/coding/dd_vector.hpp @@ -25,8 +25,15 @@ public: DDVector() : m_Size(0) {} - DDVector(TReader const & reader, size_type size) : m_reader(reader), m_Size(size) + explicit DDVector(TReader const & reader) : m_reader(reader) { + InitSize(); + } + + void Init(TReader const & reader) + { + m_reader = reader; + InitSize(); } size_type size() const @@ -36,10 +43,7 @@ public: T const operator [] (size_type i) const { - ASSERT_LESS(i, m_Size, ()); - T result; - this->Read(i, result); - return result; + return ReadPrimitiveFromPos(m_reader, static_cast(i) * sizeof(T)); } class const_iterator : public iterator_facade< @@ -69,7 +73,7 @@ public: ASSERT_LESS(m_I, m_Size, (m_bValueRead)); if (!m_bValueRead) { - ReadFromPos(*m_pReader, m_I * sizeof(T), &m_Value, sizeof(T)); + m_Value = ReadPrimitiveFromPos(*m_pReader, static_cast(m_I) * sizeof(T)); m_bValueRead = true; } return m_Value; @@ -157,6 +161,13 @@ public: } private: + void InitSize() + { + // TODO: Check that reader.Size() % sizeof(T) == 0 + m_Size = m_reader.Size() / sizeof(T); + } + + // TODO: Refactor me to use Reader by pointer. ReaderType m_reader; size_type m_Size; }; diff --git a/coding/polymorph_reader.hpp b/coding/polymorph_reader.hpp index 723077c301..a22d660f6f 100644 --- a/coding/polymorph_reader.hpp +++ b/coding/polymorph_reader.hpp @@ -5,7 +5,8 @@ class PolymorphReader { public: - explicit PolymorphReader(Reader const * pReader) : m_pReader(pReader) + // Takes ownership of pReader + explicit PolymorphReader(Reader const * pReader = 0) : m_pReader(pReader) { } diff --git a/words/sloynik_index.cpp b/words/sloynik_index.cpp index 7fb9831e61..1f7da4b979 100644 --- a/words/sloynik_index.cpp +++ b/words/sloynik_index.cpp @@ -19,8 +19,7 @@ sl::SortedIndex::SortedIndex(Dictionary const & dictionary, Reader const * pIndexReader, StrFn const & strFn) : m_Dictionary(dictionary), m_StrFn(strFn), - m_SortedVector( PolymorphReader(pIndexReader), - static_cast(pIndexReader->Size() / sizeof(DicId))) + m_SortedVector(PolymorphReader(pIndexReader)) { STATIC_ASSERT(sizeof(sl::SortedIndex::DicId) == 3); }