Mercurial > projects > ldc
annotate lphobos/internal/arrays.d @ 120:5ce8ab11e75a trunk
[svn r124] Fixed another D vararg + return in ptr bug.
Fixed some nested function calls failed to resolve the context ptr.
author | lindquist |
---|---|
date | Mon, 26 Nov 2007 07:26:21 +0100 |
parents | 5ab8e92611f9 |
children |
rev | line source |
---|---|
1 | 1 module internal.arrays; |
2 | |
64
b688ad419f8c
[svn r68] Added support for multi-dimensional static arrays.
lindquist
parents:
52
diff
changeset
|
3 private import llvm.intrinsic; |
b688ad419f8c
[svn r68] Added support for multi-dimensional static arrays.
lindquist
parents:
52
diff
changeset
|
4 |
1 | 5 extern(C): |
6 | |
64
b688ad419f8c
[svn r68] Added support for multi-dimensional static arrays.
lindquist
parents:
52
diff
changeset
|
7 int memcmp(void*,void*,size_t); |
91 | 8 size_t strlen(char*); |
64
b688ad419f8c
[svn r68] Added support for multi-dimensional static arrays.
lindquist
parents:
52
diff
changeset
|
9 |
b688ad419f8c
[svn r68] Added support for multi-dimensional static arrays.
lindquist
parents:
52
diff
changeset
|
10 version(LLVM64) |
b688ad419f8c
[svn r68] Added support for multi-dimensional static arrays.
lindquist
parents:
52
diff
changeset
|
11 alias llvm_memcpy_i64 llvm_memcpy; |
b688ad419f8c
[svn r68] Added support for multi-dimensional static arrays.
lindquist
parents:
52
diff
changeset
|
12 else |
b688ad419f8c
[svn r68] Added support for multi-dimensional static arrays.
lindquist
parents:
52
diff
changeset
|
13 alias llvm_memcpy_i32 llvm_memcpy; |
b688ad419f8c
[svn r68] Added support for multi-dimensional static arrays.
lindquist
parents:
52
diff
changeset
|
14 |
40 | 15 // per-element array init routines |
16 | |
1 | 17 void _d_array_init_i1(bool* a, size_t n, bool v) |
18 { | |
19 auto p = a; | |
20 auto end = a+n; | |
21 while (p !is end) | |
22 *p++ = v; | |
23 } | |
24 | |
25 void _d_array_init_i8(ubyte* a, size_t n, ubyte v) | |
26 { | |
27 auto p = a; | |
28 auto end = a+n; | |
29 while (p !is end) | |
30 *p++ = v; | |
31 } | |
32 | |
33 void _d_array_init_i16(ushort* a, size_t n, ushort v) | |
34 { | |
35 auto p = a; | |
36 auto end = a+n; | |
37 while (p !is end) | |
38 *p++ = v; | |
39 } | |
40 | |
41 void _d_array_init_i32(uint* a, size_t n, uint v) | |
42 { | |
43 auto p = a; | |
44 auto end = a+n; | |
45 while (p !is end) | |
46 *p++ = v; | |
47 } | |
48 | |
49 void _d_array_init_i64(ulong* a, size_t n, ulong v) | |
50 { | |
51 auto p = a; | |
52 auto end = a+n; | |
53 while (p !is end) | |
54 *p++ = v; | |
55 } | |
56 | |
57 void _d_array_init_float(float* a, size_t n, float v) | |
58 { | |
59 auto p = a; | |
60 auto end = a+n; | |
61 while (p !is end) | |
62 *p++ = v; | |
63 } | |
64 | |
65 void _d_array_init_double(double* a, size_t n, double v) | |
66 { | |
67 auto p = a; | |
68 auto end = a+n; | |
69 while (p !is end) | |
70 *p++ = v; | |
71 } | |
72 | |
73 void _d_array_init_pointer(void** a, size_t n, void* v) | |
74 { | |
75 auto p = a; | |
76 auto end = a+n; | |
77 while (p !is end) | |
78 *p++ = v; | |
79 } | |
40 | 80 |
109
5ab8e92611f9
[svn r113] Added initial support for associative arrays (AAs).
lindquist
parents:
100
diff
changeset
|
81 void _d_array_init_mem(void* a, size_t na, void* v, size_t nv) |
64
b688ad419f8c
[svn r68] Added support for multi-dimensional static arrays.
lindquist
parents:
52
diff
changeset
|
82 { |
b688ad419f8c
[svn r68] Added support for multi-dimensional static arrays.
lindquist
parents:
52
diff
changeset
|
83 auto p = a; |
b688ad419f8c
[svn r68] Added support for multi-dimensional static arrays.
lindquist
parents:
52
diff
changeset
|
84 auto end = a + na*nv; |
b688ad419f8c
[svn r68] Added support for multi-dimensional static arrays.
lindquist
parents:
52
diff
changeset
|
85 while (p !is end) { |
b688ad419f8c
[svn r68] Added support for multi-dimensional static arrays.
lindquist
parents:
52
diff
changeset
|
86 llvm_memcpy(p,v,nv,0); |
b688ad419f8c
[svn r68] Added support for multi-dimensional static arrays.
lindquist
parents:
52
diff
changeset
|
87 p += nv; |
b688ad419f8c
[svn r68] Added support for multi-dimensional static arrays.
lindquist
parents:
52
diff
changeset
|
88 } |
b688ad419f8c
[svn r68] Added support for multi-dimensional static arrays.
lindquist
parents:
52
diff
changeset
|
89 } |
b688ad419f8c
[svn r68] Added support for multi-dimensional static arrays.
lindquist
parents:
52
diff
changeset
|
90 |
52 | 91 // for array cast |
92 size_t _d_array_cast_len(size_t len, size_t elemsz, size_t newelemsz) | |
93 { | |
94 if (newelemsz == 1) { | |
95 return len*elemsz; | |
96 } | |
97 else if (len % newelemsz) { | |
98 throw new Exception("Bad array cast"); | |
99 } | |
100 return (len*elemsz)/newelemsz; | |
101 } | |
91 | 102 |
103 // creating args for main | |
104 void _d_main_args(uint n, char** args, ref char[][] res) | |
105 { | |
106 assert(res.length == n); | |
107 foreach(i,v; args[0..n]) | |
108 { | |
109 res[i] = v[0 .. strlen(v)]; | |
110 } | |
111 } |