Searcher::add_reader() rejects duplicate readers

A O(N) linear search was added to `Searcher::add_reader()` deliberately.
This doesn't seem to be an operation that may lead to performance
problems.
This commit is contained in:
Veloman Yunkan 2021-12-11 16:34:16 +04:00 committed by Matthieu Gautier
parent ff050dc811
commit 0be00b791f
2 changed files with 21 additions and 1 deletions

View File

@ -94,6 +94,12 @@ bool Searcher::add_reader(Reader* reader)
if (!reader->hasFulltextIndex()) {
return false;
}
for ( const Reader* const existing_reader : readers ) {
if ( existing_reader->getZimFilePath() == reader->getZimFilePath() )
return false;
}
this->readers.push_back(reader);
return true;
}

View File

@ -5,6 +5,20 @@
namespace kiwix
{
TEST(Searcher, add_reader) {
Reader reader1("./test/example.zim");
Reader reader2("./test/example.zim");
Reader reader3("./test/../test/example.zim");
Searcher searcher;
ASSERT_TRUE (searcher.add_reader(&reader1));
ASSERT_FALSE(searcher.add_reader(&reader1));
ASSERT_FALSE(searcher.add_reader(&reader2));
// equivalence of resolved paths is not checked by Searcher::add_reader
ASSERT_TRUE(searcher.add_reader(&reader3));
}
TEST(Searcher, search) {
Reader reader("./test/example.zim");
@ -64,4 +78,4 @@ TEST(Searcher, incrementalRange) {
ASSERT_EQ(suggCount, 50);
}
}
}