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  public:
53  ObsFilter(const std::string& name, std::function<bool()> filter_function, const std::string& impl="")
54  :DerivedValue<bool>(name),
55  filter_function(GenFunction::register_function<bool()>("filter::"+name, filter_function, impl)){ }
56 };
57 
60 ObsFilter* all(const std::vector<ObsFilter*>&& fs){
61  if(fs.size() == 0){
62  return nullptr;
63  } else{
64  std::stringstream ss;
65  ss << fs[0]->get_name();
66  for(size_t i=1; i<fs.size(); i++) ss << "AND" << fs[i]->get_name();
67  return new ObsFilter(ss.str(), [fs](){
68  return std::all_of(std::begin(fs), std::end(fs), [](ObsFilter* f){return f->get_value();});
69  });
70  }
71 }
72 
75 ObsFilter* any(const std::vector<ObsFilter*>&& fs){
76  if(fs.size() == 0){
77  return nullptr;
78  } else{
79  std::stringstream ss;
80  ss << fs[0]->get_name();
81  for(size_t i=1; i<fs.size(); i++) ss << "OR" << fs[i]->get_name();
82  return new ObsFilter(ss.str(), [fs](){
83  return std::any_of(std::begin(fs), std::end(fs), [](ObsFilter* f){return f->get_value();});
84  });
85  }
86 }
87 
90 ObsFilter* all(ObsFilter *f1, ObsFilter *f2){
91  return all({f1, f2});
92 }
93 
96 ObsFilter* any(ObsFilter *f1, ObsFilter *f2){
97  return any({f1, f2});
98 }
99 
100 }
101 #endif // filter_h
ObsFilter * all(const std::vector< ObsFilter *> &&fs)
Return a new filter that is the conjuction of a vector of source filters.
Definition: filter.hpp:60
The namespace containing all filval classes and functions.
Definition: api.hpp:46
ObsFilter * any(const std::vector< ObsFilter *> &&fs)
Return a new filter that is the disjunction of a vector of source filters.
Definition: filter.hpp:75