charts.lines: make clip-by-first operate on slices internally

char-rename
Alexander Iljin 2017-01-11 00:32:45 +03:00 committed by John Benediktsson
parent 418b798460
commit 118b06be29
1 changed files with 8 additions and 6 deletions

View File

@ -21,11 +21,12 @@ TUPLE: line < gadget color data ;
: finder ( elt seq -- seq quot )
[ first ] dip [ first = not ] with ; inline
: adjusted-tail ( index elt seq -- seq' )
[ finder find-last-from drop ] keep swap [ 1 + tail ] when* ;
: adjusted-tail-slice ( index elt seq -- slice )
[ finder find-last-from drop ] keep
swap [ 1 + tail-slice ] when* ;
: adjusted-head ( index elt seq -- seq' )
[ finder find-from drop ] keep swap [ head ] when* ;
: adjusted-head-slice ( index elt seq -- slice )
[ finder find-from drop ] keep swap [ head-slice ] when* ;
! : data-rect ( data -- rect )
! [ [ first first ] [ last first ] bi ] keep
@ -53,8 +54,9 @@ TUPLE: line < gadget color data ;
: clip-by-first ( min,max pairs -- pairs' )
2dup first-in-bounds? [
[ dup first ] dip [ search-first ] keep adjusted-tail
[ second ] dip [ search-first ] keep adjusted-head
[ dup first ] dip [ search-first ] keep adjusted-tail-slice
[ second ] dip [ search-first ] keep adjusted-head-slice
dup like
] [
2drop { } clone
] if ;