sets: make ?adjoin a generic method.
parent
5d11ada701
commit
fdcdc8daf7
|
@ -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 ;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue