diff options
Diffstat (limited to 'cpp')
-rw-r--r-- | cpp/include/Ice/Stream.h | 4 | ||||
-rw-r--r-- | cpp/src/Ice/BasicStream.cpp | 2 | ||||
-rw-r--r-- | cpp/src/Ice/StreamI.cpp | 24 | ||||
-rw-r--r-- | cpp/src/Ice/StreamI.h | 4 |
4 files changed, 34 insertions, 0 deletions
diff --git a/cpp/include/Ice/Stream.h b/cpp/include/Ice/Stream.h index a4f3d5721c9..c4b3a452116 100644 --- a/cpp/include/Ice/Stream.h +++ b/cpp/include/Ice/Stream.h @@ -88,6 +88,8 @@ public: virtual void skipEncapsulation() = 0; virtual void readPendingObjects() = 0; + + virtual void rewind() = 0; }; class ICE_API OutputStream : public ::IceUtil::Shared @@ -149,6 +151,8 @@ public: virtual void writePendingObjects() = 0; virtual void finished(::std::vector< ::Ice::Byte >&) = 0; + + virtual void reset(bool) = 0; }; class ICE_API ObjectReader : public ::Ice::Object diff --git a/cpp/src/Ice/BasicStream.cpp b/cpp/src/Ice/BasicStream.cpp index 069d6ddee52..0841bb297f5 100644 --- a/cpp/src/Ice/BasicStream.cpp +++ b/cpp/src/Ice/BasicStream.cpp @@ -72,6 +72,8 @@ IceInternal::BasicStream::clear() } delete _objectList; + _objectList = 0; + _sliceObjects = true; } void* diff --git a/cpp/src/Ice/StreamI.cpp b/cpp/src/Ice/StreamI.cpp index c0006b817c0..c347c653f5a 100644 --- a/cpp/src/Ice/StreamI.cpp +++ b/cpp/src/Ice/StreamI.cpp @@ -327,6 +327,13 @@ Ice::InputStreamI::readPendingObjects() _is->readPendingObjects(); } +void +Ice::InputStreamI::rewind() +{ + _is->clear(); + _is->i = _is->b.begin(); +} + // // OutputStreamI // @@ -631,6 +638,23 @@ Ice::OutputStreamI::finished(vector<Byte>& bytes) vector<Byte>(_os->b.begin(), _os->b.end()).swap(bytes); } +void +Ice::OutputStreamI::reset(bool clearBuffer) +{ + _os->clear(); + + if(clearBuffer) + { + _os->b.clear(); + } + else + { + _os->b.reset(); + } + + _os->i = _os->b.begin(); +} + // // ObjectReader // diff --git a/cpp/src/Ice/StreamI.h b/cpp/src/Ice/StreamI.h index 874f7624b6d..4f5aba6b70f 100644 --- a/cpp/src/Ice/StreamI.h +++ b/cpp/src/Ice/StreamI.h @@ -85,6 +85,8 @@ public: virtual void readPendingObjects(); + virtual void rewind(); + private: Ice::CommunicatorPtr _communicator; @@ -158,6 +160,8 @@ public: virtual void finished(std::vector< Ice::Byte >&); + virtual void reset(bool); + private: Ice::CommunicatorPtr _communicator; |