Jak przekonwertować do typu SWIGTYPE_p_void w SWIG wygenerowanych powiązaniach Java?
Zajmuję się tworzeniem powiązań Java generowanych przez SWIG dla biblioteki C. Biblioteka zawiera funkcje, które pobierają parametry typuvoid *
. Po stronie C zazwyczaj byłyby przekazywane jako wskaźnik do tablicy typufloat
lubint
rzucić navoid *
. W wygenerowanych powiązaniach Java skutkuje to metodami, które pobierają parametry typuSWIGTYPE_p_void
.
Jaki jest najlepszy sposób na skonstruowanie tablicy floatów / int w powiązaniach Java, aby mogły być przekazywane jako typSWIGTYPE_p_void
do tych metod?
W tej chwili definiuję funkcję pomocnika w moim pliku example.i:
void *floata_to_voidp(float f[])
{
return (void *)f;
}
A potem po stronie Java robi coś takiego:
float foo[] = new float[2];
SWIGTYPE_p_void av = null;
// do something with foo
av = example.floata_to_voidp(foo);
example.myfunction(av);
Wydaje się to dość brzydkie, zwłaszcza że potrzebowałbym takżeinta_to_voidp()
etc w moim pliku interfejsu SWIG dla każdej konwersji typu, którą chcę wspierać.
Czy można to zrobić bez funkcji pomocniczych i angażując mniej dodatkowego kodu po stronie Java do konwersji typów danych?
UPDATE (17/6/12): aby dać dodatkowe szczegóły na pytanie: próbuję wykonać zestaw funkcji C z prototypemint foo(const float *data, int N, const void *argv, float *result)
i odwzoruj je na metody po stronie Java, gdzie tablica dowolnego typu może być przekazana jakoargv
. Zauważ, żeargv
jestconst void *
i nievoid *
.