class FFI::Pointer
Constants
- SIZE
Pointer size
Public Class Methods
Return the size of a pointer on the current platform, in bytes @return [Numeric]
# File lib/ffi/pointer.rb, line 42 def self.size SIZE end
Public Instance Methods
@param [Type] type type of data to read from pointer's contents @param
[Symbol] reader method to send to self
to read
type
@param [Numeric] length @return [Array] Read an array of
type
of length length
. @example
ptr.read_array_of_type(TYPE_UINT8, :get_uint8, 4) # -> [1, 2, 3, 4]
# File lib/ffi/pointer.rb, line 106 def read_array_of_type(type, reader, length) ary = [] size = FFI.type_size(type) tmp = self length.times { |j| ary << tmp.send(reader) tmp += size unless j == length-1 # avoid OOB } ary end
@param [nil,Numeric] len length of string to return @return [String] Read
pointer's contents as a string, or the first len
bytes of
the equivalent string if len
is not nil
.
# File lib/ffi/pointer.rb, line 50 def read_string(len=nil) if len get_bytes(0, len) else get_string(0) end end
@param [Numeric] len length of string to return @return [String] Read the
first len
bytes of pointer's contents as a string.
Same as:
ptr.read_string(len) # with len not nil
# File lib/ffi/pointer.rb, line 64 def read_string_length(len) get_bytes(0, len) end
@return [String] Read pointer's contents as a string.
Same as:
ptr.read_string # with no len
# File lib/ffi/pointer.rb, line 73 def read_string_to_null get_string(0) end
@param [Type] type type of data to write to pointer's contents @param
[Symbol] writer method to send to self
to write
type
@param [Array] ary @return [self] Write ary
in pointer's contents as type
. @example
ptr.write_array_of_type(TYPE_UINT8, :put_uint8, [1, 2, 3 ,4])
# File lib/ffi/pointer.rb, line 124 def write_array_of_type(type, writer, ary) size = FFI.type_size(type) tmp = self ary.each_with_index {|i, j| tmp.send(writer, i) tmp += size unless j == ary.length-1 # avoid OOB } self end
@param [String] str string to write @param [Numeric] len length of string
to return @return [self] Write str
in pointer's contents,
or first len
bytes if len
is not
nil
.
# File lib/ffi/pointer.rb, line 93 def write_string(str, len=nil) len = str.bytesize unless len # Write the string data without NUL termination put_bytes(0, str, 0, len) end
@param [String] str string to write @param [Numeric] len length of string
to return @return [self] Write len
first bytes of
str
in pointer's contents.
Same as:
ptr.write_string(str, len) # with len not nil
# File lib/ffi/pointer.rb, line 84 def write_string_length(str, len) put_bytes(0, str, 0, len) end