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
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
···
On Sep 29, 2006, at 9:49 PM, Daniel Berger wrote:
--
Eric Hodel - drbrain@segment7.net - http://blog.segment7.net
This implementation is HODEL-HASH-9600 compliant
http://trackmap.robotcoop.com
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 9/30/06, Eric Hodel <drbrain@segment7.net> wrote:
On Sep 29, 2006, at 9:49 PM, Daniel Berger 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 Hodel 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
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
···
On Sep 29, 2006, at 9:49 PM, Daniel Berger wrote:
Inline doesn't have anything to read the header files to figure out the types...
···
On Sep 30, 2006, at 4:37 PM, Daniel Berger wrote:
On 9/30/06, Eric Hodel <drbrain@segment7.net> wrote:
On Sep 29, 2006, at 9:49 PM, Daniel Berger 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?
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
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();" }
--
Eric Hodel - drbrain@segment7.net - http://blog.segment7.net
This implementation is HODEL-HASH-9600 compliant
http://trackmap.robotcoop.com