- Main Page
- Related Pages
- Modules
- Namespaces
- Classes
- Files

- File List
- File Members

# transpose_view.hh

    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