2 #include "PythonCORBAConv.hxx"
3 #include "TypeConversions.hxx"
4 #include "RuntimeSALOME.hxx"
8 using namespace YACS::ENGINE;
12 void PyCorbaInt::put(const void *data) throw(ConversionException)
14 put((PyObject *)data);
17 //!Convertit un PyObject de type entier en CORBA::Any entier
19 * \param data : python object
22 void PyCorbaInt::put(PyObject *data) throw(ConversionException)
24 CORBA::Long l= PyLong_AsLong(data);
31 void PyCorbaString::put(const void *data) throw(ConversionException)
33 put((PyObject *)data);
36 //!Convertit un PyObject de type string en CORBA::Any string
38 * \param data : python object
41 void PyCorbaString::put(PyObject *data) throw(ConversionException)
43 char * s=PyString_AsString(data);
50 void PyCorbaDouble::put(const void *data) throw(ConversionException)
52 put((PyObject *)data);
55 //!Convertit un PyObject de type double en CORBA::Any Double
57 * \param data : python object
60 void PyCorbaDouble::put(PyObject *data) throw(ConversionException)
63 if (PyFloat_Check(data))
64 d = (CORBA::Double)PyFloat_AS_DOUBLE(data);
65 else if (PyInt_Check(data))
66 d = (CORBA::Double)PyInt_AS_LONG(data);
68 d = (CORBA::Double)PyLong_AsDouble(data);
74 PyCorbaSequence::PyCorbaSequence(InputCorbaPort* p)
75 : ProxyPort(p), Port(p->getNode())
77 cerr << "CorbaPySequence" << endl;
80 //!Convertit un PyObject de type Sequence en CORBA::Any Sequence
82 * \param data : python object
85 void PyCorbaSequence::put(const void *data) throw(ConversionException)
87 put((PyObject *)data);
90 void PyCorbaSequence::put(PyObject *data) throw(ConversionException)
92 cerr << "PyCorbaSequence::put" << endl;
93 cerr << "data refcnt: " << data->ob_refcnt << endl;
94 PyObject_Print(data,stdout,Py_PRINT_RAW);
96 int length=PySequence_Size(data);
97 cerr <<"length: " << length << endl;
98 CORBA::Any *a= convertCorbaPyObject(_port->type(),data);
103 PyCorbaObjref::PyCorbaObjref(InputCorbaPort* p)
104 : ProxyPort(p), Port(p->getNode())
106 _pyorb = getSALOMERuntime()->getPyOrb();
107 _orb = getSALOMERuntime()->getOrb();
108 // _dynFactory = getSALOMERuntime()->getDynFactory();
111 //!Convertit un PyObject de type Objref en CORBA::Any Objref
113 * \param data : python object
116 void PyCorbaObjref::put(const void *data) throw(ConversionException)
118 put((PyObject *)data);
121 void PyCorbaObjref::put(PyObject *data) throw(ConversionException)
123 cerr << "PyCorbaObjref::put" << endl;
124 cerr << "data refcnt: " << data->ob_refcnt << endl;
125 PyObject_Print(data,stdout,Py_PRINT_RAW);
129 //hold_lock is true: caller is supposed to hold the GIL.
130 //omniorb will not take the GIL
131 //CORBA::Object_ptr ob=api->pyObjRefToCxxObjRef(data,(CORBA::Boolean)1);
133 PyObject_Print(_pyorb,stdout,Py_PRINT_RAW);
135 PyObject *pystring = PyObject_CallMethod(_pyorb, "object_to_string", "O", data);
139 throw Exception("not possible to get objref");
142 PyObject_Print(pystring,stdout,Py_PRINT_RAW);
144 CORBA::Object_ptr ob= _orb->string_to_object(PyString_AsString(pystring));
146 cerr << "data refcnt: " << data->ob_refcnt << endl;