aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2016-10-04 16:32:59 +0000
committerHenning Baldersheim <balder@yahoo-inc.com>2016-10-04 16:32:59 +0000
commit7605687eaa20647c063fd6486332bcab8c97ddde (patch)
tree1849a1f1f47484bb1423d8b9ee1ac99a16bdc3bc
parent499f3af4d68e2d88c87c9e0834dcaa6c7c642d7a (diff)
Set limit for addressable elements to 1T values per size class.
Allow sizeclass up to 4095 to be represented compact.
-rw-r--r--searchlib/src/tests/attribute/multivaluemapping/multivaluemapping_test.cpp15
-rw-r--r--searchlib/src/vespa/searchlib/attribute/multivaluemapping.h4
2 files changed, 14 insertions, 5 deletions
diff --git a/searchlib/src/tests/attribute/multivaluemapping/multivaluemapping_test.cpp b/searchlib/src/tests/attribute/multivaluemapping/multivaluemapping_test.cpp
index 886e457bebe..7be95e0d403 100644
--- a/searchlib/src/tests/attribute/multivaluemapping/multivaluemapping_test.cpp
+++ b/searchlib/src/tests/attribute/multivaluemapping/multivaluemapping_test.cpp
@@ -115,7 +115,7 @@ MultiValueMappingTest::testIndex64()
EXPECT_EQUAL(idx.alternative(), 0u);
EXPECT_EQUAL(idx.vectorIdx(), 6u);
EXPECT_EQUAL(idx.offset(), 1000u);
- EXPECT_EQUAL(idx.idx(), 0x3000003e8ull);
+ EXPECT_EQUAL(idx.idx(), 0x600000003e8ul);
}
{
Index64 idx(15, 1, 134217727);
@@ -123,11 +123,20 @@ MultiValueMappingTest::testIndex64()
EXPECT_EQUAL(idx.alternative(), 1u);
EXPECT_EQUAL(idx.vectorIdx(), 31u);
EXPECT_EQUAL(idx.offset(), 134217727u);
- EXPECT_EQUAL(idx.idx(), 0xf87ffffffull);
+ EXPECT_EQUAL(idx.idx(), 0x1f0007fffffful);
}
{
- EXPECT_EQUAL(Index64::maxValues(), 1023u);
+ Index64 idx(3087, 1, 911134217727ul);
+ EXPECT_EQUAL(idx.values(), 3087u);
+ EXPECT_EQUAL(idx.alternative(), 1u);
+ EXPECT_EQUAL(idx.vectorIdx(), (3087u << 1) + 1);
+ EXPECT_EQUAL(idx.offset(), 911134217727ul);
+ EXPECT_EQUAL(idx.idx(), 0x181fd423d4d5fful);
+ }
+ {
+ EXPECT_EQUAL(Index64::maxValues(), 4095u);
EXPECT_EQUAL(Index64::alternativeSize(), 2u);
+ EXPECT_EQUAL(Index64::offsetSize(), 0x1ul << 40);
}
}
diff --git a/searchlib/src/vespa/searchlib/attribute/multivaluemapping.h b/searchlib/src/vespa/searchlib/attribute/multivaluemapping.h
index 3606e94cf6b..fe3c40c8bf3 100644
--- a/searchlib/src/vespa/searchlib/attribute/multivaluemapping.h
+++ b/searchlib/src/vespa/searchlib/attribute/multivaluemapping.h
@@ -80,12 +80,12 @@ public:
static uint64_t
offsetSize(void)
{
- return 1 << (NUM_OFFSET_BITS);
+ return 1ul << (NUM_OFFSET_BITS);
}
};
typedef Index<uint32_t, 27,4,1> Index32;
-typedef Index<uint64_t, 31,10,1> Index64;
+typedef Index<uint64_t, 40,12,1> Index64;
template <typename T, typename I>
struct MVMTemplateArg {