shithub: mc

Download patch

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)
 }