summaryrefslogtreecommitdiff
path: root/py/modules/IcePy/Operation.cpp
diff options
context:
space:
mode:
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);