! Copyright (C) 2009 Slava Pestov.
! See http://factorcode.org/license.txt for BSD license.
-USING: alien.structs alien.c-types math math.functions sequences
-arrays kernel functors vocabs.parser namespaces accessors
-quotations ;
+USING: accessors alien alien.c-types classes.struct functors
+kernel math quotations ;
IN: alien.complex.functor
-FUNCTOR: define-complex-type ( N T -- )
+<FUNCTOR: define-complex-type ( N T -- )
-T-real DEFINES ${T}-real
-T-imaginary DEFINES ${T}-imaginary
-set-T-real DEFINES set-${T}-real
-set-T-imaginary DEFINES set-${T}-imaginary
+N-type IS ${N}
+
+T-class DEFINES-CLASS ${T}
<T> DEFINES <${T}>
*T DEFINES *${T}
WHERE
+STRUCT: T-class { real N-type } { imaginary N-type } ;
+
: <T> ( z -- alien )
- >rect T <c-object> [ set-T-imaginary ] [ set-T-real ] [ ] tri ; inline
+ >rect T-class boa >c-ptr ;
: *T ( alien -- z )
- [ T-real ] [ T-imaginary ] bi rect> ; inline
-
-T current-vocab
-{ { N "real" } { N "imaginary" } }
-define-struct
+ T-class memory>struct [ real>> ] [ imaginary>> ] bi rect> ; inline
-T c-type
+T-class lookup-c-type
<T> 1quotation >>unboxer-quot
*T 1quotation >>boxer-quot
-number >>boxed-class
+complex >>boxed-class
drop
-;FUNCTOR
+;FUNCTOR>