1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@2542 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
ttate 2002-06-10 18:23:39 +00:00
parent 5c1bdda10c
commit ceade7b926
3 changed files with 19 additions and 1 deletions

View file

@ -59,6 +59,18 @@ to wrap the given PtrData object which is, for example, created by DL::malloc().
DL::malloc() is a function to allocate a memory by using the C library function DL::malloc() is a function to allocate a memory by using the C library function
malloc(). malloc().
We can define a callback using the module function "callback" as follows:
module Foo
extend DL::Importable
def my_comp(str1,str2)
str1 <=> str2
end
COMPARE = callback "int my_comp(char*,char*)"
end
where Foo::COMPARE is a Symbol object which invokes the method "my_comp".
DL::Importable module is very useful. However, we sometimes encounter a case DL::Importable module is very useful. However, we sometimes encounter a case
that we must directly use low-level functions such as dlsym(). In such case, that we must directly use low-level functions such as dlsym(). In such case,
we would use DL module functions. They are described in next section. we would use DL module functions. They are described in next section.

View file

@ -88,6 +88,7 @@ module DL
["long", "L", nil, nil, nil, nil], ["long", "L", nil, nil, nil, nil],
["float", "F", nil, nil, nil, nil], ["float", "F", nil, nil, nil, nil],
["double", "D", nil, nil, nil, nil], ["double", "D", nil, nil, nil, nil],
[/char\s*\*/,"S",nil, nil, nil, nil],
[/.+\*/, "P", nil, nil, nil, nil], [/.+\*/, "P", nil, nil, nil, nil],
[/.+\[\]/, "a", nil, nil, nil, nil], [/.+\[\]/, "a", nil, nil, nil, nil],
["void", "0", nil, nil, nil, nil], ["void", "0", nil, nil, nil, nil],

View file

@ -35,6 +35,11 @@ module LIBC
"int tz_minuteswest", "int tz_minuteswest",
"int tz_dsttime", "int tz_dsttime",
] ]
def my_compare(ptr1, ptr2)
ptr1.ptr.to_s <=> ptr2.ptr.to_s
end
COMPARE = callback "int my_compare(char**, char**)"
end end
@ -54,7 +59,7 @@ p LIBC.strcat("a", "b")
ary = ["a","c","b"] ary = ["a","c","b"]
ptr = ary.to_ptr ptr = ary.to_ptr
LIBC.qsort(ptr, ary.length, DL.sizeof('P'), $cb1) LIBC.qsort(ptr, ary.length, DL.sizeof('P'), LIBC::COMPARE)
p ptr.to_a('S', ary.length) p ptr.to_a('S', ary.length)
tv = LIBC::Timeval.malloc tv = LIBC::Timeval.malloc