Vaucanson 1.4
|
00001 // default_ops.hh: this file is part of the Vaucanson project. 00002 // 00003 // Vaucanson, a generic library for finite state machines. 00004 // 00005 // Copyright (C) 2001, 2002, 2003, 2004, 2005 The Vaucanson Group. 00006 // 00007 // This program is free software; you can redistribute it and/or 00008 // modify it under the terms of the GNU General Public License 00009 // as published by the Free Software Foundation; either version 2 00010 // of the License, or (at your option) any later version. 00011 // 00012 // The complete GNU General Public Licence Notice can be found as the 00013 // `COPYING' file in the root directory. 00014 // 00015 // The Vaucanson Group consists of people listed in the `AUTHORS' file. 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 | Structure::contains | 00039 `--------------------*/ 00040 00047 template<typename S, typename T> 00048 bool op_contains(const Structure<S>& set, const T& value); 00049 00050 /*---------------------. 00051 | Standard comparisons | 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 | Conversions | 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 | Default construction | 00101 `---------------------*/ 00102 00104 template<typename S, typename T> 00105 T op_default(const Structure<S>& se, SELECTOR(T)); 00106 00107 00108 /*-----. 00109 | Swap | 00110 `-----*/ 00111 00113 template<typename S, typename T> 00114 void op_swap(const Structure<S>& se, T& v1, T& v2); 00115 00116 /*-----------. 00117 | Assignment | 00118 `-----------*/ 00119 00121 template<typename S, typename T, typename U> 00122 void 00123 op_assign(const Structure<S>& s, 00124 T& dst, const U& src); 00125 00130 template<typename S, typename T, typename U> 00131 void op_assign(const Structure<S>& s1, 00132 const Structure<S>& s2, 00133 T& dst, 00134 const U& src); 00135 00137 template<typename S, typename T, typename U> 00138 void op_in_add(const Structure<S>& s1, 00139 const Structure<S>& s2, 00140 T& dst, 00141 const U& arg); 00142 00144 template<typename S, typename T, typename U> 00145 void op_in_sub(const Structure<S>& s1, 00146 const Structure<S>& s2, 00147 T& dst, 00148 const U& arg); 00149 00151 template<typename S, typename T, typename U> 00152 void op_in_mul(const Structure<S>& s1, 00153 const Structure<S>& s2, 00154 T& dst, 00155 const U& arg); 00156 00158 template<typename S, typename T, typename U> 00159 void op_in_div(const Structure<S>& s1, 00160 const Structure<S>& s2, 00161 T& dst, 00162 const U& arg); 00163 00165 template<typename S, typename T, typename U> 00166 void op_in_mod(const Structure<S>& s1, 00167 const Structure<S>& s2, 00168 T& dst, 00169 const U& arg); 00170 00172 template<typename S, typename T, typename U> 00173 T op_add(const Structure<S>& s1, 00174 const Structure<S>& s2, 00175 const T& v1, 00176 const U& v2); 00177 00179 template<typename S, typename T, typename U> 00180 T op_sub(const Structure<S>& s1, 00181 const Structure<S>& s2, 00182 const T& v1, 00183 const U& v2); 00184 00186 template<typename S, typename T, typename U> 00187 T op_mul(const Structure<S>& s1, 00188 const Structure<S>& s2, 00189 const T& v1, 00190 const U& v2); 00191 00193 template<typename S, typename T, typename U> 00194 T op_div(const Structure<S>& s1, 00195 const Structure<S>& s2, 00196 const T& v1, 00197 const U& v2); 00198 00200 template<typename S, typename T, typename U> 00201 T op_mod(const Structure<S>& s1, 00202 const Structure<S>& s2, 00203 const T& v1, 00204 const U& v2); 00205 00207 template<typename S, typename St, typename T> 00208 St& op_rin(const Structure<S>& s, St& st, const T& v); 00209 00211 template<typename S, typename St, typename T> 00212 St& op_rout(const Structure<S>& s, St& st, const T& v); 00213 00217 } // vcsn 00218 00219 # if !defined VCSN_USE_INTERFACE_ONLY || defined VCSN_USE_LIB 00220 # include <vaucanson/design_pattern/default_ops.hxx> 00221 # endif // VCSN_USE_INTERFACE_ONLY 00222 00223 #endif // ! VCSN_DESIGN_PATTERN_DEFAULT_OPS_HH