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<typename T>
00038 T zero_value(SELECTOR(algebra::TropicalSemiring<algebra::TropicalMax>),
00039 SELECTOR(T));
00040
00041 template<typename T>
00042 T zero_value(SELECTOR(algebra::TropicalSemiring<algebra::TropicalMin>),
00043 SELECTOR(T));
00044
00045
00046
00047
00048 template<class TropicalKind, typename T>
00049 bool op_contains(const algebra::TropicalSemiring<TropicalKind>& s, T c);
00050
00051
00052
00053
00054 template<class TropicalKind, typename T, typename U>
00055 void op_in_mul(const algebra::TropicalSemiring<TropicalKind>& s1,
00056 T& dst, U arg);
00057
00058 template<class TropicalKind, typename T, typename U>
00059 T op_mul(const algebra::TropicalSemiring<TropicalKind>& s, T a, U b);
00060
00061
00062
00063
00064 template<typename T, typename U>
00065 void op_in_add(const algebra::TropicalSemiring<algebra::TropicalMax>& s1,
00066 T& dst, U arg);
00067
00068 template<typename T, typename U>
00069 void op_in_add(const algebra::TropicalSemiring<algebra::TropicalMin>& s1,
00070 T& dst, U arg);
00071
00072 template<typename T, typename U>
00073 T op_add(const algebra::TropicalSemiring<algebra::TropicalMax>& s,
00074 T a, U b);
00075
00076 template<typename T, typename U>
00077 T op_add(const algebra::TropicalSemiring<algebra::TropicalMin>& s,
00078 T a, U b);
00079
00080
00081
00082
00083 template <typename T>
00084 bool
00085 op_starable(const algebra::TropicalSemiring<algebra::TropicalMin>&, T b);
00086
00087 template <class T>
00088 void
00089 op_in_star(const algebra::TropicalSemiring<algebra::TropicalMin>& s, T& b);
00090
00091 template <typename T>
00092 bool
00093 op_starable(const algebra::TropicalSemiring<algebra::TropicalMax>&, T b);
00094
00095 template <class T>
00096 void
00097 op_in_star(const algebra::TropicalSemiring<algebra::TropicalMax>&, T& b);
00098
00099 template <class TropicalKind, class T>
00100 Element<algebra::TropicalSemiring<TropicalKind>, T>
00101 op_choose(const algebra::TropicalSemiring<TropicalKind>& set, SELECTOR(T));
00102
00103 template <class TropicalKind, typename T>
00104 bool
00105 op_can_choose_non_starable(const algebra::TropicalSemiring<TropicalKind>&
00106 set, SELECTOR(T));
00107
00108 template <class TropicalKind, typename T>
00109 Element<algebra::TropicalSemiring<TropicalKind>, T>
00110 op_choose_starable(const algebra::TropicalSemiring<TropicalKind>& set,
00111 SELECTOR(T));
00112
00113 template <class TropicalKind, typename T>
00114 Element<algebra::TropicalSemiring<TropicalKind>, T>
00115 op_choose_non_starable(const algebra::TropicalSemiring<TropicalKind>& set,
00116 SELECTOR(T));
00117
00118
00119
00120
00121 template<typename St, typename T>
00122 St& op_rout(const algebra::TropicalSemiring<algebra::TropicalMax>& s,
00123 St& st, const T& v);
00124
00125 template<typename St, typename T>
00126 St& op_rout(const algebra::TropicalSemiring<algebra::TropicalMin>& s,
00127 St& st, const T& v);
00128
00129 }
00130
00131 }
00132
00133
00134 # if !defined VCSN_USE_INTERFACE_ONLY || defined VCSN_USE_LIB
00135 # include <vaucanson/algebra/implementation/semiring/tropical_semiring.hxx>
00136 # endif // VCSN_USE_INTERFACE_ONLY
00137
00138
00139 #endif // ! VCSN_ALGEBRA_IMPLEMENTATION_SEMIRING_TROPICAL_SEMIRING_HH