diff options
author | Haavard <havardpe@yahoo-inc.com> | 2016-10-13 07:32:23 +0000 |
---|---|---|
committer | Haavard <havardpe@yahoo-inc.com> | 2016-10-17 12:10:37 +0000 |
commit | d472be0418529fbcaa60cf9e5bc89b3cd909217a (patch) | |
tree | 0aa8fae72ef0a69cb72f1985d849e53f6c29e5e1 /vespalib/src | |
parent | 71cfd71c09109d9518cfd1192b37f2de3e4a57a8 (diff) |
generic type predicate aggregation
Diffstat (limited to 'vespalib/src')
-rw-r--r-- | vespalib/src/vespa/vespalib/eval/node_types.cpp | 11 | ||||
-rw-r--r-- | vespalib/src/vespa/vespalib/eval/node_types.h | 14 |
2 files changed, 13 insertions, 12 deletions
diff --git a/vespalib/src/vespa/vespalib/eval/node_types.cpp b/vespalib/src/vespa/vespalib/eval/node_types.cpp index acd8d7beca1..6bdb61a6bb7 100644 --- a/vespalib/src/vespa/vespalib/eval/node_types.cpp +++ b/vespalib/src/vespa/vespalib/eval/node_types.cpp @@ -297,16 +297,5 @@ NodeTypes::get_type(const nodes::Node &node) const return pos->second; } -bool -NodeTypes::all_types_are_double() const -{ - for (const auto &entry: _type_map) { - if (!entry.second.is_double()) { - return false; - } - } - return (_type_map.size() > 0); -} - } // namespace vespalib::eval } // namespace vespalib diff --git a/vespalib/src/vespa/vespalib/eval/node_types.h b/vespalib/src/vespa/vespalib/eval/node_types.h index 1957accd959..ed33eb59447 100644 --- a/vespalib/src/vespa/vespalib/eval/node_types.h +++ b/vespalib/src/vespa/vespalib/eval/node_types.h @@ -27,7 +27,19 @@ public: NodeTypes(); NodeTypes(const Function &function, const std::vector<ValueType> &input_types); const ValueType &get_type(const nodes::Node &node) const; - bool all_types_are_double() const; + template <typename P> + bool check_types(const P &pred) const { + for (const auto &entry: _type_map) { + if (!pred(entry.second)) { + return false; + } + } + return (_type_map.size() > 0); + } + bool all_types_are_double() const { + return check_types([](const ValueType &type) + { return type.is_double(); }); + } }; } // namespace vespalib::eval |