00001 // window.hh: this file is part of the Vaucanson project. 00002 // 00003 // Vaucanson, a generic library for finite state machines. 00004 // 00005 // Copyright (C) 2001, 2002, 2003, 2004, 2006 The Vaucanson Group. 00006 // 00007 // This program is free software; you can redistribute it and/or 00008 // modify it under the terms of the GNU General Public License 00009 // as published by the Free Software Foundation; either version 2 00010 // of the License, or (at your option) any later version. 00011 // 00012 // The complete GNU General Public Licence Notice can be found as the 00013 // `COPYING' file in the root directory. 00014 // 00015 // The Vaucanson Group consists of people listed in the `AUTHORS' file. 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 } // misc 00149 } // vcsn 00150 00151 # ifndef VCSN_USE_INTERFACE_ONLY 00152 # include <vaucanson/misc/window.hxx> 00153 # endif // VCSN_USE_INTERFACE_ONLY 00154 00155 #endif // ! VCSN_MISC_WINDOW_HH