cleanup & bugfixes

This commit is contained in:
Ward Wouts 2005-03-09 15:02:21 +00:00
parent 99dbd942f9
commit 00a0638ee4

View file

@ -1,4 +1,4 @@
# $Dwarf: intspan.rb,v 1.15 2004/06/16 08:13:35 ward Exp $ # $Dwarf: intspan.rb,v 1.16 2005/03/09 14:22:52 ward Exp $
# $Source$ # $Source$
# #
@ -51,8 +51,8 @@ def copy(set_spec)
when "Array" when "Array"
print "copy: Calling _copy_array\n" if Debuglevel > 0 print "copy: Calling _copy_array\n" if Debuglevel > 0
_copy_array(set_spec) _copy_array(set_spec)
when "Set::Intspan" when "Set::IntSpan"
print "copy: Calling _copy_set\n" print "copy: Calling _copy_set\n" if Debuglevel > 0
_copy_set(set_spec) _copy_set(set_spec)
when "Hash" when "Hash"
print "copy: Calling _copy_set\n" print "copy: Calling _copy_set\n"
@ -62,16 +62,18 @@ def copy(set_spec)
end end
end end
def _copy_empty # makes @set the empty se def _copy_empty # makes @set the empty set
@set = { "negInf" => false } @set = {}
@set["posInf"] = false set_neg_inf(false)
set_pos_inf(false)
@set["edges"] = [] @set["edges"] = []
@set["run"] = [] @set["run"] = []
end end
def _copy_array(array) # copies an array into @set def _copy_array(array) # copies an array into @set
@set["negInf"] = false _copy_empty
@set["posInf"] = false set_neg_inf(false)
set_pos_inf(false)
#print "scary thingy gets called!!!\n" #print "scary thingy gets called!!!\n"
edges = [] edges = []
@ -90,14 +92,14 @@ def _copy_array(array) # copies an array into @set
end end
def _copy_set(src) # copies one set to another def _copy_set(src) # copies one set to another
@set["negInf"] = src.neg_inf? _copy_empty
@set["posInf"] = src.pos_inf? set_neg_inf(src.neg_inf?)
set_pos_inf(src.pos_inf?)
@set["edges"] = src.edges @set["edges"] = src.edges
@set["run"] = [] @set["run"] = []
end end
def _copy_run_list(runlist) def _copy_run_list(runlist)
_copy_empty _copy_empty
runlist.gsub!(/\s|_/, '') runlist.gsub!(/\s|_/, '')
@ -256,7 +258,7 @@ def run_list
end end
def elements def elements
if (@set["negInf"] == true or @set["posInf"] == true) if (neg_inf? or pos_inf?)
print "Set::IntSpan::elements: infinite set\n" print "Set::IntSpan::elements: infinite set\n"
exit exit
end end
@ -281,13 +283,13 @@ def union(set_spec)
b = _real_set(set_spec) b = _real_set(set_spec)
s = IntSpan.new s = IntSpan.new
s.set_neg_inf(@set["negInf"] || b.neg_inf?) s.set_neg_inf(neg_inf? || b.neg_inf?)
eA = @set["edges"] eA = @set["edges"]
eB = b.edges eB = b.edges
eS = s.edges eS = s.edges
inA = @set["negInf"] inA = neg_inf?
inB = b.neg_inf? inB = b.neg_inf?
iA = 0 iA = 0
@ -317,7 +319,7 @@ def union(set_spec)
iA < eA.length and (! inB) and eS.concat(eA[iA..eA.length]) iA < eA.length and (! inB) and eS.concat(eA[iA..eA.length])
iB < eB.length and (! inA) and eS.concat(eB[iB..eB.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(pos_inf? || b.pos_inf?)
s.set_edges(eS) s.set_edges(eS)
return s return s
@ -327,13 +329,13 @@ def intersect(set_spec)
b = _real_set(set_spec) b = _real_set(set_spec)
s = IntSpan.new s = IntSpan.new
s.set_neg_inf(@set["negInf"] && b.neg_inf?) s.set_neg_inf(neg_inf? && b.neg_inf?)
eA = @set["edges"] eA = @set["edges"]
eB = b.edges eB = b.edges
eS = s.edges eS = s.edges
inA = @set["negInf"] inA = neg_inf?
inB = b.neg_inf? inB = b.neg_inf?
iA = 0 iA = 0
@ -363,7 +365,7 @@ def intersect(set_spec)
iA < eA.length and inB and eS.concat(eA[iA..eA.length]) iA < eA.length and inB and eS.concat(eA[iA..eA.length])
iB < eB.length and inA and eS.concat(eB[iB..eB.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(pos_inf? && b.pos_inf?)
s.set_edges(eS) s.set_edges(eS)
return s return s
end end
@ -372,13 +374,13 @@ def diff (set_spec)
b = _real_set(set_spec) b = _real_set(set_spec)
s = IntSpan.new s = IntSpan.new
s.set_neg_inf(@set["negInf"] && ! b.neg_inf?) s.set_neg_inf(neg_inf? && ! b.neg_inf?)
eA = @set["edges"] eA = @set["edges"]
eB = b.edges eB = b.edges
eS = s.edges eS = s.edges
inA = @set["negInf"] inA = neg_inf?
inB = b.neg_inf? inB = b.neg_inf?
iA = 0 iA = 0
@ -410,7 +412,7 @@ def diff (set_spec)
s.set_edges(eS) s.set_edges(eS)
s.set_pos_inf(@set["posInf"] && ! b.pos_inf?) s.set_pos_inf(pos_inf? && ! b.pos_inf?)
return s return s
end end
@ -418,7 +420,7 @@ def xor(set_spec)
b = _real_set(set_spec) b = _real_set(set_spec)
s = IntSpan.new s = IntSpan.new
s.set_neg_inf(@set["negInf"] ^ b.neg_inf?) s.set_neg_inf(neg_inf? ^ b.neg_inf?)
eA = @set["edges"] eA = @set["edges"]
eB = b.edges eB = b.edges
@ -446,7 +448,7 @@ def xor(set_spec)
iA < eA.length and eS.concat(eA[iA..eA.length]) iA < eA.length and eS.concat(eA[iA..eA.length])
iB < eB.length and eS.concat(eB[iB..eB.length]) iB < eB.length and eS.concat(eB[iB..eB.length])
s.set_pos_inf(@set["posInf"] ^ b.pos_inf?) s.set_pos_inf(pos_inf? ^ b.pos_inf?)
s.set_edges(eS) s.set_edges(eS)
return s return s
end end
@ -498,9 +500,9 @@ def equal(set_spec)
b = _real_set(set_spec) b = _real_set(set_spec)
print "a\n" print "a\n"
@set["negInf"] == b.neg_inf? or return false neg_inf? == b.neg_inf? or return false
print "b\n" print "b\n"
@set["posInf"] == b.pos_inf? or return false pos_inf? == b.pos_inf? or return false
aEdge = @set["edges"] aEdge = @set["edges"]
bEdge = b.edges bEdge = b.edges
@ -523,7 +525,7 @@ end
def cardinality def cardinality
(@set["negInf"] or @set["posInf"]) and return -1 (neg_inf? or pos_inf?) and return -1
car = 0 car = 0
edges = @set["edges"] edges = @set["edges"]
@ -546,7 +548,7 @@ def empty?
end end
def finite def finite
if @set["negInf"] == false and @set["posInf"] == false if ! neg_inf? and ! pos_inf?
return true return true
end end
return false return false
@ -577,15 +579,15 @@ def set_pos_inf(posInf)
end end
def infinite def infinite
@set["negInf"] or @set["posInf"] return neg_inf? || pos_inf?
end end
def universal def universal
@set["negInf"] and not @set["edges"].length > 0 and @set["posInf"] neg_inf? and not @set["edges"].length > 0 and pos_inf?
end end
def member(n) def member(n)
inSet = @set["negInf"] inSet = neg_inf?
edge = @set["edges"] edge = @set["edges"]
for i in (0...edge.length) for i in (0...edge.length)
@ -602,7 +604,7 @@ def member(n)
end end
def insert(n) def insert(n)
inSet = @set["negInf"] inSet = neg_inf?
edge = @set["edges"] edge = @set["edges"]
if (edge.length == 0) if (edge.length == 0)
@ -657,7 +659,7 @@ end
def remove(n) def remove(n)
n or return n or return
inSet = @set["negInf"] inSet = neg_inf?
edge = @set["edges"] edge = @set["edges"]
for i in (0...edge.length) for i in (0...edge.length)
@ -713,7 +715,7 @@ def max
end end
def grep_set(block) def grep_set(block)
return nil if @set["negInf"] or @set["posInf"] return nil if neg_inf? or pos_inf?
edges = @set["edges"] edges = @set["edges"]
sub_edges = [] sub_edges = []
@ -741,7 +743,7 @@ def grep_set(block)
end end
def map_set(block) def map_set(block)
return nil if @set["negInf"] or @set["posInf"] return nil if neg_inf? or pos_inf?
map_set = new map_set = new
@ -786,7 +788,7 @@ def start(startval)
set["iterator"] = nil set["iterator"] = nil
startval or return nil startval or return nil
inSet = @set["negInf"] inSet = neg_inf?
edges = @set["edges"] edges = @set["edges"]
for i in (0...edges.length) for i in (0...edges.length)