diff --git a/sorbet/rbi/gems/ffi@1.15.5.rbi b/sorbet/rbi/gems/ffi@1.15.5.rbi index c24a533c..511fd21e 100644 --- a/sorbet/rbi/gems/ffi@1.15.5.rbi +++ b/sorbet/rbi/gems/ffi@1.15.5.rbi @@ -4,5 +4,1990 @@ # This is an autogenerated file for types exported from the `ffi` gem. # Please instead update this file by running `bin/tapioca gem ffi`. -# THIS IS AN EMPTY RBI FILE. -# see https://github.com/Shopify/tapioca#manually-requiring-parts-of-a-gem +# source://ffi//lib/ffi/platform.rb#32 +module FFI + class << self + # Add a definition type to type definitions. + # + # @param old [Type, DataConverter, Symbol] type definition used by {FFI.find_type} + # @param add [Symbol] new type definition's name to add + # @return [Type] + # + # source://ffi//lib/ffi/types.rb#45 + def add_typedef(old, add); end + + # @see FFI::LastError.error + # + # source://ffi//lib/ffi/errno.rb#34 + def errno; end + + # @see FFI::LastError.error= + # + # source://ffi//lib/ffi/errno.rb#40 + def errno=(error); end + + # Find a type in +type_map+ ({FFI::TypeDefs}, by default) from + # a type objet, a type name (symbol). If +name+ is a {DataConverter}, + # a new {Type::Mapped} is created. + # + # @param name [Type, DataConverter, Symbol] + # @param type_map [Hash] if nil, {FFI::TypeDefs} is used + # @return [Type] + # + # source://ffi//lib/ffi/types.rb#56 + def find_type(name, type_map = T.unsafe(nil)); end + + # Transform a generic library name to a platform library name + # + # @example + # # Linux + # FFI.map_library_name 'c' # -> "libc.so.6" + # FFI.map_library_name 'jpeg' # -> "libjpeg.so" + # # Windows + # FFI.map_library_name 'c' # -> "msvcrt.dll" + # FFI.map_library_name 'jpeg' # -> "jpeg.dll" + # @param lib [#to_s] library name + # @return [String] library name formatted for current platform + # + # source://ffi//lib/ffi/library.rb#44 + def map_library_name(lib); end + + # Get +type+ size, in bytes. + # + # @param type +type+ is an instance of class accepted by {FFI.find_type} + # @return [Numeric] + # + # source://ffi//lib/ffi/types.rb#176 + def type_size(type); end + + # Add a definition type to type definitions. + # + # @param old [Type, DataConverter, Symbol] type definition used by {FFI.find_type} + # @param add [Symbol] new type definition's name to add + # @return [Type] + # + # source://ffi//lib/ffi/types.rb#40 + def typedef(old, add); end + end +end + +# source://ffi//lib/ffi/abstract_memory.rb#33 +class FFI::AbstractMemory + def [](_arg0); end + def __copy_from__(_arg0, _arg1); end + def clear; end + def get(_arg0, _arg1); end + def get_array_of_char(_arg0, _arg1); end + def get_array_of_double(_arg0, _arg1); end + def get_array_of_float(_arg0, _arg1); end + def get_array_of_float32(_arg0, _arg1); end + def get_array_of_float64(_arg0, _arg1); end + def get_array_of_int(_arg0, _arg1); end + def get_array_of_int16(_arg0, _arg1); end + def get_array_of_int32(_arg0, _arg1); end + def get_array_of_int64(_arg0, _arg1); end + def get_array_of_int8(_arg0, _arg1); end + def get_array_of_long(_arg0, _arg1); end + def get_array_of_long_long(_arg0, _arg1); end + def get_array_of_pointer(_arg0, _arg1); end + def get_array_of_short(_arg0, _arg1); end + def get_array_of_string(*_arg0); end + def get_array_of_uchar(_arg0, _arg1); end + def get_array_of_uint(_arg0, _arg1); end + def get_array_of_uint16(_arg0, _arg1); end + def get_array_of_uint32(_arg0, _arg1); end + def get_array_of_uint64(_arg0, _arg1); end + def get_array_of_uint8(_arg0, _arg1); end + def get_array_of_ulong(_arg0, _arg1); end + def get_array_of_ulong_long(_arg0, _arg1); end + def get_array_of_ushort(_arg0, _arg1); end + def get_bytes(_arg0, _arg1); end + def get_char(_arg0); end + def get_double(_arg0); end + def get_float(_arg0); end + def get_float32(_arg0); end + def get_float64(_arg0); end + def get_int(_arg0); end + def get_int16(_arg0); end + def get_int32(_arg0); end + def get_int64(_arg0); end + def get_int8(_arg0); end + def get_long(_arg0); end + def get_long_long(_arg0); end + def get_pointer(_arg0); end + def get_short(_arg0); end + def get_string(*_arg0); end + def get_uchar(_arg0); end + def get_uint(_arg0); end + def get_uint16(_arg0); end + def get_uint32(_arg0); end + def get_uint64(_arg0); end + def get_uint8(_arg0); end + def get_ulong(_arg0); end + def get_ulong_long(_arg0); end + def get_ushort(_arg0); end + def put(_arg0, _arg1, _arg2); end + def put_array_of_char(_arg0, _arg1); end + def put_array_of_double(_arg0, _arg1); end + def put_array_of_float(_arg0, _arg1); end + def put_array_of_float32(_arg0, _arg1); end + def put_array_of_float64(_arg0, _arg1); end + def put_array_of_int(_arg0, _arg1); end + def put_array_of_int16(_arg0, _arg1); end + def put_array_of_int32(_arg0, _arg1); end + def put_array_of_int64(_arg0, _arg1); end + def put_array_of_int8(_arg0, _arg1); end + def put_array_of_long(_arg0, _arg1); end + def put_array_of_long_long(_arg0, _arg1); end + def put_array_of_pointer(_arg0, _arg1); end + def put_array_of_short(_arg0, _arg1); end + def put_array_of_uchar(_arg0, _arg1); end + def put_array_of_uint(_arg0, _arg1); end + def put_array_of_uint16(_arg0, _arg1); end + def put_array_of_uint32(_arg0, _arg1); end + def put_array_of_uint64(_arg0, _arg1); end + def put_array_of_uint8(_arg0, _arg1); end + def put_array_of_ulong(_arg0, _arg1); end + def put_array_of_ulong_long(_arg0, _arg1); end + def put_array_of_ushort(_arg0, _arg1); end + def put_bytes(*_arg0); end + def put_char(_arg0, _arg1); end + def put_double(_arg0, _arg1); end + def put_float(_arg0, _arg1); end + def put_float32(_arg0, _arg1); end + def put_float64(_arg0, _arg1); end + def put_int(_arg0, _arg1); end + def put_int16(_arg0, _arg1); end + def put_int32(_arg0, _arg1); end + def put_int64(_arg0, _arg1); end + def put_int8(_arg0, _arg1); end + def put_long(_arg0, _arg1); end + def put_long_long(_arg0, _arg1); end + def put_pointer(_arg0, _arg1); end + def put_short(_arg0, _arg1); end + def put_string(_arg0, _arg1); end + def put_uchar(_arg0, _arg1); end + def put_uint(_arg0, _arg1); end + def put_uint16(_arg0, _arg1); end + def put_uint32(_arg0, _arg1); end + def put_uint64(_arg0, _arg1); end + def put_uint8(_arg0, _arg1); end + def put_ulong(_arg0, _arg1); end + def put_ulong_long(_arg0, _arg1); end + def put_ushort(_arg0, _arg1); end + def read_array_of_char(_arg0); end + def read_array_of_double(_arg0); end + def read_array_of_float(_arg0); end + def read_array_of_int(_arg0); end + def read_array_of_int16(_arg0); end + def read_array_of_int32(_arg0); end + def read_array_of_int64(_arg0); end + def read_array_of_int8(_arg0); end + def read_array_of_long(_arg0); end + def read_array_of_long_long(_arg0); end + def read_array_of_pointer(_arg0); end + def read_array_of_short(_arg0); end + def read_array_of_uchar(_arg0); end + def read_array_of_uint(_arg0); end + def read_array_of_uint16(_arg0); end + def read_array_of_uint32(_arg0); end + def read_array_of_uint64(_arg0); end + def read_array_of_uint8(_arg0); end + def read_array_of_ulong(_arg0); end + def read_array_of_ulong_long(_arg0); end + def read_array_of_ushort(_arg0); end + def read_bytes(_arg0); end + def read_char; end + def read_double; end + def read_float; end + def read_int; end + def read_int16; end + def read_int32; end + def read_int64; end + def read_int8; end + def read_long; end + def read_long_long; end + def read_pointer; end + def read_short; end + def read_uchar; end + def read_uint; end + def read_uint16; end + def read_uint32; end + def read_uint64; end + def read_uint8; end + def read_ulong; end + def read_ulong_long; end + def read_ushort; end + def size; end + + # Return +true+ if +self+ has a size limit. + # + # @return [Boolean] + # + # source://ffi//lib/ffi/abstract_memory.rb#40 + def size_limit?; end + + def total; end + def type_size; end + def write_array_of_char(_arg0); end + def write_array_of_double(_arg0); end + def write_array_of_float(_arg0); end + def write_array_of_int(_arg0); end + def write_array_of_int16(_arg0); end + def write_array_of_int32(_arg0); end + def write_array_of_int64(_arg0); end + def write_array_of_int8(_arg0); end + def write_array_of_long(_arg0); end + def write_array_of_long_long(_arg0); end + def write_array_of_pointer(_arg0); end + def write_array_of_short(_arg0); end + def write_array_of_uchar(_arg0); end + def write_array_of_uint(_arg0); end + def write_array_of_uint16(_arg0); end + def write_array_of_uint32(_arg0); end + def write_array_of_uint64(_arg0); end + def write_array_of_uint8(_arg0); end + def write_array_of_ulong(_arg0); end + def write_array_of_ulong_long(_arg0); end + def write_array_of_ushort(_arg0); end + def write_bytes(*_arg0); end + def write_char(_arg0); end + def write_double(_arg0); end + def write_float(_arg0); end + def write_int(_arg0); end + def write_int16(_arg0); end + def write_int32(_arg0); end + def write_int64(_arg0); end + def write_int8(_arg0); end + def write_long(_arg0); end + def write_long_long(_arg0); end + def write_pointer(_arg0); end + def write_short(_arg0); end + def write_uchar(_arg0); end + def write_uint(_arg0); end + def write_uint16(_arg0); end + def write_uint32(_arg0); end + def write_uint64(_arg0); end + def write_uint8(_arg0); end + def write_ulong(_arg0); end + def write_ulong_long(_arg0); end + def write_ushort(_arg0); end +end + +# source://ffi//lib/ffi/abstract_memory.rb#34 +FFI::AbstractMemory::LONG_MAX = T.let(T.unsafe(nil), Integer) + +class FFI::ArrayType < ::FFI::Type + def initialize(_arg0, _arg1); end + + def elem_type; end + def length; end +end + +# source://ffi//lib/ffi/autopointer.rb#33 +class FFI::AutoPointer < ::FFI::Pointer + extend ::FFI::DataConverter + + # @note The safest, and therefore preferred, calling + # idiom is to pass a Method as the second parameter. Example usage: + # + # class PointerHelper + # def self.release(pointer) + # ... + # end + # end + # + # p = AutoPointer.new(other_pointer, PointerHelper.method(:release)) + # + # The above code will cause PointerHelper#release to be invoked at GC time. + # @note The last calling idiom (only one parameter) is generally only + # going to be useful if you subclass {AutoPointer}, and override + # #release, which by default does nothing. + # @overload initialize + # @overload initialize + # @overload initialize + # @overload initialize + # @raise [TypeError] + # @return [AutoPointer] a new instance of AutoPointer + # + # source://ffi//lib/ffi/autopointer.rb#78 + def initialize(ptr, proc = T.unsafe(nil), &block); end + + # Set +autorelease+ property. See {Pointer Autorelease section at Pointer}. + # + # @param autorelease [Boolean] + # @return [Boolean] +autorelease+ + # + # source://ffi//lib/ffi/autopointer.rb#109 + def autorelease=(autorelease); end + + # Get +autorelease+ property. See {Pointer Autorelease section at Pointer}. + # + # @return [Boolean] +autorelease+ + # + # source://ffi//lib/ffi/autopointer.rb#115 + def autorelease?; end + + # Free the pointer. + # + # @return [nil] + # + # source://ffi//lib/ffi/autopointer.rb#102 + def free; end + + class << self + # Create a new AutoPointer. + # + # Override {DataConverter#from_native}. + # + # @overload self.from_native + # @return [AutoPointer] + # + # source://ffi//lib/ffi/autopointer.rb#198 + def from_native(val, ctx); end + + # Return native type of AutoPointer. + # + # Override {DataConverter#native_type}. + # + # @raise [RuntimeError] if class does not implement a +#release+ method + # @return [Type::POINTER] + # + # source://ffi//lib/ffi/autopointer.rb#184 + def native_type; end + end +end + +# CallableReleaser is a {Releaser} used when an {AutoPointer} is defined with a +# Proc or a Method. +# +# source://ffi//lib/ffi/autopointer.rb#168 +class FFI::AutoPointer::CallableReleaser < ::FFI::AutoPointer::Releaser + # Release +ptr+ by using Proc or Method defined at +ptr+ + # {AutoPointer#initialize initialization}. + # + # @param ptr [Pointer] + # @return [nil] + # + # source://ffi//lib/ffi/autopointer.rb#174 + def release(ptr); end +end + +# DefaultReleaser is a {Releaser} used when an {AutoPointer} is defined +# without Proc or Method. In this case, the pointer to release must be of +# a class derived from AutoPointer with a {release} class method. +# +# source://ffi//lib/ffi/autopointer.rb#157 +class FFI::AutoPointer::DefaultReleaser < ::FFI::AutoPointer::Releaser + # Release +ptr+ using the {release} class method of its class. + # + # @param ptr [Pointer] + # @return [nil] + # + # source://ffi//lib/ffi/autopointer.rb#161 + def release(ptr); end +end + +# A releaser is an object in charge of release an {AutoPointer}. +# +# @abstract Base class for {AutoPointer}'s releasers. +# +# All subclasses of Releaser should define a +#release(ptr)+ method. +# +# source://ffi//lib/ffi/autopointer.rb#123 +class FFI::AutoPointer::Releaser + # A new instance of Releaser. + # + # @param ptr [Pointer] + # @param proc [#call] + # @return [nil] + # + # source://ffi//lib/ffi/autopointer.rb#130 + def initialize(ptr, proc); end + + # Returns the value of attribute autorelease. + # + # source://ffi//lib/ffi/autopointer.rb#124 + def autorelease; end + + # Sets the attribute autorelease + # + # @param value the value to set the attribute autorelease to. + # + # source://ffi//lib/ffi/autopointer.rb#124 + def autorelease=(_arg0); end + + # Release pointer if +autorelease+ is set. + # + # @param args + # + # source://ffi//lib/ffi/autopointer.rb#149 + def call(*args); end + + # Free pointer. + # + # @return [nil] + # + # source://ffi//lib/ffi/autopointer.rb#138 + def free; end +end + +# Represents a C enum whose values are power of 2 +# +# Contrary to classical enums, bitmask values are usually combined +# when used. +# +# @example +# enum { +# red = (1<<0), +# green = (1<<1), +# blue = (1<<2) +# } +# +# source://ffi//lib/ffi/enum.rb#184 +class FFI::Bitmask < ::FFI::Enum + # @overload initialize + # @overload initialize + # @return [Bitmask] a new instance of Bitmask + # + # source://ffi//lib/ffi/enum.rb#193 + def initialize(*args); end + + # Get a symbol list or a value from the bitmask + # + # @overload [] + # @overload [] + # @overload [] + # @overload [] + # @raise [ArgumentError] + # + # source://ffi//lib/ffi/enum.rb#236 + def [](*query); end + + # @param val [Integer] + # @param ctx unused + # @return [Array] list of symbol names corresponding to val, plus an optional remainder if some bits don't match any constant + # + # source://ffi//lib/ffi/enum.rb#282 + def from_native(val, ctx); end + + # Get the native value of a bitmask + # + # @overload to_native + # @overload to_native + # + # source://ffi//lib/ffi/enum.rb#260 + def to_native(query, ctx); end +end + +class FFI::Buffer < ::FFI::AbstractMemory + def initialize(*_arg0); end + + def +(_arg0); end + def inspect; end + def length; end + def order(*_arg0); end + def slice(_arg0, _arg1); end + + private + + def initialize_copy(_arg0); end + + class << self + def alloc_in(*_arg0); end + def alloc_inout(*_arg0); end + def alloc_out(*_arg0); end + def new_in(*_arg0); end + def new_inout(*_arg0); end + def new_out(*_arg0); end + end +end + +# source://ffi//lib/ffi/library.rb#32 +FFI::CURRENT_PROCESS = T.let(T.unsafe(nil), Object) + +FFI::CallbackInfo = FFI::FunctionType + +# This module is used to extend somes classes and give then a common API. +# +# Most of methods defined here must be overriden. +# +# source://ffi//lib/ffi/data_converter.rb#35 +module FFI::DataConverter + # Convert from a native type. + # + # source://ffi//lib/ffi/data_converter.rb#63 + def from_native(value, ctx); end + + # Get native type. + # + # @overload native_type + # @overload native_type + # + # source://ffi//lib/ffi/data_converter.rb#45 + def native_type(type = T.unsafe(nil)); end + + # Convert to a native type. + # + # source://ffi//lib/ffi/data_converter.rb#58 + def to_native(value, ctx); end +end + +class FFI::DynamicLibrary + def initialize(_arg0, _arg1); end + + def find_function(_arg0); end + def find_symbol(_arg0); end + def find_variable(_arg0); end + def last_error; end + def name; end + + class << self + def last_error; end + def open(_arg0, _arg1); end + end +end + +FFI::DynamicLibrary::RTLD_ALL_MASK = T.let(T.unsafe(nil), Integer) +FFI::DynamicLibrary::RTLD_BINDING_MASK = T.let(T.unsafe(nil), Integer) +FFI::DynamicLibrary::RTLD_DEEPBIND = T.let(T.unsafe(nil), Integer) +FFI::DynamicLibrary::RTLD_FIRST = T.let(T.unsafe(nil), Integer) +FFI::DynamicLibrary::RTLD_GLOBAL = T.let(T.unsafe(nil), Integer) +FFI::DynamicLibrary::RTLD_LAZY = T.let(T.unsafe(nil), Integer) +FFI::DynamicLibrary::RTLD_LOCAL = T.let(T.unsafe(nil), Integer) +FFI::DynamicLibrary::RTLD_LOCATION_MASK = T.let(T.unsafe(nil), Integer) +FFI::DynamicLibrary::RTLD_MEMBER = T.let(T.unsafe(nil), Integer) +FFI::DynamicLibrary::RTLD_NODELETE = T.let(T.unsafe(nil), Integer) +FFI::DynamicLibrary::RTLD_NOLOAD = T.let(T.unsafe(nil), Integer) +FFI::DynamicLibrary::RTLD_NOW = T.let(T.unsafe(nil), Integer) + +class FFI::DynamicLibrary::Symbol < ::FFI::Pointer + def inspect; end + + private + + def initialize_copy(_arg0); end +end + +# Represents a C enum. +# +# For a C enum: +# enum fruits { +# apple, +# banana, +# orange, +# pineapple +# }; +# are defined this vocabulary: +# * a _symbol_ is a word from the enumeration (ie. _apple_, by example); +# * a _value_ is the value of a symbol in the enumeration (by example, apple has value _0_ and banana _1_). +# +# source://ffi//lib/ffi/enum.rb#84 +class FFI::Enum + include ::FFI::DataConverter + + # @overload initialize + # @overload initialize + # @return [Enum] a new instance of Enum + # + # source://ffi//lib/ffi/enum.rb#97 + def initialize(*args); end + + # Get a symbol or a value from the enum. + # + # @overload [] + # @overload [] + # + # source://ffi//lib/ffi/enum.rb#134 + def [](query); end + + # Get a symbol or a value from the enum. + # + # @overload [] + # @overload [] + # + # source://ffi//lib/ffi/enum.rb#134 + def find(query); end + + # @param val + # @return symbol name if it exists for +val+. + # + # source://ffi//lib/ffi/enum.rb#168 + def from_native(val, ctx); end + + # Returns the value of attribute native_type. + # + # source://ffi//lib/ffi/enum.rb#88 + def native_type; end + + # Get the symbol map. + # + # @return [Hash] + # + # source://ffi//lib/ffi/enum.rb#146 + def symbol_map; end + + # @return [Array] enum symbol names + # + # source://ffi//lib/ffi/enum.rb#121 + def symbols; end + + # Returns the value of attribute tag. + # + # source://ffi//lib/ffi/enum.rb#87 + def tag; end + + # Get the symbol map. + # + # @return [Hash] + # + # source://ffi//lib/ffi/enum.rb#146 + def to_h; end + + # Get the symbol map. + # + # @return [Hash] + # + # source://ffi//lib/ffi/enum.rb#146 + def to_hash; end + + # @param val [Symbol, Integer, #to_int] + # @param ctx unused + # @return [Integer] value of a enum symbol + # + # source://ffi//lib/ffi/enum.rb#156 + def to_native(val, ctx); end +end + +# An instance of this class permits to manage {Enum}s. In fact, Enums is a collection of {Enum}s. +# +# source://ffi//lib/ffi/enum.rb#36 +class FFI::Enums + # @return [nil] + # + # source://ffi//lib/ffi/enum.rb#39 + def initialize; end + + # Add an {Enum} to the collection. + # + # @param enum [Enum] + # + # source://ffi//lib/ffi/enum.rb#47 + def <<(enum); end + + # @param symbol a symbol to find in merge symbol maps of all enums. + # @return a symbol + # + # source://ffi//lib/ffi/enum.rb#66 + def __map_symbol(symbol); end + + # Find a {Enum} in collection. + # + # @param query enum tag or part of an enum name + # @return [Enum] + # + # source://ffi//lib/ffi/enum.rb#56 + def find(query); end +end + +class FFI::Function < ::FFI::Pointer + def initialize(*_arg0); end + + def attach(_arg0, _arg1); end + def autorelease; end + def autorelease=(_arg0); end + def autorelease?; end + def call(*_arg0); end + def free; end + + private + + def initialize_copy(_arg0); end +end + +FFI::FunctionInfo = FFI::FunctionType + +class FFI::FunctionType < ::FFI::Type + def initialize(*_arg0); end + + def param_types; end + def result_type; end +end + +# This module implements a couple of class methods to play with IO. +# +# source://ffi//lib/ffi/io.rb#34 +module FFI::IO + class << self + # Synonym for IO::for_fd. + # + # @param fd [Integer] file decriptor + # @param mode [String] mode string + # @return [::IO] + # + # source://ffi//lib/ffi/io.rb#39 + def for_fd(fd, mode = T.unsafe(nil)); end + + # A version of IO#read that reads data from an IO and put then into a native buffer. + # + # This will be optimized at some future time to eliminate the double copy. + # + # @param io [#read] io to read from + # @param buf [AbstractMemory] destination for data read from +io+ + # @param len [nil, Numeric] maximul number of bytes to read from +io+. If +nil+, + # read until end of file. + # @return [Numeric] length really read, in bytes + # + # source://ffi//lib/ffi/io.rb#53 + def native_read(io, buf, len); end + end +end + +module FFI::LastError + private + + def error; end + def error=(_arg0); end + + class << self + def error; end + def error=(_arg0); end + end +end + +# This module is the base to use native functions. +# +# A basic usage may be: +# require 'ffi' +# +# module Hello +# extend FFI::Library +# ffi_lib FFI::Library::LIBC +# attach_function 'puts', [ :string ], :int +# end +# +# Hello.puts("Hello, World") +# +# source://ffi//lib/ffi/library.rb#78 +module FFI::Library + # Attach C function +func+ to this module. + # + # @option options + # @option options + # @option options + # @option options + # @overload attach_function + # @overload attach_function + # @param name [#to_s] name of ruby method to attach as + # @param func [#to_s] name of C function to attach + # @param args [Array] an array of types + # @param returns [Symbol] type of return value + # @param options [Hash] a customizable set of options + # @raise [FFI::NotFoundError] if +func+ cannot be found in the attached libraries (see {#ffi_lib}) + # @return [FFI::VariadicInvoker] + # + # source://ffi//lib/ffi/library.rb#234 + def attach_function(name, func, args, returns = T.unsafe(nil), options = T.unsafe(nil)); end + + # Attach C variable +cname+ to this module. + # + # @overload attach_variable + # @overload attach_variable + # @raise [FFI::NotFoundError] if +cname+ cannot be found in libraries + # @return [DynamicLibrary::Symbol] + # + # source://ffi//lib/ffi/library.rb#331 + def attach_variable(mname, a1, a2 = T.unsafe(nil)); end + + # Create a new FFI::Bitmask + # + # @overload bitmask + # @overload bitmask + # @overload bitmask + # @overload bitmask + # @overload bitmask + # @overload bitmask + # @return [FFI::Bitmask] + # + # source://ffi//lib/ffi/library.rb#554 + def bitmask(*args); end + + # @overload callback + # @overload callback + # @raise [ArgumentError] + # @return [FFI::CallbackInfo] + # + # source://ffi//lib/ffi/library.rb#384 + def callback(*args); end + + # Create a new {FFI::Enum}. + # + # @overload enum + # @overload enum + # @overload enum + # @overload enum + # @overload enum + # @overload enum + # @return [FFI::Enum] + # + # source://ffi//lib/ffi/library.rb#511 + def enum(*args); end + + # Find an enum by name. + # + # @param name + # @return [FFI::Enum] + # + # source://ffi//lib/ffi/library.rb#561 + def enum_type(name); end + + # Find an enum by a symbol it contains. + # + # @param symbol + # @return [FFI::Enum] + # + # source://ffi//lib/ffi/library.rb#568 + def enum_value(symbol); end + + # Set the calling convention for {#attach_function} and {#callback} + # + # @note +:stdcall+ is typically used for attaching Windows API functions + # @param convention [Symbol] one of +:default+, +:stdcall+ + # @return [Symbol] the new calling convention + # @see http://en.wikipedia.org/wiki/Stdcall#stdcall + # + # source://ffi//lib/ffi/library.rb#163 + def ffi_convention(convention = T.unsafe(nil)); end + + # Load native libraries. + # + # @param names [Array] names of libraries to load + # @raise [LoadError] if a library cannot be opened + # @return [Array] + # + # source://ffi//lib/ffi/library.rb#95 + def ffi_lib(*names); end + + # Sets library flags for {#ffi_lib}. + # + # @example + # ffi_lib_flags(:lazy, :local) # => 5 + # @param flags [Symbol, …] (see {FlagsMap}) + # @return [Fixnum] the new value + # + # source://ffi//lib/ffi/library.rb#196 + def ffi_lib_flags(*flags); end + + # Get FFI libraries loaded using {#ffi_lib}. + # + # @raise [LoadError] if no libraries have been loaded (using {#ffi_lib}) + # @return [Array] array of currently loaded FFI libraries + # @see #ffi_lib + # + # source://ffi//lib/ffi/library.rb#173 + def ffi_libraries; end + + # Find a type definition. + # + # @param t [DataConverter, Type, Struct, Symbol] type to find + # @return [Type] + # + # source://ffi//lib/ffi/library.rb#575 + def find_type(t); end + + # This function returns a list of possible names to lookup. + # + # @note Function names on windows may be decorated if they are using stdcall. See + # * http://en.wikipedia.org/wiki/Name_mangling#C_name_decoration_in_Microsoft_Windows + # * http://msdn.microsoft.com/en-us/library/zxk0tw93%28v=VS.100%29.aspx + # * http://en.wikibooks.org/wiki/X86_Disassembly/Calling_Conventions#STDCALL + # Note that decorated names can be overridden via def files. Also note that the + # windows api, although using, doesn't have decorated names. + # @param name [#to_s] function name + # @param arg_types [Array] function's argument types + # @return [Array] + # + # source://ffi//lib/ffi/library.rb#289 + def function_names(name, arg_types); end + + # Register or get an already registered type definition. + # + # To register a new type definition, +old+ should be a {FFI::Type}. +add+ + # is in this case the type definition. + # + # If +old+ is a {DataConverter}, a {Type::Mapped} is returned. + # + # If +old+ is +:enum+ + # * and +add+ is an +Array+, a call to {#enum} is made with +add+ as single parameter; + # * in others cases, +info+ is used to create a named enum. + # + # If +old+ is a key for type map, #typedef get +old+ type definition. + # + # @param old [DataConverter, Symbol, Type] + # @param add [Symbol] + # @param info [Symbol] + # @return [FFI::Enum, FFI::Type] + # + # source://ffi//lib/ffi/library.rb#428 + def typedef(old, add, info = T.unsafe(nil)); end + + private + + # Generic enum builder + # @param [Class] klass can be one of FFI::Enum or FFI::Bitmask + # @param args (see #enum or #bitmask) + # + # source://ffi//lib/ffi/library.rb#456 + def generic_enum(klass, *args); end + + class << self + # Test if extended object is a Module. If not, raise RuntimeError. + # + # @param mod extended object + # @raise [RuntimeError] if +mod+ is not a Module + # @return [nil] + # + # source://ffi//lib/ffi/library.rb#86 + def extended(mod); end + end +end + +# source://ffi//lib/ffi/library.rb#79 +FFI::Library::CURRENT_PROCESS = T.let(T.unsafe(nil), Object) + +# Flags used in {#ffi_lib}. +# +# This map allows you to supply symbols to {#ffi_lib_flags} instead of +# the actual constants. +# +# source://ffi//lib/ffi/library.rb#182 +FFI::Library::FlagsMap = T.let(T.unsafe(nil), Hash) + +# source://ffi//lib/ffi/library.rb#80 +FFI::Library::LIBC = T.let(T.unsafe(nil), String) + +# FFI::ManagedStruct allows custom garbage-collection of your FFI::Structs. +# +# The typical use case would be when interacting with a library +# that has a nontrivial memory management design, such as a linked +# list or a binary tree. +# +# When the {Struct} instance is garbage collected, FFI::ManagedStruct will +# invoke the class's release() method during object finalization. +# +# @example Example usage: +# module MyLibrary +# ffi_lib "libmylibrary" +# attach_function :new_dlist, [], :pointer +# attach_function :destroy_dlist, [:pointer], :void +# end +# +# class DoublyLinkedList < FFI::ManagedStruct +# @@@ +# struct do |s| +# s.name 'struct dlist' +# s.include 'dlist.h' +# s.field :head, :pointer +# s.field :tail, :pointer +# end +# @@@ +# +# def self.release ptr +# MyLibrary.destroy_dlist(ptr) +# end +# end +# +# begin +# ptr = DoublyLinkedList.new(MyLibrary.new_dlist) +# # do something with the list +# end +# # struct is out of scope, and will be GC'd using DoublyLinkedList#release +# +# source://ffi//lib/ffi/managedstruct.rb#70 +class FFI::ManagedStruct < ::FFI::Struct + # A new instance of FFI::ManagedStruct. + # + # @overload initialize + # @overload initialize + # @raise [NoMethodError] + # @return [ManagedStruct] a new instance of ManagedStruct + # + # source://ffi//lib/ffi/managedstruct.rb#77 + def initialize(pointer = T.unsafe(nil)); end +end + +class FFI::MemoryPointer < ::FFI::Pointer + def initialize(*_arg0); end + + class << self + def from_string(_arg0); end + end +end + +FFI::NativeLibrary = FFI::DynamicLibrary +module FFI::NativeType; end +FFI::NativeType::BOOL = T.let(T.unsafe(nil), FFI::Type::Builtin) +FFI::NativeType::BUFFER_IN = T.let(T.unsafe(nil), FFI::Type::Builtin) +FFI::NativeType::BUFFER_INOUT = T.let(T.unsafe(nil), FFI::Type::Builtin) +FFI::NativeType::BUFFER_OUT = T.let(T.unsafe(nil), FFI::Type::Builtin) +FFI::NativeType::FLOAT32 = T.let(T.unsafe(nil), FFI::Type::Builtin) +FFI::NativeType::FLOAT64 = T.let(T.unsafe(nil), FFI::Type::Builtin) +FFI::NativeType::INT16 = T.let(T.unsafe(nil), FFI::Type::Builtin) +FFI::NativeType::INT32 = T.let(T.unsafe(nil), FFI::Type::Builtin) +FFI::NativeType::INT64 = T.let(T.unsafe(nil), FFI::Type::Builtin) +FFI::NativeType::INT8 = T.let(T.unsafe(nil), FFI::Type::Builtin) +FFI::NativeType::LONG = T.let(T.unsafe(nil), FFI::Type::Builtin) +FFI::NativeType::LONGDOUBLE = T.let(T.unsafe(nil), FFI::Type::Builtin) +FFI::NativeType::POINTER = T.let(T.unsafe(nil), FFI::Type::Builtin) +FFI::NativeType::STRING = T.let(T.unsafe(nil), FFI::Type::Builtin) +FFI::NativeType::UINT16 = T.let(T.unsafe(nil), FFI::Type::Builtin) +FFI::NativeType::UINT32 = T.let(T.unsafe(nil), FFI::Type::Builtin) +FFI::NativeType::UINT64 = T.let(T.unsafe(nil), FFI::Type::Builtin) +FFI::NativeType::UINT8 = T.let(T.unsafe(nil), FFI::Type::Builtin) +FFI::NativeType::ULONG = T.let(T.unsafe(nil), FFI::Type::Builtin) +FFI::NativeType::VARARGS = T.let(T.unsafe(nil), FFI::Type::Builtin) +FFI::NativeType::VOID = T.let(T.unsafe(nil), FFI::Type::Builtin) + +# Exception raised when a function is not found in libraries +# +# source://ffi//lib/ffi/library.rb#58 +class FFI::NotFoundError < ::LoadError + # @return [NotFoundError] a new instance of NotFoundError + # + # source://ffi//lib/ffi/library.rb#59 + def initialize(function, *libraries); end +end + +class FFI::NullPointerError < ::RuntimeError; end + +# This module defines different constants and class methods to play with +# various platforms. +# +# source://ffi//lib/ffi/platform.rb#37 +module FFI::Platform + class << self + # Test if current OS is a *BSD (include MAC) + # + # @return [Boolean] + # + # source://ffi//lib/ffi/platform.rb#156 + def bsd?; end + + # Test if current OS is +os+. + # + # @param os [String] + # @return [Boolean] + # + # source://ffi//lib/ffi/platform.rb#90 + def is_os(os); end + + # Test if current OS is Mac OS + # + # @return [Boolean] + # + # source://ffi//lib/ffi/platform.rb#168 + def mac?; end + + # Test if current OS is Solaris (Sun OS) + # + # @return [Boolean] + # + # source://ffi//lib/ffi/platform.rb#174 + def solaris?; end + + # Test if current OS is a unix OS + # + # @return [Boolean] + # + # source://ffi//lib/ffi/platform.rb#180 + def unix?; end + + # Test if current OS is Windows + # + # @return [Boolean] + # + # source://ffi//lib/ffi/platform.rb#162 + def windows?; end + end +end + +FFI::Platform::ADDRESS_ALIGN = T.let(T.unsafe(nil), Integer) +FFI::Platform::ADDRESS_SIZE = T.let(T.unsafe(nil), Integer) + +# source://ffi//lib/ffi/platform.rb#63 +FFI::Platform::ARCH = T.let(T.unsafe(nil), String) + +FFI::Platform::BIG_ENDIAN = T.let(T.unsafe(nil), Integer) +FFI::Platform::BYTE_ORDER = T.let(T.unsafe(nil), Integer) + +# source://ffi//lib/ffi/platform.rb#109 +FFI::Platform::CONF_DIR = T.let(T.unsafe(nil), String) + +# source://ffi//lib/ffi/platform.rb#61 +FFI::Platform::CPU = T.let(T.unsafe(nil), String) + +FFI::Platform::DOUBLE_ALIGN = T.let(T.unsafe(nil), Integer) +FFI::Platform::DOUBLE_SIZE = T.let(T.unsafe(nil), Integer) +FFI::Platform::FLOAT_ALIGN = T.let(T.unsafe(nil), Integer) +FFI::Platform::FLOAT_SIZE = T.let(T.unsafe(nil), Integer) +FFI::Platform::INT16_ALIGN = T.let(T.unsafe(nil), Integer) +FFI::Platform::INT16_SIZE = T.let(T.unsafe(nil), Integer) +FFI::Platform::INT32_ALIGN = T.let(T.unsafe(nil), Integer) +FFI::Platform::INT32_SIZE = T.let(T.unsafe(nil), Integer) +FFI::Platform::INT64_ALIGN = T.let(T.unsafe(nil), Integer) +FFI::Platform::INT64_SIZE = T.let(T.unsafe(nil), Integer) +FFI::Platform::INT8_ALIGN = T.let(T.unsafe(nil), Integer) +FFI::Platform::INT8_SIZE = T.let(T.unsafe(nil), Integer) + +# source://ffi//lib/ffi/platform.rb#103 +FFI::Platform::IS_BSD = T.let(T.unsafe(nil), TrueClass) + +# source://ffi//lib/ffi/platform.rb#100 +FFI::Platform::IS_DRAGONFLYBSD = T.let(T.unsafe(nil), FalseClass) + +# source://ffi//lib/ffi/platform.rb#97 +FFI::Platform::IS_FREEBSD = T.let(T.unsafe(nil), FalseClass) + +# source://ffi//lib/ffi/platform.rb#94 +FFI::Platform::IS_GNU = T.let(T.unsafe(nil), T.untyped) + +# source://ffi//lib/ffi/platform.rb#95 +FFI::Platform::IS_LINUX = T.let(T.unsafe(nil), FalseClass) + +# source://ffi//lib/ffi/platform.rb#96 +FFI::Platform::IS_MAC = T.let(T.unsafe(nil), TrueClass) + +# source://ffi//lib/ffi/platform.rb#98 +FFI::Platform::IS_NETBSD = T.let(T.unsafe(nil), FalseClass) + +# source://ffi//lib/ffi/platform.rb#99 +FFI::Platform::IS_OPENBSD = T.let(T.unsafe(nil), FalseClass) + +# source://ffi//lib/ffi/platform.rb#101 +FFI::Platform::IS_SOLARIS = T.let(T.unsafe(nil), FalseClass) + +# source://ffi//lib/ffi/platform.rb#102 +FFI::Platform::IS_WINDOWS = T.let(T.unsafe(nil), FalseClass) + +# source://ffi//lib/ffi/platform.rb#134 +FFI::Platform::LIBC = T.let(T.unsafe(nil), String) + +# source://ffi//lib/ffi/platform.rb#113 +FFI::Platform::LIBPREFIX = T.let(T.unsafe(nil), String) + +# source://ffi//lib/ffi/platform.rb#122 +FFI::Platform::LIBSUFFIX = T.let(T.unsafe(nil), String) + +FFI::Platform::LITTLE_ENDIAN = T.let(T.unsafe(nil), Integer) +FFI::Platform::LONG_ALIGN = T.let(T.unsafe(nil), Integer) +FFI::Platform::LONG_DOUBLE_ALIGN = T.let(T.unsafe(nil), Integer) +FFI::Platform::LONG_DOUBLE_SIZE = T.let(T.unsafe(nil), Integer) +FFI::Platform::LONG_SIZE = T.let(T.unsafe(nil), Integer) + +# 64-bit inodes +# +# source://ffi//lib/ffi/platform.rb#108 +FFI::Platform::NAME = T.let(T.unsafe(nil), String) + +# source://ffi//lib/ffi/platform.rb#38 +FFI::Platform::OS = T.let(T.unsafe(nil), String) + +# source://ffi//lib/ffi/platform.rb#59 +FFI::Platform::OSVERSION = T.let(T.unsafe(nil), Integer) + +# source://ffi//lib/ffi/platform.rb#33 +class FFI::PlatformError < ::LoadError; end + +# source://ffi//lib/ffi/pointer.rb#42 +class FFI::Pointer < ::FFI::AbstractMemory + def initialize(*_arg0); end + + def +(_arg0); end + def ==(_arg0); end + def address; end + def autorelease=(_arg0); end + def autorelease?; end + def free; end + def inspect; end + def null?; end + def order(*_arg0); end + + # Read pointer's contents as +type+ + # + # Same as: + # ptr.get(type, 0) + # + # @param type [Symbol, Type] of data to read + # @return [Object] + # + # source://ffi//lib/ffi/pointer.rb#152 + def read(type); end + + # Read an array of +type+ of length +length+. + # + # @example + # ptr.read_array_of_type(TYPE_UINT8, :read_uint8, 4) # -> [1, 2, 3, 4] + # @param type [Type] type of data to read from pointer's contents + # @param reader [Symbol] method to send to +self+ to read +type+ + # @param length [Numeric] + # @return [Array] + # + # source://ffi//lib/ffi/pointer.rb#114 + def read_array_of_type(type, reader, length); end + + # Read pointer's contents as a string, or the first +len+ bytes of the + # equivalent string if +len+ is not +nil+. + # + # @param len [nil, Numeric] length of string to return + # @return [String] + # + # source://ffi//lib/ffi/pointer.rb#57 + def read_string(len = T.unsafe(nil)); end + + # Read the first +len+ bytes of pointer's contents as a string. + # + # Same as: + # ptr.read_string(len) # with len not nil + # + # @param len [Numeric] length of string to return + # @return [String] + # + # source://ffi//lib/ffi/pointer.rb#72 + def read_string_length(len); end + + # Read pointer's contents as a string. + # + # Same as: + # ptr.read_string # with no len + # + # @return [String] + # + # source://ffi//lib/ffi/pointer.rb#81 + def read_string_to_null; end + + def slice(_arg0, _arg1); end + def to_i; end + + # @return [self] + # + # source://ffi//lib/ffi/pointer.rb#142 + def to_ptr; end + + def to_s; end + def type_size; end + + # Write +value+ of type +type+ to pointer's content + # + # Same as: + # ptr.put(type, 0) + # + # @param type [Symbol, Type] of data to read + # @param value [Object] to write + # @return [nil] + # + # source://ffi//lib/ffi/pointer.rb#163 + def write(type, value); end + + # Write +ary+ in pointer's contents as +type+. + # + # @example + # ptr.write_array_of_type(TYPE_UINT8, :put_uint8, [1, 2, 3 ,4]) + # @param type [Type] type of data to write to pointer's contents + # @param writer [Symbol] method to send to +self+ to write +type+ + # @param ary [Array] + # @return [self] + # + # source://ffi//lib/ffi/pointer.rb#132 + def write_array_of_type(type, writer, ary); end + + # Write +str+ in pointer's contents, or first +len+ bytes if + # +len+ is not +nil+. + # + # @param str [String] string to write + # @param len [Numeric] length of string to return + # @return [self] + # + # source://ffi//lib/ffi/pointer.rb#101 + def write_string(str, len = T.unsafe(nil)); end + + # Write +len+ first bytes of +str+ in pointer's contents. + # + # Same as: + # ptr.write_string(str, len) # with len not nil + # + # @param str [String] string to write + # @param len [Numeric] length of string to return + # @return [self] + # + # source://ffi//lib/ffi/pointer.rb#92 + def write_string_length(str, len); end + + private + + def initialize_copy(_arg0); end + + class << self + # Return the size of a pointer on the current platform, in bytes + # + # @return [Numeric] + # + # source://ffi//lib/ffi/pointer.rb#49 + def size; end + end +end + +FFI::Pointer::NULL = T.let(T.unsafe(nil), FFI::Pointer) + +# Pointer size +# +# source://ffi//lib/ffi/pointer.rb#45 +FFI::Pointer::SIZE = T.let(T.unsafe(nil), Integer) + +FFI::SizeTypes = T.let(T.unsafe(nil), Hash) + +# This will convert a pointer to a Ruby string (just like `:string`), but +# also allow to work with the pointer itself. This is useful when you want +# a Ruby string already containing a copy of the data, but also the pointer +# to the data for you to do something with it, like freeing it, in case the +# library handed the memory off to the caller (Ruby-FFI). +# +# It's {typedef}'d as +:strptr+. +# +# source://ffi//lib/ffi/types.rb#158 +class FFI::StrPtrConverter + extend ::FFI::DataConverter + + class << self + # Returns a [ String, Pointer ] tuple so the C memory for the string can be freed + # + # @param val [Pointer] + # @param ctx not used + # @return [Array(String, Pointer)] + # + # source://ffi//lib/ffi/types.rb#166 + def from_native(val, ctx); end + end +end + +# source://ffi//lib/ffi/struct.rb#41 +class FFI::Struct + def initialize(*_arg0); end + + def [](_arg0); end + def []=(_arg0, _arg1); end + + # @return [Fixnum] Struct alignment + # + # source://ffi//lib/ffi/struct.rb#50 + def align; end + + # @return [Fixnum] Struct alignment + # + # source://ffi//lib/ffi/struct.rb#50 + def alignment; end + + # Clear the struct content. + # + # @return [self] + # + # source://ffi//lib/ffi/struct.rb#78 + def clear; end + + def layout; end + + # source://ffi//lib/ffi/struct.rb#61 + def members; end + + def null?; end + + # Get the offset of a field. + # + # @return [Numeric] + # + # source://ffi//lib/ffi/struct.rb#56 + def offset_of(name); end + + # Get an array of tuples (field name, offset of the field). + # + # @return [Array] Array + # + # source://ffi//lib/ffi/struct.rb#72 + def offsets; end + + def order(*_arg0); end + def pointer; end + + # Get struct size + # + # @return [Numeric] + # + # source://ffi//lib/ffi/struct.rb#45 + def size; end + + # Get {Pointer} to struct content. + # + # @return [AbstractMemory] + # + # source://ffi//lib/ffi/struct.rb#85 + def to_ptr; end + + # Get array of values from Struct fields. + # + # @return [Array] + # + # source://ffi//lib/ffi/struct.rb#67 + def values; end + + private + + def initialize_copy(_arg0); end + def layout=(_arg0); end + def pointer=(_arg0); end + + class << self + # @return [Fixnum] Struct alignment + # + # source://ffi//lib/ffi/struct.rb#104 + def alignment; end + + def alloc_in(*_arg0); end + def alloc_inout(*_arg0); end + def alloc_out(*_arg0); end + + # source://ffi//lib/ffi/struct.rb#165 + def auto_ptr; end + + # source://ffi//lib/ffi/struct.rb#143 + def by_ref(flags = T.unsafe(nil)); end + + # source://ffi//lib/ffi/struct.rb#139 + def by_value; end + + # source://ffi//lib/ffi/struct.rb#123 + def in; end + + # @overload layout + # @overload layout + # @return [StructLayout] + # + # source://ffi//lib/ffi/struct.rb#205 + def layout(*spec); end + + # source://ffi//lib/ffi/struct.rb#109 + def members; end + + def new_in(*_arg0); end + def new_inout(*_arg0); end + def new_out(*_arg0); end + + # Get the offset of a field. + # + # @return [Numeric] + # + # source://ffi//lib/ffi/struct.rb#119 + def offset_of(name); end + + # Get an array of tuples (field name, offset of the field). + # + # @return [Array] Array + # + # source://ffi//lib/ffi/struct.rb#114 + def offsets; end + + # source://ffi//lib/ffi/struct.rb#127 + def out; end + + # source://ffi//lib/ffi/struct.rb#131 + def ptr(flags = T.unsafe(nil)); end + + # Get struct size + # + # @return [Numeric] + # + # source://ffi//lib/ffi/struct.rb#91 + def size; end + + # set struct size + # + # @param size [Numeric] + # @raise [ArgumentError] + # @return [size] + # + # source://ffi//lib/ffi/struct.rb#98 + def size=(size); end + + # source://ffi//lib/ffi/struct.rb#135 + def val; end + + protected + + # source://ffi//lib/ffi/struct.rb#243 + def align(alignment = T.unsafe(nil)); end + + # source://ffi//lib/ffi/struct.rb#243 + def aligned(alignment = T.unsafe(nil)); end + + # source://ffi//lib/ffi/struct.rb#229 + def callback(params, ret); end + + # source://ffi//lib/ffi/struct.rb#248 + def enclosing_module; end + + # source://ffi//lib/ffi/struct.rb#260 + def find_field_type(type, mod = T.unsafe(nil)); end + + # source://ffi//lib/ffi/struct.rb#275 + def find_type(type, mod = T.unsafe(nil)); end + + # source://ffi//lib/ffi/struct.rb#238 + def pack(packed = T.unsafe(nil)); end + + # source://ffi//lib/ffi/struct.rb#238 + def packed(packed = T.unsafe(nil)); end + + private + + # Add array +spec+ to +builder+. + # + # @param builder [StructLayoutBuilder] + # @param spec [Array] + # @return [builder] + # + # source://ffi//lib/ffi/struct.rb#297 + def array_layout(builder, spec); end + + # Add hash +spec+ to +builder+. + # + # @param builder [StructLayoutBuilder] + # @param spec [Hash] + # @return [builder] + # + # source://ffi//lib/ffi/struct.rb#287 + def hash_layout(builder, spec); end + end +end + +class FFI::Struct::InlineArray + include ::Enumerable + + def initialize(_arg0, _arg1); end + + def [](_arg0); end + def []=(_arg0, _arg1); end + def each; end + def size; end + def to_a; end + def to_ptr; end +end + +# source://ffi//lib/ffi/struct.rb#147 +class FFI::Struct::ManagedStructConverter < ::FFI::StructByReference + # @param struct_class [Struct] + # @raise [NoMethodError] + # @return [ManagedStructConverter] a new instance of ManagedStructConverter + # + # source://ffi//lib/ffi/struct.rb#150 + def initialize(struct_class); end + + # @param ptr [Pointer] + # @param ctx [nil] + # @return [Struct] + # + # source://ffi//lib/ffi/struct.rb#160 + def from_native(ptr, ctx); end +end + +# This class includes the {FFI::DataConverter} module. +# +# source://ffi//lib/ffi/struct_by_reference.rb#33 +class FFI::StructByReference + include ::FFI::DataConverter + + # @param struct_class [Struct] + # @return [StructByReference] a new instance of StructByReference + # + # source://ffi//lib/ffi/struct_by_reference.rb#39 + def initialize(struct_class); end + + # Create a struct from content of memory +value+. + # + # @param value [AbstractMemory] + # @param ctx [nil] + # @return [Struct] + # + # source://ffi//lib/ffi/struct_by_reference.rb#68 + def from_native(value, ctx); end + + # Always get {FFI::Type}::POINTER. + # + # source://ffi//lib/ffi/struct_by_reference.rb#47 + def native_type; end + + # Returns the value of attribute struct_class. + # + # source://ffi//lib/ffi/struct_by_reference.rb#36 + def struct_class; end + + # @param value [nil, Struct] + # @param ctx [nil] + # @return [AbstractMemory] Pointer on +value+. + # + # source://ffi//lib/ffi/struct_by_reference.rb#54 + def to_native(value, ctx); end +end + +class FFI::StructByValue < ::FFI::Type + def initialize(_arg0); end + + def layout; end + def struct_class; end +end + +# source://ffi//lib/ffi/struct_layout.rb#36 +class FFI::StructLayout < ::FFI::Type + def initialize(_arg0, _arg1, _arg2); end + + def [](_arg0); end + def __union!; end + def fields; end + def members; end + + # Get the offset of a field. + # + # @return [Numeric] + # + # source://ffi//lib/ffi/struct_layout.rb#46 + def offset_of(field_name); end + + # Get an array of tuples (field name, offset of the field). + # + # @return [Array] Array + # + # source://ffi//lib/ffi/struct_layout.rb#40 + def offsets; end + + def to_a; end +end + +class FFI::StructLayout::Array < ::FFI::StructLayout::Field + def get(_arg0); end + def put(_arg0, _arg1); end +end + +class FFI::StructLayout::CharArray < ::FFI::Struct::InlineArray + def to_s; end + def to_str; end +end + +# An enum {Field} in a {StructLayout}. +# +# source://ffi//lib/ffi/struct_layout.rb#51 +class FFI::StructLayout::Enum < ::FFI::StructLayout::Field + # Get an object of type {#type} from memory pointed by +ptr+. + # + # @param ptr [AbstractMemory] pointer on a {Struct} + # @return [Object] + # + # source://ffi//lib/ffi/struct_layout.rb#56 + def get(ptr); end + + # Set +value+ into memory pointed by +ptr+. + # + # @param ptr [AbstractMemory] pointer on a {Struct} + # @param value + # @return [nil] + # + # source://ffi//lib/ffi/struct_layout.rb#64 + def put(ptr, value); end +end + +class FFI::StructLayout::Field + def initialize(*_arg0); end + + def alignment; end + def get(_arg0); end + def name; end + def offset; end + def put(_arg0, _arg1); end + def size; end + def type; end +end + +class FFI::StructLayout::Function < ::FFI::StructLayout::Field + def get(_arg0); end + def put(_arg0, _arg1); end +end + +# source://ffi//lib/ffi/struct_layout.rb#70 +class FFI::StructLayout::InnerStruct < ::FFI::StructLayout::Field + # source://ffi//lib/ffi/struct_layout.rb#71 + def get(ptr); end + + # @raise [TypeError] + # + # source://ffi//lib/ffi/struct_layout.rb#75 + def put(ptr, value); end +end + +# source://ffi//lib/ffi/struct_layout.rb#81 +class FFI::StructLayout::Mapped < ::FFI::StructLayout::Field + # @return [Mapped] a new instance of Mapped + # + # source://ffi//lib/ffi/struct_layout.rb#82 + def initialize(name, offset, type, orig_field); end + + # source://ffi//lib/ffi/struct_layout.rb#87 + def get(ptr); end + + # source://ffi//lib/ffi/struct_layout.rb#91 + def put(ptr, value); end +end + +class FFI::StructLayout::Number < ::FFI::StructLayout::Field; end +class FFI::StructLayout::Pointer < ::FFI::StructLayout::Field; end +class FFI::StructLayout::String < ::FFI::StructLayout::Field; end + +# Build a {StructLayout struct layout}. +# +# source://ffi//lib/ffi/struct_layout_builder.rb#35 +class FFI::StructLayoutBuilder + # @return [StructLayoutBuilder] a new instance of StructLayoutBuilder + # + # source://ffi//lib/ffi/struct_layout_builder.rb#39 + def initialize; end + + # Add a field to the builder. + # + # @note Setting +offset+ to +nil+ or +-1+ is equivalent to +0+. + # @param name [String, Symbol] name of the field + # @param type [Array, DataConverter, Struct, StructLayout::Field, Symbol, Type] type of the field + # @param offset [Numeric, nil] + # @return [self] + # + # source://ffi//lib/ffi/struct_layout_builder.rb#123 + def add(name, type, offset = T.unsafe(nil)); end + + # Add an array as a field to the builder. + # + # @param count [Numeric] array length + # @param name [String, Symbol] name of the field + # @param type [Array, DataConverter, Struct, StructLayout::Field, Symbol, Type] type of the field + # @param offset [Numeric, nil] + # @return [self] + # + # source://ffi//lib/ffi/struct_layout_builder.rb#161 + def add_array(name, type, count, offset = T.unsafe(nil)); end + + # Same as {#add}. + # + # @param name [String, Symbol] name of the field + # @param type [Array, DataConverter, Struct, StructLayout::Field, Symbol, Type] type of the field + # @param offset [Numeric, nil] + # @return [self] + # @see #add + # + # source://ffi//lib/ffi/struct_layout_builder.rb#144 + def add_field(name, type, offset = T.unsafe(nil)); end + + # Add a struct as a field to the builder. + # + # @param name [String, Symbol] name of the field + # @param type [Array, DataConverter, Struct, StructLayout::Field, Symbol, Type] type of the field + # @param offset [Numeric, nil] + # @return [self] + # + # source://ffi//lib/ffi/struct_layout_builder.rb#151 + def add_struct(name, type, offset = T.unsafe(nil)); end + + # Returns the value of attribute alignment. + # + # source://ffi//lib/ffi/struct_layout_builder.rb#37 + def alignment; end + + # Set alignment attribute with +align+ only if it is greater than attribute value. + # + # @param align [Numeric] + # + # source://ffi//lib/ffi/struct_layout_builder.rb#56 + def alignment=(align); end + + # Build and return the struct layout. + # + # @return [StructLayout] + # + # source://ffi//lib/ffi/struct_layout_builder.rb#167 + def build; end + + # Set packed attribute + # + # @overload packed= + # @overload packed= + # + # source://ffi//lib/ffi/struct_layout_builder.rb#89 + def packed=(packed); end + + # Returns the value of attribute size. + # + # source://ffi//lib/ffi/struct_layout_builder.rb#36 + def size; end + + # Set size attribute with +size+ only if +size+ is greater than attribute value. + # + # @param size [Numeric] + # + # source://ffi//lib/ffi/struct_layout_builder.rb#50 + def size=(size); end + + # Set union attribute. + # Set to +true+ to build a {Union} instead of a {Struct}. + # + # @param is_union [Boolean] + # @return [is_union] + # + # source://ffi//lib/ffi/struct_layout_builder.rb#65 + def union=(is_union); end + + # Building a {Union} or a {Struct} ? + # + # @return [Boolean] + # + # source://ffi//lib/ffi/struct_layout_builder.rb#73 + def union?; end + + private + + # @param offset [Numeric] + # @param align [Numeric] + # @return [Numeric] + # + # source://ffi//lib/ffi/struct_layout_builder.rb#181 + def align(offset, align); end + + # @param name [String, Symbol] name of the field + # @param type [Array, DataConverter, Struct, StructLayout::Field, Symbol, Type] type of the field + # @param offset [Numeric, nil] + # @return [StructLayout::Field] + # + # source://ffi//lib/ffi/struct_layout_builder.rb#187 + def field_for_type(name, offset, type); end +end + +# List of number types +# +# source://ffi//lib/ffi/struct_layout_builder.rb#100 +FFI::StructLayoutBuilder::NUMBER_TYPES = T.let(T.unsafe(nil), Array) + +FFI::TYPE_BOOL = T.let(T.unsafe(nil), FFI::Type::Builtin) +FFI::TYPE_BUFFER_IN = T.let(T.unsafe(nil), FFI::Type::Builtin) +FFI::TYPE_BUFFER_INOUT = T.let(T.unsafe(nil), FFI::Type::Builtin) +FFI::TYPE_BUFFER_OUT = T.let(T.unsafe(nil), FFI::Type::Builtin) +FFI::TYPE_FLOAT32 = T.let(T.unsafe(nil), FFI::Type::Builtin) +FFI::TYPE_FLOAT64 = T.let(T.unsafe(nil), FFI::Type::Builtin) +FFI::TYPE_INT16 = T.let(T.unsafe(nil), FFI::Type::Builtin) +FFI::TYPE_INT32 = T.let(T.unsafe(nil), FFI::Type::Builtin) +FFI::TYPE_INT64 = T.let(T.unsafe(nil), FFI::Type::Builtin) +FFI::TYPE_INT8 = T.let(T.unsafe(nil), FFI::Type::Builtin) +FFI::TYPE_LONG = T.let(T.unsafe(nil), FFI::Type::Builtin) +FFI::TYPE_LONGDOUBLE = T.let(T.unsafe(nil), FFI::Type::Builtin) +FFI::TYPE_POINTER = T.let(T.unsafe(nil), FFI::Type::Builtin) +FFI::TYPE_STRING = T.let(T.unsafe(nil), FFI::Type::Builtin) +FFI::TYPE_UINT16 = T.let(T.unsafe(nil), FFI::Type::Builtin) +FFI::TYPE_UINT32 = T.let(T.unsafe(nil), FFI::Type::Builtin) +FFI::TYPE_UINT64 = T.let(T.unsafe(nil), FFI::Type::Builtin) +FFI::TYPE_UINT8 = T.let(T.unsafe(nil), FFI::Type::Builtin) +FFI::TYPE_ULONG = T.let(T.unsafe(nil), FFI::Type::Builtin) +FFI::TYPE_VARARGS = T.let(T.unsafe(nil), FFI::Type::Builtin) +FFI::TYPE_VOID = T.let(T.unsafe(nil), FFI::Type::Builtin) + +class FFI::Type + def initialize(_arg0); end + + def alignment; end + def inspect; end + def size; end +end + +FFI::Type::Array = FFI::ArrayType +FFI::Type::BOOL = T.let(T.unsafe(nil), FFI::Type::Builtin) +FFI::Type::BUFFER_IN = T.let(T.unsafe(nil), FFI::Type::Builtin) +FFI::Type::BUFFER_INOUT = T.let(T.unsafe(nil), FFI::Type::Builtin) +FFI::Type::BUFFER_OUT = T.let(T.unsafe(nil), FFI::Type::Builtin) + +class FFI::Type::Builtin < ::FFI::Type + def inspect; end +end + +FFI::Type::CHAR = T.let(T.unsafe(nil), FFI::Type::Builtin) +FFI::Type::DOUBLE = T.let(T.unsafe(nil), FFI::Type::Builtin) +FFI::Type::FLOAT = T.let(T.unsafe(nil), FFI::Type::Builtin) +FFI::Type::FLOAT32 = T.let(T.unsafe(nil), FFI::Type::Builtin) +FFI::Type::FLOAT64 = T.let(T.unsafe(nil), FFI::Type::Builtin) +FFI::Type::Function = FFI::FunctionType +FFI::Type::INT = T.let(T.unsafe(nil), FFI::Type::Builtin) +FFI::Type::INT16 = T.let(T.unsafe(nil), FFI::Type::Builtin) +FFI::Type::INT32 = T.let(T.unsafe(nil), FFI::Type::Builtin) +FFI::Type::INT64 = T.let(T.unsafe(nil), FFI::Type::Builtin) +FFI::Type::INT8 = T.let(T.unsafe(nil), FFI::Type::Builtin) +FFI::Type::LONG = T.let(T.unsafe(nil), FFI::Type::Builtin) +FFI::Type::LONGDOUBLE = T.let(T.unsafe(nil), FFI::Type::Builtin) +FFI::Type::LONG_LONG = T.let(T.unsafe(nil), FFI::Type::Builtin) + +class FFI::Type::Mapped < ::FFI::Type + def initialize(_arg0); end + + def from_native(*_arg0); end + def native_type; end + def to_native(*_arg0); end + def type; end +end + +FFI::Type::POINTER = T.let(T.unsafe(nil), FFI::Type::Builtin) +FFI::Type::SCHAR = T.let(T.unsafe(nil), FFI::Type::Builtin) +FFI::Type::SHORT = T.let(T.unsafe(nil), FFI::Type::Builtin) +FFI::Type::SINT = T.let(T.unsafe(nil), FFI::Type::Builtin) +FFI::Type::SLONG = T.let(T.unsafe(nil), FFI::Type::Builtin) +FFI::Type::SLONG_LONG = T.let(T.unsafe(nil), FFI::Type::Builtin) +FFI::Type::SSHORT = T.let(T.unsafe(nil), FFI::Type::Builtin) +FFI::Type::STRING = T.let(T.unsafe(nil), FFI::Type::Builtin) +FFI::Type::Struct = FFI::StructByValue +FFI::Type::UCHAR = T.let(T.unsafe(nil), FFI::Type::Builtin) +FFI::Type::UINT = T.let(T.unsafe(nil), FFI::Type::Builtin) +FFI::Type::UINT16 = T.let(T.unsafe(nil), FFI::Type::Builtin) +FFI::Type::UINT32 = T.let(T.unsafe(nil), FFI::Type::Builtin) +FFI::Type::UINT64 = T.let(T.unsafe(nil), FFI::Type::Builtin) +FFI::Type::UINT8 = T.let(T.unsafe(nil), FFI::Type::Builtin) +FFI::Type::ULONG = T.let(T.unsafe(nil), FFI::Type::Builtin) +FFI::Type::ULONG_LONG = T.let(T.unsafe(nil), FFI::Type::Builtin) +FFI::Type::USHORT = T.let(T.unsafe(nil), FFI::Type::Builtin) +FFI::Type::VARARGS = T.let(T.unsafe(nil), FFI::Type::Builtin) +FFI::Type::VOID = T.let(T.unsafe(nil), FFI::Type::Builtin) +FFI::TypeDefs = T.let(T.unsafe(nil), Hash) + +# source://ffi//lib/ffi/library.rb#32 +FFI::USE_THIS_PROCESS_AS_LIBRARY = T.let(T.unsafe(nil), Object) + +# source://ffi//lib/ffi/union.rb#36 +class FFI::Union < ::FFI::Struct + class << self + # source://ffi//lib/ffi/union.rb#37 + def builder; end + end +end + +# source://ffi//lib/ffi/version.rb#2 +FFI::VERSION = T.let(T.unsafe(nil), String) + +# source://ffi//lib/ffi/variadic.rb#34 +class FFI::VariadicInvoker + def initialize(_arg0, _arg1, _arg2, _arg3); end + + # Attach the invoker to module +mod+ as +mname+ + # + # source://ffi//lib/ffi/variadic.rb#53 + def attach(mod, mname); end + + # source://ffi//lib/ffi/variadic.rb#35 + def call(*args, &block); end + + def invoke(_arg0, _arg1); end +end diff --git a/sorbet/tapioca/require.rb b/sorbet/tapioca/require.rb index e1250d86..13855707 100644 --- a/sorbet/tapioca/require.rb +++ b/sorbet/tapioca/require.rb @@ -83,5 +83,6 @@ require "terminal-table" require "toml-rb" require "uri" +require "ffi" require "rbnacl" require "rbnacl/hash"