]> gitweb.factorcode.org Git - factor.git/blob - basis/specialized-vectors/specialized-vectors.factor
specialized-arrays, specialized-vectors: add direct-slice, direct-head, direct-tail...
[factor.git] / basis / specialized-vectors / specialized-vectors.factor
1 ! Copyright (C) 2008, 2010 Slava Pestov.
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: accessors alien alien.c-types alien.parser assocs
4 compiler.units functors growable kernel lexer math namespaces
5 parser prettyprint.custom sequences specialized-arrays
6 specialized-arrays.private strings vocabs vocabs.parser
7 vocabs.generated fry make ;
8 FROM: sequences.private => nth-unsafe ;
9 FROM: specialized-arrays.private => nth-c-ptr direct-like ;
10 QUALIFIED: vectors.functor
11 IN: specialized-vectors
12
13 <PRIVATE
14
15 FUNCTOR: define-vector ( T -- )
16
17 V   DEFINES-CLASS ${T}-vector
18
19 A   IS      ${T}-array
20 <A> IS      <${A}>
21 <direct-A> IS <direct-${A}>
22
23 >V  DEFERS >${V}
24 V{  DEFINES ${V}{
25
26 WHERE
27
28 V A <A> vectors.functor:define-vector
29
30 M: V contract 2drop ; inline
31
32 M: V element-size drop \ T heap-size ; inline
33
34 M: V pprint-delims drop \ V{ \ } ;
35
36 M: V >pprint-sequence ;
37
38 M: V pprint* pprint-object ;
39
40 M: V >c-ptr underlying>> underlying>> ; inline
41 M: V byte-length [ length ] [ element-size ] bi * ; inline
42
43 M: V direct-like drop <direct-A> ; inline
44 M: V nth-c-ptr underlying>> nth-c-ptr ; inline
45
46 SYNTAX: V{ \ } [ >V ] parse-literal ;
47
48 INSTANCE: V growable
49
50 ;FUNCTOR
51
52 : specialized-vector-vocab ( c-type -- vocab )
53     [
54         "specialized-vectors.instances." %
55         [ vocabulary>> % "." % ]
56         [ name>> % ]
57         bi
58     ] "" make ;
59
60 PRIVATE>
61
62 : push-new ( vector -- new )
63     [ length ] keep ensure nth-unsafe ; inline
64
65 : define-vector-vocab ( type -- vocab )
66     underlying-type
67     [ specialized-vector-vocab ] [ '[ _ define-vector ] ] bi
68     generate-vocab ;
69
70 SYNTAX: SPECIALIZED-VECTORS:
71     ";" [
72         parse-c-type
73         [ define-array-vocab use-vocab ]
74         [ define-vector-vocab use-vocab ] bi
75     ] each-token ;
76
77 SYNTAX: SPECIALIZED-VECTOR:
78     scan-c-type
79     [ define-array-vocab use-vocab ]
80     [ define-vector-vocab use-vocab ] bi ;