Claw 1.7.0
buffered_istream.hpp
Go to the documentation of this file.
00001 /*
00002   CLAW - a C++ Library Absolutely Wonderful
00003 
00004   CLAW is a free library without any particular aim but being useful to 
00005   anyone.
00006 
00007   Copyright (C) 2005-2011 Julien Jorge
00008 
00009   This library is free software; you can redistribute it and/or
00010   modify it under the terms of the GNU Lesser General Public
00011   License as published by the Free Software Foundation; either
00012   version 2.1 of the License, or (at your option) any later version.
00013 
00014   This library is distributed in the hope that it will be useful,
00015   but WITHOUT ANY WARRANTY; without even the implied warranty of
00016   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00017   Lesser General Public License for more details.
00018 
00019   You should have received a copy of the GNU Lesser General Public
00020   License along with this library; if not, write to the Free Software
00021   Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
00022 
00023   contact: julien.jorge@gamned.org
00024 */
00030 #ifndef __CLAW_BUFFERED_ISTREAM_HPP__
00031 #define __CLAW_BUFFERED_ISTREAM_HPP__
00032 
00033 #include<iostream>
00034 
00035 namespace claw
00036 {
00041   template< typename Stream >
00042   class buffered_istream
00043   {
00044   private:
00046     typedef Stream stream_type;
00047 
00048   public:
00049     buffered_istream( stream_type& f );
00050     ~buffered_istream();
00051     
00052     unsigned int remaining() const;
00053     bool read_more( unsigned int n );
00054     
00055     const char* get_buffer() const;
00056     char get_next();
00057     bool read( char* buf, unsigned int n );
00058 
00059     void move( unsigned int n );
00060 
00061     void close();
00062 
00063     operator bool() const;
00064 
00065   private:
00067     stream_type& m_stream;
00068     
00070     char* m_begin;
00071     
00074     char* m_end;
00075     
00077     char* m_current;
00078     
00080     unsigned int m_buffer_size;
00081 
00082   }; // class buffered_istream
00083 } // namespace claw
00084 
00085 #include <claw/impl/buffered_istream.tpp>
00086 
00087 #endif // __CLAW_BUFFERED_ISTREAM_HPP__