00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #ifndef VCSN_ALGEBRA_IMPLEMENTATION_LETTER_CHAR_LETTER_HXX
00018 # define VCSN_ALGEBRA_IMPLEMENTATION_LETTER_CHAR_LETTER_HXX
00019
00020 # include <string>
00021
00022 # include <vaucanson/algebra/implementation/letter/char_letter.hh>
00023
00024 namespace vcsn {
00025
00026 namespace algebra {
00027
00028 template <>
00029 struct letter_traits<char>
00030 {
00031 enum
00032 {
00033
00034
00035
00036
00037 cardinal = 255
00038 };
00039
00040 static const char default_epsilon() { return '1'; }
00041 static const char default_joker() { return '?'; }
00042 static const char default_other() { return '#'; }
00043
00044 static
00045 char
00046 literal_to_letter(const std::string& str)
00047 {
00048 precondition(str.size() == 1);
00049 return str[0];
00050 }
00051
00052 static
00053 std::string
00054 letter_to_literal(const char& c)
00055 {
00056 std::string str;
00057 str = str + c;
00058 return str;
00059 }
00060 };
00061
00062 template <typename S, typename CharContainer>
00063 bool op_parse(const algebra::FreeMonoidBase<S>& set,
00064 std::basic_string<char>& v,
00065 const std::string& s,
00066 typename std::string::const_iterator& i,
00067 const CharContainer&)
00068 {
00069 typename std::string::const_iterator j = i;
00070 typename std::string::const_iterator k;
00071
00072 while ((i != s.end()) && (set.alphabet().contains(*i)))
00073 {
00074 v += *i;
00075 ++i;
00076 }
00077 return (i != j);
00078 }
00079
00080 }
00081
00082 }
00083
00084 #endif // ! VCSN_ALGEBRA_IMPLEMENTATION_LETTER_CHAR_LETTER_HXX