ref: 685513dd421ded344ae4a4e2c498928fbdbb00aa
parent: a2cc58be74896e3519b7054d7c507c4c76a54db2
author: Ori Bernstein <[email protected]>
date: Wed May 6 13:10:43 EDT 2015
Don't unnecessarily reallocate bitset storage.
--- a/libstd/bitset.myr
+++ b/libstd/bitset.myr
@@ -57,7 +57,7 @@
idx = (v castto(size)) / (8*sizeof(size))
off = (v castto(size)) % (8*sizeof(size))
- ensurespace(bs, idx)
+ ensurelen(bs, idx)
bs.bits[idx] |= (1 << off)
}
@@ -67,7 +67,9 @@
idx = (v castto(size)) / (8*sizeof(size))
off = (v castto(size)) % (8*sizeof(size))
- ensurespace(bs, idx)
+ if idx >= bs.bits.len
+ ->
+ ;;
bs.bits[idx] &= ~(1 << off)
}
@@ -77,7 +79,9 @@
idx = (v castto(size)) / (8*sizeof(size))
off = (v castto(size)) % (8*sizeof(size))
- ensurespace(bs, idx)
+ if idx >= bs.bits.len
+ -> false
+ ;;
-> (bs.bits[idx] & (1 << off)) != 0
}
@@ -100,10 +104,10 @@
}
const bsdiff = {a, b
- var i
+ var i, n
- ensurespace(b, a.bits.len)
- for i = 0; i < a.bits.len; i++
+ n = min(b.bits.len, a.bits.len)
+ for i = 0; i < n; i++
a.bits[i] &= ~b.bits[i]
;;
}
@@ -132,9 +136,9 @@
-> true
}
-const ensurespace = {bs, v
- if bs.bits.len*8 <= v
- bs.bits = slzgrow(bs.bits, v + 1)
+const ensurelen = {bs, len
+ if bs.bits.len <= len
+ bs.bits = slzgrow(bs.bits, len + 1)
;;
}
@@ -141,8 +145,8 @@
const eqsz = {a, b
var sz
- sz = max(a.bits.len, b.bits.len)*8
- ensurespace(a, sz)
- ensurespace(b, sz)
+ sz = max(a.bits.len, b.bits.len)
+ ensurelen(a, sz)
+ ensurelen(b, sz)
}