summaryrefslogtreecommitdiff
path: root/py/modules/IcePy/Operation.cpp
diff options
context:
space:
mode:
authorMark Spruiell <mes@zeroc.com>2007-11-08 19:23:27 -0800
committerMark Spruiell <mes@zeroc.com>2007-11-08 19:23:27 -0800
commit24aa43df750992b9f3b6d99419ab0c4071a14e8b (patch)
treeed39cc25a32c7d4497d0d7db22f473d2a64b7a27 /py/modules/IcePy/Operation.cpp
parentFix a problem when building in a git repository or source distribution (diff)
downloadice-24aa43df750992b9f3b6d99419ab0c4071a14e8b.tar.bz2
ice-24aa43df750992b9f3b6d99419ab0c4071a14e8b.tar.xz
ice-24aa43df750992b9f3b6d99419ab0c4071a14e8b.zip
Python changes for bug2522
Diffstat (limited to 'py/modules/IcePy/Operation.cpp')
-rw-r--r--py/modules/IcePy/Operation.cpp68
1 files changed, 68 insertions, 0 deletions
diff --git a/py/modules/IcePy/Operation.cpp b/py/modules/IcePy/Operation.cpp
index 19ae001c952..b98679030a5 100644
--- a/py/modules/IcePy/Operation.cpp
+++ b/py/modules/IcePy/Operation.cpp
@@ -298,6 +298,14 @@ extern PyTypeObject AMDCallbackType;
}
+static OperationPtr
+getOperation(PyObject* p)
+{
+ assert(PyObject_IsInstance(p, reinterpret_cast<PyObject*>(&OperationType)) == 1);
+ OperationObject* obj = reinterpret_cast<OperationObject*>(p);
+ return *obj->op;
+}
+
#ifdef WIN32
extern "C"
#endif
@@ -2070,6 +2078,66 @@ IcePy::BlobjectUpcall::exception(PyException& ex)
}
PyObject*
+IcePy::iceIsA(const Ice::ObjectPrx& prx, PyObject* args)
+{
+ PyObject* objectType = lookupType("Ice.Object");
+ assert(objectType);
+ PyObjectHandle obj = PyObject_GetAttrString(objectType, "_op_ice_isA");
+ assert(obj.get());
+
+ OperationPtr op = getOperation(obj.get());
+ assert(op);
+
+ InvocationPtr i = new SyncTypedInvocation(prx, op);
+ return i->invoke(args);
+}
+
+PyObject*
+IcePy::icePing(const Ice::ObjectPrx& prx, PyObject* args)
+{
+ PyObject* objectType = lookupType("Ice.Object");
+ assert(objectType);
+ PyObjectHandle obj = PyObject_GetAttrString(objectType, "_op_ice_ping");
+ assert(obj.get());
+
+ OperationPtr op = getOperation(obj.get());
+ assert(op);
+
+ InvocationPtr i = new SyncTypedInvocation(prx, op);
+ return i->invoke(args);
+}
+
+PyObject*
+IcePy::iceIds(const Ice::ObjectPrx& prx, PyObject* args)
+{
+ PyObject* objectType = lookupType("Ice.Object");
+ assert(objectType);
+ PyObjectHandle obj = PyObject_GetAttrString(objectType, "_op_ice_ids");
+ assert(obj.get());
+
+ OperationPtr op = getOperation(obj.get());
+ assert(op);
+
+ InvocationPtr i = new SyncTypedInvocation(prx, op);
+ return i->invoke(args);
+}
+
+PyObject*
+IcePy::iceId(const Ice::ObjectPrx& prx, PyObject* args)
+{
+ PyObject* objectType = lookupType("Ice.Object");
+ assert(objectType);
+ PyObjectHandle obj = PyObject_GetAttrString(objectType, "_op_ice_id");
+ assert(obj.get());
+
+ OperationPtr op = getOperation(obj.get());
+ assert(op);
+
+ InvocationPtr i = new SyncTypedInvocation(prx, op);
+ return i->invoke(args);
+}
+
+PyObject*
IcePy::iceInvoke(const Ice::ObjectPrx& prx, PyObject* args)
{
InvocationPtr i = new SyncBlobjectInvocation(prx);