Class: Twilic::Core::Session::MutableShapeTable

Inherits:
Object
  • Object
show all
Defined in:
lib/twilic/core/session.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeMutableShapeTable

Returns a new instance of MutableShapeTable.



397
398
399
400
401
402
# File 'lib/twilic/core/session.rb', line 397

def initialize
  @by_keys = {}
  @by_id = {}
  @observations = {}
  @next_id = 0
end

Instance Attribute Details

#by_idObject (readonly)

Returns the value of attribute by_id.



395
396
397
# File 'lib/twilic/core/session.rb', line 395

def by_id
  @by_id
end

#by_keysObject (readonly)

Returns the value of attribute by_keys.



395
396
397
# File 'lib/twilic/core/session.rb', line 395

def by_keys
  @by_keys
end

#next_idObject (readonly)

Returns the value of attribute next_id.



395
396
397
# File 'lib/twilic/core/session.rb', line 395

def next_id
  @next_id
end

#observationsObject (readonly)

Returns the value of attribute observations.



395
396
397
# File 'lib/twilic/core/session.rb', line 395

def observations
  @observations
end

Instance Method Details

#clearObject



452
453
454
455
456
457
# File 'lib/twilic/core/session.rb', line 452

def clear
  @by_keys = {}
  @by_id = {}
  @observations = {}
  @next_id = 0
end

#get_id(keys) ⇒ Object



408
409
410
411
# File 'lib/twilic/core/session.rb', line 408

def get_id(keys)
  id = @by_keys[shape_key(keys)]
  id ? [id, true] : [0, false]
end

#get_keys(id) ⇒ Object



413
414
415
416
# File 'lib/twilic/core/session.rb', line 413

def get_keys(id)
  keys = @by_id[id]
  keys ? [keys.dup, true] : [nil, false]
end

#observation_count(keys) ⇒ Object



448
449
450
# File 'lib/twilic/core/session.rb', line 448

def observation_count(keys)
  @observations[shape_key(keys)] || 0
end

#observe(keys) ⇒ Object



443
444
445
446
# File 'lib/twilic/core/session.rb', line 443

def observe(keys)
  sk = shape_key(keys)
  @observations[sk] = (@observations[sk] || 0) + 1
end

#register(keys) ⇒ Object



418
419
420
421
422
423
424
425
426
427
428
# File 'lib/twilic/core/session.rb', line 418

def register(keys)
  sk = shape_key(keys)
  id = @by_keys[sk]
  return id if id

  id = @next_id
  @next_id += 1
  @by_id[id] = keys.dup
  @by_keys[sk] = id
  id
end

#register_with_id(shape_id, keys) ⇒ Object



430
431
432
433
434
435
436
437
438
439
440
441
# File 'lib/twilic/core/session.rb', line 430

def register_with_id(shape_id, keys)
  sk = shape_key(keys)
  if @by_id.key?(shape_id)
    return shape_key(@by_id[shape_id]) == sk
  end
  return false if @by_keys.key?(sk) && @by_keys[sk] != shape_id

  @by_id[shape_id] = keys.dup
  @by_keys[sk] = shape_id
  @next_id = [@next_id, shape_id + 1].max
  true
end

#shape_key(keys) ⇒ Object



404
405
406
# File 'lib/twilic/core/session.rb', line 404

def shape_key(keys)
  keys.join("\0")
end