00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
00017 #ifndef VCSN_ALGEBRA_IMPLEMENTATION_SEMIRING_TROPICAL_SEMIRING_HH
00018 # define VCSN_ALGEBRA_IMPLEMENTATION_SEMIRING_TROPICAL_SEMIRING_HH
00019 
00020 # include <vaucanson/algebra/concept/tropical_semiring.hh>
00021 
00022 namespace vcsn {
00023 
00024   namespace algebra {
00025 
00026     
00027     
00028     
00029 
00030     
00031 
00032 
00033     template<class TropicalKind, typename T>
00034     T identity_value(SELECTOR(algebra::TropicalSemiring<TropicalKind>),
00035                      SELECTOR(T));
00036 
00037     template<class TropicalKind, typename T>
00038     bool show_identity_value(SELECTOR(algebra::TropicalSemiring<TropicalKind>),
00039                              SELECTOR(T));
00040 
00041 
00042     template<typename T>
00043     T zero_value(SELECTOR(algebra::TropicalSemiring<algebra::TropicalMax>),
00044                  SELECTOR(T));
00045 
00046     template<typename T>
00047     T zero_value(SELECTOR(algebra::TropicalSemiring<algebra::TropicalMin>),
00048                  SELECTOR(T));
00049 
00050     
00051 
00052 
00053     template<class TropicalKind, typename T>
00054     bool op_contains(const algebra::TropicalSemiring<TropicalKind>& s, T c);
00055 
00056     
00057 
00058 
00059     template<class TropicalKind, typename T, typename U>
00060     void op_in_mul(const algebra::TropicalSemiring<TropicalKind>& s1,
00061                    T& dst, U arg);
00062 
00063     template<class TropicalKind, typename T, typename U>
00064     T op_mul(const algebra::TropicalSemiring<TropicalKind>& s, T a, U b);
00065 
00066     
00067 
00068 
00069     template<typename T, typename U>
00070     void op_in_add(const algebra::TropicalSemiring<algebra::TropicalMax>& s1,
00071                    T& dst, U arg);
00072 
00073     template<typename T, typename U>
00074     void op_in_add(const algebra::TropicalSemiring<algebra::TropicalMin>& s1,
00075                    T& dst, U arg);
00076 
00077     template<typename T, typename U>
00078     T op_add(const algebra::TropicalSemiring<algebra::TropicalMax>& s,
00079              T a, U b);
00080 
00081     template<typename T, typename U>
00082     T op_add(const algebra::TropicalSemiring<algebra::TropicalMin>& s,
00083              T a, U b);
00084 
00085     
00086 
00087 
00088     template <typename T>
00089     bool
00090     op_starable(const algebra::TropicalSemiring<algebra::TropicalMin>&, T b);
00091 
00092     template <class T>
00093     void
00094     op_in_star(const algebra::TropicalSemiring<algebra::TropicalMin>& s, T& b);
00095 
00096     template <typename T>
00097     bool
00098     op_starable(const algebra::TropicalSemiring<algebra::TropicalMax>&, T b);
00099 
00100     template <class T>
00101     void
00102     op_in_star(const algebra::TropicalSemiring<algebra::TropicalMax>&, T& b);
00103 
00104     template <class TropicalKind, class T>
00105     Element<algebra::TropicalSemiring<TropicalKind>, T>
00106     op_choose(const algebra::TropicalSemiring<TropicalKind>& set, SELECTOR(T));
00107 
00108     template <class TropicalKind, typename T>
00109     bool
00110     op_can_choose_non_starable(const algebra::TropicalSemiring<TropicalKind>&
00111                                set, SELECTOR(T));
00112 
00113     template <class TropicalKind, typename T>
00114     Element<algebra::TropicalSemiring<TropicalKind>, T>
00115     op_choose_starable(const algebra::TropicalSemiring<TropicalKind>& set,
00116                        SELECTOR(T));
00117 
00118     template <class TropicalKind, typename T>
00119     Element<algebra::TropicalSemiring<TropicalKind>, T>
00120     op_choose_non_starable(const algebra::TropicalSemiring<TropicalKind>& set,
00121                            SELECTOR(T));
00122 
00123     
00124 
00125 
00126     template<typename St, typename T>
00127     St& op_rout(const algebra::TropicalSemiring<algebra::TropicalMax>& s,
00128                 St& st, const T& v);
00129 
00130     template<typename St, typename T>
00131     St& op_rout(const algebra::TropicalSemiring<algebra::TropicalMin>& s,
00132                 St& st, const T& v);
00133 
00134   } 
00135 
00136   template<class TropicalKind, typename T>
00137   struct semiring_traits<algebra::TropicalSemiring<TropicalKind>, T>
00138   {
00139     enum { is_positive = 1 };
00140   };
00141 
00142 
00143 } 
00144 
00145 
00146 # if !defined VCSN_USE_INTERFACE_ONLY || defined VCSN_USE_LIB
00147 #  include <vaucanson/algebra/implementation/semiring/tropical_semiring.hxx>
00148 # endif // VCSN_USE_INTERFACE_ONLY
00149 
00150 
00151 #endif // ! VCSN_ALGEBRA_IMPLEMENTATION_SEMIRING_TROPICAL_SEMIRING_HH