Vaucanson 1.4
|
00001 // transpose_view.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, 2006, 2008 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_HH 00018 # define VCSN_AUTOMATA_IMPLEMENTATION_TRANSPOSE_VIEW_HH 00019 00020 # include <vaucanson/automata/implementation/automaton_view.hh> 00021 # include <vaucanson/design_pattern/predecls.hh> 00022 00023 namespace vcsn { 00024 00035 template <class T> 00036 struct TransposeView : public IdentityView<T> 00037 { 00038 TransposeView(); 00039 TransposeView(const T&); 00040 TransposeView(T&); 00041 TransposeView(const TransposeView&); 00042 }; 00043 00045 00046 template <class T> 00047 struct transpose_traits 00048 { 00049 typedef undefined_type type; 00050 }; 00051 00052 template <class S, class T> 00053 struct transpose_traits<Element<S, T> > 00054 { 00055 typedef Element<S, TransposeView<T> > type; 00056 }; 00065 template <class S, class T> 00066 Element<S, TransposeView<T> > 00067 transpose_view(Element<S, T>&); 00068 00069 template <class S, class T> 00070 const Element<S, TransposeView<T> > 00071 transpose_view(const Element<S, T>&); 00074 00075 template <typename T> 00076 struct automaton_traits<TransposeView<T> > 00077 { 00078 typedef typename automaton_traits<T>::label_t label_t; 00079 typedef typename automaton_traits<T>::series_set_elt_value_t 00080 series_set_elt_value_t; 00081 typedef typename automaton_traits<T>::word_value_t word_value_t; 00082 typedef typename automaton_traits<T>::semiring_elt_value_t 00083 semiring_elt_value_t; 00084 typedef typename automaton_traits<T>::letter_t letter_t; 00085 typedef typename automaton_traits<T>::tag_t tag_t; 00086 typedef typename automaton_traits<T>::states_t states_t; 00087 // FIXME: RM? typedef typename automaton_traits<T>::state_data_t state_data_t; 00088 typedef typename automaton_traits<T>::state_iterator 00089 state_iterator; 00090 typedef typename automaton_traits<T>::transitions_t transitions_t; 00091 // FIXME: RM? typedef typename automaton_traits<T>::transition_data_t transition_data_t; 00092 typedef typename automaton_traits<T>::transition_iterator transition_iterator; 00093 typedef typename automaton_traits<T>::initial_t initial_t; 00094 typedef typename automaton_traits<T>::initial_iterator 00095 initial_iterator; 00096 typedef typename automaton_traits<T>::initial_support_t 00097 initial_support_t; 00098 typedef typename automaton_traits<T>::final_t final_t; 00099 typedef typename automaton_traits<T>::final_iterator 00100 final_iterator; 00101 typedef typename automaton_traits<T>::final_support_t 00102 final_support_t; 00103 typedef typename automaton_traits<T>::geometry_t geometry_t; 00104 typedef typename automaton_traits<T>::geometry_t::coords_t geometry_coords_t; 00105 00106 00107 typedef typename automaton_traits<T>::hstate_t hstate_t; 00108 typedef typename automaton_traits<T>::htransition_t htransition_t; 00109 00110 typedef typename automaton_traits<T>::rdelta_iterator delta_iterator; 00111 typedef typename automaton_traits<T>::delta_iterator rdelta_iterator; 00112 }; 00113 00114 #define AutoType(Type) \ 00115 typename Element<S, TransposeView<T> >::Type 00116 00118 00119 template <class S, class T> 00120 typename automaton_traits<TransposeView<T> >::initial_support_t 00121 op_initial(const AutomataBase<S>&, const TransposeView<T>&); 00122 00123 template <class S, class T> 00124 typename automaton_traits<TransposeView<T> >::final_support_t 00125 op_final(const AutomataBase<S>&, const TransposeView<T>&); 00126 00127 template <class S, class T> 00128 void 00129 op_set_initial(const AutomataBase<S>&, TransposeView<T>&, 00130 const typename automaton_traits<T>::hstate_t& state, 00131 const AutoType(series_set_elt_t)& s); 00132 00133 template <class S, class T> 00134 AutoType(series_set_elt_t) 00135 op_get_initial(const AutomataBase<S>&, 00136 const TransposeView<T>&, 00137 const typename automaton_traits<T>::hstate_t&); 00138 00139 template <class S, class T> 00140 void 00141 op_set_final(const AutomataBase<S>&, TransposeView<T>&, 00142 const typename automaton_traits<T>::hstate_t& state, 00143 const typename Element<S, T>::series_set_elt_t& s); 00144 00145 template <class S, class T> 00146 typename Element<S, T>::series_set_elt_t 00147 op_get_final(const AutomataBase<S>&, 00148 const TransposeView<T>&, 00149 const typename automaton_traits<T>::hstate_t& state); 00150 00151 template <class S, class T> 00152 void 00153 op_clear_initial(const AutomataBase<S>&, TransposeView<T>&); 00154 00155 template <class S, class T> 00156 void 00157 op_clear_final(const AutomataBase<S>&, TransposeView<T>&); 00158 00159 template <class S, class T> 00160 typename automaton_traits<T>::hstate_t 00161 op_src_of(const AutomataBase<S>&, const TransposeView<T>&, 00162 const typename automaton_traits<T>::htransition_t&); 00163 00164 template <class S, class T> 00165 typename automaton_traits<T>::hstate_t 00166 op_dst_of(const AutomataBase<S>&, const TransposeView<T>&, 00167 const typename automaton_traits<T>::htransition_t&); 00168 00171 } // vcsn 00172 00173 # undef AutoType 00174 00175 00176 # if !defined VCSN_USE_INTERFACE_ONLY || defined VCSN_USE_LIB 00177 # include <vaucanson/automata/implementation/transpose_view.hxx> 00178 #endif // VCSN_USE_INTERFACE_ONLY 00179 00180 00181 #endif // ! VCSN_AUTOMATA_IMPLEMENTATION_TRANSPOSE_VIEW_HH