summaryrefslogtreecommitdiff
path: root/cpp/src/Ice/Object.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'cpp/src/Ice/Object.cpp')
-rw-r--r--cpp/src/Ice/Object.cpp167
1 files changed, 56 insertions, 111 deletions
diff --git a/cpp/src/Ice/Object.cpp b/cpp/src/Ice/Object.cpp
index 1f3f6508bbb..a8686c343bf 100644
--- a/cpp/src/Ice/Object.cpp
+++ b/cpp/src/Ice/Object.cpp
@@ -14,12 +14,19 @@
#include <Ice/Direct.h>
#include <Ice/LocalException.h>
#include <Ice/Stream.h>
+#include <Ice/SlicedData.h>
using namespace std;
using namespace Ice;
using namespace IceInternal;
-IceUtil::Shared* Ice::upCast(Object* p) { return p; }
+Object* Ice::upCast(Object* p) { return p; }
+
+void
+Ice::__patch(ObjectPtr& obj, ObjectPtr& v)
+{
+ obj = v;
+}
bool
Ice::Object::operator==(const Object& r) const
@@ -99,42 +106,45 @@ Ice::Object::ice_postUnmarshal()
DispatchStatus
Ice::Object::___ice_isA(Incoming& __inS, const Current& __current)
{
- BasicStream* __is = __inS.is();
- __is->startReadEncaps();
+ BasicStream* __is = __inS.startReadParams();
string __id;
__is->read(__id, false);
- __is->endReadEncaps();
+ __inS.endReadParams();
bool __ret = ice_isA(__id, __current);
- BasicStream* __os = __inS.os();
+ BasicStream* __os = __inS.__startWriteParams(DefaultFormat);
__os->write(__ret);
+ __inS.__endWriteParams(true);
return DispatchOK;
}
DispatchStatus
Ice::Object::___ice_ping(Incoming& __inS, const Current& __current)
{
- __inS.is()->skipEmptyEncaps();
+ __inS.readEmptyParams();
ice_ping(__current);
+ __inS.__writeEmptyParams();
return DispatchOK;
}
DispatchStatus
Ice::Object::___ice_ids(Incoming& __inS, const Current& __current)
{
- __inS.is()->skipEmptyEncaps();
+ __inS.readEmptyParams();
vector<string> __ret = ice_ids(__current);
- BasicStream* __os = __inS.os();
+ BasicStream* __os = __inS.__startWriteParams(DefaultFormat);
__os->write(&__ret[0], &__ret[0] + __ret.size(), false);
+ __inS.__endWriteParams(true);
return DispatchOK;
}
DispatchStatus
Ice::Object::___ice_id(Incoming& __inS, const Current& __current)
{
- __inS.is()->skipEmptyEncaps();
+ __inS.readEmptyParams();
string __ret = ice_id(__current);
- BasicStream* __os = __inS.os();
+ BasicStream* __os = __inS.__startWriteParams(DefaultFormat);
__os->write(__ret, false);
+ __inS.__endWriteParams(true);
return DispatchOK;
}
@@ -238,73 +248,6 @@ Ice::Object::__collocDispatch(IceInternal::Direct& request)
return request.run(this);
}
-void
-Ice::Object::__write(BasicStream* __os) const
-{
- __os->writeTypeId(ice_staticId());
- __os->startWriteSlice();
- __os->writeSize(0); // For compatibility with the old AFM.
- __os->endWriteSlice();
-}
-
-void
-Ice::Object::__read(BasicStream* __is, bool __rid)
-{
- if(__rid)
- {
- string myId;
- __is->readTypeId(myId);
- }
-
- __is->startReadSlice();
-
- // For compatibility with the old AFM.
- Int sz;
- __is->readSize(sz);
- if(sz != 0)
- {
- throw Ice::MarshalException(__FILE__, __LINE__);
- }
-
- __is->endReadSlice();
-}
-
-void
-Ice::Object::__write(const OutputStreamPtr& __outS) const
-{
- __outS->writeTypeId(ice_staticId());
- __outS->startSlice();
- __outS->writeSize(0); // For compatibility with the old AFM.
- __outS->endSlice();
-}
-
-void
-Ice::Object::__read(const InputStreamPtr& __inS, bool __rid)
-{
- if(__rid)
- {
- __inS->readTypeId();
- }
-
- __inS->startSlice();
-
- // For compatibility with the old AFM.
- Int sz = __inS->readSize();
- if(sz != 0)
- {
- throw Ice::MarshalException(__FILE__, __LINE__);
- }
-
- __inS->endSlice();
-}
-
-void
-Ice::__patch__ObjectPtr(void* __addr, ObjectPtr& v)
-{
- ObjectPtr* p = static_cast<ObjectPtr*>(__addr);
- *p = v;
-}
-
namespace
{
@@ -364,15 +307,19 @@ Ice::Object::__checkMode(OperationMode expected, OperationMode received)
DispatchStatus
Ice::Blobject::__dispatch(Incoming& in, const Current& current)
{
- vector<Byte> inParams;
- BasicStream* is = in.is();
- is->startReadEncaps();
- Int sz = is->getReadEncapsSize();
- is->readBlob(inParams, sz);
- is->endReadEncaps();
- vector<Byte> outParams;
- bool ok = ice_invoke(inParams, outParams, current);
- in.os()->writeBlob(outParams);
+ const Byte* inEncaps;
+ Int sz;
+ in.readParamEncaps(inEncaps, sz);
+ vector<Byte> outEncaps;
+ bool ok = ice_invoke(vector<Byte>(inEncaps, inEncaps + sz), outEncaps, current);
+ if(outEncaps.empty())
+ {
+ in.__writeParamEncaps(0, 0, ok);
+ }
+ else
+ {
+ in.__writeParamEncaps(&outEncaps[0], static_cast<Ice::Int>(outEncaps.size()), ok);
+ }
if(ok)
{
return DispatchOK;
@@ -386,16 +333,20 @@ Ice::Blobject::__dispatch(Incoming& in, const Current& current)
DispatchStatus
Ice::BlobjectArray::__dispatch(Incoming& in, const Current& current)
{
- pair<const Byte*, const Byte*> inParams;
- BasicStream* is = in.is();
- is->startReadEncaps();
- Int sz = is->getReadEncapsSize();
- is->readBlob(inParams.first, sz);
- inParams.second = inParams.first + sz;
- is->endReadEncaps();
- vector<Byte> outParams;
- bool ok = ice_invoke(inParams, outParams, current);
- in.os()->writeBlob(outParams);
+ pair<const Byte*, const Byte*> inEncaps;
+ Int sz;
+ in.readParamEncaps(inEncaps.first, sz);
+ inEncaps.second = inEncaps.first + sz;
+ vector<Byte> outEncaps;
+ bool ok = ice_invoke(inEncaps, outEncaps, current);
+ if(outEncaps.empty())
+ {
+ in.__writeParamEncaps(0, 0, ok);
+ }
+ else
+ {
+ in.__writeParamEncaps(&outEncaps[0], static_cast<Ice::Int>(outEncaps.size()), ok);
+ }
if(ok)
{
return DispatchOK;
@@ -409,16 +360,13 @@ Ice::BlobjectArray::__dispatch(Incoming& in, const Current& current)
DispatchStatus
Ice::BlobjectAsync::__dispatch(Incoming& in, const Current& current)
{
- vector<Byte> inParams;
- BasicStream* is = in.is();
- is->startReadEncaps();
- Int sz = is->getReadEncapsSize();
- is->readBlob(inParams, sz);
- is->endReadEncaps();
+ const Byte* inEncaps;
+ Int sz;
+ in.readParamEncaps(inEncaps, sz);
AMD_Object_ice_invokePtr cb = new ::IceAsync::Ice::AMD_Object_ice_invoke(in);
try
{
- ice_invoke_async(cb, inParams, current);
+ ice_invoke_async(cb, vector<Byte>(inEncaps, inEncaps + sz), current);
}
catch(const ::std::exception& ex)
{
@@ -434,17 +382,14 @@ Ice::BlobjectAsync::__dispatch(Incoming& in, const Current& current)
DispatchStatus
Ice::BlobjectArrayAsync::__dispatch(Incoming& in, const Current& current)
{
- pair<const Byte*, const Byte*> inParams;
- BasicStream* is = in.is();
- is->startReadEncaps();
- Int sz = is->getReadEncapsSize();
- is->readBlob(inParams.first, sz);
- inParams.second = inParams.first + sz;
- is->endReadEncaps();
+ pair<const Byte*, const Byte*> inEncaps;
+ Int sz;
+ in.readParamEncaps(inEncaps.first, sz);
+ inEncaps.second = inEncaps.first + sz;
AMD_Object_ice_invokePtr cb = new ::IceAsync::Ice::AMD_Object_ice_invoke(in);
try
{
- ice_invoke_async(cb, inParams, current);
+ ice_invoke_async(cb, inEncaps, current);
}
catch(const ::std::exception& ex)
{