summaryrefslogtreecommitdiff
path: root/cpp
diff options
context:
space:
mode:
authorMark Spruiell <mes@zeroc.com>2004-11-08 21:30:39 +0000
committerMark Spruiell <mes@zeroc.com>2004-11-08 21:30:39 +0000
commit0a2c609553bc07209a1a545b8cf90ea7ca03a2c2 (patch)
tree14c5cf403e7f460d83d2b88e8d29d88a140b82d2 /cpp
parentadding --stream option (diff)
downloadice-0a2c609553bc07209a1a545b8cf90ea7ca03a2c2.tar.bz2
ice-0a2c609553bc07209a1a545b8cf90ea7ca03a2c2.tar.xz
ice-0a2c609553bc07209a1a545b8cf90ea7ca03a2c2.zip
adding support for encapsulations, pending objects
Diffstat (limited to 'cpp')
-rw-r--r--cpp/include/Ice/Stream.h10
-rw-r--r--cpp/src/Ice/StreamI.cpp47
-rw-r--r--cpp/src/Ice/StreamI.h12
3 files changed, 52 insertions, 17 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;
};
}