Dear List, I regularly find myself wrapping libraries which use GList structures.
So far I've had to do this as I did for libgpod: http://gtkpod.svn.sourceforge.net/viewvc/gtkpod/libgpod/trunk/bindings/python/gpod.i.in?view=markup 92 PyObject* sw_get_tracks(Itdb_iTunesDB *itdb) { 93 PyObject *list; 94 gint i; 95 GList *l; 96 list = PyList_New(g_list_length(itdb->tracks)); 97 for (l = itdb->tracks, i = 0; l; l = l->next, ++i) { 98 PyList_SET_ITEM(list, i, SWIG_NewPointerObj((void*)(l->data), SWIGTYPE_p__Itdb_Track, 0)); 99 } 100 return list; 101 } I think I'd much prefer to return the GList more directly, without creating a whole new Python list. In the above case, it's fairly cheap... but in my other examples, the inner loop has to marshal more expensive C structures into Python objects. I'd prefer to only do that if they are actually accessed. I suppose it is a tradeoff though, because if I wrapped the GList in such a way that Python objects were created when list data is actually accessed, each item might be wrapped more often that once. However, it would be nice if _changes_ to the wrapped List (removing records, extending, ...) could adjust the 'real' GList. Does anyone have an example of a different way to wrap GList than I've shown here? Maybe wrapping it into a caching proxy for the real GList. Much thanks. Nick _______________________________________________ pygtk mailing list [email protected] http://www.daa.com.au/mailman/listinfo/pygtk Read the PyGTK FAQ: http://www.async.com.br/faq/pygtk/
