]> gitweb.factorcode.org Git - factor.git/blob - basis/specialized-arrays/direct/functor/functor.factor
Merge branch 'master' into experimental
[factor.git] / basis / specialized-arrays / direct / functor / functor.factor
1 ! Copyright (C) 2008 Slava Pestov.
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: functors sequences sequences.private kernel words classes
4 math alien alien.c-types byte-arrays accessors
5 specialized-arrays ;
6 IN: specialized-arrays.direct.functor
7
8 FUNCTOR: define-direct-array ( T -- )
9
10 A'      IS ${T}-array
11 >A'     IS >${T}-array
12 <A'>    IS <${A'}>
13
14 A       DEFINES direct-${T}-array
15 <A>     DEFINES <${A}>
16
17 NTH     [ T dup c-getter array-accessor ]
18 SET-NTH [ T dup c-setter array-accessor ]
19
20 WHERE
21
22 TUPLE: A
23 { underlying c-ptr read-only }
24 { length fixnum read-only } ;
25
26 : <A> ( alien len -- direct-array ) A boa ; inline
27 M: A length length>> ;
28 M: A nth-unsafe underlying>> NTH call ;
29 M: A set-nth-unsafe underlying>> SET-NTH call ;
30 M: A like drop dup A instance? [ >A' ] unless ;
31 M: A new-sequence drop <A'> ;
32
33 INSTANCE: A sequence
34
35 ;FUNCTOR