U:RDoc::NormalModule[iI" Fiddle:ET@0o:RDoc::Markup::Document: @parts[o;;[: @fileI"ext/fiddle/closure.c;T:0@omit_headings_from_table_of_contents_below0o;;[o:RDoc::Markup::Paragraph;[I"A libffi wrapper for Ruby.;To:RDoc::Markup::BlankLineS:RDoc::Markup::Heading: leveli: textI"Description;T@o; ;[I"LFiddle is an extension to translate a foreign function interface (FFI) ;TI"with ruby.;T@o; ;[I"KIt wraps {libffi}[http://sourceware.org/libffi/], a popular C library ;TI"Iwhich provides a portable interface that allows code written in one ;TI"7language to call code written in another language.;T@S; ;i;I" Example;T@o; ;[I">Here we will use Fiddle::Function to wrap {floor(3) from ;TI",libm}[http://linux.die.net/man/3/floor];T@o:RDoc::Markup::Verbatim;[I"require 'fiddle' ;TI" ;TI",libm = Fiddle.dlopen('/lib/libm.so.6') ;TI" ;TI"#floor = Fiddle::Function.new( ;TI" libm['floor'], ;TI" [Fiddle::TYPE_DOUBLE], ;TI" Fiddle::TYPE_DOUBLE ;TI") ;TI" ;TI"%puts floor.call(3.14159) #=> 3.0;T: @format0; I"ext/fiddle/fiddle.c;T; 0o;;[; I"ext/fiddle/lib/fiddle.rb;T; 0o;;[; I"%ext/fiddle/lib/fiddle/closure.rb;T; 0o;;[; I"%ext/fiddle/lib/fiddle/cparser.rb;T; 0o;;[; I"&ext/fiddle/lib/fiddle/function.rb;T; 0o;;[; I"$ext/fiddle/lib/fiddle/import.rb;T; 0o;;[; I""ext/fiddle/lib/fiddle/pack.rb;T; 0o;;[; I"$ext/fiddle/lib/fiddle/struct.rb;T; 0o;;[; I"#ext/fiddle/lib/fiddle/types.rb;T; 0o;;[; I"#ext/fiddle/lib/fiddle/value.rb;T; 0; 0; 0[[0U:RDoc::Constant[iI"TYPE_VOID;TI"Fiddle::TYPE_VOID;T00o;;[o; ;[I"TYPE_VOID;T@o; ;[I"C type - void;T; @1; 0@1@cRDoc::NormalModule0U;[iI"TYPE_VOIDP;TI"Fiddle::TYPE_VOIDP;T00o;;[o; ;[I"TYPE_VOIDP;T@o; ;[I"C type - void*;T; @1; 0@1@@[0U;[iI"TYPE_CHAR;TI"Fiddle::TYPE_CHAR;T00o;;[o; ;[I"TYPE_CHAR;T@o; ;[I"C type - char;T; @1; 0@1@@[0U;[iI"TYPE_SHORT;TI"Fiddle::TYPE_SHORT;T00o;;[o; ;[I"TYPE_SHORT;T@o; ;[I"C type - short;T; @1; 0@1@@[0U;[iI" TYPE_INT;TI"Fiddle::TYPE_INT;T00o;;[o; ;[I" TYPE_INT;T@o; ;[I"C type - int;T; @1; 0@1@@[0U;[iI"TYPE_LONG;TI"Fiddle::TYPE_LONG;T00o;;[o; ;[I"TYPE_LONG;T@o; ;[I"C type - long;T; @1; 0@1@@[0U;[iI"TYPE_LONG_LONG;TI"Fiddle::TYPE_LONG_LONG;T00o;;[o; ;[I"TYPE_LONG_LONG;T@o; ;[I"C type - long long;T; @1; 0@1@@[0U;[iI"TYPE_FLOAT;TI"Fiddle::TYPE_FLOAT;T00o;;[o; ;[I"TYPE_FLOAT;T@o; ;[I"C type - float;T; @1; 0@1@@[0U;[iI"TYPE_DOUBLE;TI"Fiddle::TYPE_DOUBLE;T00o;;[o; ;[I"TYPE_DOUBLE;T@o; ;[I"C type - double;T; @1; 0@1@@[0U;[iI"TYPE_SIZE_T;TI"Fiddle::TYPE_SIZE_T;T00o;;[o; ;[I"TYPE_SIZE_T;T@o; ;[I"C type - size_t;T; @1; 0@1@@[0U;[iI"TYPE_SSIZE_T;TI"Fiddle::TYPE_SSIZE_T;T00o;;[o; ;[I"TYPE_SSIZE_T;T@o; ;[I"C type - ssize_t;T; @1; 0@1@@[0U;[iI"TYPE_PTRDIFF_T;TI"Fiddle::TYPE_PTRDIFF_T;T00o;;[o; ;[I"TYPE_PTRDIFF_T;T@o; ;[I"C type - ptrdiff_t;T; @1; 0@1@@[0U;[iI"TYPE_INTPTR_T;TI"Fiddle::TYPE_INTPTR_T;T00o;;[o; ;[I"TYPE_INTPTR_T;T@o; ;[I"C type - intptr_t;T; @1; 0@1@@[0U;[iI"TYPE_UINTPTR_T;TI"Fiddle::TYPE_UINTPTR_T;T00o;;[o; ;[I"TYPE_UINTPTR_T;T@o; ;[I"C type - uintptr_t;T; @1; 0@1@@[0U;[iI"ALIGN_VOIDP;TI"Fiddle::ALIGN_VOIDP;T00o;;[o; ;[I"ALIGN_VOIDP;T@o; ;[I""The alignment size of a void*;T; @1; 0@1@@[0U;[iI"ALIGN_CHAR;TI"Fiddle::ALIGN_CHAR;T00o;;[o; ;[I"ALIGN_CHAR;T@o; ;[I"!The alignment size of a char;T; @1; 0@1@@[0U;[iI"ALIGN_SHORT;TI"Fiddle::ALIGN_SHORT;T00o;;[o; ;[I"ALIGN_SHORT;T@o; ;[I""The alignment size of a short;T; @1; 0@1@@[0U;[iI"ALIGN_INT;TI"Fiddle::ALIGN_INT;T00o;;[o; ;[I"ALIGN_INT;T@o; ;[I"!The alignment size of an int;T; @1; 0@1@@[0U;[iI"ALIGN_LONG;TI"Fiddle::ALIGN_LONG;T00o;;[o; ;[I"ALIGN_LONG;T@o; ;[I"!The alignment size of a long;T; @1; 0@1@@[0U;[iI"ALIGN_LONG_LONG;TI"Fiddle::ALIGN_LONG_LONG;T00o;;[o; ;[I"ALIGN_LONG_LONG;T@o; ;[I"&The alignment size of a long long;T; @1; 0@1@@[0U;[iI"ALIGN_FLOAT;TI"Fiddle::ALIGN_FLOAT;T00o;;[o; ;[I"ALIGN_FLOAT;T@o; ;[I""The alignment size of a float;T; @1; 0@1@@[0U;[iI"ALIGN_DOUBLE;TI"Fiddle::ALIGN_DOUBLE;T00o;;[o; ;[I"ALIGN_DOUBLE;T@o; ;[I"#The alignment size of a double;T; @1; 0@1@@[0U;[iI"ALIGN_SIZE_T;TI"Fiddle::ALIGN_SIZE_T;T00o;;[o; ;[I"ALIGN_SIZE_T;T@o; ;[I"#The alignment size of a size_t;T; @1; 0@1@@[0U;[iI"ALIGN_SSIZE_T;TI"Fiddle::ALIGN_SSIZE_T;T00o;;[o; ;[I"ALIGN_SSIZE_T;T@o; ;[I"$The alignment size of a ssize_t;T; @1; 0@1@@[0U;[iI"ALIGN_PTRDIFF_T;TI"Fiddle::ALIGN_PTRDIFF_T;T00o;;[o; ;[I"ALIGN_PTRDIFF_T;T@o; ;[I"&The alignment size of a ptrdiff_t;T; @1; 0@1@@[0U;[iI"ALIGN_INTPTR_T;TI"Fiddle::ALIGN_INTPTR_T;T00o;;[o; ;[I"ALIGN_INTPTR_T;T@o; ;[I"%The alignment size of a intptr_t;T; @1; 0@1@@[0U;[iI"ALIGN_UINTPTR_T;TI"Fiddle::ALIGN_UINTPTR_T;T00o;;[o; ;[I"ALIGN_UINTPTR_T;T@o; ;[I"&The alignment size of a uintptr_t;T; @1; 0@1@@[0U;[iI" WINDOWS;TI"Fiddle::WINDOWS;T00o;;[o; ;[I":Returns a boolean regarding whether the host is WIN32;T; @1; 0@1@@[0U;[iI"SIZEOF_VOIDP;TI"Fiddle::SIZEOF_VOIDP;T00o;;[o; ;[I"SIZEOF_VOIDP;T@o; ;[I"size of a void*;T; @1; 0@1@@[0U;[iI"SIZEOF_CHAR;TI"Fiddle::SIZEOF_CHAR;T00o;;[o; ;[I"SIZEOF_CHAR;T@o; ;[I"size of a char;T; @1; 0@1@@[0U;[iI"SIZEOF_SHORT;TI"Fiddle::SIZEOF_SHORT;T00o;;[o; ;[I"SIZEOF_SHORT;T@o; ;[I"size of a short;T; @1; 0@1@@[0U;[iI"SIZEOF_INT;TI"Fiddle::SIZEOF_INT;T00o;;[o; ;[I"SIZEOF_INT;T@o; ;[I"size of an int;T; @1; 0@1@@[0U;[iI"SIZEOF_LONG;TI"Fiddle::SIZEOF_LONG;T00o;;[o; ;[I"SIZEOF_LONG;T@o; ;[I"size of a long;T; @1; 0@1@@[0U;[iI"SIZEOF_LONG_LONG;TI"Fiddle::SIZEOF_LONG_LONG;T00o;;[o; ;[I"SIZEOF_LONG_LONG;T@o; ;[I"size of a long long;T; @1; 0@1@@[0U;[iI"SIZEOF_FLOAT;TI"Fiddle::SIZEOF_FLOAT;T00o;;[o; ;[I"SIZEOF_FLOAT;T@o; ;[I"size of a float;T; @1; 0@1@@[0U;[iI"SIZEOF_DOUBLE;TI"Fiddle::SIZEOF_DOUBLE;T00o;;[o; ;[I"SIZEOF_DOUBLE;T@o; ;[I"size of a double;T; @1; 0@1@@[0U;[iI"SIZEOF_SIZE_T;TI"Fiddle::SIZEOF_SIZE_T;T00o;;[o; ;[I"SIZEOF_SIZE_T;T@o; ;[I"size of a size_t;T; @1; 0@1@@[0U;[iI"SIZEOF_SSIZE_T;TI"Fiddle::SIZEOF_SSIZE_T;T00o;;[o; ;[I"SIZEOF_SSIZE_T;T@o; ;[I"size of a ssize_t;T; @1; 0@1@@[0U;[iI"SIZEOF_PTRDIFF_T;TI"Fiddle::SIZEOF_PTRDIFF_T;T00o;;[o; ;[I"SIZEOF_PTRDIFF_T;T@o; ;[I"size of a ptrdiff_t;T; @1; 0@1@@[0U;[iI"SIZEOF_INTPTR_T;TI"Fiddle::SIZEOF_INTPTR_T;T00o;;[o; ;[I"SIZEOF_INTPTR_T;T@o; ;[I"size of a intptr_t;T; @1; 0@1@@[0U;[iI"SIZEOF_UINTPTR_T;TI"Fiddle::SIZEOF_UINTPTR_T;T00o;;[o; ;[I"SIZEOF_UINTPTR_T;T@o; ;[I"size of a uintptr_t;T; @1; 0@1@@[0U;[iI"RUBY_FREE;TI"Fiddle::RUBY_FREE;T00o;;[o; ;[I"RUBY_FREE;T@o; ;[I")Address of the ruby_xfree() function;T; @1; 0@1@@[0U;[iI"BUILD_RUBY_PLATFORM;TI" Fiddle::BUILD_RUBY_PLATFORM;T00o;;[ o; ;[I"BUILD_RUBY_PLATFORM;T@o; ;[I"7Platform built against (i.e. "x86_64-linux", etc.);T@o; ;[I"See also RUBY_PLATFORM;T; @1; 0@1@@[0[[[I" class;T[[: public[[I" dlopen;FI"ext/fiddle/lib/fiddle.rb;T[I" dlunwrap;TI"ext/fiddle/fiddle.c;T[I" dlwrap;T@[[I" free;T@[[I"last_error;F@X[I"last_error=;F@X[I" malloc;T@[[I" realloc;T@[[I"win32_last_error;F@X[I"win32_last_error=;F@X[:protected[[: private[[I" instance;T[[;[[;[[;[[@W@X[[U:RDoc::Context::Section[i0o;;[; 0; 0[@ @1@4@7@:@=@@@C@F@I@L@LcRDoc::TopLevel