summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--cpp/include/Ice/Stream.h10
-rw-r--r--cpp/src/Ice/StreamI.cpp47
-rw-r--r--cpp/src/Ice/StreamI.h12
-rw-r--r--cs/src/Ice/InputStream.cs6
-rw-r--r--cs/src/Ice/InputStreamI.cs20
-rw-r--r--cs/src/Ice/OutputStream.cs5
-rw-r--r--cs/src/Ice/OutputStreamI.cs23
-rw-r--r--java/src/Ice/InputStream.java6
-rw-r--r--java/src/Ice/InputStreamI.java22
-rw-r--r--java/src/Ice/OutputStream.java5
-rw-r--r--java/src/Ice/OutputStreamI.java26
11 files changed, 131 insertions, 51 deletions
diff --git a/cpp/include/Ice/Stream.h b/cpp/include/Ice/Stream.h
index f641f25ccf3..9166442b13a 100644
--- a/cpp/include/Ice/Stream.h
+++ b/cpp/include/Ice/Stream.h
@@ -73,7 +73,10 @@ public:
virtual void endSlice() = 0;
virtual void skipSlice() = 0;
- virtual void finished() = 0;
+ virtual void startEncapsulation() = 0;
+ virtual void endEncapsulation() = 0;
+
+ virtual void readPendingObjects() = 0;
};
class ICE_API OutputStream : public ::IceUtil::Shared
@@ -119,6 +122,11 @@ public:
virtual void startSlice() = 0;
virtual void endSlice() = 0;
+ virtual void startEncapsulation() = 0;
+ virtual void endEncapsulation() = 0;
+
+ virtual void writePendingObjects() = 0;
+
virtual void finished(::std::vector< ::Ice::Byte >&) = 0;
};
diff --git a/cpp/src/Ice/StreamI.cpp b/cpp/src/Ice/StreamI.cpp
index 5475f659f54..f60f7dd4bfd 100644
--- a/cpp/src/Ice/StreamI.cpp
+++ b/cpp/src/Ice/StreamI.cpp
@@ -33,7 +33,7 @@ IceInternal::BasicOutputStream::BasicOutputStream(IceInternal::Instance* instanc
// InputStreamI
//
Ice::InputStreamI::InputStreamI(const Ice::CommunicatorPtr& communicator, const vector<Byte>& data) :
- _communicator(communicator), _is(IceInternal::getInstance(communicator).get(), this), _readObjects(false)
+ _communicator(communicator), _is(IceInternal::getInstance(communicator).get(), this)
{
_is.b = data;
_is.i = _is.b.begin();
@@ -210,7 +210,6 @@ patchObject(void* addr, ObjectPtr& v)
void
Ice::InputStreamI::readObject(const ReadObjectCallbackPtr& cb)
{
- _readObjects = true;
_callbacks.push_back(cb); // Keep reference to callback.
_is.read(patchObject, cb.get());
}
@@ -242,25 +241,34 @@ Ice::InputStreamI::endSlice()
}
void
+Ice::InputStreamI::startEncapsulation()
+{
+ _is.startReadEncaps();
+}
+
+void
+Ice::InputStreamI::endEncapsulation()
+{
+ _is.endReadEncaps();
+}
+
+void
Ice::InputStreamI::skipSlice()
{
_is.skipSlice();
}
void
-Ice::InputStreamI::finished()
+Ice::InputStreamI::readPendingObjects()
{
- if(_readObjects)
- {
- _is.readPendingObjects();
- }
+ _is.readPendingObjects();
}
//
// OutputStreamI
//
Ice::OutputStreamI::OutputStreamI(const Ice::CommunicatorPtr& communicator) :
- _communicator(communicator), _os(IceInternal::getInstance(communicator).get(), this), _writeObjects(false)
+ _communicator(communicator), _os(IceInternal::getInstance(communicator).get(), this)
{
}
@@ -385,7 +393,6 @@ Ice::OutputStreamI::writeProxy(const ObjectPrx& v)
void
Ice::OutputStreamI::writeObject(const ObjectPtr& v)
{
- _writeObjects = true;
_os.write(v);
}
@@ -414,12 +421,26 @@ Ice::OutputStreamI::endSlice()
}
void
+Ice::OutputStreamI::startEncapsulation()
+{
+ _os.startWriteEncaps();
+}
+
+void
+Ice::OutputStreamI::endEncapsulation()
+{
+ _os.endWriteEncaps();
+}
+
+void
+Ice::OutputStreamI::writePendingObjects()
+{
+ _os.writePendingObjects();
+}
+
+void
Ice::OutputStreamI::finished(vector<Byte>& bytes)
{
- if(_writeObjects)
- {
- _os.writePendingObjects();
- }
bytes.swap(_os.b);
}
diff --git a/cpp/src/Ice/StreamI.h b/cpp/src/Ice/StreamI.h
index 7868c932435..bf930509001 100644
--- a/cpp/src/Ice/StreamI.h
+++ b/cpp/src/Ice/StreamI.h
@@ -98,13 +98,15 @@ public:
virtual void endSlice();
virtual void skipSlice();
- virtual void finished();
+ virtual void startEncapsulation();
+ virtual void endEncapsulation();
+
+ virtual void readPendingObjects();
private:
Ice::CommunicatorPtr _communicator;
IceInternal::BasicInputStream _is;
- bool _readObjects;
::std::vector< ReadObjectCallbackPtr > _callbacks;
};
@@ -158,13 +160,17 @@ public:
virtual void startSlice();
virtual void endSlice();
+ virtual void startEncapsulation();
+ virtual void endEncapsulation();
+
+ virtual void writePendingObjects();
+
virtual void finished(::std::vector< ::Ice::Byte >&);
private:
Ice::CommunicatorPtr _communicator;
IceInternal::BasicOutputStream _os;
- bool _writeObjects;
};
}
diff --git a/cs/src/Ice/InputStream.cs b/cs/src/Ice/InputStream.cs
index 3bbb2decfcf..937bcd5ac9a 100644
--- a/cs/src/Ice/InputStream.cs
+++ b/cs/src/Ice/InputStream.cs
@@ -53,7 +53,11 @@ namespace Ice
void endSlice();
void skipSlice();
- void finished();
+ void startEncapsulation();
+ void endEncapsulation();
+
+ void readPendingObjects();
+
void destroy();
}
}
diff --git a/cs/src/Ice/InputStreamI.cs b/cs/src/Ice/InputStreamI.cs
index f335bdfc6d8..23328b63c53 100644
--- a/cs/src/Ice/InputStreamI.cs
+++ b/cs/src/Ice/InputStreamI.cs
@@ -14,7 +14,6 @@ namespace Ice
public InputStreamI(Communicator communicator, byte[] data)
{
_communicator = communicator;
- _readObjects = false;
_is = new IceInternal.BasicInputStream(Util.getInstance(communicator), this);
_is.resize(data.Length, true);
@@ -151,7 +150,6 @@ namespace Ice
public void readObject(ReadObjectCallback cb)
{
- _readObjects = true;
_is.readObject(new Patcher(cb));
}
@@ -180,12 +178,19 @@ namespace Ice
_is.skipSlice();
}
- public void finished()
+ public void startEncapsulation()
{
- if(_readObjects)
- {
- _is.readPendingObjects();
- }
+ _is.startReadEncaps();
+ }
+
+ public void endEncapsulation()
+ {
+ _is.endReadEncaps();
+ }
+
+ public void readPendingObjects()
+ {
+ _is.readPendingObjects();
}
public void destroy()
@@ -199,6 +204,5 @@ namespace Ice
private Communicator _communicator;
private IceInternal.BasicInputStream _is;
- private bool _readObjects;
}
}
diff --git a/cs/src/Ice/OutputStream.cs b/cs/src/Ice/OutputStream.cs
index c41d0695780..acdd2fe4f24 100644
--- a/cs/src/Ice/OutputStream.cs
+++ b/cs/src/Ice/OutputStream.cs
@@ -50,6 +50,11 @@ namespace Ice
void startSlice();
void endSlice();
+ void startEncapsulation();
+ void endEncapsulation();
+
+ void writePendingObjects();
+
byte[] finished();
void destroy();
}
diff --git a/cs/src/Ice/OutputStreamI.cs b/cs/src/Ice/OutputStreamI.cs
index 884fc127da8..b60541718b4 100644
--- a/cs/src/Ice/OutputStreamI.cs
+++ b/cs/src/Ice/OutputStreamI.cs
@@ -15,7 +15,6 @@ namespace Ice
{
_communicator = communicator;
_os = new IceInternal.BasicOutputStream(Util.getInstance(communicator), this);
- _writeObjects = false;
}
~OutputStreamI()
@@ -120,7 +119,6 @@ namespace Ice
public void writeObject(Ice.Object v)
{
- _writeObjects = true;
_os.writeObject(v);
}
@@ -144,13 +142,23 @@ namespace Ice
_os.endWriteSlice();
}
- public byte[] finished()
+ public void startEncapsulation()
{
- if(_writeObjects)
- {
- _os.writePendingObjects();
- }
+ _os.startWriteEncaps();
+ }
+
+ public void endEncapsulation()
+ {
+ _os.endWriteEncaps();
+ }
+
+ public void writePendingObjects()
+ {
+ _os.writePendingObjects();
+ }
+ public byte[] finished()
+ {
IceInternal.ByteBuffer buf = _os.prepareWrite();
byte[] result = new byte[buf.limit()];
buf.get(result);
@@ -169,6 +177,5 @@ namespace Ice
private Communicator _communicator;
private IceInternal.BasicOutputStream _os;
- private bool _writeObjects;
}
}
diff --git a/java/src/Ice/InputStream.java b/java/src/Ice/InputStream.java
index 09261f9a208..314be25ab7c 100644
--- a/java/src/Ice/InputStream.java
+++ b/java/src/Ice/InputStream.java
@@ -53,6 +53,10 @@ public interface InputStream
void endSlice();
void skipSlice();
- void finished();
+ void startEncapsulation();
+ void endEncapsulation();
+
+ void readPendingObjects();
+
void destroy();
}
diff --git a/java/src/Ice/InputStreamI.java b/java/src/Ice/InputStreamI.java
index bb67207e9be..e901b5dd8a1 100644
--- a/java/src/Ice/InputStreamI.java
+++ b/java/src/Ice/InputStreamI.java
@@ -15,7 +15,6 @@ public class InputStreamI implements InputStream
InputStreamI(Communicator communicator, byte[] data)
{
_communicator = communicator;
- _readObjects = false;
_is = new IceInternal.BasicInputStream(Util.getInstance(communicator), this);
_is.resize(data.length, true);
@@ -177,7 +176,6 @@ public class InputStreamI implements InputStream
public void
readObject(ReadObjectCallback cb)
{
- _readObjects = true;
_is.readObject(new Patcher(cb));
}
@@ -213,12 +211,21 @@ public class InputStreamI implements InputStream
}
public void
- finished()
+ startEncapsulation()
{
- if(_readObjects)
- {
- _is.readPendingObjects();
- }
+ _is.startReadEncaps();
+ }
+
+ public void
+ endEncapsulation()
+ {
+ _is.endReadEncaps();
+ }
+
+ public void
+ readPendingObjects()
+ {
+ _is.readPendingObjects();
}
public void
@@ -233,5 +240,4 @@ public class InputStreamI implements InputStream
private Communicator _communicator;
private IceInternal.BasicInputStream _is;
- private boolean _readObjects;
}
diff --git a/java/src/Ice/OutputStream.java b/java/src/Ice/OutputStream.java
index 529355f1281..d38e9586fcd 100644
--- a/java/src/Ice/OutputStream.java
+++ b/java/src/Ice/OutputStream.java
@@ -50,6 +50,11 @@ public interface OutputStream
void startSlice();
void endSlice();
+ void startEncapsulation();
+ void endEncapsulation();
+
+ void writePendingObjects();
+
byte[] finished();
void destroy();
}
diff --git a/java/src/Ice/OutputStreamI.java b/java/src/Ice/OutputStreamI.java
index c3b82a3f3cc..2855cb4bceb 100644
--- a/java/src/Ice/OutputStreamI.java
+++ b/java/src/Ice/OutputStreamI.java
@@ -16,7 +16,6 @@ public class OutputStreamI implements OutputStream
{
_communicator = communicator;
_os = new IceInternal.BasicOutputStream(Util.getInstance(communicator), this);
- _writeObjects = false;
}
protected void
@@ -143,7 +142,6 @@ public class OutputStreamI implements OutputStream
public void
writeObject(Ice.Object v)
{
- _writeObjects = true;
_os.writeObject(v);
}
@@ -171,14 +169,27 @@ public class OutputStreamI implements OutputStream
_os.endWriteSlice();
}
+ public void
+ startEncapsulation()
+ {
+ _os.startWriteEncaps();
+ }
+
+ public void
+ endEncapsulation()
+ {
+ _os.endWriteEncaps();
+ }
+
+ public void
+ writePendingObjects()
+ {
+ _os.writePendingObjects();
+ }
+
public byte[]
finished()
{
- if(_writeObjects)
- {
- _os.writePendingObjects();
- }
-
java.nio.ByteBuffer buf = _os.prepareWrite();
byte[] result = new byte[buf.limit()];
buf.get(result);
@@ -198,5 +209,4 @@ public class OutputStreamI implements OutputStream
private Communicator _communicator;
private IceInternal.BasicOutputStream _os;
- private boolean _writeObjects;
}