summaryrefslogtreecommitdiff
path: root/cpp/src/Ice/Initialize.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/Initialize.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/Initialize.cpp')
-rw-r--r--cpp/src/Ice/Initialize.cpp53
1 files changed, 49 insertions, 4 deletions
diff --git a/cpp/src/Ice/Initialize.cpp b/cpp/src/Ice/Initialize.cpp
index 30a3a4a1672..60adb309571 100644
--- a/cpp/src/Ice/Initialize.cpp
+++ b/cpp/src/Ice/Initialize.cpp
@@ -39,6 +39,24 @@ extern IceUtil::Handle<IceInternal::GC> theCollector;
}
+namespace
+{
+
+pair<const Byte*, const Byte*>
+makePair(const vector<Byte>& v)
+{
+ if(v.empty())
+ {
+ return pair<const Byte*, const Byte*>(0, 0);
+ }
+ else
+ {
+ return pair<const Byte*, const Byte*>(&v[0], &v[0] + v.size());
+ }
+}
+
+}
+
void
Ice::collectGarbage()
{
@@ -253,26 +271,53 @@ Ice::initialize(const InitializationData& initData, Int version)
InputStreamPtr
Ice::createInputStream(const CommunicatorPtr& communicator, const vector<Byte>& bytes)
{
- return new InputStreamI(communicator, bytes);
+ return createInputStream(communicator, makePair(bytes));
}
InputStreamPtr
Ice::createInputStream(const CommunicatorPtr& communicator, const vector<Byte>& bytes, const EncodingVersion& v)
{
- return new InputStreamI(communicator, bytes, v);
+ return createInputStream(communicator, makePair(bytes), v);
+}
+
+InputStreamPtr
+Ice::createInputStream(const CommunicatorPtr& communicator, const vector<Byte>& bytes, bool copyBytes)
+{
+ return createInputStream(communicator, makePair(bytes), copyBytes);
+}
+
+InputStreamPtr
+Ice::createInputStream(const CommunicatorPtr& communicator, const vector<Byte>& bytes, const EncodingVersion& v,
+ bool copyBytes)
+{
+ return createInputStream(communicator, makePair(bytes), v, copyBytes);
}
InputStreamPtr
Ice::createInputStream(const CommunicatorPtr& communicator, const pair<const Ice::Byte*, const Ice::Byte*>& bytes)
{
- return new InputStreamI(communicator, bytes);
+ return createInputStream(communicator, bytes, true);
}
InputStreamPtr
Ice::createInputStream(const CommunicatorPtr& communicator, const pair<const Ice::Byte*, const Ice::Byte*>& bytes,
const EncodingVersion& v)
{
- return new InputStreamI(communicator, bytes, v);
+ return createInputStream(communicator, bytes, v, true);
+}
+
+InputStreamPtr
+Ice::createInputStream(const CommunicatorPtr& communicator, const pair<const Ice::Byte*, const Ice::Byte*>& bytes,
+ bool copyBytes)
+{
+ return new InputStreamI(communicator, bytes, copyBytes);
+}
+
+InputStreamPtr
+Ice::createInputStream(const CommunicatorPtr& communicator, const pair<const Ice::Byte*, const Ice::Byte*>& bytes,
+ const EncodingVersion& v, bool copyBytes)
+{
+ return new InputStreamI(communicator, bytes, v, copyBytes);
}
OutputStreamPtr