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