{ to integer read-only }
{ seq read-only } ;
-INSTANCE: circular-slice virtual-sequence
+INSTANCE: circular-slice wrapped-sequence
M: circular-slice equal? over circular-slice? [ sequence= ] [ 2drop f ] if ;
M: circular-slice length [ to>> ] [ from>> ] bi - ; inline
-M: circular-slice virtual-exemplar seq>> ; inline
-
M: circular-slice virtual@
[ from>> + ] [ seq>> ] bi [ length rem ] keep ; inline
M: gb virtual@ ( n gb -- n seq ) [ position>index ] keep seq>> ;
-M: gb virtual-exemplar seq>> ;
-
-INSTANCE: gb virtual-sequence
+INSTANCE: gb wrapped-sequence
! ------------- moving the gap -------------------------------
seq dup slice? [ collapse-slice ] when
step step-slice boa ;
-M: step-slice virtual-exemplar seq>> ; inline
-
M: step-slice virtual@
[ step>> * ] [ from>> + ] [ seq>> ] tri ; inline
dup 0 < [ [ neg 0 max ] dip neg ] when /mod
zero? [ 1 + ] unless ; inline
-INSTANCE: step-slice virtual-sequence
+INSTANCE: step-slice wrapped-sequence
: 2nested-each* ( seq1 seq-quot: ( n -- seq ) quot: ( a b -- ) -- )
'[