Merge branch 'master' of git://github.com/slavapestov/factor into fast-sets
						commit
						93dd955f4a
					
				| 
						 | 
				
			
			@ -64,3 +64,8 @@ IN: bit-sets.tests
 | 
			
		|||
 | 
			
		||||
[ T{ bit-set f ?{ f } } T{ bit-set f ?{ t } } ]
 | 
			
		||||
[ 1 <bit-set> dup clone 0 over adjoin ] unit-test
 | 
			
		||||
 | 
			
		||||
[ 0 ] [ T{ bit-set f ?{ } } cardinality ] unit-test
 | 
			
		||||
[ 0 ] [ T{ bit-set f ?{ f f f f } } cardinality ] unit-test
 | 
			
		||||
[ 1 ] [ T{ bit-set f ?{ f t f f } } cardinality ] unit-test
 | 
			
		||||
[ 2 ] [ T{ bit-set f ?{ f t f t } } cardinality ] unit-test
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -15,19 +15,21 @@ M: bit-set in?
 | 
			
		|||
    over integer? [ table>> ?nth ] [ 2drop f ] if ; inline
 | 
			
		||||
 | 
			
		||||
M: bit-set adjoin
 | 
			
		||||
    ! This is allowed to crash when the elt couldn't go in the set
 | 
			
		||||
    ! This is allowed to throw an error when the elt couldn't
 | 
			
		||||
    ! go in the set
 | 
			
		||||
    [ t ] 2dip table>> set-nth ;
 | 
			
		||||
 | 
			
		||||
M: bit-set delete
 | 
			
		||||
    ! This isn't allowed to crash if the elt wasn't in the set
 | 
			
		||||
    ! This isn't allowed to throw an error if the elt wasn't
 | 
			
		||||
    ! in the set
 | 
			
		||||
    over integer? [
 | 
			
		||||
        table>> 2dup bounds-check? [
 | 
			
		||||
            [ f ] 2dip set-nth
 | 
			
		||||
        ] [ 2drop ] if
 | 
			
		||||
    ] [ 2drop ] if ;
 | 
			
		||||
 | 
			
		||||
! If you do binary set operations with a bitset, it's expected
 | 
			
		||||
! that the other thing can also be represented as a bitset
 | 
			
		||||
! 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
 | 
			
		||||
! of the same length.
 | 
			
		||||
<PRIVATE
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -71,7 +73,8 @@ M: bit-set members
 | 
			
		|||
<PRIVATE
 | 
			
		||||
 | 
			
		||||
: bit-set-like ( set bit-set -- bit-set' )
 | 
			
		||||
    ! This crashes if there are keys that can't be put in the bit set
 | 
			
		||||
    ! Throws an error if there are keys that can't be put
 | 
			
		||||
    ! in the bit set
 | 
			
		||||
    over bit-set? [ 2dup [ table>> length ] bi@ = ] [ f ] if
 | 
			
		||||
    [ drop ] [
 | 
			
		||||
        [ members ] dip table>> length <bit-set>
 | 
			
		||||
| 
						 | 
				
			
			@ -87,4 +90,4 @@ M: bit-set clone
 | 
			
		|||
    table>> clone bit-set boa ;
 | 
			
		||||
 | 
			
		||||
M: bit-set cardinality
 | 
			
		||||
    table>> bit-array>integer bit-count ;
 | 
			
		||||
    table>> bit-count ;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -18,6 +18,8 @@ ARTICLE: "set-operations" "Operations on sets"
 | 
			
		|||
{ $subsections in? }
 | 
			
		||||
"All sets can be represented as a sequence, without duplicates, of their members:"
 | 
			
		||||
{ $subsections members }
 | 
			
		||||
"To get the number of elements in a set:"
 | 
			
		||||
{ $subsections cardinality }
 | 
			
		||||
"Sets can have members added or removed destructively:"
 | 
			
		||||
{ $subsections
 | 
			
		||||
    adjoin
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -71,4 +71,6 @@ IN: sets.tests
 | 
			
		|||
 | 
			
		||||
[ 0 ] [ f cardinality ] unit-test
 | 
			
		||||
[ 0 ] [ { } cardinality ] unit-test
 | 
			
		||||
[ 1 ] [ { 1 } cardinality ] unit-test
 | 
			
		||||
[ 1 ] [ HS{ 1 } cardinality ] unit-test
 | 
			
		||||
[ 3 ] [ HS{ 1 2 3 } cardinality ] unit-test
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue