00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #ifndef VCSN_ALGEBRA_IMPLEMENTATION_LETTER_COUPLE_LETTER_HXX
00018 # define VCSN_ALGEBRA_IMPLEMENTATION_LETTER_COUPLE_LETTER_HXX
00019
00020 # include <sstream>
00021
00022 # include <vaucanson/algebra/implementation/letter/couple_letter.hh>
00023
00024 namespace vcsn {
00025
00026 namespace algebra {
00027
00028
00029 template <typename S, typename U, typename V, typename CharContainer>
00030 bool op_parse (const algebra::FreeMonoidBase<S>& set,
00031 std::basic_string< std::pair<U, V> >& v,
00032 const std::string& s,
00033 typename std::string::const_iterator& i,
00034 const CharContainer&)
00035 {
00036 typename std::string::const_iterator j = i;
00037
00038 while (i != s.end ()) {
00039 if (*i != '(')
00040 break ;
00041 std::string sub (i, s.end ());
00042 std::istringstream is (sub);
00043 std::pair<U,V> p;
00044 is >> p;
00045 if (!set.alphabet ().contains (p))
00046 break ;
00047 int inc = sub.size () - is.str ().size ();
00048 for (int k = 0; k < inc; k++, i++) ;
00049 v += p;
00050 }
00051 return (i != j);
00052 }
00053
00054 }
00055 }
00056
00057 namespace std
00058 {
00059
00060 template <typename U, typename V>
00061 std::ostream& operator<< (std::ostream& o, std::pair<U, V> p)
00062 {
00063 return o << "(" << p.first << "," << p.second << ")";
00064 }
00065
00066 template <typename U, typename V, class Traits, class Allocator>
00067 std::ostream& operator<< (std::ostream& o,
00068 std::basic_string<std::pair<U, V>, Traits, Allocator> s)
00069 {
00070 typename
00071 std::basic_string<std::pair<U, V>, Traits, Allocator>::const_iterator i;
00072 for (i = s.begin (); i != s.end (); ++i)
00073 o << "(" << i->first << "," << i->second << ")";
00074 return o;
00075 }
00076
00077 template <typename U, typename V>
00078 std::istream& operator>> (std::istream& i, std::pair<U, V>& p)
00079 {
00080 char c = i.get ();
00081 if (c != '(')
00082 i.unget ();
00083 i >> p.first;
00084 c = i.get ();
00085 if (c != ',')
00086 i.unget ();
00087 i >> p.second;
00088 c = i.get ();
00089 if (c != ')')
00090 i.unget ();
00091 return i;
00092 }
00093
00094 }
00095
00096
00097 #endif // ! VCSN_ALGEBRA_IMPLEMENTATION_LETTER_COUPLE_LETTER_HXX