avoid making copies of arrays
This commit is contained in:
parent
0c2d69676e
commit
ec53fdf477
1 changed files with 22 additions and 27 deletions
|
|
@ -218,10 +218,13 @@ def run_list
|
||||||
|
|
||||||
print edges.join("/"),"\n" if Debuglevel > 0
|
print edges.join("/"),"\n" if Debuglevel > 0
|
||||||
|
|
||||||
while(edges.length>0)
|
i = 0
|
||||||
|
while i < edges.length
|
||||||
print "edges leng: ", @set["edges"].length, "\n" if Debuglevel > 0
|
print "edges leng: ", @set["edges"].length, "\n" if Debuglevel > 0
|
||||||
lower = edges.delete_at(0)
|
lower = edges[i]
|
||||||
upper = edges.delete_at(0)
|
i += 1
|
||||||
|
upper = edges[i]
|
||||||
|
i += 1
|
||||||
print "Lower: \"#{lower}\" Upper: \"#{upper}\"\n" if Debuglevel > 0
|
print "Lower: \"#{lower}\" Upper: \"#{upper}\"\n" if Debuglevel > 0
|
||||||
if !(lower.to_s == '(') and !(upper.to_s == ')') and ((lower+1) == upper)
|
if !(lower.to_s == '(') and !(upper.to_s == ')') and ((lower+1) == upper)
|
||||||
print "#{upper}\n" if Debuglevel > 0
|
print "#{upper}\n" if Debuglevel > 0
|
||||||
|
|
@ -577,20 +580,18 @@ def member?(n)
|
||||||
inSet
|
inSet
|
||||||
end
|
end
|
||||||
|
|
||||||
# XXX name should end with a '!'
|
def insert!(n)
|
||||||
def insert(n)
|
|
||||||
inSet = neg_inf?
|
inSet = neg_inf?
|
||||||
edge = @set["edges"]
|
|
||||||
|
|
||||||
if (edge.length == 0)
|
if (@set["edges"].length == 0)
|
||||||
@set["edges"] = [n-1, n]
|
@set["edges"] = [n-1, n]
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
if n > edge[-1]+1
|
if n > @set["edges"][-1]+1
|
||||||
@set["edges"].push(n-1, n)
|
@set["edges"].push(n-1, n)
|
||||||
return
|
return
|
||||||
elsif n > edge[-1]
|
elsif n > @set["edges"][-1]
|
||||||
@set["edges"][-1] += 1
|
@set["edges"][-1] += 1
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
@ -598,19 +599,19 @@ def insert(n)
|
||||||
# XXX dit kan vast netter... toch de Dijkstra neuronen nog eens aansteken
|
# XXX dit kan vast netter... toch de Dijkstra neuronen nog eens aansteken
|
||||||
# XXX this should probably have some recursion to make it faster
|
# XXX this should probably have some recursion to make it faster
|
||||||
l = 0
|
l = 0
|
||||||
r = edge.length-1
|
r = @set["edges"].length-1
|
||||||
i = r/2
|
i = r/2
|
||||||
while true
|
while true
|
||||||
if n < edge[i] && n > edge[i-1]
|
if n < @set["edges"][i] && n > @set["edges"][i-1]
|
||||||
inSet = i.odd?
|
inSet = i.odd?
|
||||||
break
|
break
|
||||||
elsif n < edge[i] && i == 0
|
elsif n < @set["edges"][i] && i == 0
|
||||||
inSet = false
|
inSet = false
|
||||||
break
|
break
|
||||||
elsif n < edge[i]
|
elsif n < @set["edges"][i]
|
||||||
r = i
|
r = i
|
||||||
i = l + ((r-l)/2)
|
i = l + ((r-l)/2)
|
||||||
elsif n == edge[i]
|
elsif n == @set["edges"][i]
|
||||||
inSet = i.odd?
|
inSet = i.odd?
|
||||||
break
|
break
|
||||||
else
|
else
|
||||||
|
|
@ -621,28 +622,22 @@ def insert(n)
|
||||||
|
|
||||||
inSet and return
|
inSet and return
|
||||||
|
|
||||||
lGap = i == 0 || n-1 - edge[i-1]
|
lGap = i == 0 || n-1 - @set["edges"][i-1]
|
||||||
lGap = false if lGap == 0
|
lGap = false if lGap == 0
|
||||||
|
|
||||||
rGap = i == edge.length-1 ? i : edge[i] - n
|
rGap = i == @set["edges"].length-1 ? i : @set["edges"][i] - n
|
||||||
rGap = false if rGap == 0
|
rGap = false if rGap == 0
|
||||||
|
|
||||||
if ( lGap and rGap)
|
if ( lGap and rGap)
|
||||||
lower = edge[0...i]
|
@set["edges"] = @set["edges"].insert(i, n-1, n)
|
||||||
upper = edge[i...edge.length]
|
|
||||||
edge = lower
|
|
||||||
edge.push(n-1, n)
|
|
||||||
edge.concat(upper)
|
|
||||||
elsif (not lGap and rGap)
|
elsif (not lGap and rGap)
|
||||||
edge[i-1] += 1
|
@set["edges"][i-1] += 1
|
||||||
elsif ( lGap and not rGap)
|
elsif ( lGap and not rGap)
|
||||||
edge[i] -= 1
|
@set["edges"][i] -= 1
|
||||||
else
|
else
|
||||||
edge.delete_at(i-1)
|
@set["edges"].delete_at(i-1)
|
||||||
edge.delete_at(i-1)
|
@set["edges"].delete_at(i-1)
|
||||||
end
|
end
|
||||||
|
|
||||||
@set["edges"] = edge
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def remove!(n)
|
def remove!(n)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue