diff options
author | Benoit Foucher <benoit@zeroc.com> | 2013-01-23 14:36:10 +0100 |
---|---|---|
committer | Benoit Foucher <benoit@zeroc.com> | 2013-01-23 14:36:10 +0100 |
commit | 66bf1a7f2d0d46281ebf3d62caab6b9158eaa8a0 (patch) | |
tree | bd6aca447179f8d2e586c12cb961d683552504be /cpp/src/Ice/StreamI.cpp | |
parent | Minor code style fixes (diff) | |
download | ice-66bf1a7f2d0d46281ebf3d62caab6b9158eaa8a0.tar.bz2 ice-66bf1a7f2d0d46281ebf3d62caab6b9158eaa8a0.tar.xz ice-66bf1a7f2d0d46281ebf3d62caab6b9158eaa8a0.zip |
Fix for ICE-4841 - added no copy option when creating input stream
Diffstat (limited to 'cpp/src/Ice/StreamI.cpp')
-rw-r--r-- | cpp/src/Ice/StreamI.cpp | 55 |
1 files changed, 22 insertions, 33 deletions
diff --git a/cpp/src/Ice/StreamI.cpp b/cpp/src/Ice/StreamI.cpp index 5df5ec83b38..d204bba06bb 100644 --- a/cpp/src/Ice/StreamI.cpp +++ b/cpp/src/Ice/StreamI.cpp @@ -83,49 +83,21 @@ UserExceptionReader::__read(BasicStream* is) // // InputStreamI // -InputStreamI::InputStreamI(const CommunicatorPtr& communicator, const vector<Byte>& data) : +InputStreamI::InputStreamI(const CommunicatorPtr& communicator, const pair<const Byte*, const Byte*>& data, + bool copyData) : _communicator(communicator), _closure(0) { Instance* instance = getInstance(communicator).get(); - _is = new BasicStream(instance, instance->defaultsAndOverrides()->defaultEncoding, true); - _is->closure(this); - _is->writeBlob(data); - _is->i = _is->b.begin(); -} - -InputStreamI::InputStreamI(const CommunicatorPtr& communicator, const vector<Byte>& data, const EncodingVersion& v) : - _communicator(communicator), - _closure(0) -{ - Instance* instance = getInstance(communicator).get(); - _is = new BasicStream(instance, v, true); - _is->closure(this); - _is->writeBlob(data); - _is->i = _is->b.begin(); -} - -InputStreamI::InputStreamI(const CommunicatorPtr& communicator, const pair<const Byte*, const Byte*>& data) : - _communicator(communicator), - _closure(0) -{ - Instance* instance = getInstance(communicator).get(); - _is = new BasicStream(instance, instance->defaultsAndOverrides()->defaultEncoding, true); - _is->closure(this); - _is->writeBlob(data.first, data.second - data.first); - _is->i = _is->b.begin(); + initialize(instance, data, instance->defaultsAndOverrides()->defaultEncoding, copyData); } InputStreamI::InputStreamI(const CommunicatorPtr& communicator, const pair<const Byte*, const Byte*>& data, - const EncodingVersion& v) : + const EncodingVersion& v, bool copyData) : _communicator(communicator), _closure(0) { - Instance* instance = getInstance(communicator).get(); - _is = new BasicStream(instance, v, true); - _is->closure(this); - _is->writeBlob(data.first, data.second - data.first); - _is->i = _is->b.begin(); + initialize(getInstance(communicator).get(), data, v, copyData); } InputStreamI::~InputStreamI() @@ -415,6 +387,23 @@ InputStreamI::closure() const return _closure; } +void +InputStreamI::initialize(Instance* instance, const pair<const Byte*, const Byte*>& buf, const EncodingVersion& v, + bool copyData) +{ + if(copyData) + { + _is = new BasicStream(instance, v, true); + _is->writeBlob(buf.first, buf.second - buf.first); + _is->i = _is->b.begin(); + } + else + { + _is = new BasicStream(instance, v, buf.first, buf.second); + } + _is->closure(this); +} + // // OutputStreamI // |