класс Rinda::TupleEntry
A TupleEntry — это Кортеж (то есть возможная запись в некотором Tuplespace) вместе с данными о сроке действия и отмене.
Атрибуты
Общедоступные методы класса
# File lib/rinda/tuplespace.rb, line 25 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 109 def [](key) @tuple[key] end
Возвращает key из кортежа.
# File lib/rinda/tuplespace.rb, line 43 def alive? !canceled? && !expired? end
TupleEntry считается недействительным, когда он отменён или срок его действия истек.
# File lib/rinda/tuplespace.rb, line 36 def cancel @cancel = true end
Помечает этот TupleEntry как отменённый.
# File lib/rinda/tuplespace.rb, line 56 def canceled?; @cancel; end
Возвращает состояние отмены.
# File lib/rinda/tuplespace.rb, line 64 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 116 def fetch(key) @tuple.fetch(key) end
Извлекает key из кортежа.
# File lib/rinda/tuplespace.rb, line 95
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 -
время истечения срока действия — вторник, 1 января 1970 г., 03:14:07 по Гринвичу, стандартное время Time 2038 (т.е. когда часы UNIX умрут)
# File lib/rinda/tuplespace.rb, line 130 def make_tuple(ary) Rinda::Tuple.new(ary) end
Создаёт Rinda::Tuple для ary.
# File lib/rinda/tuplespace.rb, line 83 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 123 def size @tuple.size end
Размер кортежа.
# File lib/rinda/tuplespace.rb, line 51 def value; @tuple.value; end
Возвращает объект, из которого состоит сам кортеж: массив или словарь.
Закрытые методы экземпляра
# File lib/rinda/tuplespace.rb, line 143
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.