Calling an existing method with RubyInline - how?

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Hi all,

RubyInline 3.6.0
Ruby 1.8.5
Suse Linux 10.1

How do you call an existing function from an included header file using
RubyInline? Do I have to wrap it in a ‘built’ function?

For example, say I have this bit of code, and that test.h has a function
defined as “const char* test_version(void)”.

require ‘inline’

class Foo
inline do |builder|
builder.include “<test.h>”
builder.add_compile_flags “-ltest”
end

And later…

def self.version
inline do |builder|
# What do I put here?
end
end
end

I’ve tried a few variations, but haven’t had any luck.

Thanks,

Dan
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.2 (GNU/Linux)
Comment: Using GnuPG with SUSE - http://enigmail.mozdev.org

iD8DBQFFHfc13p/dorzCFX0RAiPZAJ47WC+xUXynxGwX0LTreGUOyvN0ogCggqFK
42XUfdKPzNj/xAg/pp3h67c=
=yCUY
-----END PGP SIGNATURE-----

On Sep 29, 2006, at 9:49 PM, Daniel B. wrote:

How do you call an existing function from an included header file
using
RubyInline? Do I have to wrap it in a ‘built’ function?

This should help:

require ‘inline’

class Foo
inline do |builder|
builder.include “<stdlib.h>”

 builder.c <<-EOF
   int c_atoi(char * nptr) {
     return atoi(nptr);
   }
 EOF

 builder.c_singleton <<-EOF
   int c_atol(char * nptr) {
     return atol(nptr);
   }
 EOF

end

class << self; alias atol c_atol; end
alias atoi c_atoi

end

puts Foo.atol(“5”)
puts Foo.new.atoi(“5”)

For example, say I have this bit of code, and that test.h has a
function
defined as “const char* test_version(void)”.

From your example, probably:

require ‘inline’

class Foo
inline do |builder|
builder.include “<test.h>”
builder.add_compile_flags “-ltest”

 builder.c_singleton <<-EOF
   char * foo_test_version() {
     return test_version();
   }
 EOF

end

class << self; alias version foo_test_version; end
end


Eric H. - [email protected] - http://blog.segment7.net
This implementation is HODEL-HASH-9600 compliant

http://trackmap.robotcoop.com

On 9/30/06, Eric H. [email protected] wrote:

require ‘inline’

end
require ‘inline’
EOF
end

class << self; alias version foo_test_version; end
end

Thanks. Is there any way to avoid having to write wrappers for existing
functions? If not, could it be added as a feature?

I’d like to be able to just do this:

inline{ “return test_version();” }

Thanks,

Dan

On Sep 30, 2006, at 4:37 PM, Daniel B. wrote:

inline do |builder|
class << self; alias version foo_test_version; end
end

Thanks. Is there any way to avoid having to write wrappers for
existing functions? If not, could it be added as a feature?

I’d like to be able to just do this:

inline{ “return test_version();” }

Inline doesn’t have anything to read the header files to figure out
the types…


Eric H. - [email protected] - http://blog.segment7.net
This implementation is HODEL-HASH-9600 compliant

http://trackmap.robotcoop.com

Eric H. wrote:

class Foo
int c_atol(char * nptr) {
puts Foo.atol(“5”)
class Foo

class << self; alias version foo_test_version; end
end

Hm, so I have to wrap each function with a custom generated function.
Is there any chance of adding support for direct calls? Something
like:

inline{ “return test_version();” }

Or is that just not possible?

Thanks,

Dan