]> gitweb.factorcode.org Git - factor.git/commitdiff
table single storage works for f
authorSam Anklesaria <sam@Tintin.local>
Sat, 16 May 2009 01:02:07 +0000 (20:02 -0500)
committerSam Anklesaria <sam@Tintin.local>
Sat, 16 May 2009 01:02:07 +0000 (20:02 -0500)
basis/inverse/vectors/vectors.factor
basis/ui/gadgets/tables/tables.factor

index 1631052157b02710c6cf7f2e5c3b46cc92574686..5cb2258c4f69cadfccc995acf0b846c98d8a610f 100644 (file)
@@ -11,7 +11,14 @@ IN: inverse.vectors
 
 \ peek [ 1vector ] define-inverse
 
+! if is too general to undo, but its derivatives aren't
+
 :: undo-if-empty ( result a b -- seq )
    a call( -- b ) result = [ V{ } clone ] [ result b [undo] call( a -- b ) ] if ;
 
+:: undo-if* ( result a b -- boolean )
+   b call( -- b ) result = [ f ] [ result a [undo] call( a -- b ) ] if ;
+
 \ if-empty 2 [ swap [ undo-if-empty ] 2curry ] define-pop-inverse
+
+\ if* 2 [ swap [ undo-if* ] 2curry ] define-pop-inverse
index 84669be31bea88c5905097e2e50bac683a1c30c9..52cc26497f01a86ab7950ff6ab69f500afe21a06 100644 (file)
@@ -56,9 +56,9 @@ GENERIC: (>>selected-value) ( val table -- )
 : >>selected-value ( table val -- table ) over (>>selected-value) ;
 
 M: table selected-value>> selected-values>> [ [ f ] [ peek ] if-empty ] <illusion> ;
-M: table (>>selected-value) [ [ 1vector ] <illusion> ] dip (>>selected-values) ;
+M: table (>>selected-value) [ [ [ 1vector ] [ V{ } clone ] if* ] <illusion> ] dip (>>selected-values) ;
 M: table selected-index>> selected-indices>> [ f ] [ peek ] if-empty ;
-M: table (>>selected-index) [ 1vector ] dip (>>selected-indices) ;
+M: table (>>selected-index) [ [ 1vector ] [ V{ } clone ] if* ] dip (>>selected-indices) ;
 
 IN: ui.gadgets.tables
 : push-selected-index ( table n -- table ) 2dup swap selected-indices>> index [ drop ] [ over selected-indices>> push ] if ;