-USING: accessors kernel locals math math.order sequences ;
+USING: accessors kernel math math.order sequences ;
IN: tensors.tensor-slice
-TUPLE: step-slice < slice { step integer read-only } ;
+TUPLE: step-slice
+ { from integer read-only initial: 0 }
+ { to integer read-only initial: 0 }
+ { seq read-only }
+ { step integer read-only } ;
+
:: <step-slice> ( from to step seq -- step-slice )
step zero? [ "can't be zero" throw ] when
seq length :> len
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 ;
+ [ step>> * ] [ from>> + ] [ seq>> ] tri ; inline
M: step-slice length
[ to>> ] [ from>> - ] [ step>> ] tri
dup 0 < [ [ neg 0 max ] dip neg ] when /mod
- zero? [ 1 + ] unless ;
\ No newline at end of file
+ zero? [ 1 + ] unless ; inline
+
+INSTANCE: step-slice virtual-sequence