aboutsummaryrefslogtreecommitdiffstats
path: root/searchlib/src/vespa/searchlib/bitcompression/posocc_fields_params.h
blob: 8748557e5a74e6a1b4e0b057eada2dac192580e3 (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
43
44
45
46
// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.

#pragma once

#include "posocc_field_params.h"
#include <vector>

namespace search::bitcompression {

class PosOccFieldsParams
{
    // Cache pointers.
    uint32_t _numFields;
    const PosOccFieldParams *_fieldParams;

    // Storage
    std::vector<PosOccFieldParams> _params;

public:
    using PostingListParams = index::PostingListParams;
    using Schema = index::Schema;

    PosOccFieldsParams();
    PosOccFieldsParams(const PosOccFieldsParams &rhs);

    PosOccFieldsParams &operator=(const PosOccFieldsParams &rhs);
    bool operator==(const PosOccFieldsParams &rhs) const;

    void cacheParamsRef() {
        _numFields = _params.size();
        _fieldParams = _params.empty() ? nullptr : &_params[0];
    }

    void assertCachedParamsRef() const;

    uint32_t getNumFields() const { return _numFields; }
    const PosOccFieldParams *getFieldParams() const { return _fieldParams; }
    void getParams(PostingListParams &params) const;
    void setParams(const PostingListParams &params);
    void setSchemaParams(const Schema &schema, const uint32_t indexId);
    void readHeader(const vespalib::GenericHeader &header, const vespalib::string &prefix);
    void writeHeader(vespalib::GenericHeader &header, const vespalib::string &prefix) const;
    void set_field_length_info(const index::FieldLengthInfo &field_length_info);
};

}