]> gitweb.factorcode.org Git - factor.git/commitdiff
sets: make ?adjoin a generic method.
authorJohn Benediktsson <mrjbq7@gmail.com>
Sat, 23 Mar 2013 23:56:35 +0000 (16:56 -0700)
committerJohn Benediktsson <mrjbq7@gmail.com>
Sat, 23 Mar 2013 23:58:31 +0000 (16:58 -0700)
core/sets/sets.factor

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