summaryrefslogtreecommitdiffstats
path: root/vespalib/src
diff options
context:
space:
mode:
authorHaavard <havardpe@yahoo-inc.com>2016-10-13 07:32:23 +0000
committerHaavard <havardpe@yahoo-inc.com>2016-10-17 12:10:37 +0000
commitd472be0418529fbcaa60cf9e5bc89b3cd909217a (patch)
tree0aa8fae72ef0a69cb72f1985d849e53f6c29e5e1 /vespalib/src
parent71cfd71c09109d9518cfd1192b37f2de3e4a57a8 (diff)
generic type predicate aggregation
Diffstat (limited to 'vespalib/src')
-rw-r--r--vespalib/src/vespa/vespalib/eval/node_types.cpp11
-rw-r--r--vespalib/src/vespa/vespalib/eval/node_types.h14
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