class Rinda::TupleBag
TupleBag
is an unordered collection of tuples. It is the basis of Tuplespace.
Public Instance Methods
delete(tuple)
click to toggle source
Removes tuple
from the TupleBag
.
# File lib/rinda/tuplespace.rb, line 342 def delete(tuple) key = bin_key(tuple) bin = @hash[key] return nil unless bin bin.delete(tuple) @hash.delete(key) if bin.empty? tuple end
delete_unless_alive()
click to toggle source
Delete tuples which dead tuples from the TupleBag
, returning the deleted tuples.
# File lib/rinda/tuplespace.rb, line 382 def delete_unless_alive deleted = [] @hash.each do |key, bin| bin.delete_if do |tuple| if tuple.alive? false else deleted.push(tuple) true end end end deleted end
find(template)
click to toggle source
Finds a live tuple that matches template
.
# File lib/rinda/tuplespace.rb, line 362 def find(template) bin_for_find(template).find do |tuple| tuple.alive? && template.match(tuple) end end
find_all(template)
click to toggle source
Finds all live tuples that match template
.
# File lib/rinda/tuplespace.rb, line 353 def find_all(template) bin_for_find(template).find_all do |tuple| tuple.alive? && template.match(tuple) end end
find_all_template(tuple)
click to toggle source
Finds all tuples in the TupleBag
which when treated as templates, match tuple
and are alive.
# File lib/rinda/tuplespace.rb, line 372 def find_all_template(tuple) @enum.find_all do |template| template.alive? && template.match(tuple) end end
has_expires?()
click to toggle source
true
if the TupleBag
to see if it has any expired entries.
# File lib/rinda/tuplespace.rb, line 324 def has_expires? @enum.find do |tuple| tuple.expires end end
push(tuple)
click to toggle source
Add tuple
to the TupleBag
.
# File lib/rinda/tuplespace.rb, line 333 def push(tuple) key = bin_key(tuple) @hash[key] ||= TupleBin.new @hash[key].add(tuple) end
Private Instance Methods
bin_for_find(template)
click to toggle source
# File lib/rinda/tuplespace.rb, line 413 def bin_for_find(template) key = bin_key(template) key ? @hash.fetch(key, []) : @enum end
bin_key(tuple)
click to toggle source
# File lib/rinda/tuplespace.rb, line 404 def bin_key(tuple) head = tuple[0] if head.class == Symbol return head else false end end
each_entry(&blk)
click to toggle source
# File lib/rinda/tuplespace.rb, line 398 def each_entry(&blk) @hash.each do |k, v| v.each(&blk) end end