------art_19916_22496404.1219238113866
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

On Wed, Aug 20, 2008 at 12:06 PM, Alex Fenton <alex / deleteme.pressure.to>wrote:

> Lyes Amazouz wrote:
>
>  I said simple because I have a function that takes a callback function as
>> argument, and I look for the way how to give a pure ruby callback function
>> as argument of this function wrapped by SWIG
>>
>
> You haven't supplied enough detail to provide specific advice so you'll
> need to adapt what follows. A generally effective way of dealing with this
> is in SWIG to do something like:
>
> 1. Create a short 'bridging' function in C that converts arguments to ruby
> and then calls rb_yield
>
> Let's say your callback function is expected to take a single int argument
> and returns void. Put this is in as a SWIG literal in your .i file.
>
> %{
> void DoYielding(int arg_1)
> {
>  VALUE rb_arg_1  NT2NUM(arg_1);
>  rb_yield(arg_1);
> }
> %}
>
> If the callback needs to return a value, you'll need to capture the return
> value of rb_yield and do some Ruby -> C type translation.
>
> 2. Set it up so that method calls in ruby to the original callback-needing
> function supply this callback as the C argument
>
> If the callback-needing function needs to accept a single int parameter,
> the method that is exposed in ruby will look something like
>
> VALUE method_needing_callback(VALUE rb_input_arg)
> {
>  int input_arg  UM2INT(rb_input_arg);
>  C_Function_Needing_Callback(input_arg, &DoYielding);
>  return Qnil;
> }
>
> Then do whatever you need to get this function mapped to a ruby method,
> using normal SWIG techniques.
>
> 3. Compile, and call the method with a block
>
> some_object.method_needing_callback(42) do | an_int |
>  puts "The callback was called with argument %i" % an_int
> end
>
>  By the way, may I meet problems if some of my functions uses the
>> "callback-needing" function inside of them?
>>
>
> Not if you do it right. You can still call the callback-needing function
> with a normal callback, written in pure C/C++.
>
> a
>

Thank tou for the Reply, I'll try what you  suggested me. If I have more
troubles, I will repost another message



-- 
| Lyes Amazouz
| USTHB, Algiers

------art_19916_22496404.1219238113866--