aboutsummaryrefslogtreecommitdiffstats
path: root/src/utility/stream.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/utility/stream.cpp')
-rw-r--r--src/utility/stream.cpp485
1 files changed, 0 insertions, 485 deletions
diff --git a/src/utility/stream.cpp b/src/utility/stream.cpp
index ec30b7d3..1c940c2a 100644
--- a/src/utility/stream.cpp
+++ b/src/utility/stream.cpp
@@ -22,503 +22,18 @@
//
#include "vmime/utility/stream.hpp"
-#include "vmime/utility/stringProxy.hpp"
-#include <algorithm> // for std::copy
-#include <iterator> // for std::back_inserter
-
-#if VMIME_HAVE_MESSAGING_FEATURES
- #include "vmime/net/socket.hpp"
-#endif
namespace vmime {
namespace utility {
-// stream
-
stream::size_type stream::getBlockSize()
{
return 32768; // 32 KB
}
-// Helpers
-
-outputStream& operator<<(outputStream& os, const stream::value_type c)
-{
- os.write(&c, 1);
- return (os);
-}
-
-
-outputStream& operator<<(outputStream& os, const string& str)
-{
- os.write(str.data(), str.length());
- return (os);
-}
-
-
-stream::size_type bufferedStreamCopy(inputStream& is, outputStream& os)
-{
- return bufferedStreamCopy(is, os, 0, NULL);
-}
-
-
-stream::size_type bufferedStreamCopy(inputStream& is, outputStream& os,
- const stream::size_type length, progressListener* progress)
-{
- const stream::size_type blockSize =
- std::min(is.getBlockSize(), os.getBlockSize());
-
- std::vector <stream::value_type> vbuffer(blockSize);
-
- stream::value_type* buffer = &vbuffer.front();
- stream::size_type total = 0;
-
- if (progress != NULL)
- progress->start(length);
-
- while (!is.eof())
- {
- const stream::size_type read = is.read(buffer, blockSize);
-
- if (read != 0)
- {
- os.write(buffer, read);
- total += read;
-
- if (progress != NULL)
- progress->progress(total, std::max(total, length));
- }
- }
-
- if (progress != NULL)
- progress->stop(total);
-
- return (total);
-}
-
-
-
-// outputStreamAdapter
-
-outputStreamAdapter::outputStreamAdapter(std::ostream& os)
- : m_stream(os)
-{
-}
-
-
-void outputStreamAdapter::write
- (const value_type* const data, const size_type count)
-{
- m_stream.exceptions(std::ios_base::badbit);
- m_stream.write(data, count);
-}
-
-
-void outputStreamAdapter::flush()
-{
- m_stream.exceptions(std::ios_base::badbit);
- m_stream.flush();
-}
-
-
-
-// outputStreamStringAdapter
-
-outputStreamStringAdapter::outputStreamStringAdapter(string& buffer)
- : m_buffer(buffer)
-{
-}
-
-
-void outputStreamStringAdapter::write(const value_type* const data, const size_type count)
-{
- m_buffer.append(data, count);
-}
-
-
-void outputStreamStringAdapter::flush()
-{
- // Do nothing
-}
-
-
-
-// outputStreamByteArrayAdapter
-
-outputStreamByteArrayAdapter::outputStreamByteArrayAdapter(byteArray& array)
- : m_array(array)
-{
-}
-
-
-void outputStreamByteArrayAdapter::write(const value_type* const data, const size_type count)
-{
- m_array.insert(m_array.end(), data, data + count);
-}
-
-
-void outputStreamByteArrayAdapter::flush()
-{
- // Do nothing
-}
-
-
-
-// inputStreamAdapter
-
-inputStreamAdapter::inputStreamAdapter(std::istream& is)
- : m_stream(is)
-{
-}
-
-
-bool inputStreamAdapter::eof() const
-{
- return (m_stream.eof());
-}
-
-
-void inputStreamAdapter::reset()
-{
- m_stream.exceptions(std::ios_base::badbit);
- m_stream.seekg(0, std::ios::beg);
- m_stream.clear();
-}
-
-
-stream::size_type inputStreamAdapter::read
- (value_type* const data, const size_type count)
-{
- m_stream.exceptions(std::ios_base::badbit);
- m_stream.read(data, count);
- return (m_stream.gcount());
-}
-
-
-stream::size_type inputStreamAdapter::skip(const size_type count)
-{
- m_stream.exceptions(std::ios_base::badbit);
- m_stream.ignore(count);
- return (m_stream.gcount());
-}
-
-
-
-// inputStreamStringAdapter
-
-inputStreamStringAdapter::inputStreamStringAdapter(const string& buffer)
- : m_buffer(buffer), m_begin(0), m_end(buffer.length()), m_pos(0)
-{
-}
-
-
-inputStreamStringAdapter::inputStreamStringAdapter(const string& buffer,
- const string::size_type begin, const string::size_type end)
- : m_buffer(buffer), m_begin(begin), m_end(end), m_pos(begin)
-{
-}
-
-
-bool inputStreamStringAdapter::eof() const
-{
- return (m_pos >= m_end);
-}
-
-
-void inputStreamStringAdapter::reset()
-{
- m_pos = m_begin;
-}
-
-
-stream::size_type inputStreamStringAdapter::read
- (value_type* const data, const size_type count)
-{
- if (m_pos + count >= m_end)
- {
- const size_type remaining = m_end - m_pos;
-
- std::copy(m_buffer.begin() + m_pos, m_buffer.end(), data);
- m_pos = m_end;
- return (remaining);
- }
- else
- {
- std::copy(m_buffer.begin() + m_pos, m_buffer.begin() + m_pos + count, data);
- m_pos += count;
- return (count);
- }
-}
-
-
-stream::size_type inputStreamStringAdapter::skip(const size_type count)
-{
- if (m_pos + count >= m_end)
- {
- const size_type remaining = m_end - m_pos;
- m_pos = m_end;
- return (remaining);
- }
- else
- {
- m_pos += count;
- return (count);
- }
-}
-
-
-
-// inputStreamStringProxyAdapter
-
-inputStreamStringProxyAdapter::inputStreamStringProxyAdapter(const stringProxy& buffer)
- : m_buffer(buffer), m_pos(0)
-{
-}
-
-
-bool inputStreamStringProxyAdapter::eof() const
-{
- return (m_pos >= m_buffer.length());
-}
-
-
-void inputStreamStringProxyAdapter::reset()
-{
- m_pos = 0;
-}
-
-
-stream::size_type inputStreamStringProxyAdapter::read
- (value_type* const data, const size_type count)
-{
- const size_type remaining = m_buffer.length() - m_pos;
-
- if (count > remaining)
- {
- std::copy(m_buffer.it_begin() + m_pos, m_buffer.it_end(), data);
- m_pos = m_buffer.length();
- return (remaining);
- }
- else
- {
- std::copy(m_buffer.it_begin() + m_pos, m_buffer.it_begin() + m_pos + count, data);
- m_pos += count;
- return (count);
- }
-}
-
-
-stream::size_type inputStreamStringProxyAdapter::skip(const size_type count)
-{
- const size_type remaining = m_buffer.length() - m_pos;
-
- if (count > remaining)
- {
- m_pos = m_buffer.length();
- return (remaining);
- }
- else
- {
- m_pos += count;
- return (count);
- }
-}
-
-
-
-// inputStreamPointerAdapter
-
-inputStreamPointerAdapter::inputStreamPointerAdapter(std::istream* is, const bool own)
- : m_stream(is), m_own(own)
-{
-}
-
-
-inputStreamPointerAdapter::inputStreamPointerAdapter(const inputStreamPointerAdapter&)
- : inputStream(), m_stream(NULL), m_own(false)
-{
- // Not copiable
-}
-
-
-inputStreamPointerAdapter::~inputStreamPointerAdapter()
-{
- if (m_own)
- delete (m_stream);
-}
-
-
-bool inputStreamPointerAdapter::eof() const
-{
- return (m_stream->eof());
-}
-
-
-void inputStreamPointerAdapter::reset()
-{
- m_stream->exceptions(std::ios_base::badbit);
- m_stream->seekg(0, std::ios::beg);
- m_stream->clear();
-}
-
-
-stream::size_type inputStreamPointerAdapter::read
- (value_type* const data, const size_type count)
-{
- m_stream->exceptions(std::ios_base::badbit);
- m_stream->read(data, count);
- return (m_stream->gcount());
-}
-
-
-stream::size_type inputStreamPointerAdapter::skip(const size_type count)
-{
- m_stream->exceptions(std::ios_base::badbit);
- m_stream->ignore(count);
- return (m_stream->gcount());
-}
-
-
-
-// inputStreamByteBufferAdapter
-
-inputStreamByteBufferAdapter::inputStreamByteBufferAdapter(const byte_t* buffer, const size_type length)
- : m_buffer(buffer), m_length(length), m_pos(0)
-{
-}
-
-
-bool inputStreamByteBufferAdapter::eof() const
-{
- return m_pos >= m_length;
-}
-
-
-void inputStreamByteBufferAdapter::reset()
-{
- m_pos = 0;
-}
-
-
-stream::size_type inputStreamByteBufferAdapter::read
- (value_type* const data, const size_type count)
-{
- const size_type remaining = m_length - m_pos;
-
- if (remaining < count)
- {
- std::copy(m_buffer + m_pos, m_buffer + m_pos + remaining, data);
- m_pos += remaining;
-
- return remaining;
- }
- else
- {
- std::copy(m_buffer + m_pos, m_buffer + m_pos + count, data);
- m_pos += count;
-
- return count;
- }
-}
-
-
-stream::size_type inputStreamByteBufferAdapter::skip(const size_type count)
-{
- const size_type remaining = m_length - m_pos;
-
- if (remaining < count)
- {
- m_pos += remaining;
- return remaining;
- }
- else
- {
- m_pos += count;
- return count;
- }
-}
-
-
-
-#ifdef VMIME_HAVE_MESSAGING_FEATURES
-
-
-// outputStreamSocketAdapter
-
-outputStreamSocketAdapter::outputStreamSocketAdapter(net::socket& sok)
- : m_socket(sok)
-{
-}
-
-
-void outputStreamSocketAdapter::write
- (const value_type* const data, const size_type count)
-{
- m_socket.sendRaw(data, count);
-}
-
-
-void outputStreamSocketAdapter::flush()
-{
- // Do nothing
-}
-
-
-stream::size_type outputStreamSocketAdapter::getBlockSize()
-{
- return m_socket.getBlockSize();
-}
-
-
-
-// inputStreamSocketAdapter
-
-inputStreamSocketAdapter::inputStreamSocketAdapter(net::socket& sok)
- : m_socket(sok)
-{
-}
-
-
-bool inputStreamSocketAdapter::eof() const
-{
- // Can't know...
- return false;
-}
-
-
-void inputStreamSocketAdapter::reset()
-{
- // Not supported
-}
-
-
-stream::size_type inputStreamSocketAdapter::read
- (value_type* const data, const size_type count)
-{
- return m_socket.receiveRaw(data, count);
-}
-
-
-stream::size_type inputStreamSocketAdapter::skip
- (const size_type /* count */)
-{
- // Not supported
- return 0;
-}
-
-
-stream::size_type inputStreamSocketAdapter::getBlockSize()
-{
- return m_socket.getBlockSize();
-}
-
-
-#endif // VMIME_HAVE_MESSAGING_FEATURES
-
-
} // utility
} // vmime