From 783cffe036c898930d60594c92c2e38a6b3511a1 Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Mon, 4 Apr 2016 11:45:48 -0700 Subject: [PATCH] sequences.extras: Add a word to ensure that the underlying for slices is the same. Add a more forgiving version of merge-slices called span-slices. --- extra/sequences/extras/extras.factor | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/extra/sequences/extras/extras.factor b/extra/sequences/extras/extras.factor index 7c3caa7b4a..55f24785a1 100644 --- a/extra/sequences/extras/extras.factor +++ b/extra/sequences/extras/extras.factor @@ -198,6 +198,16 @@ ERROR: slices-don't-touch slice1 slice2 ; : rotate ( seq n -- seq' ) over length mod dup 0 >= [ cut ] [ abs cut* ] if prepend ; +ERROR: underlying-mismatch slice1 slice2 ; +: ensure-same-underlying ( slice1 slice2 -- slice1 slice2 ) + 2dup [ seq>> ] bi@ eq? [ underlying-mismatch ] unless ; + +: span-slices ( slice1 slice2 -- slice ) + ensure-same-underlying + [ [ from>> ] bi@ min ] + [ [ to>> ] bi@ max ] + [ drop seq>> ] 2tri ; + :: rotate! ( seq n -- ) seq length :> len n len mod dup 0 < [ len + ] when seq bounds-check drop 0 over -- 2.34.1