forked from organicmaps/organicmaps
Minor refactoring.
This commit is contained in:
parent
6dd8a1af0b
commit
8a6c4f394e
5 changed files with 39 additions and 28 deletions
|
@ -6,14 +6,14 @@
|
|||
|
||||
UNIT_TEST(DDVector)
|
||||
{
|
||||
vector<unsigned char> data;
|
||||
vector<uint16_t> data;
|
||||
// Push size. Big endian is used.
|
||||
data.push_back(1);
|
||||
data.push_back(2);
|
||||
data.push_back(3);
|
||||
typedef DDVector<unsigned char, MemReader> Vector;
|
||||
typedef DDVector<uint16_t, MemReader> Vector;
|
||||
MemReader reader(reinterpret_cast<char const *>(&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], ());
|
||||
|
|
|
@ -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<char, MemReader> srcV(srcReader, srcReader.Size()); // since sizeof(char) == 1
|
||||
DDVector<char, MemReader> dstV(dstReader, dstReader.Size()); // since sizeof(char) == 1
|
||||
DDVector<char, MemReader> srcV(srcReader); // since sizeof(char) == 1
|
||||
DDVector<char, MemReader> 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<char, MemReader> srcV(srcReader, srcReader.Size()); // since sizeof(char) == 1
|
||||
DDVector<char, MemReader> dstV(dstReader, dstReader.Size()); // since sizeof(char) == 1
|
||||
DDVector<char, MemReader> srcV(srcReader); // since sizeof(char) == 1
|
||||
DDVector<char, MemReader> 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<char, MemReader> srcV(srcReader, srcReader.Size()); // since sizeof(char) == 1
|
||||
DDVector<char, MemReader> dstV(dstReader, dstReader.Size()); // since sizeof(char) == 1
|
||||
DDVector<char, MemReader> srcV(srcReader); // since sizeof(char) == 1
|
||||
DDVector<char, MemReader> 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<char, MemReader> srcV(srcReader, srcReader.Size()); // since sizeof(char) == 1
|
||||
DDVector<char, MemReader> dstV(dstReader, dstReader.Size()); // since sizeof(char) == 1
|
||||
DDVector<char, MemReader> srcV(srcReader); // since sizeof(char) == 1
|
||||
DDVector<char, MemReader> 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<char, MemReader> srcV(srcReader, srcReader.Size()); // since sizeof(char) == 1
|
||||
DDVector<char, MemReader> dstV(dstReader, dstReader.Size()); // since sizeof(char) == 1
|
||||
DDVector<char, MemReader> srcV(srcReader); // since sizeof(char) == 1
|
||||
DDVector<char, MemReader> dstV(dstReader); // since sizeof(char) == 1
|
||||
|
||||
diff::RollingHashDiffer<diff::SimpleReplaceDiffer, RollingHasher64> 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<char, MemReader> srcV(srcReader, srcReader.Size()); // since sizeof(char) == 1
|
||||
DDVector<char, MemReader> dstV(dstReader, dstReader.Size()); // since sizeof(char) == 1
|
||||
DDVector<char, MemReader> srcV(srcReader); // since sizeof(char) == 1
|
||||
DDVector<char, MemReader> dstV(dstReader); // since sizeof(char) == 1
|
||||
|
||||
diff::RollingHashDiffer<diff::SimpleReplaceDiffer, RollingHasher64> 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<char, MemReader> srcV(srcReader, srcReader.Size()); // since sizeof(char) == 1
|
||||
DDVector<char, MemReader> dstV(dstReader, dstReader.Size()); // since sizeof(char) == 1
|
||||
DDVector<char, MemReader> srcV(srcReader); // since sizeof(char) == 1
|
||||
DDVector<char, MemReader> dstV(dstReader); // since sizeof(char) == 1
|
||||
|
||||
diff::RollingHashDiffer<diff::SimpleReplaceDiffer, RollingHasher64> 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<char, MemReader> srcV(srcReader, srcReader.Size()); // since sizeof(char) == 1
|
||||
DDVector<char, MemReader> dstV(dstReader, dstReader.Size()); // since sizeof(char) == 1
|
||||
DDVector<char, MemReader> srcV(srcReader); // since sizeof(char) == 1
|
||||
DDVector<char, MemReader> dstV(dstReader); // since sizeof(char) == 1
|
||||
|
||||
diff::RollingHashDiffer<diff::SimpleReplaceDiffer, RollingHasher64> differ(3);
|
||||
|
||||
|
|
|
@ -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<T>(m_reader, static_cast<uint64_t>(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<T>(*m_pReader, static_cast<uint64_t>(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;
|
||||
};
|
||||
|
|
|
@ -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)
|
||||
{
|
||||
}
|
||||
|
||||
|
|
|
@ -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<DDVectorType::size_type>(pIndexReader->Size() / sizeof(DicId)))
|
||||
m_SortedVector(PolymorphReader(pIndexReader))
|
||||
{
|
||||
STATIC_ASSERT(sizeof(sl::SortedIndex::DicId) == 3);
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue