summaryrefslogtreecommitdiff
path: root/py/modules/IcePy/ObjectAdapter.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'py/modules/IcePy/ObjectAdapter.cpp')
-rw-r--r--py/modules/IcePy/ObjectAdapter.cpp41
1 files changed, 41 insertions, 0 deletions
diff --git a/py/modules/IcePy/ObjectAdapter.cpp b/py/modules/IcePy/ObjectAdapter.cpp
index 4c5477d7919..c1299178cd6 100644
--- a/py/modules/IcePy/ObjectAdapter.cpp
+++ b/py/modules/IcePy/ObjectAdapter.cpp
@@ -1431,3 +1431,44 @@ IcePy::createObjectAdapter(const Ice::ObjectAdapterPtr& adapter)
}
return (PyObject*)obj;
}
+
+Ice::ObjectAdapterPtr
+IcePy::getObjectAdapter(PyObject* obj)
+{
+ assert(PyObject_IsInstance(obj, (PyObject*)&ObjectAdapterType));
+ ObjectAdapterObject* oaobj = (ObjectAdapterObject*)obj;
+ return *oaobj->adapter;
+}
+
+PyObject*
+IcePy::wrapObjectAdapter(const Ice::ObjectAdapterPtr& adapter)
+{
+ //
+ // Create an Ice.ObjectAdapter wrapper for IcePy.ObjectAdapter.
+ //
+ PyObjectHandle adapterI = createObjectAdapter(adapter);
+ if(adapterI.get() == NULL)
+ {
+ return NULL;
+ }
+ PyObject* wrapperType = lookupType("Ice.ObjectAdapterI");
+ assert(wrapperType != NULL);
+ PyObjectHandle args = PyTuple_New(1);
+ if(args.get() == NULL)
+ {
+ return NULL;
+ }
+ PyTuple_SET_ITEM(args.get(), 0, adapterI.release());
+ return PyObject_Call(wrapperType, args.get(), NULL);
+}
+
+Ice::ObjectAdapterPtr
+IcePy::unwrapObjectAdapter(PyObject* obj)
+{
+ PyObject* wrapperType = lookupType("Ice.ObjectAdapterI");
+ assert(wrapperType != NULL);
+ assert(PyObject_IsInstance(obj, wrapperType));
+ PyObjectHandle impl = PyObject_GetAttrString(obj, "_impl");
+ assert(impl.get() != NULL);
+ return getObjectAdapter(impl.get());
+}