diff options
Diffstat (limited to 'src/utility/stream.hpp')
| -rw-r--r-- | src/utility/stream.hpp | 274 |
1 files changed, 0 insertions, 274 deletions
diff --git a/src/utility/stream.hpp b/src/utility/stream.hpp deleted file mode 100644 index f05df243..00000000 --- a/src/utility/stream.hpp +++ /dev/null @@ -1,274 +0,0 @@ -// -// VMime library (http://vmime.sourceforge.net) -// Copyright (C) 2002-2004 Vincent Richard <[email protected]> -// -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License as -// published by the Free Software Foundation; either version 2 of -// the License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -// - -#ifndef VMIME_UTILITY_STREAM_HPP_INCLUDED -#define VMIME_UTILITY_STREAM_HPP_INCLUDED - - -#include <istream> -#include <ostream> - -#include "types.hpp" - - -namespace vmime { -namespace utility { - - -class stringProxy; - - -/** Base class for input/output stream. - */ - -class stream -{ -public: - - virtual ~stream() { } - - /** Type used to read/write one byte in the stream. - */ - typedef string::value_type value_type; - - /** Type used for lengths in streams. - */ - typedef string::size_type size_type; -}; - - - -/** Simple output stream. - */ - -class outputStream : public stream -{ -public: - - /** Write data to the stream. - * - * @param data buffer containing data to write - * @param count number of bytes to write - */ - virtual void write(const value_type* const data, const size_type count) = 0; -}; - - - -/** Simple input stream. - */ - -class inputStream : public stream -{ -public: - - /** Test for end of stream (no more data to read). - * - * @return true if we have reached the end of stream, false otherwise - */ - virtual const bool eof() const = 0; - - /** Set the read pointer to the beginning of the stream. - * - * @warning WARNING: this may not work for all stream types. - */ - virtual void reset() = 0; - - /** Read data from the stream. - * - * @param data will receive the data read - * @param count maximum number of bytes to read - * @return number of bytes read - */ - virtual const size_type read(value_type* const data, const size_type count) = 0; - - /** Skip a number of bytes. - * - * @param count maximum number of bytes to ignore - * @return number of bytes skipped - */ - virtual const size_type skip(const size_type count) = 0; -}; - - - -// Helpers functions - -outputStream& operator<<(outputStream& os, const string& str); -outputStream& operator<<(outputStream& os, const stream::value_type c); - - -template <int N> -outputStream& operator<<(outputStream& os, const char (&str)[N]) -{ - os.write(str, N - 1); - return (os); -} - - -/** Copy data from one stream into another stream using a buffered method. - * - * @param is input stream (source data) - * @param os output stream (destination for data) - * @return number of bytes copied - */ - -const stream::size_type bufferedStreamCopy(inputStream& is, outputStream& os); - - - -// Adapters - - -/** An adapter class for C++ standard output streams. - */ - -class outputStreamAdapter : public outputStream -{ -public: - - /** @param os output stream to wrap - */ - outputStreamAdapter(std::ostream& os); - - void write(const value_type* const data, const size_type count); - -private: - - std::ostream& m_stream; -}; - - -/** An adapter class for string output. - */ - -class outputStreamStringAdapter : public outputStream -{ -public: - - outputStreamStringAdapter(string& buffer); - - void write(const value_type* const data, const size_type count); - -private: - - string& m_buffer; -}; - - -/** An adapter class for C++ standard input streams. - */ - -class inputStreamAdapter : public inputStream -{ -public: - - /** @param is input stream to wrap - */ - inputStreamAdapter(std::istream& is); - - const bool eof() const; - void reset(); - const size_type read(value_type* const data, const size_type count); - const size_type skip(const size_type count); - -private: - - std::istream& m_stream; -}; - - -/** An adapter class for string input. - */ - -class inputStreamStringAdapter : public inputStream -{ -public: - - inputStreamStringAdapter(const string& buffer); - inputStreamStringAdapter(const string& buffer, const string::size_type begin, const string::size_type end); - - const bool eof() const; - void reset(); - const size_type read(value_type* const data, const size_type count); - const size_type skip(const size_type count); - -private: - - const string m_buffer; // do _NOT_ keep a reference... - const string::size_type m_begin; - const string::size_type m_end; - string::size_type m_pos; -}; - - -/** An adapter class for stringProxy input. - */ - -class inputStreamStringProxyAdapter : public inputStream -{ -public: - - /** @param buffer stringProxy object to wrap - */ - inputStreamStringProxyAdapter(const stringProxy& buffer); - - const bool eof() const; - void reset(); - const size_type read(value_type* const data, const size_type count); - const size_type skip(const size_type count); - -private: - - const stringProxy& m_buffer; - string::size_type m_pos; -}; - - -/** An adapter class for pointer to C++ standard input stream. - */ - -class inputStreamPointerAdapter : public inputStream -{ -public: - - /** @param is input stream to wrap - * @param own if set to 'true', the pointer will be deleted when - * this object is destroyed - */ - inputStreamPointerAdapter(std::istream* is, const bool own = true); - ~inputStreamPointerAdapter(); - - const bool eof() const; - void reset(); - const size_type read(value_type* const data, const size_type count); - const size_type skip(const size_type count); - -private: - - std::istream* m_stream; - const bool m_own; -}; - - -} // utility -} // vmime - - -#endif // VMIME_UTILITY_STREAM_HPP_INCLUDED |
