00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #ifndef VCSN_MISC_WINDOW_HH
00018 # define VCSN_MISC_WINDOW_HH
00019
00031 # include <iostream>
00032 # include <string>
00033
00034 namespace vcsn {
00035 namespace misc {
00036
00059 template <class InputIterator, class Letter>
00060 struct Window
00061 {
00062 typedef InputIterator iterator_t;
00063 typedef Letter letter_t;
00064 typedef typename std::basic_string<letter_t> string_t;
00065 typedef unsigned int length_t;
00066
00080 Window (const iterator_t& stream,
00081 const iterator_t& eof,
00082 letter_t eol,
00083 length_t length);
00084
00086 bool eof () const;
00088 bool eol () const;
00089
00095 void shift (unsigned int n);
00097 void shift ();
00098
00100
00101 void moveto (length_t offset);
00102 void moveto (iterator_t position);
00104
00106 length_t size () const;
00107
00109 letter_t operator[] (length_t i) const;
00110
00112 std::ostream& print (std::ostream& ostr) const;
00113
00115
00116
00117 iterator_t begin () const;
00119 iterator_t stream () const;
00121 iterator_t end () const;
00123 size_t offset () const;
00125 letter_t eol_value () const;
00127 length_t length () const;
00129 string_t window () const;
00131 protected:
00132 void compute_size ();
00133
00134 iterator_t begin_;
00135 iterator_t stream_;
00136 iterator_t end_;
00137 letter_t eol_;
00138 length_t length_;
00139 length_t size_;
00140 };
00141
00142 template <class InputIterator, class Letter>
00143 std::ostream&
00144 operator<< (std::ostream& ostr, const Window<InputIterator, Letter>& w);
00145
00148 }
00149 }
00150
00151 # if !defined VCSN_USE_INTERFACE_ONLY || defined VCSN_USE_LIB
00152 # include <vaucanson/misc/window.hxx>
00153 # endif // VCSN_USE_INTERFACE_ONLY
00154
00155 #endif // ! VCSN_MISC_WINDOW_HH