Como eu converto para digitar SWIGTYPE_p_void em ligações Java geradas por SWIG?
Estou desenvolvendo algumas ligações Java geradas por SWIG para uma biblioteca C. A biblioteca contém funções que usam parâmetros do tipovoid *
. No lado C, estes normalmente seriam passados como um ponteiro para uma matriz do tipofloat
ouint
lançar paravoid *
. Nas ligações Java geradas, isso resulta em métodos que usam parâmetros do tipoSWIGTYPE_p_void
.
Qual é a melhor maneira de construir uma matriz de floats / ints nas ligações Java para que elas possam ser passadas como tipoSWIGTYPE_p_void
para esses métodos?
No momento estou definindo uma função auxiliar no meu arquivo example.i:
void *floata_to_voidp(float f[])
{
return (void *)f;
}
E então no lado do Java fazendo algo assim:
float foo[] = new float[2];
SWIGTYPE_p_void av = null;
// do something with foo
av = example.floata_to_voidp(foo);
example.myfunction(av);
Isso parece um pouco feio, especialmente porque eu também precisaria de uminta_to_voidp()
etc no meu arquivo de interface SWIG para cada conversão de tipo que eu quero suportar.
Existe uma maneira de fazer isso sem funções auxiliares e envolvendo menos código extra no lado do Java para converter tipos de dados?
ATUALIZAÇÃO (17/6/12): para dar detalhes adicionais à questão: o que eu estou tentando fazer é pegar um conjunto de funções C, com protótipoint foo(const float *data, int N, const void *argv, float *result)
e mapeá-los para métodos no lado Java, onde uma matriz de tipo arbitrário pode ser passada comoargv
. Observe queargv
éconst void *
e nãovoid *
.