interval-sets: some modernization.

db4
John Benediktsson 2012-05-04 17:33:10 -07:00
parent deea270b57
commit 1d8449115c
3 changed files with 15 additions and 14 deletions

View File

@ -20,7 +20,7 @@ HELP: interval-set
HELP: <interval-set> HELP: <interval-set>
{ $values { "specification" "a sequence of numbers and pairs of numbers" } { "interval-set" interval-set } } { $values { "specification" "a sequence of numbers and pairs of numbers" } { "interval-set" interval-set } }
{ $description "Creates an interval set based on the specification. Pairs of numers are interpreted as intervals which include their endpoints, and individual numbers are interpreted to be in the set, in a singleton range." } ; { $description "Creates an interval set based on the specification. Pairs of numbers are interpreted as intervals which include their endpoints, and individual numbers are interpreted to be in the set, in a singleton range." } ;
HELP: in? HELP: in?
{ $values { "key" integer } { "set" interval-set } { "?" { { $link t } " or " { $link f } } } } { $values { "key" integer } { "set" interval-set } { "?" { { $link t } " or " { $link f } } } }

View File

@ -7,7 +7,7 @@ IN: interval-sets.tests
[ f ] [ 0 T{ interval-set } in? ] unit-test [ f ] [ 0 T{ interval-set } in? ] unit-test
[ f ] [ 2 T{ interval-set } in? ] unit-test [ f ] [ 2 T{ interval-set } in? ] unit-test
: i1 ( n -- ? ) : i1 ( -- set )
{ { 3 4 } } <interval-set> ; { { 3 4 } } <interval-set> ;
[ f ] [ 2 i1 in? ] unit-test [ f ] [ 2 i1 in? ] unit-test
@ -15,9 +15,9 @@ IN: interval-sets.tests
[ t ] [ 4 i1 in? ] unit-test [ t ] [ 4 i1 in? ] unit-test
[ f ] [ 5 i1 in? ] unit-test [ f ] [ 5 i1 in? ] unit-test
CONSTANT: unicode-max HEX: 10FFFF CONSTANT: unicode-max 0x10FFFF
: i2 ( n -- ? ) : i2 ( -- set )
{ { 3 4 } } <interval-set> { { 3 4 } } <interval-set>
unicode-max <interval-not> ; unicode-max <interval-not> ;
@ -26,7 +26,7 @@ CONSTANT: unicode-max HEX: 10FFFF
[ f ] [ 4 i2 in? ] unit-test [ f ] [ 4 i2 in? ] unit-test
[ t ] [ 5 i2 in? ] unit-test [ t ] [ 5 i2 in? ] unit-test
: i3 ( n -- ? ) : i3 ( -- set )
{ { 2 4 } } <interval-set> { { 2 4 } } <interval-set>
{ { 6 8 } } <interval-set> { { 6 8 } } <interval-set>
<interval-or> ; <interval-or> ;
@ -41,7 +41,7 @@ CONSTANT: unicode-max HEX: 10FFFF
[ t ] [ 8 i3 in? ] unit-test [ t ] [ 8 i3 in? ] unit-test
[ f ] [ 9 i3 in? ] unit-test [ f ] [ 9 i3 in? ] unit-test
: i4 ( n -- ? ) : i4 ( -- set )
{ { 2 4 } } <interval-set> { { 2 4 } } <interval-set>
{ { 6 8 } } <interval-set> { { 6 8 } } <interval-set>
<interval-and> ; <interval-and> ;
@ -56,7 +56,7 @@ CONSTANT: unicode-max HEX: 10FFFF
[ f ] [ 8 i4 in? ] unit-test [ f ] [ 8 i4 in? ] unit-test
[ f ] [ 9 i4 in? ] unit-test [ f ] [ 9 i4 in? ] unit-test
: i5 ( n -- ? ) : i5 ( -- set )
{ { 2 5 } } <interval-set> { { 2 5 } } <interval-set>
{ { 4 8 } } <interval-set> { { 4 8 } } <interval-set>
<interval-or> ; <interval-or> ;
@ -71,7 +71,7 @@ CONSTANT: unicode-max HEX: 10FFFF
[ t ] [ 8 i5 in? ] unit-test [ t ] [ 8 i5 in? ] unit-test
[ f ] [ 9 i5 in? ] unit-test [ f ] [ 9 i5 in? ] unit-test
: i6 ( n -- ? ) : i6 ( -- set )
{ { 2 5 } } <interval-set> { { 2 5 } } <interval-set>
{ { 4 8 } } <interval-set> { { 4 8 } } <interval-set>
<interval-and> ; <interval-and> ;

View File

@ -1,8 +1,9 @@
! Copyright (C) 2009 Daniel Ehrenberg. ! Copyright (C) 2009 Daniel Ehrenberg.
! See http://factorcode.org/license.txt for BSD license. ! See http://factorcode.org/license.txt for BSD license.
USING: kernel sequences binary-search accessors math.order USING: accessors alien.c-types arrays assocs binary-search
specialized-arrays.uint make grouping math arrays combinators fry grouping hints kernel locals make math
sorting assocs locals combinators fry hints ; math.order sequences sorting specialized-arrays ;
SPECIALIZED-ARRAY: uint
IN: interval-sets IN: interval-sets
! Sets of positive integers ! Sets of positive integers
@ -21,7 +22,7 @@ PRIVATE>
: in? ( key set -- ? ) : in? ( key set -- ? )
dupd find-interval dupd find-interval
[ [ start ] [ end 1- ] bi between? ] [ [ start ] [ end 1 - ] bi between? ]
[ drop f ] if* ; [ drop f ] if* ;
HINTS: in? { integer interval-set } ; HINTS: in? { integer interval-set } ;
@ -56,7 +57,7 @@ HINTS: in? { integer interval-set } ;
interval-set boa ; interval-set boa ;
: >intervals ( seq -- seq' ) : >intervals ( seq -- seq' )
[ 1+ ] assoc-map concat ; [ 1 + ] assoc-map concat ;
PRIVATE> PRIVATE>
@ -97,7 +98,7 @@ PRIVATE>
0 over ?nth zero? [ rest ] [ 0 prefix ] if ; 0 over ?nth zero? [ rest ] [ 0 prefix ] if ;
: interval-max ( interval-set1 interval-set2 -- n ) : interval-max ( interval-set1 interval-set2 -- n )
[ array>> [ 0 ] [ peek ] if-empty ] bi@ max ; [ array>> [ 0 ] [ last ] if-empty ] bi@ max ;
PRIVATE> PRIVATE>