Calling an existing method with RubyInline - how?

D

Daniel Berger

-----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-----
 
E

Eric Hodel

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
 
D

Daniel Berger

Eric said:
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")


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

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
 
E

Eric Hodel

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...
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
474,431
Messages
2,571,679
Members
48,796
Latest member
Greg L.

Latest Threads

Top