Method: Hakuban::ObjectState#with_pointer

Defined in:
lib/hakuban/object_state.rb

#with_pointerObject



33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
# File 'lib/hakuban/object_state.rb', line 33

def with_pointer
  @pointer_mutex.synchronize {
    if @pointer == false
      Hakuban::hakuban_initialize
      version_pointer = ::FFI::MemoryPointer.new(:int64, @version.size)
      version_pointer.write_array_of_int64(@version)
      format_pointer = ::FFI::MemoryPointer.new(:pointer, @format.size)
      format_strings = format.map {|string| ::FFI::MemoryPointer.from_string(string)}
      format_pointer.write_array_of_pointer(format_strings)
      data_pointer = ::FFI::MemoryPointer.from_string(@data)
      pointer = FFI::hakuban_object_state_new(@version.size, version_pointer, @format.size, format_pointer, @data.bytesize, data_pointer, @synchronized_us_ago).unwrap
      initialize_pointer(pointer, :hakuban_object_state_drop, :hakuban_object_state_clone)
    end
    yield ::FFI::Pointer.new(@pointer)
  }
end