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.



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

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

Class Method Details

.finalize(state) ⇒ Object



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

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

Instance Method Details

#dataObject



357
358
359
360
361
362
363
364
# File 'lib/hakuban/hakuban.rb', line 357

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



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

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

#inspectObject



377
378
379
# File 'lib/hakuban/hakuban.rb', line 377

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

#synchronizedObject



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

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

#versionObject



351
352
353
354
355
# File 'lib/hakuban/hakuban.rb', line 351

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