aboutsummaryrefslogtreecommitdiffstats
path: root/searchlib/src/vespa/searchlib/test/mock_attribute_manager.cpp
blob: 34d82e4eca92b0938662f1af1fb1bb3b7ca0f86e (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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
// Copyright Vespa.ai. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.

#include "mock_attribute_manager.h"

namespace search::attribute::test {

AttributeVector::SP
MockAttributeManager::findAttribute(const vespalib::string &name) const {
    auto itr = _attributes.find(name);
    if (itr != _attributes.end()) {
        return itr->second;
    }
    return AttributeVector::SP();
}


MockAttributeManager::MockAttributeManager() = default;
MockAttributeManager::~MockAttributeManager() = default;

AttributeGuard::UP
MockAttributeManager::getAttribute(const vespalib::string &name) const {
    AttributeVector::SP attr = findAttribute(name);
    return AttributeGuard::UP(new AttributeGuard(attr));
}

void
MockAttributeManager::asyncForAttribute(const vespalib::string &, std::unique_ptr<IAttributeFunctor>) const {
    throw std::runtime_error("search::MockAttributeManager::asyncForAttribute not implemented.");
}

std::unique_ptr<AttributeReadGuard>
MockAttributeManager::getAttributeReadGuard(const vespalib::string &name, bool stableEnumGuard) const {
    AttributeVector::SP attr = findAttribute(name);
    if (attr) {
        return attr->makeReadGuard(stableEnumGuard);
    } else {
        return std::unique_ptr<AttributeReadGuard>();
    }
}

void
MockAttributeManager::getAttributeList(std::vector<AttributeGuard> &list) const {
    list.reserve(_attributes.size());
    for (const auto &attr : _attributes) {
        list.push_back(AttributeGuard(attr.second));
    }
}

IAttributeContext::UP
MockAttributeManager::createContext() const {
    return IAttributeContext::UP(new AttributeContext(*this));
}

void
MockAttributeManager::addAttribute(const vespalib::string &name, const AttributeVector::SP &attr) {
    attr->addReservedDoc();
    _attributes[name] = attr;
}
void
MockAttributeManager::addAttribute(const AttributeVector::SP &attr) {
    addAttribute(attr->getName(), attr);
}

std::shared_ptr<attribute::ReadableAttributeVector>
MockAttributeManager::readable_attribute_vector(const string& name) const {
    return findAttribute(name);
}

}