blob: 0a3c714b923fd3e7514b20e4e37e2caeec8764aa (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
|
// Copyright Vespa.ai. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
#include "docidandfeatures.h"
#include <cassert>
namespace search::index {
DocIdAndFeatures::DocIdAndFeatures()
: _doc_id(0),
_field_length(1),
_num_occs(1),
_elements(),
_word_positions(),
_blob(),
_bit_offset(0u),
_bit_length(0u),
_has_raw_data(false)
{
}
DocIdAndFeatures::DocIdAndFeatures(const DocIdAndFeatures &) = default;
DocIdAndFeatures & DocIdAndFeatures::operator = (const DocIdAndFeatures &) = default;
DocIdAndFeatures::~DocIdAndFeatures() = default;
void
DocIdAndPosOccFeatures::addNextOcc(uint32_t elementId, uint32_t wordPos, int32_t elementWeight, uint32_t elementLen)
{
assert(wordPos < elementLen);
if (_elements.empty() || elementId > _elements.back().getElementId()) {
_elements.emplace_back(elementId, elementWeight, elementLen);
} else {
assert(elementId == _elements.back().getElementId());
assert(elementWeight == _elements.back().getWeight());
assert(elementLen == _elements.back().getElementLen());
}
assert(_elements.back().getNumOccs() == 0 ||
wordPos > _word_positions.back().getWordPos());
_elements.back().incNumOccs();
_word_positions.emplace_back(wordPos);
}
}
|