factor/basis/sequences/complex-components/complex-components.factor

29 lines
757 B
Factor

USING: accessors kernel math math.functions combinators
sequences sequences.private ;
IN: sequences.complex-components
TUPLE: complex-components seq ;
INSTANCE: complex-components sequence
: <complex-components> ( sequence -- complex-components )
complex-components boa ; inline
<PRIVATE
: complex-components@ ( n seq -- remainder n' seq' )
[ [ 1 bitand ] [ -1 shift ] bi ] [ seq>> ] bi* ; inline
: complex-component ( remainder complex -- component )
swap {
{ 0 [ real-part ] }
{ 1 [ imaginary-part ] }
} case ;
PRIVATE>
M: complex-components length
seq>> length 1 shift ;
M: complex-components nth-unsafe
complex-components@ nth-unsafe complex-component ;
M: complex-components set-nth-unsafe
immutable ;