00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #ifndef VCSN_ALGEBRA_IMPLEMENTATION_ALPHABETS_ALPHABET_SET_HXX
00018 # define VCSN_ALGEBRA_IMPLEMENTATION_ALPHABETS_ALPHABET_SET_HXX
00019
00020 # include <vaucanson/algebra/concept/letter.hh>
00021 # include <vaucanson/algebra/implementation/alphabets/alphabet_set.hh>
00022
00023 # include <limits>
00024
00025 namespace vcsn
00026 {
00027
00028 namespace algebra
00029 {
00030
00031
00032
00033
00034
00035 # define ALPHABET_TRAITS \
00036 alphabet_traits<AlphabetSet<L>, std::set<L> >
00037
00038 template <typename L>
00039 inline typename ALPHABET_TRAITS::first_projection_t
00040 ALPHABET_TRAITS::first_projection(const ALPHABET_TRAITS::alphabet_t& A)
00041 {
00042
00043 static_assertion_(not (misc::static_eq<first_projection_t,
00044 undefined_type>::value), need_first_projection)
00045
00046 first_projection_t R;
00047
00048 for_all_const_(alphabet_t, i, A)
00049 {
00050
00051 R.insert((*i).first);
00052 }
00053
00054 return R;
00055 }
00056
00057 template <typename L>
00058 inline typename ALPHABET_TRAITS::second_projection_t
00059 ALPHABET_TRAITS::second_projection(const ALPHABET_TRAITS::alphabet_t& A)
00060 {
00061
00062 static_assertion_(not (misc::static_eq<second_projection_t,
00063 undefined_type>::value), need_second_projection)
00064
00065 second_projection_t R;
00066
00067 for_all_const_(alphabet_t, i, A)
00068 {
00069
00070 R.insert((*i).second);
00071 }
00072
00073 return R;
00074 }
00075
00076 # undef ALPHABET_TRAITS
00077
00078
00079
00080
00081
00082 template <typename L>
00083 size_t
00084 op_max_size(const algebra::AlphabetSet<L>&, const std::set<L>&)
00085 {
00086 return algebra::letter_traits<L>::cardinal;
00087 }
00088
00089 template<typename L>
00090 bool op_contains(const algebra::AlphabetSet<L>&, const std::set<L>&)
00091 {
00092 return true;
00093 }
00094
00095 template<typename L>
00096 bool op_is_finite(const algebra::AlphabetSet<L>&, const std::set<L>&)
00097 {
00098 return true;
00099 }
00100
00101 template<typename L>
00102 bool op_contains_e(const algebra::AlphabetSet<L>&, const std::set<L>& a,
00103 const L& v)
00104 {
00105 return a.find(v) != a.end();
00106 }
00107
00108 }
00109
00110 }
00111
00112 #endif // ! VCSN_ALGEBRA_IMPLEMENTATION_ALPHABETS_ALPHABET_SET_HXX