Class: Hakuban::ObjectObserveState

Inherits:
Object
  • Object
show all
Defined in:
lib/hakuban/hakuban.rb

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(state, deserializer) ⇒ ObjectObserveState

Returns a new instance of ObjectObserveState.



335
336
337
338
# File 'lib/hakuban/hakuban.rb', line 335

def initialize(state, deserializer)
  @state, @deserializer = state, deserializer
  ObjectSpace.define_finalizer(self, ObjectObserveState.finalize(@state))
end

Class Method Details

.finalize(state) ⇒ Object



340
341
342
343
344
# File 'lib/hakuban/hakuban.rb', line 340

def ObjectObserveState.finalize(state)
  proc { |_|
    FFI::hakuban_object_observe_state_return(state)
  }
end

Instance Method Details

#dataObject



352
353
354
355
356
357
358
359
# File 'lib/hakuban/hakuban.rb', line 352

def data
  return @data  if @data
  ffi_data = FFI::hakuban_object_observe_state_get_data(@state)
  ffi_data_type = FFI::hakuban_object_observe_state_get_data_type(@state)
  serialized_data_type = ffi_data_type[:type_elements].read_array_of_pointer(ffi_data_type[:type_length]).map { |string| string.read_string() }
  @data_type, @data = @deserializer.call(serialized_data_type, ffi_data[:data_bytes].read_string_length(ffi_data[:data_length]))
  @data
end

#data_typeObject



361
362
363
364
365
# File 'lib/hakuban/hakuban.rb', line 361

def data_type
  return @data_type  if @data_type
  data
  @data_type
end

#inspectObject



372
373
374
# File 'lib/hakuban/hakuban.rb', line 372

def inspect
  "#<ObjectObserveState @synchronized=%p @version=%p>"%[@synchronized, @data_version]
end

#synchronizedObject



367
368
369
370
# File 'lib/hakuban/hakuban.rb', line 367

def synchronized
  return @synchronized  if @synchronized
  @synchronized = FFI::hakuban_object_observe_state_get_synchronized(@state)
end

#versionObject



346
347
348
349
350
# File 'lib/hakuban/hakuban.rb', line 346

def version
  return @data_version  if @data_version
  ffi_version = FFI::hakuban_object_observe_state_get_data_version(@state)
  @data_version = ffi_version[:version_elements].read_array_of_type(::FFI::TYPE_INT64, :read_int64, ffi_version[:version_length])
end