Vaucanson 1.4
|
00001 // automaton_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 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_AUTOMATON_VIEW_HH 00018 # define VCSN_AUTOMATA_IMPLEMENTATION_AUTOMATON_VIEW_HH 00019 00020 # include <vaucanson/automata/concept/automata_base.hh> 00021 00022 namespace vcsn { 00023 00024 template <class T> 00025 class IdentityView 00026 { 00027 public: 00028 IdentityView(); 00029 IdentityView(T&); 00030 IdentityView(const T&); 00031 IdentityView(const IdentityView&); 00032 00033 const T& object() const; 00034 T& object(); 00035 00036 operator T&(); 00037 operator const T&() const; 00038 00039 private: 00040 T* object_; 00041 const T* const_object_; 00042 }; 00043 00044 template <typename T> 00045 struct automaton_traits< IdentityView<T> > 00046 : automaton_traits<T> 00047 { 00048 }; 00049 00050 00051 #define AutoType(Type) \ 00052 typename Element<S, IdentityView<T> >::Type 00053 00054 template <class S, class T> 00055 const typename automaton_traits<T>::tag_t& 00056 op_get_tag(const AutomataBase<S>&, const IdentityView<T>&); 00057 00058 template <class S, class T> 00059 typename automaton_traits<T>::tag_t& 00060 op_get_tag(const AutomataBase<S>&, IdentityView<T>&); 00061 00062 template <class S, class T> 00063 const typename automaton_traits<T>::geometry_t& 00064 op_get_geometry(const AutomataBase<S>&, const IdentityView<T>&); 00065 00066 template <class S, class T> 00067 typename automaton_traits<T>::geometry_t& 00068 op_get_geometry(const AutomataBase<S>&, IdentityView<T>&); 00069 00070 template <class S, class T> 00071 bool 00072 op_exists(const AutomataBase<S>&, const IdentityView<T>&); 00073 00074 template <class S, class T> 00075 typename automaton_traits<T>::states_t 00076 op_states(const AutomataBase<S>&, const IdentityView<T>&); 00077 00078 template <class S, class T> 00079 typename automaton_traits<T>::transitions_t 00080 op_transitions(const AutomataBase<S>&, const IdentityView<T>&); 00081 00082 template <class S, class T> 00083 typename automaton_traits<T>::initial_support_t 00084 op_initial(const AutomataBase<S>&, const IdentityView<T>&); 00085 00086 template <class S, class T> 00087 typename automaton_traits<T>::final_support_t 00088 op_final(const AutomataBase<S>&, const IdentityView<T>&); 00089 00090 template <class S, class T> 00091 void 00092 op_set_initial(const AutomataBase<S>&, IdentityView<T>&, 00093 const typename automaton_traits<T>::hstate_t& state, 00094 const AutoType(series_set_elt_t)& s); 00095 00096 template <class S, class T> 00097 AutoType(series_set_elt_t) 00098 op_get_initial(const AutomataBase<S>&, 00099 const IdentityView<T>&, 00100 const typename automaton_traits<T>::hstate_t& state); 00101 00102 template <class S, class T> 00103 void 00104 op_set_final(const AutomataBase<S>&, IdentityView<T>&, 00105 const typename automaton_traits<T>::hstate_t& state, 00106 const typename Element<S, T>::series_set_elt_t& s); 00107 00108 template <class S, class T> 00109 typename Element<S, T>::series_set_elt_t 00110 op_get_final(const AutomataBase<S>&, 00111 const IdentityView<T>&, 00112 const typename automaton_traits<T>::hstate_t& state); 00113 00114 template <class S, class T> 00115 void 00116 op_clear_initial(const AutomataBase<S>&, IdentityView<T>&); 00117 00118 template <class S, class T> 00119 void 00120 op_clear_final(const AutomataBase<S>&, IdentityView<T>&); 00121 00122 template <class S, class T> 00123 typename automaton_traits<T>::hstate_t 00124 op_add_state(const AutomataBase<S>&, IdentityView<T>&); 00125 00126 template <class S, class T> 00127 typename automaton_traits<T>::hstate_t 00128 op_choose_state(const AutomataBase<S>&, IdentityView<T>&); 00129 00130 template <class S, class T> 00131 typename automaton_traits<T>::htransition_t 00132 op_add_transition(const AutomataBase<S>&, IdentityView<T>&, 00133 const typename automaton_traits<T>::hstate_t& from, 00134 const typename automaton_traits<T>::hstate_t& to, 00135 const typename Element<S, T>::label_t& label); 00136 00137 template <class S, class T> 00138 typename automaton_traits<T>::htransition_t 00139 op_add_series_transition(const AutomataBase<S>&, IdentityView<T>&, 00140 const typename automaton_traits<T>::hstate_t& from, 00141 const typename automaton_traits<T>::hstate_t& to, 00142 const typename Element<S, T>::series_set_elt_t&); 00143 00144 template <class S, class T> 00145 typename automaton_traits<T>::htransition_t 00146 op_add_spontaneous(const AutomataBase<S>&, IdentityView<T>&, 00147 const typename automaton_traits<T>::hstate_t& from, 00148 const typename automaton_traits<T>::hstate_t& to); 00149 00150 template <class S, class T> 00151 typename automaton_traits<T>::htransition_t 00152 op_add_letter_transition(const AutomataBase<S>&, IdentityView<T>&, 00153 const typename automaton_traits<T>::hstate_t& from, 00154 const typename automaton_traits<T>::hstate_t& to, 00155 const typename Element<S, T>::letter_t&); 00156 00157 template <class S, class T> 00158 void 00159 op_update(const AutomataBase<S>&, IdentityView<T>&, 00160 const typename automaton_traits<T>::htransition_t&, 00161 const AutoType(label_t)& l); 00162 00163 template <class S, class T> 00164 void 00165 op_del_state(const AutomataBase<S>&, IdentityView<T>&, 00166 const typename automaton_traits<T>::hstate_t&); 00167 00168 template <class S, class T> 00169 void 00170 op_del_transition(const AutomataBase<S>&, IdentityView<T>&, 00171 const typename automaton_traits<T>::htransition_t&); 00172 00173 template <class S, class T> 00174 bool 00175 op_has_state(const AutomataBase<S>&, const IdentityView<T>&, 00176 const typename automaton_traits<T>::hstate_t&); 00177 00178 template <class S, class T> 00179 bool 00180 op_has_transition(const AutomataBase<S>&, const IdentityView<T>&, 00181 const typename automaton_traits<T>::htransition_t&); 00182 00183 template <class S, class T> 00184 typename automaton_traits<T>::hstate_t 00185 op_src_of(const AutomataBase<S>&, const IdentityView<T>&, 00186 const typename automaton_traits<T>::htransition_t&); 00187 00188 template <class S, class T> 00189 typename automaton_traits<T>::hstate_t 00190 op_dst_of(const AutomataBase<S>&, const IdentityView<T>&, 00191 const typename automaton_traits<T>::htransition_t&); 00192 00193 template <class S, class T> 00194 typename Element<S, T>::label_t 00195 op_label_of(const AutomataBase<S>&, const IdentityView<T>&, 00196 const typename automaton_traits<T>::htransition_t&); 00197 00198 template <class S, class T> 00199 const typename Element<S, T>::series_set_elt_t 00200 op_series_of(const AutomataBase<S>&, const IdentityView<T>&, 00201 const typename automaton_traits<T>::htransition_t&); 00202 00203 template <class S, class T> 00204 typename Element<S, T>::series_set_elt_value_t 00205 op_series_value_of(const AutomataBase<S>&, const IdentityView<T>&, 00206 const typename automaton_traits<T>::htransition_t&); 00207 00208 00209 template <class S, class T> 00210 typename Element<S, T>::monoid_elt_t 00211 op_word_of(const AutomataBase<S>&, const IdentityView<T>&, 00212 const typename automaton_traits<T>::htransition_t&); 00213 00214 template <class S, class T> 00215 typename Element<S, T>::monoid_elt_value_t 00216 op_word_value_of(const AutomataBase<S>&, const IdentityView<T>&, 00217 const typename automaton_traits<T>::htransition_t&); 00218 00219 template <class S, class T> 00220 typename Element<S, T>::letter_t 00221 op_letter_of(const AutomataBase<S>&, const IdentityView<T>&, 00222 const typename automaton_traits<T>::htransition_t&); 00223 00224 template <class S, class T> 00225 bool 00226 op_is_spontaneous(const AutomataBase<S>&, const IdentityView<T>&, 00227 const typename automaton_traits<T>::htransition_t&); 00228 00229 } // vcsn 00230 00231 # undef AutoType 00232 00233 00234 # if !defined VCSN_USE_INTERFACE_ONLY || defined VCSN_USE_LIB 00235 # include <vaucanson/automata/implementation/automaton_view.hxx> 00236 #endif // VCSN_USE_INTERFACE_ONLY 00237 00238 00239 #endif // ! VCSN_AUTOMATA_IMPLEMENTATION_AUTOMATON_VIEW_HH