00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
00017 #ifndef VCSN_DESIGN_PATTERN_DEFAULT_OPS_HH
00018 # define VCSN_DESIGN_PATTERN_DEFAULT_OPS_HH
00019 
00029 # include <vaucanson/design_pattern/predecls.hh>
00030 # include <vaucanson/misc/selectors.hh>
00031 
00032 namespace vcsn {
00033 
00037   
00038 
00039 
00040 
00047   template<typename S, typename T>
00048   bool op_contains(const Structure<S>& set, const T& value);
00049 
00050   
00051 
00052 
00053 
00055   template<typename S, typename T, typename U>
00056   bool op_eq(const Structure<S>&,
00057              const T& v1,
00058              const U& v2);
00059 
00061   template<typename S, typename V, typename T, typename U>
00062   bool op_eq(const Structure<S>&,
00063              const Structure<V>&,
00064              const T& v1,
00065              const U& v2);
00066 
00068   template<typename S, typename T, typename U>
00069   bool op_lt(const Structure<S>&,
00070              const T& v1,
00071              const U& v2);
00072 
00074   template<typename S, typename V, typename T, typename U>
00075   bool op_lt(const Structure<S>&,
00076              const Structure<V>&,
00077              const T& v1,
00078              const U& v2);
00079 
00080   
00081 
00082 
00083 
00085   template<typename S, typename R, typename T>
00086   R op_convert(const Structure<S> &se,
00087                SELECTOR(R), const T& data);
00088 
00090   template<typename S, typename T>
00091   const T& op_convert(const Structure<S>& se,
00092                       SELECTOR(T), const T& from_data);
00093 
00095   template<typename S, typename T>
00096   const T& op_convert(const Structure<S>& se, SELECTOR(T),
00097                       const Structure<S>& from_se, const T& from_data);
00098 
00099   
00100 
00101 
00102 
00104   template<typename S, typename T>
00105   T op_default(const Structure<S>& se, SELECTOR(T));
00106 
00107 
00108   
00109 
00110 
00111 
00113   template<typename S, typename T>
00114   void op_swap(const Structure<S>& se, T& v1, T& v2);
00115 
00116   
00117 
00118 
00119 
00121   template<typename S, typename T, typename U>
00122   void op_assign(const Structure<S>& s,
00123                  T& dst, const U& src);
00124 
00129   template<typename S, typename T, typename U>
00130   void op_assign(const Structure<S>& s1,
00131                  const Structure<S>& s2,
00132                  T& dst,
00133                  const U& src);
00134 
00136   template<typename S, typename T, typename U>
00137   void op_in_add(const Structure<S>& s1,
00138                  const Structure<S>& s2,
00139                  T& dst,
00140                  const U& arg);
00141 
00143   template<typename S, typename T, typename U>
00144   void op_in_sub(const Structure<S>& s1,
00145                  const Structure<S>& s2,
00146                  T& dst,
00147                  const U& arg);
00148 
00150   template<typename S, typename T, typename U>
00151   void op_in_mul(const Structure<S>& s1,
00152                  const Structure<S>& s2,
00153                  T& dst,
00154                  const U& arg);
00155 
00157   template<typename S, typename T, typename U>
00158   void op_in_div(const Structure<S>& s1,
00159                  const Structure<S>& s2,
00160                  T& dst,
00161                  const U& arg);
00162 
00164   template<typename S, typename T, typename U>
00165   void op_in_mod(const Structure<S>& s1,
00166                  const Structure<S>& s2,
00167                  T& dst,
00168                  const U& arg);
00169 
00171   template<typename S, typename T, typename U>
00172   T op_add(const Structure<S>& s1,
00173            const Structure<S>& s2,
00174            const T& v1,
00175            const U& v2);
00176 
00178   template<typename S, typename T, typename U>
00179   T op_sub(const Structure<S>& s1,
00180            const Structure<S>& s2,
00181            const T& v1,
00182            const U& v2);
00183 
00185   template<typename S, typename T, typename U>
00186   T op_mul(const Structure<S>& s1,
00187            const Structure<S>& s2,
00188            const T& v1,
00189            const U& v2);
00190 
00192   template<typename S, typename T, typename U>
00193   T op_div(const Structure<S>& s1,
00194            const Structure<S>& s2,
00195            const T& v1,
00196            const U& v2);
00197 
00199   template<typename S, typename T, typename U>
00200   T op_mod(const Structure<S>& s1,
00201            const Structure<S>& s2,
00202            const T& v1,
00203            const U& v2);
00204 
00206   template<typename S, typename St, typename T>
00207   St& op_rin(const Structure<S>& s, St& st, const T& v);
00208 
00210   template<typename S, typename St, typename T>
00211   St& op_rout(const Structure<S>& s, St& st, const T& v);
00212 
00216 } 
00217 
00218 # if !defined VCSN_USE_INTERFACE_ONLY || defined VCSN_USE_LIB
00219 #  include <vaucanson/design_pattern/default_ops.hxx>
00220 # endif // VCSN_USE_INTERFACE_ONLY
00221 
00222 #endif // ! VCSN_DESIGN_PATTERN_DEFAULT_OPS_HH