Paste: multi-arrays
Author: | j |
Mode: | factor |
Date: | Fri, 4 Jun 2010 21:30:32 |
Plain Text |
USING: accessors kernel math math.order sequences ;
FROM: sequences.private => nth-unsafe set-nth-unsafe ;
IN: sequences.multi
MIXIN: multi-sequence
GENERIC: multi-dim
: multi-bounds-check?
multi-dim [ 0 swap between? ] 2all? ; inline
: multi-bounds-check
2dup multi-bounds-check? [ bounds-error ] unless ; inline
GENERIC: multi-nth
GENERIC: multi-set-nth
<PRIVATE
GENERIC: multi-nth-unsafe
GENERIC: multi-set-nth-unsafe
M: multi-sequence multi-nth-unsafe multi-nth ; inline
M: multi-sequence multi-set-nth-unsafe multi-set-nth ; inline
PRIVATE>
M: multi-sequence multi-nth
multi-bounds-check multi-nth-unsafe ; inline
M: multi-sequence multi-set-nth
multi-bounds-check multi-set-nth-unsafe ; inline
TUPLE: multi-array
{ origin read-only }
{ dim read-only }
{ strides read-only }
{ underlying read-only } ;
INSTANCE: multi-array multi-sequence
: row-major
1 [ * ] accumulate nip ; inline
: col-major
row-major reverse ; inline
: (multi-array-like)
[ over product ] dip new-sequence
multi-array boa ; inline
: <multi-array-like>
[ 0 swap dup row-major ] dip (multi-array-like) ; inline
: <multi-array>
{ } <multi-array-like> ; inline
: multi@
[ * ] [ + ] 2map-reduce ; inline
M: multi-array multi-dim dim>> ; inline
M: multi-array multi-nth-unsafe [ strides>> multi@ ] [ underlying>> ] bi nth-unsafe ; inline
M: multi-array multi-set-nth-unsafe [ strides>> multi@ ] [ underlying>> ] bi set-nth-unsafe ; inline
New Annotation