mixing SWIG generated and Python-level usertype?

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • Bo Peng

    #1

    mixing SWIG generated and Python-level usertype?

    Dear list,

    My SWIG generated module (myModule) needs an array-like object (carray)
    to work. Carray objects are created both internally (in C++ level) and
    through Python so I have to load it when myModule initializes.

    carray is modified from arraymodule.c and is quite simple:

    static PyMethodDef a_methods[] =
    {
    {"carray", a_array, METH_VARARGS, a_array_doc},
    { /* sentinel */
    NULL, NULL
    }
    };

    Currently, I load a_methods directly using code (error checking ignored)

    PyObject* mm = PyImport_AddMod ule("__main__") ;
    PyObject* dict = PyModule_GetDic t(mm);
    PyObject* v = PyCFunction_New (a_methods, NULL);
    PyDict_SetItemS tring(dict, a_methods->ml_name, v);

    There are several problems with this approach:

    1. use of __main__? carray can not be accessed directly within other
    libraries. ('from myModule import *' DOES NOT import carray!) I tried to
    use __builtins__ but it does not work for some reason out of my
    understanding of Python. I am not sure how to add carray to myModule
    dictionary.

    2. No type object? I am not sure what is the purpose of ArrayType but
    the usual init_module should be
    m = Py_InitModule3( "carray", a_methods, module_doc);
    d = PyModule_GetDic t(m);
    PyDict_SetItemS tring(dict, "ArrayType" , (PyObject *)&Arraytype);

    When I add ArrayType to __main__ , access to ArrayType leads to a quick
    core dump.

    I do not feel comfortable with my current approach. Could anyone tell me
    some better (more standard) way?

    Many thanks in advance.
    Bo
Working...