summaryrefslogtreecommitdiff
path: root/cpp/src/Ice/StreamI.cpp
diff options
context:
space:
mode:
authorBenoit Foucher <benoit@zeroc.com>2013-01-23 14:36:10 +0100
committerBenoit Foucher <benoit@zeroc.com>2013-01-23 14:36:10 +0100
commit66bf1a7f2d0d46281ebf3d62caab6b9158eaa8a0 (patch)
treebd6aca447179f8d2e586c12cb961d683552504be /cpp/src/Ice/StreamI.cpp
parentMinor code style fixes (diff)
downloadice-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.cpp55
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
//