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