класс Rinda::TupleEntry
Класс TupleEntry представляет собой Кортеж (то есть потенциальную запись в пространстве кортежей) вместе с данными о времени истечения срока действия и отмене.
Атрибуты
Общедоступные методы класса
# File lib/rinda/tuplespace.rb, line 27 def initialize(ary, sec=nil) @cancel = false @expires = nil @tuple = make_tuple(ary) @renewer = nil renew(sec) end
Создает TupleEntry на основе ary с необязательным временем продления или истечения срока действия sec.
Объект продления должен реализовывать метод renew, который возвращает числовое значение, null или true, чтобы указать, когда кортеж истек.
Общедоступные методы экземпляра
# File lib/rinda/tuplespace.rb, line 111 def [](key) @tuple[key] end
Извлекает key из кортежа.
# File lib/rinda/tuplespace.rb, line 45 def alive? !canceled? && !expired? end
Элемент TupleEntry считается неактивным, когда он отменён или истек.
# File lib/rinda/tuplespace.rb, line 38 def cancel @cancel = true end
Помечает этот TupleEntry как отменённый.
# File lib/rinda/tuplespace.rb, line 58 def canceled?; @cancel; end
Возвращает статус отмены.
# File lib/rinda/tuplespace.rb, line 66 def expired? return true unless @expires return false if @expires > Time.now return true if @renewer.nil? renew(@renewer) return true unless @expires return @expires < Time.now end
Истек ли срок действия этого кортежа? (true/false).
Кортеж истек, когда таймер истечения срока действия, основанный на аргументе sec при инициализации, истекает.
# File lib/rinda/tuplespace.rb, line 118 def fetch(key) @tuple.fetch(key) end
Извлекает key из кортежа.
# File lib/rinda/tuplespace.rb, line 97
def make_expires(sec=nil)
case sec
when Numeric
Time.now + sec
when true
Time.at(1)
when nil
Time.at(2**31-1)
end
end Возвращает время истечения срока действия Time, основанное на sec, которое может быть одним из следующих:
- Числовое значение
-
secсекунды в будущем -
true -
время истечения срока действия — начало 1970 года (т. е. истекло)
-
nil -
время истечения срока действия — 19 января 2038 года в 03:14:07 по Гринвичу (т. е. когда часы UNIX умрут)
# File lib/rinda/tuplespace.rb, line 132 def make_tuple(ary) Rinda::Tuple.new(ary) end
Создаёт Rinda::Tuple для ary.
# File lib/rinda/tuplespace.rb, line 85 def renew(sec_or_renewer) sec, @renewer = get_renewer(sec_or_renewer) @expires = make_expires(sec) end
Сбрасывает время истечения срока действия в соответствии с sec_or_renewer.
-
nil -
время истечения срока действия устанавливается в далёкое будущее.
-
true -
срок действия истек.
- Числовое значение
-
срок действия истечёт через указанное количество секунд.
В противном случае аргумент ссылается на какой-либо объект продления, который сбросит время истечения срока действия.
# File lib/rinda/tuplespace.rb, line 125 def size @tuple.size end
Размер кортежа.
# File lib/rinda/tuplespace.rb, line 53 def value; @tuple.value; end
Возвращает объект, составляющий сам кортеж: массив или словарь.
Приватные методы экземпляра
# File lib/rinda/tuplespace.rb, line 145
def get_renewer(it)
case it
when Numeric, true, nil
return it, nil
else
begin
return it.renew, it
rescue Exception
return it, nil
end
end
end Возвращает допустимый аргумент для #make_expires и объект продления или null.
Для true, nil, или числового значения возвращает это значение и nil (нет фактического объекта продления). В противном случае возвращает значение истечения срока действия, полученное при вызове it.renew и объект продления.
Ruby Core © 1993–2017 Yukihiro Matsumoto
Licensed under the Ruby License.
Ruby Standard Library © contributors
Licensed under their own licenses.