00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #ifndef VCSN_ALGEBRA_CONCEPT_LETTER_HH
00019 # define VCSN_ALGEBRA_CONCEPT_LETTER_HH
00020
00021 # include <string>
00022 # include <vector>
00023 # include <utility>
00024
00025 # include <vaucanson/design_pattern/predecls.hh>
00026 # include <vaucanson/misc/static.hh>
00027
00028 namespace vcsn {
00029
00030 namespace algebra {
00031
00032 template <class L>
00033 struct letter_traits
00034 {
00035
00036 typedef misc::false_t is_char_letter;
00037
00038
00039 enum
00040 {
00041 cardinal = misc::static_pow<2, sizeof(L) * 8>::value
00042 };
00043
00046
00048
00049 static std::string kind();
00050 static int dim();
00051
00053 typedef undefined_type first_projection_t;
00054
00056 typedef undefined_type second_projection_t;
00057
00060 static std::pair<bool, L> literal_to_letter(const std::string&);
00061
00063 static std::string letter_to_literal(const L&);
00064 };
00065
00066 }
00067
00068 }
00069
00070 # if !defined VCSN_USE_INTERFACE_ONLY || defined VCSN_USE_LIB
00071 # include <vaucanson/algebra/concept/letter.hxx>
00072 # endif // ! VCSN_USE_INTERFACE_ONLY
00073
00074 #endif // ! VCSN_ALGEBRA_CONCEPT_LETTER_HH