1 %module libMedCorba_Swig
3 %include "libMEDMEM_Swig.i"
7 #include "Family_i.hxx"
8 #include "FieldDouble_i.hxx"
10 #include "FieldInt_i.hxx"
11 #include "FieldOf_i.hxx"
12 #include "Group_i.hxx"
15 #include "Support_i.hxx"
16 #include "MEDMEM_SWIG_FieldDouble.hxx"
17 #include "MEDMEM_SWIG_FieldInt.hxx"
21 typemap in and out for Corba Objects (MESH, FIELDDOUBLE, FIELDINT and
22 Support) between C++ and Python
24 WARNING (NB) to the user of those typmaps (SWIG wrapping for C++ routines
25 -------------------------------------------------------------------------
27 You have to be quite careful about the SWIG version your are currently
28 using, because CORBA pointeur _ptr or _var could be wrapped by SWIG using
29 their reference rather than the pointeur itself (differences detected using
30 SWIG 1.1.x, SWIG 1.3.13 and SWIG 1.3.17)
33 %typemap(python,out) SALOME_MED::MESH_ptr, SALOME_MED::FIELDDOUBLE_ptr,
34 SALOME_MED::FIELDINT_ptr, SALOME_MED::SUPPORT_ptr,
35 const SALOME_MED::MESH_ptr, const SALOME_MED::FIELDDOUBLE_ptr,
36 const SALOME_MED::FIELDINT_ptr, const SALOME_MED::SUPPORT_ptr
38 MESSAGE("typemap out sur Objet Corba version ptr");
42 // Get the orb corba python
44 PyObject* pdict = PyDict_New();
45 PyDict_SetItemString(pdict, "__builtins__", PyEval_GetBuiltins());
46 PyRun_String("import CORBA", Py_single_input, pdict, pdict);
48 PyRun_String("o = CORBA.ORB_init([''], CORBA.ORB_ID);", Py_single_input,
51 PyObject* orb = PyDict_GetItemString(pdict, "o");
53 // Get the orb Corba C++
58 CORBA::ORB_var ORB = CORBA::ORB_init(argc, argv);
60 string s = ORB->object_to_string($1);
62 PyObject * tmp = PyString_FromString(s.c_str());
64 $result = PyObject_CallMethod(orb, "string_to_object", "O", tmp);
68 %typemap(python,out) SALOME_MED::MESH_var, SALOME_MED::FIELDDOUBLE_var,
69 SALOME_MED::FIELDINT_var, SALOME_MED::SUPPORT_var,
70 const SALOME_MED::MESH_var, const SALOME_MED::FIELDDOUBLE_var,
71 const SALOME_MED::FIELDINT_var, const SALOME_MED::SUPPORT_var
73 MESSAGE("typemap out sur Objet Corba version var");
75 // Get the orb corba python
77 PyObject* pdict = PyDict_New();
78 PyDict_SetItemString(pdict, "__builtins__", PyEval_GetBuiltins());
79 PyRun_String("import CORBA", Py_single_input, pdict, pdict);
81 PyRun_String("o = CORBA.ORB_init([''], CORBA.ORB_ID);", Py_single_input,
84 PyObject* orb = PyDict_GetItemString(pdict, "o");
86 // Get the orb Corba C++
91 CORBA::ORB_var ORB = CORBA::ORB_init(argc, argv);
93 string s = ORB->object_to_string(*$1);
95 PyObject * tmp = PyString_FromString(s.c_str());
97 $result = PyObject_CallMethod(orb, "string_to_object", "O", tmp);
101 %typemap(python,in) const SALOME_MED::MESH_ptr &, SALOME_MED::MESH_ptr &
104 MESSAGE("typemap in sur Objet Corba MESH avec reference");
106 PyObject* pdict = PyDict_New();
107 PyDict_SetItemString(pdict, "__builtins__", PyEval_GetBuiltins());
108 PyRun_String("import CORBA", Py_single_input, pdict, pdict);
110 PyRun_String("o = CORBA.ORB_init([''], CORBA.ORB_ID);", Py_single_input,
113 PyObject* orb = PyDict_GetItemString(pdict, "o");
115 // Ask omniORBpy to transform MESH (python Corba) ptr to IOR string
118 = PyObject_CallMethod(orb, "object_to_string", "O", $input);
120 if (iorMesh == Py_None)
122 char * s = PyString_AsString(PyObject_Str(iorMesh));
124 // Ask omniORB to convert IOR string to MESH (C++ Corba) ptr
128 char **argv = &xargv;
129 CORBA::ORB_var ORB = CORBA::ORB_init(argc, argv);
130 CORBA::Object_var O = ORB->string_to_object(s);
132 SALOME_MED::MESH_ptr t = SALOME_MED::MESH::_narrow(O);
138 %typemap(python,in) const SALOME_MED::FIELDDOUBLE_ptr &,
139 SALOME_MED::FIELDDOUBLE_ptr &
142 MESSAGE("typemap in sur Objet Corba FIELDDOUBLE avec reference");
144 PyObject* pdict = PyDict_New();
145 PyDict_SetItemString(pdict, "__builtins__", PyEval_GetBuiltins());
146 PyRun_String("import CORBA", Py_single_input, pdict, pdict);
148 PyRun_String("o = CORBA.ORB_init([''], CORBA.ORB_ID);", Py_single_input,
151 PyObject* orb = PyDict_GetItemString(pdict, "o");
153 // Ask omniORBpy to transform FIELDDOUBLE (python Corba) ptr to IOR string
155 PyObject* iorFieldDouble
156 = PyObject_CallMethod(orb, "object_to_string", "O", $input);
158 if (iorFieldDouble == Py_None)
160 char * s = PyString_AsString(PyObject_Str(iorFieldDouble));
162 // Ask omniORB to convert IOR string to FIELDDOUBLE (C++ Corba) ptr
166 char **argv = &xargv;
167 CORBA::ORB_var ORB = CORBA::ORB_init(argc, argv);
168 CORBA::Object_var O = ORB->string_to_object(s);
170 SALOME_MED::FIELDDOUBLE_ptr t = SALOME_MED::FIELDDOUBLE::_narrow(O);
176 %typemap(python,in) const SALOME_MED::FIELDINT_ptr &,
177 SALOME_MED::FIELDINT_ptr &
180 MESSAGE("typemap in sur Objet Corba FIELDINT avec reference");
182 PyObject* pdict = PyDict_New();
183 PyDict_SetItemString(pdict, "__builtins__", PyEval_GetBuiltins());
184 PyRun_String("import CORBA", Py_single_input, pdict, pdict);
186 PyRun_String("o = CORBA.ORB_init([''], CORBA.ORB_ID);", Py_single_input,
189 PyObject* orb = PyDict_GetItemString(pdict, "o");
191 // Ask omniORBpy to transform FIELDINT (python Corba) ptr to IOR string
193 PyObject* iorFieldInt
194 = PyObject_CallMethod(orb, "object_to_string", "O", $input);
196 if (iorFieldInt == Py_None)
198 char * s = PyString_AsString(PyObject_Str(iorFieldInt));
200 // Ask omniORB to convert IOR string to FIELDINT (C++ Corba) ptr
204 char **argv = &xargv;
205 CORBA::ORB_var ORB = CORBA::ORB_init(argc, argv);
206 CORBA::Object_var O = ORB->string_to_object(s);
208 SALOME_MED::FIELDINT_ptr t = SALOME_MED::FIELDINT::_narrow(O);
214 %typemap(python,in) const SALOME_MED::SUPPORT_ptr &, SALOME_MED::SUPPORT_ptr &
217 MESSAGE("typemap in sur Objet Corba SUPPORT avec reference");
219 PyObject* pdict = PyDict_New();
220 PyDict_SetItemString(pdict, "__builtins__", PyEval_GetBuiltins());
221 PyRun_String("import CORBA", Py_single_input, pdict, pdict);
223 PyRun_String("o = CORBA.ORB_init([''], CORBA.ORB_ID);", Py_single_input,
226 PyObject* orb = PyDict_GetItemString(pdict, "o");
228 // Ask omniORBpy to transform SUPPORT (python Corba) ptr to IOR string
231 = PyObject_CallMethod(orb, "object_to_string", "O", $input);
233 if (iorSupport == Py_None)
235 char * s = PyString_AsString(PyObject_Str(iorSupport));
237 // Ask omniORB to convert IOR string to SUPPORT (C++ Corba) ptr
241 char **argv = &xargv;
242 CORBA::ORB_var ORB = CORBA::ORB_init(argc, argv);
243 CORBA::Object_var O = ORB->string_to_object(s);
245 SALOME_MED::SUPPORT_ptr t = SALOME_MED::SUPPORT::_narrow(O);
251 %typemap(python,in) const SALOME_MED::SUPPORT_ptr, SALOME_MED::SUPPORT_ptr
254 MESSAGE("typemap in sur Objet Corba SUPPORT sans reference");
258 PyObject* pdict = PyDict_New();
259 PyDict_SetItemString(pdict, "__builtins__", PyEval_GetBuiltins());
260 PyRun_String("import CORBA", Py_single_input, pdict, pdict);
262 PyRun_String("o = CORBA.ORB_init([''], CORBA.ORB_ID);", Py_single_input,
265 PyObject* orb = PyDict_GetItemString(pdict, "o");
267 // Ask omniORBpy to transform SUPPORT (python Corba) ptr to IOR string
270 = PyObject_CallMethod(orb, "object_to_string", "O", $input);
272 if (iorSupport == Py_None)
274 char * s = PyString_AsString(PyObject_Str(iorSupport));
276 // Ask omniORB to convert IOR string to SUPPORT (C++ Corba) ptr
280 char **argv = &xargv;
281 CORBA::ORB_var ORB = CORBA::ORB_init(argc, argv);
282 CORBA::Object_var O = ORB->string_to_object(s);
284 SALOME_MED::SUPPORT_ptr t = SALOME_MED::SUPPORT::_narrow(O);
290 %typemap(python,in) const SALOME_MED::MESH_ptr, SALOME_MED::MESH_ptr
293 MESSAGE("typemap in sur Objet Corba MESH sans reference");
297 PyObject* pdict = PyDict_New();
298 PyDict_SetItemString(pdict, "__builtins__", PyEval_GetBuiltins());
299 PyRun_String("import CORBA", Py_single_input, pdict, pdict);
301 PyRun_String("o = CORBA.ORB_init([''], CORBA.ORB_ID);", Py_single_input,
304 PyObject* orb = PyDict_GetItemString(pdict, "o");
306 // Ask omniORBpy to transform MESH (python Corba) ptr to IOR string
309 = PyObject_CallMethod(orb, "object_to_string", "O", $input);
311 if (iorMesh == Py_None)
313 char * s = PyString_AsString(PyObject_Str(iorMesh));
315 // Ask omniORB to convert IOR string to MESH (C++ Corba) ptr
319 char **argv = &xargv;
320 CORBA::ORB_var ORB = CORBA::ORB_init(argc, argv);
321 CORBA::Object_var O = ORB->string_to_object(s);
323 SALOME_MED::MESH_ptr t = SALOME_MED::MESH::_narrow(O);
329 %typemap(python,in) const SALOME_MED::FIELDDOUBLE_ptr,
330 SALOME_MED::FIELDDOUBLE_ptr &
333 MESSAGE("typemap in sur Objet Corba FIELDDOUBLE sans reference");
337 PyObject* pdict = PyDict_New();
338 PyDict_SetItemString(pdict, "__builtins__", PyEval_GetBuiltins());
339 PyRun_String("import CORBA", Py_single_input, pdict, pdict);
341 PyRun_String("o = CORBA.ORB_init([''], CORBA.ORB_ID);", Py_single_input,
344 PyObject* orb = PyDict_GetItemString(pdict, "o");
346 // Ask omniORBpy to transform FIELDDOUBLE (python Corba) ptr to IOR string
348 PyObject* iorFieldDouble
349 = PyObject_CallMethod(orb, "object_to_string", "O", $input);
351 if (iorFieldDouble == Py_None)
353 char * s = PyString_AsString(PyObject_Str(iorFieldDouble));
355 // Ask omniORB to convert IOR string to FIELDDOUBLE (C++ Corba) ptr
359 char **argv = &xargv;
360 CORBA::ORB_var ORB = CORBA::ORB_init(argc, argv);
361 CORBA::Object_var O = ORB->string_to_object(s);
363 SALOME_MED::FIELDDOUBLE_ptr t = SALOME_MED::FIELDDOUBLE::_narrow(O);
369 %typemap(python,in) const SALOME_MED::FIELDINT_ptr,
370 SALOME_MED::FIELDINT_ptr
373 MESSAGE("typemap in sur Objet Corba FIELDINT sans reference");
377 PyObject* pdict = PyDict_New();
378 PyDict_SetItemString(pdict, "__builtins__", PyEval_GetBuiltins());
379 PyRun_String("import CORBA", Py_single_input, pdict, pdict);
381 PyRun_String("o = CORBA.ORB_init([''], CORBA.ORB_ID);", Py_single_input,
384 PyObject* orb = PyDict_GetItemString(pdict, "o");
386 // Ask omniORBpy to transform FIELDINT (python Corba) ptr to IOR string
388 PyObject* iorFieldInt
389 = PyObject_CallMethod(orb, "object_to_string", "O", $input);
391 if (iorFieldInt == Py_None)
393 char * s = PyString_AsString(PyObject_Str(iorFieldInt));
395 // Ask omniORB to convert IOR string to FIELDINT (C++ Corba) ptr
399 char **argv = &xargv;
400 CORBA::ORB_var ORB = CORBA::ORB_init(argc, argv);
401 CORBA::Object_var O = ORB->string_to_object(s);
403 SALOME_MED::FIELDINT_ptr t = SALOME_MED::FIELDINT::_narrow(O);
409 SALOME_MED::FIELDDOUBLE_ptr createCorbaFieldDouble(SALOME_MED::SUPPORT_ptr,
412 SALOME_MED::FIELDINT_ptr createCorbaFieldInt(SALOME_MED::SUPPORT_ptr,
415 SALOME_MED::SUPPORT_ptr createCorbaSupport(const SUPPORT *);
417 FIELDDOUBLE * createLocalFieldDouble(const int, const int);
419 FIELDINT * createLocalFieldInt(const int, const int);
422 SALOME_MED::FIELDDOUBLE_ptr createCorbaFieldDouble(SALOME_MED::SUPPORT_ptr mySupportIOR,FIELDDOUBLE * field)
424 BEGIN_OF("SALOME_MED::FIELDDOUBLE_ptr createCorbaFieldDouble from libMedCorba_Swig");
426 SCRUTE(mySupportIOR);
430 field->setName("Corba Double Field");
432 field->setDescription("Got From A Local One");
434 FIELDDOUBLE_i * fieldimpl = new FIELDDOUBLE_i(mySupportIOR,field);
436 POA_SALOME_MED::FIELDDOUBLE_tie<FIELDDOUBLE_i> * fieldcorba1 =
437 new POA_SALOME_MED::FIELDDOUBLE_tie<FIELDDOUBLE_i>(fieldimpl,true);
439 SALOME_MED::FIELDDOUBLE_ptr fieldcorba2 = fieldcorba1->_this();
441 SALOME_MED::FIELDDOUBLE_ptr fieldcorba3 = SALOME_MED::FIELDDOUBLE::_duplicate(fieldcorba2);
443 fieldcorba1->_remove_ref();
453 END_OF("SALOME_MED::FIELDDOUBLE_ptr createCorbaFieldDouble from libMedCorba_Swig");
455 MESSAGE("Test de tirarge sur le pointeur Corba Field dans le cxx");
457 char * name = fieldcorba3->getName();
464 SALOME_MED::FIELDINT_ptr createCorbaFieldInt(SALOME_MED::SUPPORT_ptr mySupportIOR,FIELDINT * field)
466 BEGIN_OF("SALOME_MED::FIELDINT_ptr createCorbaFieldInt from libMedCorba_Swig");
468 SCRUTE(mySupportIOR);
472 field->setName("Corba Integer Field");
474 field->setDescription("Got From A Local One");
476 FIELDINT_i * fieldimpl = new FIELDINT_i(mySupportIOR,field);
478 POA_SALOME_MED::FIELDINT_tie<FIELDINT_i> * fieldcorba1 =
479 new POA_SALOME_MED::FIELDINT_tie<FIELDINT_i>(fieldimpl,true);
481 SALOME_MED::FIELDINT_ptr fieldcorba2 = fieldcorba1->_this();
483 SALOME_MED::FIELDINT_ptr fieldcorba3 = SALOME_MED::FIELDINT::_duplicate(fieldcorba2);
485 fieldcorba1->_remove_ref();
495 END_OF("SALOME_MED::FIELDINT_ptr createCorbaFieldInt from libMedCorba_Swig");
496 MESSAGE("Test de tirarge sur le pointeur Corba Field dans le cxx");
498 char * name = fieldcorba3->getName();
505 SALOME_MED::SUPPORT_ptr createCorbaSupport(const SUPPORT * const support)
507 BEGIN_OF("SALOME_MED::SUPPORT_ptr createCorbaSupport from libMedCorba_Swig");
511 SUPPORT_i * supportimpl = new SUPPORT_i(support);
513 SALOME_MED::SUPPORT_ptr supportcorba =
514 supportimpl->POA_SALOME_MED::SUPPORT::_this();
518 SCRUTE(supportcorba);
520 supportimpl->_remove_ref();
522 END_OF("SALOME_MED::SUPPORT_ptr createCorbaSupport from libMedCorba_Swig");
527 FIELDDOUBLE * createLocalFieldDouble(const int NumberOfComponents,
528 const int LengthValue)
530 BEGIN_OF("FIELDDOUBLE createLocalFieldDouble from libMedCorba_Swig");
532 SCRUTE(NumberOfComponents);
535 //FIELD<double> * fieldloc = new FIELD<double>();
536 FIELDDOUBLE * fieldloc = new FIELDDOUBLE();
537 fieldloc -> allocValue(NumberOfComponents,LengthValue);
539 END_OF("FIELDDOUBLE createLocalFieldDouble from libMedCorba_Swig");
544 FIELDINT * createLocalFieldInt(const int NumberOfComponents,
545 const int LengthValue)
547 BEGIN_OF("FIELDINT createLocalFieldInt from libMedCorba_Swig");
549 SCRUTE(NumberOfComponents);
552 //FIELD<int> * fieldloc = new FIELD<int>();
553 FIELDINT * fieldloc = new FIELDINT();
554 fieldloc -> allocValue(NumberOfComponents,LengthValue);
556 END_OF("FIELDDOUBLE createLocalFieldInt from libMedCorba_Swig");