class Fugit::Nat::Slot
def a; [ data0, data1 ]; end
def a; [ data0, data1 ]; end
def append(slot)
def append(slot) @_data0, @_data1 = conflate(0, slot), conflate(1, slot) @opts.clear self end
def conflate(index, slot)
def conflate(index, slot) a, b = index == 0 ? [ @_data0, slot._data0 ] : [ @_data1, slot._data1 ] return a if b == nil return b if a == nil if ra = (index == 0 && slot.strong == 1 && hour_range) h0, h1 = ra[0], ra[1] - 1; return h0 == h1 ? h0 : "#{h0}-#{h1}" elsif rb = (index == 0 && strong == 1 && slot.hour_range) h0, h1 = rb[0], rb[1] - 1; return h0 == h1 ? h0 : "#{h0}-#{h1}" end return a if strong == index || strong == true return b if slot.strong == index || slot.strong == true return a if slot.weak == index || slot.weak == true return b if weak == index || weak == true return [ '*' ] if a == '*' && b == '*' to_a(a).concat(to_a(b)) end
def data0; @data0 ||= Array(@_data0); end
def data0; @data0 ||= Array(@_data0); end
def data1; @data1 ||= Array(@_data1); end
def data1; @data1 ||= Array(@_data1); end
def graded?; weak || strong; end
def graded?; weak || strong; end
def hour_range
def hour_range m = (key == :hm && @_data1 == 0 && @_data0.match(/\A(\d+)-(\d+)\z/)) m ? [ m[1].to_i, m[2].to_i ] : nil end
def initialize(key, d0, d1=nil, opts=nil)
def initialize(key, d0, d1=nil, opts=nil) d1, opts = d1.is_a?(Symbol) ? [ nil, d1 ] : [ d1, opts ] @key, @_data0, @_data1 = key, d0, d1 @opts = (opts.is_a?(Symbol) ? { opts => true } : opts) || {} end
def inspect
def inspect a = [ @key, @_data0 ] a << @_data1 if @_data1 != nil a << @opts if @opts && @opts.keys.any? "(slot #{a.collect(&:inspect).join(' ')})" end
def strong; @opts[:strong]; end
def strong; @opts[:strong]; end
def to_a(x)
def to_a(x) return [] if x == '*' Array(x) end
def weak; @opts[:weak]; end
def weak; @opts[:weak]; end