Module: FFI
- Defined in:
- lib/ffi/io.rb,
lib/ffi/ffi.rb,
lib/ffi/enum.rb,
lib/ffi/errno.rb,
lib/ffi/types.rb,
lib/ffi/union.rb,
lib/ffi/compat.rb,
lib/ffi/struct.rb,
lib/ffi/library.rb,
lib/ffi/pointer.rb,
lib/ffi/version.rb,
lib/ffi/function.rb,
lib/ffi/platform.rb,
lib/ffi/variadic.rb,
lib/ffi/autopointer.rb,
lib/ffi/library_path.rb,
lib/ffi/managedstruct.rb,
lib/ffi/struct_layout.rb,
lib/ffi/data_converter.rb,
lib/ffi/abstract_memory.rb,
lib/ffi/dynamic_library.rb,
lib/ffi/tools/generator.rb,
lib/ffi/struct_by_reference.rb,
lib/ffi/struct_layout_builder.rb,
lib/ffi/tools/const_generator.rb,
lib/ffi/tools/types_generator.rb,
lib/ffi/tools/struct_generator.rb,
ext/ffi_c/ffi.c,
ext/ffi_c/ffi.c
Overview
This module embbed type constants from NativeType.
Defined Under Namespace
Modules: DataConverter, IO, LastError, LegacyForkTracking, Library, ModernForkTracking, NativeType, Platform Classes: AbstractMemory, ArrayType, AutoPointer, Bitmask, Buffer, ConstGenerator, DynamicLibrary, Enum, Enums, Function, FunctionType, Generator, LibraryPath, ManagedStruct, MemoryPointer, NotFoundError, NullPointerError, PlatformError, Pointer, StrPtrConverter, Struct, StructByReference, StructByValue, StructGenerator, StructLayout, StructLayoutBuilder, Type, TypesGenerator, Union, VariadicInvoker
Constant Summary collapse
- CURRENT_PROCESS =
USE_THIS_PROCESS_AS_LIBRARY = FFI.make_shareable(Object.new)
- VERSION =
'1.17.0'
- TypeDefs =
FFI::TypeDefs
Document-constant
- CallbackInfo =
rbffi_FunctionTypeClass
- FunctionInfo =
rbffi_FunctionTypeClass
- NativeLibrary =
backwards compat library
LibraryClass
Class Method Summary collapse
-
._async_cb_dispatcher_atfork_child ⇒ Object
Ruby code will call this method in a Process._fork patch.
-
.add_typedef(old, add) ⇒ Type
Add a definition type to type definitions.
-
.custom_typedefs ⇒ Object
Truffleruby and JRuby don’t support Ractor so far.
- .errno ⇒ Integer
- .errno=(error) ⇒ nil
-
.find_type(name, type_map = nil) ⇒ Type
Find a type in
type_map
(TypeDefs, by default) from a type objet, a type name (symbol). -
.make_shareable(obj) ⇒ Object
This is for FFI internal use only.
-
.map_library_name(lib) ⇒ String
Transform a generic library name to a platform library name.
-
.type_size(type) ⇒ Integer
Get
type
size, in bytes. -
.typedef(old, add) ⇒ Type
Add a definition type to type definitions.
Instance Method Summary collapse
- #__typedef(old, add) ⇒ Object private
- #custom_typedefs ⇒ Object private
Methods included from ModernForkTracking
Methods included from LegacyForkTracking::KernelExt
Methods included from LegacyForkTracking::IOExt
Class Method Details
._async_cb_dispatcher_atfork_child ⇒ Object
Ruby code will call this method in a Process._fork patch
255 256 257 258 259 260 261 262 263 |
# File 'ext/ffi_c/Function.c', line 255
static VALUE
async_cb_dispatcher_atfork_child(VALUE self)
{
struct async_cb_dispatcher *ctx = async_cb_dispatcher_get();
if (ctx) {
async_cb_dispatcher_initialize(ctx);
}
return Qnil;
}
|
.add_typedef(old, add) ⇒ Type
Add a definition type to type definitions.
The type definition is local per Ractor.
62 63 64 |
# File 'lib/ffi/types.rb', line 62 def add_typedef(old, add) typedef old, add end |
.custom_typedefs ⇒ Object
Truffleruby and JRuby don’t support Ractor so far. So they don’t need separation between builtin and custom types.
40 41 42 |
# File 'lib/ffi/types.rb', line 40 def self.custom_typedefs TypeDefs end |
.errno ⇒ Integer
34 35 36 |
# File 'lib/ffi/errno.rb', line 34 def self.errno FFI::LastError.error end |
.errno=(error) ⇒ nil
40 41 42 |
# File 'lib/ffi/errno.rb', line 40 def self.errno=(error) FFI::LastError.error = error end |
.find_type(name, type_map = nil) ⇒ Type
Find a type in type_map
(TypeDefs, by default) from a type objet, a type name (symbol). If name
is a DataConverter, a new FFI::Type::Mapped is created.
76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 |
# File 'lib/ffi/types.rb', line 76 def find_type(name, type_map = nil) if name.is_a?(Type) name elsif type_map&.has_key?(name) type_map[name] elsif (tm=custom_typedefs).has_key?(name) tm[name] elsif TypeDefs.has_key?(name) TypeDefs[name] elsif name.is_a?(DataConverter) # Add a typedef so next time the converter is used, it hits the cache tm = (type_map || custom_typedefs) tm[name] = Type::Mapped.new(name) else raise TypeError, "unable to resolve type '#{name}'" end end |
.make_shareable(obj) ⇒ Object
This is for FFI internal use only.
35 36 37 |
# File 'lib/ffi/compat.rb', line 35 def self.make_shareable(obj) Ractor.make_shareable(obj) end |
.map_library_name(lib) ⇒ String
Transform a generic library name to a platform library name
46 47 48 49 |
# File 'lib/ffi/library.rb', line 46 def self.map_library_name(lib) # Mangle the library name to reflect the native library naming conventions LibraryPath.wrap(lib).to_s end |
.type_size(type) ⇒ Integer
Get type
size, in bytes.
101 102 103 |
# File 'lib/ffi/types.rb', line 101 def type_size(type) find_type(type).size end |
.typedef(old, add) ⇒ Type
Add a definition type to type definitions.
The type definition is local per Ractor.
56 57 58 59 |
# File 'lib/ffi/types.rb', line 56 def typedef(old, add) tm = custom_typedefs tm[add] = find_type(old) end |