From: Gordan B. <go...@bo...> - 2007-08-30 11:19:39
|
I finally got it to trigger. No idea what I did different, but it seems to be working now! :-) Now for the next problem - I always get back an undef. :-( Could one of you kind gentlement please cast a fresh pair of eyes over this and see if you can spot a problem? %typemap(out) float [ANY][ANY] { int i, j; AV* FirstD = newAV(); for (i = 0; i < $1_dim0; i++) { AV* SecondD = newAV(); for (j = 0; j < $1_dim1; j++) { SV* Value2 = newSVnv ($1[i][j]); av_push (SecondD, Value2); } SV* Value1 = newRV ((SV*) SecondD); av_push (FirstD, Value1); } $result = newRV((SV*) FirstD); } Thanks. Gordan On Thu, 30 Aug 2007, Petr Novotny wrote: >> Is there any reason this shouldn't be working? >> >> %typemap(memberout) float [ANY][ANY] >> { >> croak ("DEBUG XS"); >> int i, j; >> >> $result = newAV(); >> >> for (i = 0; i < $dim0; i++) >> { >> $result[i] = newAV(); > > Yes, there is. You don't deference AVs like this. You should do stuff like > av_store( $result,i,newAV() ); > >> >> for (j = 0; j < $dim1; j++) >> $result[i][j] = new newSVnv($1[i][j]); > > Same thing here. (If you store the "$result[i]" AV in a convenience variable before, the syntax will be clearer.) > >> } >> } |