]> gitweb.factorcode.org Git - factor.git/commitdiff
Reducing bit-sets performance regression somewhat
authorDaniel Ehrenberg <littledan@Macintosh-122.local>
Thu, 18 Mar 2010 01:38:06 +0000 (21:38 -0400)
committerDaniel Ehrenberg <littledan@Macintosh-122.local>
Thu, 18 Mar 2010 01:38:06 +0000 (21:38 -0400)
basis/bit-sets/bit-sets.factor

index 9d3d09ec1b2f97bba05dfa136368b9895e27f774..aa74c2b9fbda35592b56ce12d22bd8e5550a96d1 100644 (file)
@@ -30,6 +30,11 @@ M: bit-set delete
 ! of the same length.
 <PRIVATE
 
+ERROR: check-bit-set-failed ;
+
+: check-bit-set ( bit-set -- bit-set )
+    dup bit-set? [ check-bit-set-failed ] unless ; inline
+
 : bit-set-map ( seq1 seq2 quot -- seq )
     [ 2drop length>> ]
     [
@@ -62,13 +67,20 @@ M: bit-set subset?
 M: bit-set members
     [ table>> length iota ] keep [ in? ] curry filter ;
 
-M: bit-set set-like
+<PRIVATE
+
+: bit-set-like ( set bit-set -- bit-set' )
     ! This crashes if there are keys that can't be put in the bit set
-    over bit-set? [ 2dup [ table>> ] bi@ length = ] [ f ] if
+    over bit-set? [ 2dup [ table>> length ] bi@ = ] [ f ] if
     [ drop ] [
         [ members ] dip table>> length <bit-set>
         [ [ adjoin ] curry each ] keep
     ] if ;
 
+PRIVATE>
+
+M: bit-set set-like
+    bit-set-like check-bit-set ; inline
+
 M: bit-set clone
     table>> clone bit-set boa ;