From: Karsten O. <wid...@t-...> - 2007-06-24 01:09:39
|
Where do I have to start to search in the sources if I want to rewrite the struct handling? I want to implement that typemap handling are also applied to structs. Regards, Karsten |
From: David B. <dav...@da...> - 2007-06-24 01:16:46
|
On Jun 23, 2007, at 8:08 PM, Karsten Ohme wrote: > Where do I have to start to search in the sources if I want to rewrite > the struct handling? I want to implement that typemap handling are > also > applied to structs. > Dare I ask why you want to do this? This is almost certainly a good way to break the entire SWIG universe (or at least a sizable portion of it). Cheers, Dave |
From: Karsten O. <wid...@t-...> - 2007-06-24 23:14:44
|
David Beazley schrieb: > > On Jun 23, 2007, at 8:08 PM, Karsten Ohme wrote: > >> Where do I have to start to search in the sources if I want to rewrite >> the struct handling? I want to implement that typemap handling are also >> applied to structs. >> > > Dare I ask why you want to do this? This is almost certainly a good > way to break the entire SWIG universe (or at least a sizable portion of > it). Well, I have a struct like this: typedef struct { %immutable; BYTE AID[16]; BYTE AIDLength; BYTE lifeCycleState; BYTE privileges; } GP211_APPLICATION_DATA; but unfortunately always 16 bytes are used for the AID field although this is only the maximum. I have a lot of these structs which use all some fixed sized byte array fields. So, I thought I can define a typemap: %typemap(in) (BYTE AID[16], BYTE AIDLength) { $2 = (BYTE)(*jenv)->GetArrayLength(jenv, $input); (*jenv)->GetByteArrayRegion(jenv, $input, 0, (jsize)$2, (jbyte *)$1); } %typemap(jni) (BYTE AID[16], BYTE AIDLength) "jbyteArray" %typemap(jtype) (BYTE AID[16], BYTE AIDLength) "byte[]" %typemap(jstype) (BYTE AID[16], BYTE AIDLength) "byte[]" %typemap(javain) (BYTE AID[16], BYTE AIDLength) "$javainput" but, this seems not to work. The field AIDLength is still in the Java class. If I apply this typemap to a function I get a Java method: public static void foo(byte[] AID) like expected. I had also the idea to define a macro which could do the task, but I don't know how. Regards, Karsten > > Cheers, > Dave > |
From: Karsten O. <wid...@t-...> - 2007-06-25 00:41:47
|
Karsten Ohme schrieb: > David Beazley schrieb: >> On Jun 23, 2007, at 8:08 PM, Karsten Ohme wrote: >> >>> Where do I have to start to search in the sources if I want to rewrite >>> the struct handling? I want to implement that typemap handling are also >>> applied to structs. >>> >> Dare I ask why you want to do this? This is almost certainly a good >> way to break the entire SWIG universe (or at least a sizable portion of >> it). > > Well, I have a struct like this: > > typedef struct { > %immutable; > BYTE AID[16]; > BYTE AIDLength; > BYTE lifeCycleState; > BYTE privileges; > } GP211_APPLICATION_DATA; > > but unfortunately always 16 bytes are used for the AID field although > this is only the maximum. I have a lot of these structs which use all > some fixed sized byte array fields. > > So, I thought I can define a typemap: > > %typemap(in) (BYTE AID[16], BYTE AIDLength) { > $2 = (BYTE)(*jenv)->GetArrayLength(jenv, $input); > (*jenv)->GetByteArrayRegion(jenv, $input, 0, (jsize)$2, (jbyte *)$1); > } > > %typemap(jni) (BYTE AID[16], BYTE AIDLength) "jbyteArray" > %typemap(jtype) (BYTE AID[16], BYTE AIDLength) "byte[]" > %typemap(jstype) (BYTE AID[16], BYTE AIDLength) "byte[]" > %typemap(javain) (BYTE AID[16], BYTE AIDLength) "$javainput" > > but, this seems not to work. The field AIDLength is still in the Java class. > > If I apply this typemap to a function I get a Java method: > > public static void foo(byte[] AID) > > like expected. > > I had also the idea to define a macro which could do the task, but I > don't know how. > > Regards, Karsten I forgot to paste to full code of the typemap, if this helps for the problem: Here is the out typemap: %typemap(out) (BYTE AID[16], BYTE AIDLength) { jbyteArray jb; jb=(*jenv)->NewByteArray(jenv, $2); (*jenv)->SetByteArrayRegion(jenv, jb, 0, $2, (jbyte *)$1); return (jb); } %typemap(javaout) (BYTE AID[16], BYTE AIDLength) { return $jnicall; } > >> Cheers, >> Dave >> > > > ------------------------------------------------------------------------- > This SF.net email is sponsored by DB2 Express > Download DB2 Express C - the FREE version of DB2 express and take > control of your XML. No limits. Just data. Click to get it now. > http://sourceforge.net/powerbar/db2/ > _______________________________________________ > Swig-user mailing list > Swi...@li... > https://lists.sourceforge.net/lists/listinfo/swig-user |
From: William S F. <ws...@fu...> - 2007-07-02 21:02:18
|
Karsten Ohme wrote: > Karsten Ohme schrieb: >> David Beazley schrieb: >>> On Jun 23, 2007, at 8:08 PM, Karsten Ohme wrote: >>> >>>> Where do I have to start to search in the sources if I want to rewrite >>>> the struct handling? I want to implement that typemap handling are also >>>> applied to structs. >>>> >>> Dare I ask why you want to do this? This is almost certainly a good >>> way to break the entire SWIG universe (or at least a sizable portion of >>> it). >> Well, I have a struct like this: >> >> typedef struct { >> %immutable; >> BYTE AID[16]; >> BYTE AIDLength; >> BYTE lifeCycleState; >> BYTE privileges; >> } GP211_APPLICATION_DATA; >> >> but unfortunately always 16 bytes are used for the AID field although >> this is only the maximum. I have a lot of these structs which use all >> some fixed sized byte array fields. >> >> So, I thought I can define a typemap: >> >> %typemap(in) (BYTE AID[16], BYTE AIDLength) { >> $2 = (BYTE)(*jenv)->GetArrayLength(jenv, $input); >> (*jenv)->GetByteArrayRegion(jenv, $input, 0, (jsize)$2, (jbyte *)$1); >> } >> >> %typemap(jni) (BYTE AID[16], BYTE AIDLength) "jbyteArray" >> %typemap(jtype) (BYTE AID[16], BYTE AIDLength) "byte[]" >> %typemap(jstype) (BYTE AID[16], BYTE AIDLength) "byte[]" >> %typemap(javain) (BYTE AID[16], BYTE AIDLength) "$javainput" >> >> but, this seems not to work. The field AIDLength is still in the Java class. >> >> If I apply this typemap to a function I get a Java method: >> >> public static void foo(byte[] AID) >> >> like expected. >> >> I had also the idea to define a macro which could do the task, but I >> don't know how. >> >> Regards, Karsten > > I forgot to paste to full code of the typemap, if this helps for the > problem: > > Here is the out typemap: > > %typemap(out) (BYTE AID[16], BYTE AIDLength) { > jbyteArray jb; > jb=(*jenv)->NewByteArray(jenv, $2); > (*jenv)->SetByteArrayRegion(jenv, jb, 0, $2, (jbyte *)$1); > return (jb); > } > > %typemap(javaout) (BYTE AID[16], BYTE AIDLength) { > return $jnicall; > } > Multi-argument typemaps for member variables was never envisaged. You can still achieve what you want by using %ignore on the member variables and then using %extend to add in a getter and setter. You can then apply the multi-argument typemaps you want to the parameters in the setter. William |
From: Karsten O. <wid...@t-...> - 2007-07-14 00:15:16
|
William S Fulton schrieb: > Karsten Ohme wrote: >> Karsten Ohme schrieb: >>> David Beazley schrieb: >>>> On Jun 23, 2007, at 8:08 PM, Karsten Ohme wrote: >>>> >>>>> Where do I have to start to search in the sources if I want to rewrite >>>>> the struct handling? I want to implement that typemap handling are also >>>>> applied to structs. >>>>> >>>> Dare I ask why you want to do this? This is almost certainly a good >>>> way to break the entire SWIG universe (or at least a sizable portion of >>>> it). >>> Well, I have a struct like this: >>> >>> typedef struct { >>> %immutable; >>> BYTE AID[16]; >>> BYTE AIDLength; >>> BYTE lifeCycleState; >>> BYTE privileges; >>> } GP211_APPLICATION_DATA; >>> >>> but unfortunately always 16 bytes are used for the AID field although >>> this is only the maximum. I have a lot of these structs which use all >>> some fixed sized byte array fields. >>> >>> So, I thought I can define a typemap: >>> >>> %typemap(in) (BYTE AID[16], BYTE AIDLength) { >>> $2 = (BYTE)(*jenv)->GetArrayLength(jenv, $input); >>> (*jenv)->GetByteArrayRegion(jenv, $input, 0, (jsize)$2, (jbyte *)$1); >>> } >>> >>> %typemap(jni) (BYTE AID[16], BYTE AIDLength) "jbyteArray" >>> %typemap(jtype) (BYTE AID[16], BYTE AIDLength) "byte[]" >>> %typemap(jstype) (BYTE AID[16], BYTE AIDLength) "byte[]" >>> %typemap(javain) (BYTE AID[16], BYTE AIDLength) "$javainput" >>> >>> but, this seems not to work. The field AIDLength is still in the Java class. >>> >>> If I apply this typemap to a function I get a Java method: >>> >>> public static void foo(byte[] AID) >>> >>> like expected. >>> >>> I had also the idea to define a macro which could do the task, but I >>> don't know how. >>> >>> Regards, Karsten >> I forgot to paste to full code of the typemap, if this helps for the >> problem: >> >> Here is the out typemap: >> >> %typemap(out) (BYTE AID[16], BYTE AIDLength) { >> jbyteArray jb; >> jb=(*jenv)->NewByteArray(jenv, $2); >> (*jenv)->SetByteArrayRegion(jenv, jb, 0, $2, (jbyte *)$1); >> return (jb); >> } >> >> %typemap(javaout) (BYTE AID[16], BYTE AIDLength) { >> return $jnicall; >> } >> > > Multi-argument typemaps for member variables was never envisaged. > You can still achieve what you want by using %ignore on the member > variables and then using %extend to add in a getter and setter. You can > then apply the multi-argument typemaps you want to the parameters in the > setter. ignore does not work: 2>structures.i(171): Error: Syntax error in input(3). I have used the following syntax: typedef struct { %immutable; BYTE AID[16]; BYTE lifeCycleState; BYTE privileges; %ignore; BYTE AIDLength; } GP211_APPLICATION_DATA; WBR, Karsten > > William > |
From: William S F. <ws...@fu...> - 2007-07-19 20:57:06
|
Karsten Ohme wrote: > William S Fulton schrieb: >> Karsten Ohme wrote: >>> Karsten Ohme schrieb: >>>> David Beazley schrieb: >>>>> On Jun 23, 2007, at 8:08 PM, Karsten Ohme wrote: >>>>> >>>>>> Where do I have to start to search in the sources if I want to >>>>>> rewrite >>>>>> the struct handling? I want to implement that typemap handling are >>>>>> also >>>>>> applied to structs. >>>>>> >>>>> Dare I ask why you want to do this? This is almost certainly a good >>>>> way to break the entire SWIG universe (or at least a sizable >>>>> portion of >>>>> it). >>>> Well, I have a struct like this: >>>> >>>> typedef struct { >>>> %immutable; >>>> BYTE AID[16]; >>>> BYTE AIDLength; >>>> BYTE lifeCycleState; >>>> BYTE privileges; >>>> } GP211_APPLICATION_DATA; >>>> >>>> but unfortunately always 16 bytes are used for the AID field although >>>> this is only the maximum. I have a lot of these structs which use all >>>> some fixed sized byte array fields. >>>> >>>> So, I thought I can define a typemap: >>>> >>>> %typemap(in) (BYTE AID[16], BYTE AIDLength) { >>>> $2 = (BYTE)(*jenv)->GetArrayLength(jenv, $input); >>>> (*jenv)->GetByteArrayRegion(jenv, $input, 0, (jsize)$2, (jbyte >>>> *)$1); >>>> } >>>> >>>> %typemap(jni) (BYTE AID[16], BYTE AIDLength) "jbyteArray" >>>> %typemap(jtype) (BYTE AID[16], BYTE AIDLength) "byte[]" >>>> %typemap(jstype) (BYTE AID[16], BYTE AIDLength) "byte[]" >>>> %typemap(javain) (BYTE AID[16], BYTE AIDLength) "$javainput" >>>> >>>> but, this seems not to work. The field AIDLength is still in the >>>> Java class. >>>> >>>> If I apply this typemap to a function I get a Java method: >>>> >>>> public static void foo(byte[] AID) >>>> >>>> like expected. >>>> >>>> I had also the idea to define a macro which could do the task, but I >>>> don't know how. >>>> >>>> Regards, Karsten >>> I forgot to paste to full code of the typemap, if this helps for the >>> problem: >>> >>> Here is the out typemap: >>> >>> %typemap(out) (BYTE AID[16], BYTE AIDLength) { >>> jbyteArray jb; >>> jb=(*jenv)->NewByteArray(jenv, $2); >>> (*jenv)->SetByteArrayRegion(jenv, jb, 0, $2, (jbyte *)$1); >>> return (jb); >>> } >>> >>> %typemap(javaout) (BYTE AID[16], BYTE AIDLength) { >>> return $jnicall; >>> } >>> >> >> Multi-argument typemaps for member variables was never envisaged. >> You can still achieve what you want by using %ignore on the member >> variables and then using %extend to add in a getter and setter. You can >> then apply the multi-argument typemaps you want to the parameters in the >> setter. > > ignore does not work: > > 2>structures.i(171): Error: Syntax error in input(3). > > > I have used the following syntax: > > typedef struct { > %immutable; > BYTE AID[16]; > BYTE lifeCycleState; > BYTE privileges; > %ignore; > BYTE AIDLength; > } GP211_APPLICATION_DATA; > You need to use %ignore correctly, it is documented in Extending.html. William |
From: Karsten O. <wid...@t-...> - 2007-07-26 18:51:55
|
William S Fulton schrieb: > Karsten Ohme wrote: >> William S Fulton schrieb: >>> Karsten Ohme wrote: >>>> Karsten Ohme schrieb: >>>>> David Beazley schrieb: >>>>>> On Jun 23, 2007, at 8:08 PM, Karsten Ohme wrote: >>>>>> >>>>>>> Where do I have to start to search in the sources if I want to >>>>>>> rewrite >>>>>>> the struct handling? I want to implement that typemap handling >>>>>>> are also >>>>>>> applied to structs. >>>>>>> >>>>>> Dare I ask why you want to do this? This is almost certainly a >>>>>> good >>>>>> way to break the entire SWIG universe (or at least a sizable >>>>>> portion of >>>>>> it). >>>>> Well, I have a struct like this: >>>>> >>>>> typedef struct { >>>>> %immutable; >>>>> BYTE AID[16]; >>>>> BYTE AIDLength; >>>>> BYTE lifeCycleState; >>>>> BYTE privileges; >>>>> } GP211_APPLICATION_DATA; >>>>> >>>>> but unfortunately always 16 bytes are used for the AID field although >>>>> this is only the maximum. I have a lot of these structs which use all >>>>> some fixed sized byte array fields. >>>>> >>>>> So, I thought I can define a typemap: >>>>> >>>>> %typemap(in) (BYTE AID[16], BYTE AIDLength) { >>>>> $2 = (BYTE)(*jenv)->GetArrayLength(jenv, $input); >>>>> (*jenv)->GetByteArrayRegion(jenv, $input, 0, (jsize)$2, (jbyte >>>>> *)$1); >>>>> } >>>>> >>>>> %typemap(jni) (BYTE AID[16], BYTE AIDLength) "jbyteArray" >>>>> %typemap(jtype) (BYTE AID[16], BYTE AIDLength) "byte[]" >>>>> %typemap(jstype) (BYTE AID[16], BYTE AIDLength) "byte[]" >>>>> %typemap(javain) (BYTE AID[16], BYTE AIDLength) "$javainput" >>>>> >>>>> but, this seems not to work. The field AIDLength is still in the >>>>> Java class. >>>>> >>>>> If I apply this typemap to a function I get a Java method: >>>>> >>>>> public static void foo(byte[] AID) >>>>> >>>>> like expected. >>>>> >>>>> I had also the idea to define a macro which could do the task, but I >>>>> don't know how. >>>>> >>>>> Regards, Karsten >>>> I forgot to paste to full code of the typemap, if this helps for the >>>> problem: >>>> >>>> Here is the out typemap: >>>> >>>> %typemap(out) (BYTE AID[16], BYTE AIDLength) { >>>> jbyteArray jb; >>>> jb=(*jenv)->NewByteArray(jenv, $2); >>>> (*jenv)->SetByteArrayRegion(jenv, jb, 0, $2, (jbyte *)$1); >>>> return (jb); >>>> } >>>> >>>> %typemap(javaout) (BYTE AID[16], BYTE AIDLength) { >>>> return $jnicall; >>>> } >>>> >>> >>> Multi-argument typemaps for member variables was never envisaged. >>> You can still achieve what you want by using %ignore on the member >>> variables and then using %extend to add in a getter and setter. You can >>> then apply the multi-argument typemaps you want to the parameters in the >>> setter. >> >> ignore does not work: >> >> 2>structures.i(171): Error: Syntax error in input(3). >> >> >> I have used the following syntax: >> >> typedef struct { >> %immutable; >> BYTE AID[16]; >> BYTE lifeCycleState; >> BYTE privileges; >> %ignore; >> BYTE AIDLength; >> } GP211_APPLICATION_DATA; >> > You need to use %ignore correctly, it is documented in Extending.html. I have tried to use the ignore directive like it is documented to ignore a function. At first I tried to ignore the field in the struct. Does not work. Then I tried to ignore the generated function: %ignore getAIDLength; but it seems to be ignored. In the extending section I can only find: #define %ignore %rename($ignore) #define %ignorewarn(x) %rename("$ignore:" x) which is not clear to me, how I can use it. WBR, Karsten > > William |