sets: make ?adjoin a generic method.

db4
John Benediktsson 2013-03-23 16:56:35 -07:00
parent 5d11ada701
commit fdcdc8daf7
1 changed files with 4 additions and 6 deletions

View File

@ -7,6 +7,7 @@ IN: sets
! Set protocol ! Set protocol
MIXIN: set MIXIN: set
GENERIC: adjoin ( elt set -- ) GENERIC: adjoin ( elt set -- )
GENERIC: ?adjoin ( elt set -- ? )
GENERIC: in? ( elt set -- ? ) GENERIC: in? ( elt set -- ? )
GENERIC: delete ( elt set -- ) GENERIC: delete ( elt set -- )
GENERIC: set-like ( set exemplar -- set' ) GENERIC: set-like ( set exemplar -- set' )
@ -35,6 +36,8 @@ M: f clear-set drop ; inline
! Defaults for some methods. ! Defaults for some methods.
! Override them for efficiency ! Override them for efficiency
M: set ?adjoin 2dup in? [ 2drop f ] [ adjoin t ] if ;
M: set null? members null? ; inline M: set null? members null? ; inline
M: set cardinality members length ; M: set cardinality members length ;
@ -100,9 +103,7 @@ M: set all-unique? drop t ;
<PRIVATE <PRIVATE
: (pruned) ( elt set accum -- ) : (pruned) ( elt set accum -- )
2over in? [ 3drop ] [ 2over ?adjoin [ nip push ] [ 3drop ] if ; inline
[ drop adjoin ] [ nip push ] 3bi
] if ; inline
: pruned ( seq -- newseq ) : pruned ( seq -- newseq )
[ f fast-set ] [ length <vector> ] bi [ f fast-set ] [ length <vector> ] bi
@ -157,9 +158,6 @@ M: sequence clear-set
: without ( seq set -- subseq ) : without ( seq set -- subseq )
tester [ not ] compose filter ; tester [ not ] compose filter ;
: ?adjoin ( elt set -- ? )
2dup in? [ 2drop f ] [ adjoin t ] if ; inline
: adjoin-all ( seq set -- ) : adjoin-all ( seq set -- )
[ adjoin ] curry each ; [ adjoin ] curry each ;