class Rinda::TupleEntry

TupleEntry 是一个 Tuple (即 Tuplespace 中可能的条目),以及过期和取消数据。

属性

expires[RW]

公共类方法

new(ary, sec=nil) 点击切换源代码

基于 ary 创建一个 TupleEntry,并可选择一个更新器或过期时间 sec

更新器必须实现 renew 方法,该方法返回一个数值、nil 或 true,以指示元组何时过期。

# File rinda-0.2.0/lib/rinda/tuplespace.rb, line 26
def initialize(ary, sec=nil)
  @cancel = false
  @expires = nil
  @tuple = make_tuple(ary)
  @renewer = nil
  renew(sec)
end

公共实例方法

[](key) 点击切换源代码

从元组中检索 key

# File rinda-0.2.0/lib/rinda/tuplespace.rb, line 110
def [](key)
  @tuple[key]
end
alive?() 点击切换源代码

TupleEntry 被取消或过期时,它就失效了。

# File rinda-0.2.0/lib/rinda/tuplespace.rb, line 44
def alive?
  !canceled? && !expired?
end
cancel() 点击切换源代码

将此 TupleEntry 标记为已取消。

# File rinda-0.2.0/lib/rinda/tuplespace.rb, line 37
def cancel
  @cancel = true
end
canceled?() 点击切换源代码

返回取消状态。

# File rinda-0.2.0/lib/rinda/tuplespace.rb, line 57
def canceled?; @cancel; end
expired?() 点击切换源代码

这个元组是否已过期? (true/false)。

当基于初始化时的 sec 参数的过期计时器耗尽时,元组就会过期。

# File rinda-0.2.0/lib/rinda/tuplespace.rb, line 65
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
fetch(key) 点击切换源代码

从元组中获取 key

# File rinda-0.2.0/lib/rinda/tuplespace.rb, line 117
def fetch(key)
  @tuple.fetch(key)
end
make_expires(sec=nil) 点击切换源代码

根据 sec 返回一个过期 Time,它可以是以下之一:

数值型

未来 sec

true

过期时间是 1970 年的开始 (即已过期)

nil

它是 2038 年 1 月 19 日 03:14:07 GMT 标准时间 (即 UNIX 时钟将死的时候)

# File rinda-0.2.0/lib/rinda/tuplespace.rb, line 96
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
make_tuple(ary) 点击切换源代码

ary 创建一个 Rinda::Tuple

# File rinda-0.2.0/lib/rinda/tuplespace.rb, line 131
def make_tuple(ary)
  Rinda::Tuple.new(ary)
end
renew(sec_or_renewer) 点击切换源代码

根据 sec_or_renewer 重置过期时间。

nil

设置为在遥远的未来过期。

true

它已经过期了。

数值型

它将在那么多秒后过期。

否则,该参数指的是某种更新器对象,该对象将重置其过期时间。

# File rinda-0.2.0/lib/rinda/tuplespace.rb, line 84
def renew(sec_or_renewer)
  sec, @renewer = get_renewer(sec_or_renewer)
  @expires = make_expires(sec)
end
size() 点击切换源代码

元组的大小。

# File rinda-0.2.0/lib/rinda/tuplespace.rb, line 124
def size
  @tuple.size
end
value() 点击切换源代码

返回构成元组本身的对象:Array 或 Hash。

# File rinda-0.2.0/lib/rinda/tuplespace.rb, line 52
def value; @tuple.value; end

私有实例方法

get_renewer(it) 点击切换源代码

返回一个有效的参数给 make_expires 以及更新器或 nil。

给定 truenil 或数值,返回该值和 nil (没有实际的更新器)。否则,它将从调用 it.renew 和更新器中返回过期值。

# File rinda-0.2.0/lib/rinda/tuplespace.rb, line 144
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