00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #ifndef __ALLTD_HH
00018 # define __ALLTD_HH
00019
00020 # include "all.hh"
00021 # include "../strategies.hh"
00022
00023 namespace aurelia {
00024
00027 template <typename S>
00028 struct alltd_strategy {
00029 private: S s;
00030 public: alltd_strategy(const S& s): s(s) {}
00031 template <typename T>
00032 T operator()(const T& term) const {
00033 typedef typename strategy_concept<typename strategy_model<S, T>::model>
00034 ::check require;
00035
00036 return (s + all(*this))(term);
00037 }
00038 };
00039
00043 template <typename S>
00044 alltd_strategy<S> alltd(const S& s) {
00045 return alltd_strategy<S>(s);
00046 }
00047
00048 }
00049
00050 #endif