00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
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 }
00362
00363 # undef AutoType
00364
00365 #endif // ! VCSN_AUTOMATA_IMPLEMENTATION_TRANSPOSE_VIEW_HXX