TTTT Analysis 0.1

filter.hpp
Go to the documentation of this file.
1
37 #ifndef filter_h
38 #define filter_h
39 #include <iostream>
40 #include <functional>
41 #include "value.hpp"
42 namespace fv {
43
44 class ObsFilter : public DerivedValue<bool>{
45 private:
46 Function<bool()>& filter_function;
47
48 void update_value(){
49 value = filter_function();
50 }
51
52 void verify_integrity(){ };
53
54 public:
55 ObsFilter(const std::string& name, std::function<bool()> filter_function, const std::string& impl="")
56 :DerivedValue<bool>(name),
57 filter_function(GenFunction::register_function<bool()>("filter::"+name, filter_function, impl)){ }
58
62 ObsFilter* operator*(ObsFilter *f){
63 auto new_name = this->get_name() + "&&" + f->get_name();
64 return new ObsFilter(new_name, [this, f](){return this->get_value() && f->get_value();});
65 }
66
70 ObsFilter* operator+(ObsFilter *f){
71 auto new_name = this->get_name() + "||" + f->get_name();
72 return new ObsFilter(new_name, [this, f](){return this->get_value() || f->get_value();});
73 }
74
77 ObsFilter* operator!(){
78 auto new_name = std::string("!(") + this->get_name() + std::string(")");
79 return new ObsFilter(new_name, [this](){return !this->get_value();});
80 }
81 };
82
83 template <typename T>
84 class RangeObsFilter : public ObsFilter{
85 private:
86 public:
87 RangeObsFilter(const std::string name, Value<T>* test_value, T range_low, T range_high):
88 ObsFilter(name, [test_value, range_low, range_high]{
89 T val = test_value->get_value();
90 return (val >= range_low) && (val < range_high);
91 }) { }
92 };
93 }
94 #endif // filter_h
fv::DerivedValue< bool >::get_value
bool & get_value()
Definition: value.hpp:516
fv
The namespace containing all filval classes and functions.
Definition: api.hpp:38