diff --git a/trunk/ripnews/set/intspan.rb b/trunk/ripnews/set/intspan.rb index 6c7353b..536d6a3 100644 --- a/trunk/ripnews/set/intspan.rb +++ b/trunk/ripnews/set/intspan.rb @@ -1,4 +1,4 @@ -# $Dwarf: intspan.rb,v 1.14 2003/07/20 20:32:24 ward Exp $ +# $Dwarf: intspan.rb,v 1.15 2004/06/16 08:13:35 ward Exp $ # $Source$ # @@ -21,11 +21,10 @@ module Set class IntSpan -Empty_String = '-' +Empty_String = '' Debuglevel = 0 def initialize(setspec=nil) - @set = { "empty_string" => Empty_String } print "initialize: Calling copy\n" if Debuglevel > 0 copy(setspec) end @@ -63,7 +62,7 @@ def copy(set_spec) end end -def _copy_empty # makes @set the empty set +def _copy_empty # makes @set the empty se @set = { "negInf" => false } @set["posInf"] = false @set["edges"] = [] @@ -91,8 +90,8 @@ def _copy_array(array) # copies an array into @set end def _copy_set(src) # copies one set to another - @set["negInf"] = src.neg_inf - @set["posInf"] = src.pos_inf + @set["negInf"] = src.neg_inf? + @set["posInf"] = src.pos_inf? @set["edges"] = src.edges @set["run"] = [] end @@ -104,7 +103,6 @@ def _copy_run_list(runlist) runlist.gsub!(/\s|_/, '') return true if runlist == "" - print "copy run list...\n" if Debuglevel > 0 first = true @@ -137,15 +135,15 @@ def _copy_run_list(runlist) print "Set::IntSpan::_copy_run_list: Bad order: #{runlist}\n" exit end - @set = {"negInf" => true} + set_neg_inf(true) edges.push($1.to_i) next end if i =~ /^(-?\d+)-\)$/x - print "match rule 3\n" +# print "match rule 3\n" edges.push(($1.to_i-1)) - @set = {"posInf" => true} + set_pos_inf(true) last = true next end @@ -156,8 +154,8 @@ def _copy_run_list(runlist) print "Set::IntSpan::_copy_run_list: Bad order: #{runlist}\n" exit end - @set = {"negInf" => true} - @set = {"posInf" => true} + set_neg_inf(true) + set_pos_inf(true) last = true next end @@ -216,9 +214,13 @@ end # return array #end +def to_s + return run_list +end + def run_list - if empty - return @set["empty_string"] + if empty? + return Empty_String end print "edges leng: ", @set["edges"].length, "\n" if Debuglevel > 0 @@ -227,8 +229,8 @@ def run_list runs = [] if edges.length > 0 - edges = ['(', edges] if @set["negInf"] - edges.push(')') if @set["posInf"] + edges.unshift('(') if neg_inf? + edges.push(')') if pos_inf? print edges.join("/"),"\n" if Debuglevel > 0 @@ -237,10 +239,7 @@ def run_list lower = edges.delete_at(0) upper = edges.delete_at(0) print "Lower: \"#{lower}\" Upper: \"#{upper}\"\n" if Debuglevel > 0 - - if ((lower.to_s <=> '(')!=0 and - (upper.to_s <=> ')')!=0 and - ((lower+1) == upper)) + if !(lower.to_s == '(') and !(upper.to_s == ')') and ((lower+1) == upper) print "#{upper}\n" if Debuglevel > 0 runs.push("#{upper}") else @@ -282,14 +281,14 @@ def union(set_spec) b = _real_set(set_spec) s = IntSpan.new - s.set_neg_inf(@set["negInf"] || b.neg_inf) + s.set_neg_inf(@set["negInf"] || b.neg_inf?) eA = @set["edges"] eB = b.edges eS = s.edges inA = @set["negInf"] - inB = b.neg_inf + inB = b.neg_inf? iA = 0 iB = 0 @@ -318,7 +317,7 @@ def union(set_spec) iA < eA.length and (! inB) and eS.concat(eA[iA..eA.length]) iB < eB.length and (! inA) and eS.concat(eB[iB..eB.length]) - s.set_pos_inf(@set["posInf"] || b.pos_inf) + s.set_pos_inf(@set["posInf"] || b.pos_inf?) s.set_edges(eS) return s @@ -328,14 +327,14 @@ def intersect(set_spec) b = _real_set(set_spec) s = IntSpan.new - s.set_neg_inf(@set["negInf"] && b.neg_inf) + s.set_neg_inf(@set["negInf"] && b.neg_inf?) eA = @set["edges"] eB = b.edges eS = s.edges inA = @set["negInf"] - inB = b.neg_inf + inB = b.neg_inf? iA = 0 iB = 0 @@ -364,7 +363,7 @@ def intersect(set_spec) iA < eA.length and inB and eS.concat(eA[iA..eA.length]) iB < eB.length and inA and eS.concat(eB[iB..eB.length]) - s.set_neg_inf(@set["posInf"] && b.pos_inf) + s.set_neg_inf(@set["posInf"] && b.pos_inf?) s.set_edges(eS) return s end @@ -373,14 +372,14 @@ def diff (set_spec) b = _real_set(set_spec) s = IntSpan.new - s.set_neg_inf(@set["negInf"] && ! b.neg_inf) + s.set_neg_inf(@set["negInf"] && ! b.neg_inf?) eA = @set["edges"] eB = b.edges eS = s.edges inA = @set["negInf"] - inB = b.neg_inf + inB = b.neg_inf? iA = 0 iB = 0 @@ -411,7 +410,7 @@ def diff (set_spec) s.set_edges(eS) - s.set_pos_inf(@set["posInf"] && ! b.pos_inf) + s.set_pos_inf(@set["posInf"] && ! b.pos_inf?) return s end @@ -419,7 +418,7 @@ def xor(set_spec) b = _real_set(set_spec) s = IntSpan.new - s.set_neg_inf(@set["negInf"] ^ b.neg_inf) + s.set_neg_inf(@set["negInf"] ^ b.neg_inf?) eA = @set["edges"] eB = b.edges @@ -447,7 +446,7 @@ def xor(set_spec) iA < eA.length and eS.concat(eA[iA..eA.length]) iB < eB.length and eS.concat(eB[iB..eB.length]) - s.set_pos_inf(@set["posInf"] ^ b.pos_inf) + s.set_pos_inf(@set["posInf"] ^ b.pos_inf?) s.set_edges(eS) return s end @@ -471,8 +470,8 @@ def complement end end - comp.set_neg_inf(! comp.neg_inf) - comp.set_pos_inf(! comp.pos_inf) + comp.set_neg_inf(! comp.neg_inf?) + comp.set_pos_inf(! comp.pos_inf?) return comp end @@ -482,7 +481,7 @@ def superset(set_spec) # $b->diff($a)->empty s = b.diff(self) - return s.empty + return s.empty? end @@ -491,7 +490,7 @@ def subset(set_spec) # $a->diff($b)->empty s = diff(b) - return s.empty + return s.empty? end @@ -499,9 +498,9 @@ def equal(set_spec) b = _real_set(set_spec) print "a\n" - @set["negInf"] == b.neg_inf or return false + @set["negInf"] == b.neg_inf? or return false print "b\n" - @set["posInf"] == b.pos_inf or return false + @set["posInf"] == b.pos_inf? or return false aEdge = @set["edges"] bEdge = b.edges @@ -539,9 +538,8 @@ def cardinality return car end -def empty - if @set["negInf"] == false and @set["edges"].length > 0 and - @set["posInf"] == false +def empty? + if neg_inf? || pos_inf? || @set["edges"].length > 0 return false end return true @@ -562,7 +560,7 @@ def set_edges(edges) @set["edges"] = edges end -def neg_inf +def neg_inf? return @set["negInf"] end @@ -570,7 +568,7 @@ def set_neg_inf(negInf) @set["negInf"] = negInf end -def pos_inf +def pos_inf? return @set["posInf"] end @@ -702,15 +700,15 @@ def remove(n) end def min - empty and return nil - neg_inf and return nil + empty? and return nil + neg_inf? and return nil @set["edges"][0]+1 end def max - empty and return nil - pos_inf and return nil + empty? and return nil + pos_inf? and return nil @set["edges"][-1] end @@ -907,10 +905,10 @@ end # module # [x] equal # [x] equivalent # [x] cardinality -# [x] empty +# [x] empty? # [x] finite -# [x] neg_inf { shift->{negInf} } -# [x] pos_inf { shift->{posInf} } +# [x] neg_inf? { shift->{negInf} } +# [x] pos_inf? { shift->{posInf} } # [x] infinite # [ ] universal # [x] member