00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #ifndef __FILTER_HH
00018 # define __FILTER_HH
00019
00020 namespace aurelia {
00021
00022 template <typename Out, typename Strat>
00023 struct filter_strategy {
00024 private:
00025 Strat s;
00026
00027 public:
00028 filter_strategy(const Strat& s): s(s) {}
00029
00030 template <typename T>
00031 Out operator()(const T& t) const {
00032 Out ret;
00033
00034 for (typename T::const_iterator i = t.begin(); i != t.end(); ++i) {
00035 try {
00036 ret.insert(ret.end(), s(*i));
00037 }
00038 catch (failure) {}
00039 }
00040 return ret;
00041 }
00042 };
00043
00044 template <typename Out, typename Strat>
00045 filter_strategy<Out, Strat> filter(const Out&, const Strat& s) {
00046 return filter_strategy<Out, Strat>(s);
00047 }
00048
00049 }
00050
00051 #endif