aboutsummaryrefslogtreecommitdiffstats
path: root/searchlib/src/vespa/searchlib/index/docidandfeatures.cpp
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);
}

}