aboutsummaryrefslogtreecommitdiffstats
path: root/searchlib
diff options
context:
space:
mode:
authorHaavard <havardpe@yahoo-inc.com>2016-12-08 14:41:21 +0000
committerHaavard <havardpe@yahoo-inc.com>2016-12-08 14:41:21 +0000
commit536eb8d55ee4867d059c87269302dc281d7b31cf (patch)
tree64c5976e437aa3799d9e690e12d348e52c539936 /searchlib
parent8feba6199b5858a8db842a19532f6cdea71243a5 (diff)
add information about which features are objects
Diffstat (limited to 'searchlib')
-rw-r--r--searchlib/src/vespa/searchlib/fef/feature_resolver.h8
-rw-r--r--searchlib/src/vespa/searchlib/fef/rank_program.cpp4
2 files changed, 9 insertions, 3 deletions
diff --git a/searchlib/src/vespa/searchlib/fef/feature_resolver.h b/searchlib/src/vespa/searchlib/fef/feature_resolver.h
index aa3eb01f2ae..cdb65c80a56 100644
--- a/searchlib/src/vespa/searchlib/fef/feature_resolver.h
+++ b/searchlib/src/vespa/searchlib/fef/feature_resolver.h
@@ -22,17 +22,21 @@ private:
friend class RankProgram; // inner class with decoupled compilation
std::vector<vespalib::string> _names;
std::vector<const NumberOrObject *> _features;
- FeatureResolver(size_t size_hint) : _names(), _features() {
+ std::vector<bool> _is_object;
+ FeatureResolver(size_t size_hint) : _names(), _features(), _is_object() {
_names.reserve(size_hint);
_features.reserve(size_hint);
+ _is_object.reserve(size_hint);
}
- void add(const vespalib::string &name, const NumberOrObject *feature) {
+ void add(const vespalib::string &name, const NumberOrObject *feature, bool is_object) {
_names.push_back(name);
_features.push_back(feature);
+ _is_object.push_back(is_object);
}
public:
size_t num_features() const { return _names.size(); }
const vespalib::string &name_of(size_t i) const { return _names[i]; }
+ bool is_object(size_t i) const { return _is_object[i]; }
const feature_t *resolve_number(size_t i) const { return &(_features[i]->as_number); }
const vespalib::eval::Value::CREF *resolve_object(size_t i) const { return &(_features[i]->as_object); }
};
diff --git a/searchlib/src/vespa/searchlib/fef/rank_program.cpp b/searchlib/src/vespa/searchlib/fef/rank_program.cpp
index 59671e42782..6217c5ee9d5 100644
--- a/searchlib/src/vespa/searchlib/fef/rank_program.cpp
+++ b/searchlib/src/vespa/searchlib/fef/rank_program.cpp
@@ -118,7 +118,9 @@ RankProgram::resolve(const std::vector<vespalib::string> &names,
{
FeatureResolver result(names.size());
for (size_t i = 0; i < names.size(); ++i) {
- result.add(names[i], match_data().resolve_raw(handles[i]));
+ result.add(names[i],
+ match_data().resolve_raw(handles[i]),
+ match_data().feature_is_object(handles[i]));
}
return result;
}