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
|