Velocity Reviews

Velocity Reviews (http://www.velocityreviews.com/forums/index.php)
-   Ruby (http://www.velocityreviews.com/forums/f66-ruby.html)
-   -   mapping betwing a standard type and a user defined type with SWIG (http://www.velocityreviews.com/forums/t852374-mapping-betwing-a-standard-type-and-a-user-defined-type-with-swig.html)

Lyes Amazouz 08-20-2008 02:18 PM

mapping betwing a standard type and a user defined type with SWIG
 
[Note: parts of this message were removed to make it a legal post.]

Hello!

I've wrote a C library where I redefined (with typedef) the "char" and I
gave it the name "my_char". Every things worked well when I gave constant
strings to my wrapped functions which takes a "my_char *" as argument (then
it is equivalent to give a char * argument). But when I have given a String
variable to one of my functions (I initialised a variable var = "" and gave
it to the finction), it returned me this:

Expected argument 3 of type my_char *, but got String "" (TypeError)

How can I do to tell SWIG that the "my_char" type is euivalent to the "char"
type? May I have a solution to make work my functions

thank you

--
===========
| Lyes Amazouz
| USTHB, Algiers
===========


Alex Fenton 08-20-2008 03:51 PM

Re: mapping betwing a standard type and a user defined type withSWIG
 
Lyes Amazouz wrote:

> I've wrote a C library where I redefined (with typedef) the "char" and I
> gave it the name "my_char". Every things worked well when I gave constant
> strings to my wrapped functions which takes a "my_char *" as argument (then
> it is equivalent to give a char * argument). But when I have given a String
> variable to one of my functions (I initialised a variable var = "" and gave
> it to the finction), it returned me this:
>
> Expected argument 3 of type my_char *, but got String "" (TypeError)
>
> How can I do to tell SWIG that the "my_char" type is euivalent to the "char"
> type? May I have a solution to make work my functions


You are passing a C function that expects a 'my_char*' a Ruby string,
which in C has the type VALUE.

You need to apply a typemap that tells SWIG how to translate a ruby
object into my_char*. Something roughly like:

%typemap(in) my_char* "$1 = (my_char*)STR2CSTR($input);"

This is the most basic conversion; a good typemap would probably also
verify the ruby class of the passed-in argument, perhaps using SWIG's
%typemap(check)

Without wishing to be rude, this is fairly basic SWIG stuff. You might
want to have another look at the manual. It is dense but quite
comprehensive. In particular:

http://www.swig.org/Doc1.3/Ruby.html#Ruby_nn37
http://www.swig.org/Doc1.3/Ruby.html#Ruby_nn41

alex

Lyes Amazouz 08-20-2008 04:01 PM

Re: mapping betwing a standard type and a user defined type withSWIG
 
[Note: parts of this message were removed to make it a legal post.]

On Wed, Aug 20, 2008 at 4:51 PM, Alex Fenton <alex@deleteme.pressure.to>wrote:

> Lyes Amazouz wrote:
>
> I've wrote a C library where I redefined (with typedef) the "char" and I
>> gave it the name "my_char". Every things worked well when I gave constant
>> strings to my wrapped functions which takes a "my_char *" as argument
>> (then
>> it is equivalent to give a char * argument). But when I have given a
>> String
>> variable to one of my functions (I initialised a variable var = "" and
>> gave
>> it to the finction), it returned me this:
>>
>> Expected argument 3 of type my_char *, but got String "" (TypeError)
>>
>> How can I do to tell SWIG that the "my_char" type is euivalent to the
>> "char"
>> type? May I have a solution to make work my functions
>>

>
> You are passing a C function that expects a 'my_char*' a Ruby string, which
> in C has the type VALUE.
>
> You need to apply a typemap that tells SWIG how to translate a ruby object
> into my_char*. Something roughly like:
>
> %typemap(in) my_char* "$1 = (my_char*)STR2CSTR($input);"
>
> This is the most basic conversion; a good typemap would probably also
> verify the ruby class of the passed-in argument, perhaps using SWIG's
> %typemap(check)
>
> Without wishing to be rude, this is fairly basic SWIG stuff. You might want
> to have another look at the manual. It is dense but quite comprehensive. In
> particular:
>
> http://www.swig.org/Doc1.3/Ruby.html#Ruby_nn37
> http://www.swig.org/Doc1.3/Ruby.html#Ruby_nn41
>
> alex
>
>

Hello

Thank you for your help, I will try this.




--
===========
| Lyes Amazouz
| USTHB, Algiers
===========



All times are GMT. The time now is 09:02 PM.

Powered by vBulletin®. Copyright ©2000 - 2014, vBulletin Solutions, Inc.
SEO by vBSEO ©2010, Crawlability, Inc.