bit-sets: some cleanup, small performance improvement to members.
parent
594354e145
commit
a0a76469b6
|
|
@ -1,7 +1,7 @@
|
||||||
! Copyright (C) 2009 Slava Pestov.
|
! Copyright (C) 2009 Slava Pestov.
|
||||||
! See http://factorcode.org/license.txt for BSD license.
|
! See http://factorcode.org/license.txt for BSD license.
|
||||||
USING: kernel accessors sequences byte-arrays bit-arrays math
|
USING: accessors bit-arrays fry kernel math math.bitwise
|
||||||
math.bitwise hints sets ;
|
sequences sequences.private sets ;
|
||||||
IN: bit-sets
|
IN: bit-sets
|
||||||
|
|
||||||
TUPLE: bit-set { table bit-array read-only } ;
|
TUPLE: bit-set { table bit-array read-only } ;
|
||||||
|
|
@ -22,9 +22,7 @@ M: bit-set adjoin
|
||||||
M: bit-set delete
|
M: bit-set delete
|
||||||
! This isn't allowed to throw an error if the elt wasn't
|
! This isn't allowed to throw an error if the elt wasn't
|
||||||
! in the set
|
! in the set
|
||||||
over integer? [
|
over integer? [ [ f ] 2dip table>> ?set-nth ] [ 2drop ] if ;
|
||||||
[ f ] 2dip table>> ?set-nth
|
|
||||||
] [ 2drop ] if ;
|
|
||||||
|
|
||||||
! If you do binary set operations with a bit-set, it's expected
|
! If you do binary set operations with a bit-set, it's expected
|
||||||
! that the other thing can also be represented as a bit-set
|
! that the other thing can also be represented as a bit-set
|
||||||
|
|
@ -37,13 +35,9 @@ ERROR: check-bit-set-failed ;
|
||||||
dup bit-set? [ check-bit-set-failed ] unless ; inline
|
dup bit-set? [ check-bit-set-failed ] unless ; inline
|
||||||
|
|
||||||
: bit-set-map ( seq1 seq2 quot -- seq )
|
: bit-set-map ( seq1 seq2 quot -- seq )
|
||||||
[ 2drop length>> ]
|
[ drop [ length ] bi@ [ assert= ] keep ]
|
||||||
[
|
[ [ [ underlying>> ] bi@ ] dip 2map ] 3bi
|
||||||
[
|
bit-array boa ; inline
|
||||||
[ [ length ] bi@ assert= ]
|
|
||||||
[ [ underlying>> ] bi@ ] 2bi
|
|
||||||
] dip 2map
|
|
||||||
] 3bi bit-array boa ; inline
|
|
||||||
|
|
||||||
: (bit-set-op) ( set1 set2 -- table1 table2 )
|
: (bit-set-op) ( set1 set2 -- table1 table2 )
|
||||||
[ set-like ] keep [ table>> ] bi@ ; inline
|
[ set-like ] keep [ table>> ] bi@ ; inline
|
||||||
|
|
@ -66,7 +60,7 @@ M: bit-set subset?
|
||||||
[ intersect ] keep = ;
|
[ intersect ] keep = ;
|
||||||
|
|
||||||
M: bit-set members
|
M: bit-set members
|
||||||
[ table>> length iota ] keep [ in? ] curry filter ;
|
table>> [ length iota ] keep '[ _ nth-unsafe ] filter ;
|
||||||
|
|
||||||
<PRIVATE
|
<PRIVATE
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue