Spec-Zone.ru › Ruby 2.5

класс Rinda::TupleBag

Родитель:
Объект

TupleBag — это неупорядоченное множество кортежей. Он является основой Tuplespace.

Публичные методы экземпляра

delete(кортеж) Показать исходный код
# File lib/rinda/tuplespace.rb, line 340
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

Удаляет tuple из TupleBag.

delete_unless_alive() Показать исходный код
# File lib/rinda/tuplespace.rb, line 380
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

Удаляет кортежи, которые являются мёртвыми, из TupleBag, возвращая удалённые кортежи.

find(шаблон) Показать исходный код
# File lib/rinda/tuplespace.rb, line 360
def find(template)
  bin_for_find(template).find do |tuple|
    tuple.alive? && template.match(tuple)
  end
end

Находит живой кортеж, который соответствует template.

find_all(шаблон) Показать исходный код
# File lib/rinda/tuplespace.rb, line 351
def find_all(template)
  bin_for_find(template).find_all do |tuple|
    tuple.alive? && template.match(tuple)
  end
end

Находит все живые кортежи, которые соответствуют template.

find_all_template(кортеж) Показать исходный код
# File lib/rinda/tuplespace.rb, line 370
def find_all_template(tuple)
  @enum.find_all do |template|
    template.alive? && template.match(tuple)
  end
end

Находит все кортежи в TupleBag, которые, когда рассматриваются как шаблоны, соответствуют tuple и являются живыми.

has_expires?() Показать исходный код
# File lib/rinda/tuplespace.rb, line 322
def has_expires?
  @enum.find do |tuple|
    tuple.expires
  end
end

true если TupleBag для проверки наличия истекших записей.

push(кортеж) Показать исходный код
# File lib/rinda/tuplespace.rb, line 331
def push(tuple)
  key = bin_key(tuple)
  @hash[key] ||= TupleBin.new
  @hash[key].add(tuple)
end

Добавляет tuple в TupleBag.

Приватные методы экземпляра

bin_for_find(шаблон) Показать исходный код
# File lib/rinda/tuplespace.rb, line 411
def bin_for_find(template)
  key = bin_key(template)
  key ? @hash.fetch(key, []) : @enum
end
bin_key(кортеж) Показать исходный код
# File lib/rinda/tuplespace.rb, line 402
def bin_key(tuple)
  head = tuple[0]
  if head.class == Symbol
    return head
  else
    false
  end
end
each_entry(&blk) Показать исходный код
# File lib/rinda/tuplespace.rb, line 396
def each_entry(&blk)
  @hash.each do |k, v|
    v.each(&blk)
  end
end

Ruby Core © 1993–2017 Yukihiro Matsumoto
Licensed under the Ruby License.
Ruby Standard Library © contributors
Licensed under their own licenses.

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API