class FFI::Pointer
Constants
- SIZE
-
Pointer
size
Public Class Methods
Return the size of a pointer on the current platform, in bytes @return [Integer]
# File lib/ffi/pointer.rb, line 49 def self.size SIZE end
Public Instance Methods
@param [Symbol,Type] type of data to read @return [Object] Read pointer’s contents as type
Same as:
ptr.get(type, 0)
# File lib/ffi/pointer.rb, line 152 def read(type) get(type, 0) end
@param [Type] type type of data to read from pointer’s contents @param [Symbol] reader method to send to self
to read type
@param [Integer] length @return [Array] Read an array of type
of length length
. @example
ptr.read_array_of_type(TYPE_UINT8, :read_uint8, 4) # -> [1, 2, 3, 4]
# File lib/ffi/pointer.rb, line 114 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,Integer] 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 57 def read_string(len=nil) if len return ''.b if len == 0 get_bytes(0, len) else get_string(0) end end
@param [Integer] 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 72 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 81 def read_string_to_null get_string(0) end
@return [self]
# File lib/ffi/pointer.rb, line 142 def to_ptr self end
@param [Symbol,Type] type of data to read @param [Object] value to write @return [nil] Write value
of type type
to pointer’s content
Same as:
ptr.put(type, 0)
# File lib/ffi/pointer.rb, line 163 def write(type, value) put(type, 0, value) 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 132 def write_array_of_type(type, writer, ary) size = FFI.type_size(type) ary.each_with_index { |val, i| break unless i < self.size self.send(writer, i * size, val) } self end
@param [String] str string to write @param [Integer] 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 101 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 [Integer] 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 92 def write_string_length(str, len) put_bytes(0, str, 0, len) end