Vaucanson 1.4
|
00001 // transpose_view.hxx: 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, 2006 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_AUTOMATA_IMPLEMENTATION_TRANSPOSE_VIEW_HXX 00018 # define VCSN_AUTOMATA_IMPLEMENTATION_TRANSPOSE_VIEW_HXX 00019 00020 # include <vaucanson/automata/implementation/transpose_view.hh> 00021 00022 namespace vcsn { 00023 00024 #define AutoType(Type) \ 00025 typename Element<S, TransposeView<T> >::Type 00026 00027 template <class T> 00028 TransposeView<T>::TransposeView() 00029 {} 00030 00031 template <class T> 00032 TransposeView<T>::TransposeView(const T& object): 00033 IdentityView<T>(object) 00034 {} 00035 00036 template <class T> 00037 TransposeView<T>::TransposeView(T& object): 00038 IdentityView<T>(object) 00039 {} 00040 00041 template <class T> 00042 TransposeView<T>::TransposeView(const TransposeView& t): 00043 IdentityView<T>(t) 00044 {} 00045 00046 template <class S, class T> 00047 Element<S, TransposeView<T> > 00048 transpose_view(Element<S, T>& a) 00049 { 00050 return Element<S, TransposeView<T> > 00051 (a.structure(), TransposeView<T>(a.value())); 00052 } 00053 00054 template <class S, class T> 00055 const Element<S, TransposeView<T> > 00056 transpose_view(const Element<S, T>& a) 00057 { 00058 return Element<S, TransposeView<T> > 00059 (a.structure(), TransposeView<T>(a.value())); 00060 } 00061 00062 template <class S, class T> 00063 const typename automaton_traits<T>::tag_t& 00064 op_get_tag(const AutomataBase<S>& s, const TransposeView<T>& v) 00065 { 00066 return op_get_tag(s, v.object()); 00067 } 00068 00069 template <class S, class T> 00070 typename automaton_traits<T>::tag_t& 00071 op_get_tag(const AutomataBase<S>& s, TransposeView<T>& v) 00072 { 00073 return op_get_tag(s, v.object()); 00074 } 00075 00076 template <class S, class T> 00077 const typename automaton_traits<T>::geometry_t& 00078 op_geometry(const AutomataBase<S>& s, const TransposeView<T>& v) 00079 { 00080 return op_geometry(s, v.object()); 00081 } 00082 00083 template <class S, class T> 00084 typename automaton_traits<T>::geometry_t& 00085 op_geometry(const AutomataBase<S>& s, TransposeView<T>& v) 00086 { 00087 return op_geometry(s, v.object()); 00088 } 00089 00090 template <class S, class T> 00091 bool 00092 op_exists(const AutomataBase<S>& s, const TransposeView<T>& v) 00093 { 00094 return op_exists(s, v.object()); 00095 } 00096 00097 template <class S, class T> 00098 typename automaton_traits<T>::states_t 00099 op_states(const AutomataBase<S>& s, const TransposeView<T>& v) 00100 { 00101 return op_states(s, v.object()); 00102 } 00103 00104 template <class S, class T> 00105 typename automaton_traits<T>::transitions_t 00106 op_transitions(const AutomataBase<S>& s, const TransposeView<T>& v) 00107 { 00108 return op_transitions(s, v.object()); 00109 } 00110 00111 template <class S, class T> 00112 typename automaton_traits<T>::hstate_t 00113 op_add_state(const AutomataBase<S>& s, TransposeView<T>& v) 00114 { 00115 return op_add_state(s, v.object()); 00116 } 00117 00118 template <class S, class T> 00119 typename automaton_traits<T>::hstate_t 00120 op_choose_state(const AutomataBase<S>& s, TransposeView<T>& v) 00121 { 00122 return op_choose_state(s, v.object()); 00123 } 00124 00125 template <class S, class T> 00126 typename automaton_traits<T>::htransition_t 00127 op_add_transition(const AutomataBase<S>& s, TransposeView<T>& v, 00128 const typename automaton_traits<T>::hstate_t& from, 00129 const typename automaton_traits<T>::hstate_t& to, 00130 const typename Element<S, T>::label_t& label) 00131 { 00132 return op_add_transition(s, v.object(), from, to, label); 00133 } 00134 00135 template <class S, class T> 00136 typename automaton_traits<T>::htransition_t 00137 op_add_series_transition(const AutomataBase<S>& s, 00138 TransposeView<T>& v, 00139 const typename automaton_traits<T>::hstate_t& from, 00140 const typename automaton_traits<T>::hstate_t& to, 00141 const typename Element<S, T>::series_set_elt_t& se) 00142 { 00143 return op_add_series_transition(s, v.object(), from, to, se); 00144 } 00145 00146 template <class S, class T> 00147 typename automaton_traits<T>::htransition_t 00148 op_add_spontaneous(const AutomataBase<S>& s, TransposeView<T>& v, 00149 const typename automaton_traits<T>::hstate_t& from, 00150 const typename automaton_traits<T>::hstate_t& to) 00151 { 00152 return op_add_spontaneous(s, v.object(), from, to); 00153 } 00154 00155 template <class S, class T> 00156 typename automaton_traits<T>::htransition_t 00157 op_add_letter_transition(const AutomataBase<S>& s, TransposeView<T>& v, 00158 const typename automaton_traits<T>::hstate_t& from, 00159 const typename automaton_traits<T>::hstate_t& to, 00160 const typename Element<S, T>::letter_t& e) 00161 { 00162 return op_add_letter_transition(s, v.object(), from, to, e); 00163 } 00164 00165 template <class S, class T> 00166 void 00167 op_update(const AutomataBase<S>& s, TransposeView<T>& v, 00168 const typename automaton_traits<T>::htransition_t& e, 00169 const AutoType(label_t)& l) 00170 { 00171 op_update(s, v.object(), e, l); 00172 } 00173 00174 template <class S, class T> 00175 void 00176 op_del_state(const AutomataBase<S>& s, TransposeView<T>& v, 00177 const typename automaton_traits<T>::hstate_t& st) 00178 { 00179 op_del_state(s, v.object(), st); 00180 } 00181 00182 template <class S, class T> 00183 void 00184 op_del_transition(const AutomataBase<S>& s, TransposeView<T>& v, 00185 const typename automaton_traits<T>::htransition_t& e) 00186 { 00187 op_del_transition(s, v.object(), e); 00188 } 00189 00190 template <class S, class T> 00191 bool 00192 op_has_state(const AutomataBase<S>& s, 00193 const TransposeView<T>& v, 00194 const typename automaton_traits<T>::hstate_t& st) 00195 { 00196 return op_has_state(s, v.object(), st); 00197 } 00198 00199 template <class S, class T> 00200 bool 00201 op_has_transition(const AutomataBase<S>& s, 00202 const TransposeView<T>& v, 00203 const typename automaton_traits<T>::htransition_t& e) 00204 { 00205 return op_has_transition(s, v.object(), e); 00206 } 00207 00208 template <class S, class T> 00209 typename Element<S, T>::label_t 00210 op_label_of(const AutomataBase<S>& s, 00211 const TransposeView<T>& v, 00212 const typename automaton_traits<T>::htransition_t& e) 00213 { 00214 return op_label_of(s, v.object(), e); 00215 } 00216 00217 template <class S, class T> 00218 const typename Element<S, T>::series_set_elt_t 00219 op_series_of(const AutomataBase<S>& s, 00220 const TransposeView<T>& v, 00221 const typename automaton_traits<T>::htransition_t& e) 00222 { 00223 typename Element<S, T>::series_set_elt_t r = 00224 op_series_of(s, v.object(), e); 00225 r.transpose(); 00226 return r; 00227 } 00228 00229 template <class S, class T> 00230 typename Element<S, T>::series_set_elt_value_t 00231 op_series_value_of(const AutomataBase<S>& s, 00232 const TransposeView<T>& v, 00233 const typename automaton_traits<T>::htransition_t& e) 00234 { 00235 return op_series_value_of(s, v.object(), e); 00236 } 00237 00238 template <class S, class T> 00239 typename Element<S, T>::monoid_elt_t 00240 op_word_of(const AutomataBase<S>& s, 00241 const TransposeView<T>& v, 00242 const typename automaton_traits<T>::htransition_t& e) 00243 { 00244 return op_word_of(s, v.object(), e); 00245 } 00246 00247 template <class S, class T> 00248 typename Element<S, T>::monoid_elt_value_t 00249 op_word_value_of(const AutomataBase<S>& s, 00250 const TransposeView<T>& v, 00251 const typename automaton_traits<T>::htransition_t& e) 00252 { 00253 return op_word_value_of(s, v.object(), e); 00254 } 00255 00256 template <class S, class T> 00257 typename Element<S, T>::letter_t 00258 op_letter_of(const AutomataBase<S>& s, 00259 const TransposeView<T>& v, 00260 const typename automaton_traits<T>::htransition_t& e) 00261 { 00262 return op_letter_of(s, v.object(), e); 00263 } 00264 00265 template <class S, class T> 00266 bool 00267 op_is_spontaneous(const AutomataBase<S>& s, 00268 const TransposeView<T>& v, 00269 const typename automaton_traits<T>::htransition_t& e) 00270 { 00271 return op_is_spontaneous(s, v.object(), e); 00272 } 00273 00274 template <class S, class T> 00275 typename automaton_traits<TransposeView<T> >::initial_support_t 00276 op_initial(const AutomataBase<S>& s, const TransposeView<T>& v) 00277 { 00278 return op_final(s, v.object()); 00279 } 00280 00281 template <class S, class T> 00282 typename automaton_traits<TransposeView<T> >::final_support_t 00283 op_final(const AutomataBase<S>& s, const TransposeView<T>& v) 00284 { 00285 return op_initial(s, v.object()); 00286 } 00287 00288 template <class S, class T> 00289 void 00290 op_set_initial(const AutomataBase<S>& ss, TransposeView<T>& v, 00291 const typename automaton_traits<T>::hstate_t& state, 00292 const AutoType(series_set_elt_t)& s) 00293 { 00294 return op_set_final(ss, v.object(), state, s); 00295 } 00296 00297 template <class S, class T> 00298 AutoType(series_set_elt_t) 00299 op_get_initial(const AutomataBase<S>& s, 00300 const TransposeView<T>& v, 00301 const typename automaton_traits<T>::hstate_t& state) 00302 { 00303 AutoType(series_set_elt_t) r = op_get_final(s, v.object(), state); 00304 r.transpose(); 00305 return r; 00306 } 00307 00308 template <class S, class T> 00309 void 00310 op_set_final(const AutomataBase<S>& ss, TransposeView<T>& v, 00311 const typename automaton_traits<T>::hstate_t& state, 00312 const typename Element<S, T>::series_set_elt_t& s) 00313 { 00314 op_set_initial(ss, v.object(), state, s); 00315 } 00316 00317 template <class S, class T> 00318 typename Element<S, T>::series_set_elt_t 00319 op_get_final(const AutomataBase<S>& s, 00320 const TransposeView<T>& v, 00321 const typename automaton_traits<T>::hstate_t& state) 00322 { 00323 typename Element<S, T>::series_set_elt_t r = op_get_initial(s, v.object(), 00324 state); 00325 r.transpose(); 00326 return r; 00327 } 00328 00329 template <class S, class T> 00330 void 00331 op_clear_initial(const AutomataBase<S>& s, TransposeView<T>& v) 00332 { 00333 op_clear_final(s, v.object()); 00334 } 00335 00336 template <class S, class T> 00337 void 00338 op_clear_final(const AutomataBase<S>& s, TransposeView<T>& v) 00339 { 00340 op_clear_initial(s, v.object()); 00341 } 00342 00343 template <class S, class T> 00344 typename automaton_traits<T>::hstate_t 00345 op_src_of(const AutomataBase<S>& s, 00346 const TransposeView<T>& v, 00347 const typename automaton_traits<T>::htransition_t& e) 00348 { 00349 return op_dst_of(s, v.object(), e); 00350 } 00351 00352 template <class S, class T> 00353 typename automaton_traits<T>::hstate_t 00354 op_dst_of(const AutomataBase<S>& s, 00355 const TransposeView<T>& v, 00356 const typename automaton_traits<T>::htransition_t& e) 00357 { 00358 return op_src_of(s, v.object(), e); 00359 } 00360 00361 } // vcsn 00362 00363 # undef AutoType 00364 00365 #endif // ! VCSN_AUTOMATA_IMPLEMENTATION_TRANSPOSE_VIEW_HXX