module LibC
extend FFI::Library
ffi_lib FFI::Library::LIBC
callback :qsort_cmp, [:pointer, :pointer ], :int
attach_function :qsort,
[:pointer, :ulong, :ulong, :qsort_cmp],
:int
end
def sort(array_of_ints)
p = FFI::MemoryPointer.new(:int32, array_of_ints.size)
p.put_array_of_int32(0, array_of_ints)
LibC.qsort(p, array_of_ints.size, 4) do |p1, p2|
i1 = p1.get_int32(0)
i2 = p2.get_int32(0)
i1 <=> i2
end
p.get_array_of_int32(0, array_of_ints.size)
end
Saturday, 28 September 13