Merge branch 'master' of git://factorcode.org/git/factor

db4
Doug Coleman 2009-01-20 16:36:50 -06:00
commit 68cacc70ef
5 changed files with 42 additions and 27 deletions

View File

@ -8,8 +8,6 @@ QUALIFIED: ascii
IN: unicode.case
<PRIVATE
: at-default ( key assoc -- value/key ) [ at ] [ drop ] 2bi or ; inline
: ch>lower ( ch -- lower ) simple-lower at-default ; inline
: ch>upper ( ch -- upper ) simple-upper at-default ; inline
: ch>title ( ch -- title ) simple-title at-default ; inline

View File

@ -118,3 +118,15 @@ unit-test
{ "nachos" "cheese" }
} extract-keys
] unit-test
[ f ] [
"a" H{ { "a" f } } at-default
] unit-test
[ "b" ] [
"b" H{ { "a" f } } at-default
] unit-test
[ "x" ] [
"a" H{ { "a" "x" } } at-default
] unit-test

View File

@ -1,4 +1,4 @@
! Copyright (C) 2007, 2008 Daniel Ehrenberg, Slava Pestov
! Copyright (C) 2007, 2009 Daniel Ehrenberg, Slava Pestov
! See http://factorcode.org/license.txt for BSD license.
USING: kernel sequences arrays math sequences.private vectors
accessors ;
@ -41,8 +41,7 @@ GENERIC: >alist ( assoc -- newassoc )
over assoc-map-as ; inline
: assoc-push-if ( key value quot accum -- )
[ 2keep rot ] dip swap
[ [ 2array ] dip push ] [ 3drop ] if ; inline
[ 2keep ] dip [ [ 2array ] dip push ] 3curry when ; inline
: assoc-pusher ( quot -- quot' accum )
V{ } clone [ [ assoc-push-if ] 2curry ] keep ; inline
@ -62,9 +61,12 @@ GENERIC: >alist ( assoc -- newassoc )
: at ( key assoc -- value/f )
at* drop ; inline
: at-default ( key assoc -- value/key )
2dup at* [ 2nip ] [ 2drop ] if ; inline
M: assoc assoc-clone-like ( assoc exemplar -- newassoc )
over assoc-size swap new-assoc
swap [ swap pick set-at ] assoc-each ;
[ [ swapd set-at ] curry assoc-each ] keep ;
: keys ( assoc -- keys )
[ drop ] { } assoc>map ;
@ -76,7 +78,7 @@ M: assoc assoc-clone-like ( assoc exemplar -- newassoc )
[ at* ] 2keep delete-at ;
: rename-at ( newkey key assoc -- )
tuck delete-at* [ -rot set-at ] [ 3drop ] if ;
[ delete-at* ] keep [ swapd set-at ] curry [ 2drop ] if ;
: assoc-empty? ( assoc -- ? )
assoc-size zero? ;
@ -132,14 +134,16 @@ M: assoc assoc-clone-like ( assoc exemplar -- newassoc )
substituter map ;
: cache ( key assoc quot -- value )
2over at* [
[ 3drop ] dip
] [
drop pick rot [ call dup ] 2dip set-at
] if ; inline
[ [ at* ] 2keep ] dip
[ [ nip call dup ] [ drop ] 3bi set-at ] 3curry
[ drop ] prepose
unless ; inline
: 2cache ( key1 key2 assoc quot -- value )
[ 2array ] 2dip [ first2 ] prepose cache ; inline
: change-at ( key assoc quot -- )
[ [ at ] dip call ] 3keep drop set-at ; inline
[ [ at ] dip call ] [ drop ] 3bi set-at ; inline
: at+ ( n key assoc -- ) [ 0 or + ] change-at ; inline

View File

@ -17,9 +17,6 @@ TUPLE: anonymous-complement class ;
C: <anonymous-complement> anonymous-complement
: 2cache ( key1 key2 assoc quot -- value )
[ 2array ] 2dip [ first2 ] prepose cache ; inline
GENERIC: valid-class? ( obj -- ? )
M: class valid-class? drop t ;

View File

@ -1,4 +1,4 @@
! Copyright (C) 2005, 2008 Slava Pestov.
! Copyright (C) 2005, 2009 Slava Pestov.
! See http://factorcode.org/license.txt for BSD license.
USING: kernel math make strings arrays vectors sequences
sets math.order accessors ;
@ -16,19 +16,23 @@ IN: splitting
: ?tail-slice ( seq end -- newseq ? )
2dup tail? [ length head-slice* t ] [ drop f ] if ;
: (split1) ( seq subseq -- start end ? )
tuck swap start dup
[ swap [ drop ] [ length + ] 2bi t ]
[ 2drop f f f ]
if ;
: split1 ( seq subseq -- before after )
dup pick start dup [
[ [ over ] dip head -rot length ] keep + tail
] [
2drop f
] if ;
[ drop ] [ (split1) ] 2bi
[ [ over ] dip [ head ] [ tail ] 2bi* ]
[ 2drop f ]
if ;
: split1-slice ( seq subseq -- before-slice after-slice )
dup pick start dup [
[ [ over ] dip head-slice -rot length ] keep + tail-slice
] [
2drop f
] if ;
[ drop ] [ (split1) ] 2bi
[ [ over ] dip [ head-slice ] [ tail-slice ] 2bi* ]
[ 2drop f ]
if ;
: split1-last ( seq subseq -- before after )
[ <reversed> ] bi@ split1 [ reverse ] bi@