summaryrefslogtreecommitdiffstats
path: root/searchlib
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2020-05-15 22:54:10 +0000
committerHenning Baldersheim <balder@yahoo-inc.com>2020-05-15 22:54:10 +0000
commit962e279410108b7b04720803554406680f849dbd (patch)
treea18b3697442413e7549ad58e6401287b9f8e69b9 /searchlib
parent14b1d4e23af242a3a33c032d8c40412df6368fc9 (diff)
If we need a dynamic allocation, just as well take 1k giving 42 entries.
Diffstat (limited to 'searchlib')
-rw-r--r--searchlib/src/tests/fef/fef_test.cpp15
-rw-r--r--searchlib/src/vespa/searchlib/fef/termfieldmatchdata.cpp5
2 files changed, 11 insertions, 9 deletions
diff --git a/searchlib/src/tests/fef/fef_test.cpp b/searchlib/src/tests/fef/fef_test.cpp
index 4d1163de6ee..50f8a770618 100644
--- a/searchlib/src/tests/fef/fef_test.cpp
+++ b/searchlib/src/tests/fef/fef_test.cpp
@@ -67,12 +67,11 @@ TEST("test TermFieldMatchDataAppend")
EXPECT_EQUAL(1u, tmd.capacity());
tmd.appendPosition(pos);
EXPECT_EQUAL(2u, tmd.size());
- EXPECT_EQUAL(2u, tmd.capacity());
+ EXPECT_EQUAL(42u, tmd.capacity());
uint32_t resizeCount(0);
const TermFieldMatchDataPosition * prev = tmd.begin();
for (size_t i(2); i < std::numeric_limits<uint16_t>::max(); i++) {
EXPECT_EQUAL(i, tmd.size());
- EXPECT_EQUAL(std::min(size_t(std::numeric_limits<uint16_t>::max()), vespalib::roundUp2inN(i)), tmd.capacity());
tmd.appendPosition(pos);
const TermFieldMatchDataPosition * cur = tmd.begin();
if (cur != prev) {
@@ -80,13 +79,15 @@ TEST("test TermFieldMatchDataAppend")
resizeCount++;
}
}
- EXPECT_EQUAL(15u, resizeCount);
- EXPECT_EQUAL(std::numeric_limits<uint16_t>::max(), tmd.size());
- EXPECT_EQUAL(std::numeric_limits<uint16_t>::max(), tmd.capacity());
- tmd.appendPosition(pos);
- EXPECT_EQUAL(prev, tmd.begin());
+ EXPECT_EQUAL(11u, resizeCount);
EXPECT_EQUAL(std::numeric_limits<uint16_t>::max(), tmd.size());
EXPECT_EQUAL(std::numeric_limits<uint16_t>::max(), tmd.capacity());
+ for (size_t i(0); i < 10; i++) {
+ tmd.appendPosition(pos);
+ EXPECT_EQUAL(prev, tmd.begin());
+ EXPECT_EQUAL(std::numeric_limits<uint16_t>::max(), tmd.size());
+ EXPECT_EQUAL(std::numeric_limits<uint16_t>::max(), tmd.capacity());
+ }
}
TEST("verify size of essential fef classes") {
diff --git a/searchlib/src/vespa/searchlib/fef/termfieldmatchdata.cpp b/searchlib/src/vespa/searchlib/fef/termfieldmatchdata.cpp
index 781135bf246..7e3e0f5e4bc 100644
--- a/searchlib/src/vespa/searchlib/fef/termfieldmatchdata.cpp
+++ b/searchlib/src/vespa/searchlib/fef/termfieldmatchdata.cpp
@@ -104,7 +104,8 @@ TermFieldMatchData::swap(TermFieldMatchData &rhs)
namespace {
-constexpr size_t MAX_ELEMS = std::numeric_limits<uint16_t>::max();
+constexpr size_t MAX_ELEMS = std::numeric_limits<uint16_t>::max();
+constexpr size_t INITIAL_ELEMS = 1024/sizeof(TermFieldMatchDataPosition);
}
@@ -128,7 +129,7 @@ TermFieldMatchData::allocateVector()
{
assert(_sz < 2);
assert(!allocated());
- size_t newSize = 2;
+ size_t newSize = INITIAL_ELEMS;
TermFieldMatchDataPosition * n = new TermFieldMatchDataPosition[newSize];
if (_sz > 0) {
n[0] = *getFixed();