Перенос аргументов структуры** (указатель на указатель) с помощью SWIG

Я пытаюсь обернуть функцию, написанную на C, чтобы я мог получить к ней доступ в Python с помощью SWIG.

У меня проблема в том, что он ожидает указатель на указатель на структуру, а не указатель на структуру, например.

int update_tracks(track_t **hash_tracks);

если бы:

int update_tracks(track_t *hash_tracks);

У меня не было бы проблем, так как я могу создать аргумент и вызвать функцию из python следующим образом:

hash_tracks = track_t()
n = update_tracks(hash_tracks)

track_t — это простая структура C, содержащая несколько целых чисел, чисел с плавающей запятой, массивов и т. д.

но я не могу понять, как получить указатель на hash_tracks, который мне нужен в качестве аргумента для первой функции (то есть той, которую я на самом деле пытаюсь обернуть)

Причина, по которой мне нужен аргумент track_t** (а не просто аргумент track_t*), заключается в том, что hash_tracks — это хэш-таблица (с использованием библиотеки uthash), и поэтому указатель на таблицу дорожек может изменяться по мере того, как функция добавляет и удаляет структуры track_t. в рамках его реализации.

Я в тупике, как вызвать такую ​​функцию из python. Может быть, мне нужно реализовать некоторые «вспомогательные» функции на C или использовать некоторые карты типов SWIG, чтобы сделать это возможным?


person bph    schedule 26.10.2015    source источник


Ответы (1)


Я думаю, вы хотите использовать карту типов INOUT, задокументированную здесь:

http://www.swig.org/Doc2.0/Arguments.html#Arguments_nn6

person Devan Williams    schedule 27.10.2015