aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVincent Richard <[email protected]>2004-12-16 09:49:55 +0000
committerVincent Richard <[email protected]>2004-12-16 09:49:55 +0000
commit0dbc72f835605aa17510ad8e9f9ecaa0d974fb06 (patch)
tree5caac322da63fd3a7fa7bf76141daef3a3d7d4be
parentWorking on 'maildir' implementation. (diff)
downloadvmime-0dbc72f835605aa17510ad8e9f9ecaa0d974fb06.tar.gz
vmime-0dbc72f835605aa17510ad8e9f9ecaa0d974fb06.zip
Added skip() method on inputStream.
-rw-r--r--src/utility/stream.cpp47
-rw-r--r--src/utility/stream.hpp11
2 files changed, 58 insertions, 0 deletions
diff --git a/src/utility/stream.cpp b/src/utility/stream.cpp
index 06d4ba27..15c2e8eb 100644
--- a/src/utility/stream.cpp
+++ b/src/utility/stream.cpp
@@ -127,6 +127,13 @@ const stream::size_type inputStreamAdapter::read
}
+const stream::size_type inputStreamAdapter::skip(const size_type count)
+{
+ m_stream.ignore(count);
+ return (m_stream.gcount());
+}
+
+
// inputStreamStringAdapter
@@ -175,6 +182,22 @@ const stream::size_type inputStreamStringAdapter::read
}
+const 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
@@ -216,6 +239,23 @@ const stream::size_type inputStreamStringProxyAdapter::read
}
+const 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
@@ -253,5 +293,12 @@ const stream::size_type inputStreamPointerAdapter::read
}
+const stream::size_type inputStreamPointerAdapter::skip(const size_type count)
+{
+ m_stream->ignore(count);
+ return (m_stream->gcount());
+}
+
+
} // utility
} // vmime
diff --git a/src/utility/stream.hpp b/src/utility/stream.hpp
index 8f8de54c..a34e6153 100644
--- a/src/utility/stream.hpp
+++ b/src/utility/stream.hpp
@@ -97,6 +97,13 @@ public:
* @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;
};
@@ -179,6 +186,7 @@ public:
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:
@@ -199,6 +207,7 @@ public:
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:
@@ -223,6 +232,7 @@ public:
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:
@@ -248,6 +258,7 @@ public:
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: