annotate ddata.d @ 2:ee1232043257

< <= :/
author Saaa
date Wed, 07 Oct 2009 13:56:33 +0200
parents 8e817772ed3d
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
1 module ddata.ddata;
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
2
1
8e817772ed3d imports specified
Saaa
parents: 0
diff changeset
3 //debug
8e817772ed3d imports specified
Saaa
parents: 0
diff changeset
4 //import std.stdio;
0
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
5 import std.string;
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
6
1
8e817772ed3d imports specified
Saaa
parents: 0
diff changeset
7 import std2.conv : to;
8e817772ed3d imports specified
Saaa
parents: 0
diff changeset
8 import std2.traits : isNumeric;
0
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
9
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
10 class DDataException : Exception
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
11 {
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
12 this(char[] msg)
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
13 {
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
14 super(msg);
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
15 }
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
16 this( uint loc, char c, char[] msg)
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
17 {
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
18 super( format( `parsing failed at string[`, loc-1, `] = '`,c,`'` ,msg));
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
19 }
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
20 }
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
21
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
22
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
23 private enum TOKEN{ BOF, SQUARE_L, SQUARE_R, COMMA, ECOMMA, VALUE, EOF}
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
24
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
25 private template Depth(T: T[]) { const Depth = 1 + Depth!(T); }
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
26 private template Depth(T) { const Depth = 0; }
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
27
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
28 private template BaseType(T: T[]) { alias BaseType!(T) BaseType; }
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
29 private template BaseType(T) { alias T BaseType; }
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
30
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
31 private template indexAssign(T: T[])
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
32 {
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
33 void indexAssign(ref T array, BaseType!(T) value, int[] indices)
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
34 {
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
35 static if( is( typeof(array[0]) == typeof(value)))
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
36 {
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
37 array[indices[0]] = value;
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
38 }
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
39 else
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
40 {
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
41 indexAssign!(T)( array[indices[0]], value, indices[1..$]);
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
42 }
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
43 }
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
44 }
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
45
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
46 private string ctToString(int i)
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
47 {
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
48 if (!i) return "0";
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
49 string res;
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
50 while (i) {
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
51 res = "0123456789"[i%10] ~ res;
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
52 i /= 10;
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
53 }
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
54 return res;
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
55 }
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
56
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
57 private string indexString(int len)
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
58 {
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
59 string res;
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
60 for (int i = 0; i < len; ++i)
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
61 res ~= "[index["~ctToString(i)~"]] ";
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
62 return res;
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
63 }
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
64
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
65 private string casesString(int depth, TOKEN type)
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
66 {
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
67 string res;
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
68 res ~= `switch( depth ){`;
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
69
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
70 for (int i = 0; i < depth; ++i)
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
71 {
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
72 switch(type)
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
73 {
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
74 case TOKEN.COMMA:
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
75 res ~=`case `~ctToString(i)~`:`~
2
ee1232043257 < <= :/
Saaa
parents: 1
diff changeset
76 `if(temp`~ indexString(i) ~`.length<=index[`~ctToString(i)~`] )temp`~ indexString(i) ~`.length=temp`~ indexString(i) ~`.length*2;`~
0
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
77 `break;`;
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
78 break;
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
79
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
80 case TOKEN.SQUARE_L:
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
81 res ~=`case `~ctToString(i)~`:`~
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
82 `temp`~ indexString(i) ~`.length=4;`~
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
83 `break;`;
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
84 break;
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
85
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
86 case TOKEN.SQUARE_R:
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
87 res ~=`case `~ctToString(i)~`:`~
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
88 `temp`~ indexString(i) ~`.length=index[`~ctToString(i)~`];`~
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
89 `break;`;
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
90 break;
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
91
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
92 default:
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
93 assert(false);
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
94 break;
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
95 }
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
96 }
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
97
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
98 res ~= `default:assert(false);break;}`;
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
99 return res;
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
100 }
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
101
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
102
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
103 bool toBool(char[] s)
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
104 {
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
105 if(s == `true`)
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
106 {
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
107 return true;
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
108 }
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
109 else if(s == `false`)
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
110 {
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
111 return false;
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
112 }
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
113 else
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
114 {
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
115 throw new Exception(`Cannot convert "`~s~`" to bool`);
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
116 }
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
117 return false;
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
118 }
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
119
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
120 public T toArray(T:D[],D)(char[] string)
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
121 {
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
122 int[ Depth!(T) ] index = 0;
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
123
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
124 T temp;
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
125 char c;
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
126
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
127 int depth = -1;
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
128
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
129 int sLoc1 = -1, sLoc2 = -1;
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
130 int loc = -1;
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
131
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
132 TOKEN last = TOKEN.BOF;
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
133
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
134 while(true)
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
135 {
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
136 loc++;
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
137 //debug
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
138 //writefln(loc);
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
139 if( loc >= string.length )
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
140 {
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
141 if( last != TOKEN.SQUARE_R) throw new DDataException( `unexpected end`);
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
142 if( depth != -1 ) throw new DDataException( `array depth not zero after parsing `);
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
143 //throw new DDataException(`EOF before end of parsing`);
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
144 return temp;
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
145 }
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
146
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
147 c = string[loc];
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
148 //debug
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
149 //writefln(c);
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
150 switch(c)
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
151 {
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
152 case ' ', '\t', '\v', '\r', '\n', '\f':
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
153 if( last == TOKEN.ECOMMA || last == TOKEN.SQUARE_L)
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
154 {
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
155 if(sLoc2 < 0)
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
156 {
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
157 sLoc1 = loc + 1;
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
158 }else{
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
159 sLoc2 = loc;
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
160 last = TOKEN.VALUE;
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
161 }
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
162 }
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
163 break;
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
164
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
165 case ',':
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
166 index[depth] ++;
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
167
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
168 // resize array if necessary
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
169 mixin ( casesString(Depth!(T), TOKEN.COMMA ) );
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
170
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
171 if( last == TOKEN.VALUE && depth == Depth!(T)-1 )
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
172 {
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
173 index[depth] --;
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
174 static if( is(BaseType!(T) == bool) )
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
175 {
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
176 indexAssign!(T[])( temp, toBool( string[ sLoc1..sLoc2] ), index);
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
177 }
1
8e817772ed3d imports specified
Saaa
parents: 0
diff changeset
178 else static if( isNumeric!( BaseType!(T) ) )
0
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
179 {
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
180 indexAssign!(T[])( temp, to!( BaseType!(T) )( string[ sLoc1..sLoc2] ), index);
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
181 }
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
182 else
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
183 {
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
184 assert(false);
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
185 }
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
186 index[depth] ++;
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
187 sLoc1 = -1;
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
188 sLoc2 = -1;
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
189 last = TOKEN.ECOMMA;
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
190 }else if( last == TOKEN.SQUARE_R ){
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
191 last = TOKEN.COMMA;
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
192 }else{
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
193 throw new DDataException( loc, c, `: Value, ']' or ',' expected.`);
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
194 }
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
195 break;
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
196
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
197 case '[':
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
198 if( last != TOKEN.COMMA && last != TOKEN.BOF && last != TOKEN.SQUARE_L ) throw new DDataException( loc, c, `: Beginning, '[' or ',' expected.`);
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
199
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
200 depth++;
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
201 if(depth > index.length) throw new DDataException( loc, c, `: Array too deep = `~toString(depth));
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
202 mixin ( casesString(Depth!(T), TOKEN.SQUARE_L ) );
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
203 index[depth] = 0;
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
204 last = TOKEN.SQUARE_L;
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
205 sLoc1 = -1;
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
206 sLoc2 = -1;
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
207 break;
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
208
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
209 case ']':
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
210 if( last == TOKEN.VALUE && depth == Depth!(T)-1 && sLoc2 != -1)
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
211 {
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
212 static if( is(BaseType!(T) == bool) )
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
213 {
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
214 indexAssign!(T[])( temp, toBool( string[ sLoc1..sLoc2]), index);
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
215 }
1
8e817772ed3d imports specified
Saaa
parents: 0
diff changeset
216 else static if( isNumeric!( BaseType!(T) ) )
0
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
217 {
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
218 indexAssign!(T[])( temp, to!( BaseType!(T) )(string[ sLoc1..sLoc2]), index);
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
219 }
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
220 else
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
221 {
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
222 assert(false);
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
223 }
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
224 sLoc1 = -1;
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
225 sLoc2 = -1;
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
226 index[depth] ++;
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
227 }
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
228 else if( last == TOKEN.SQUARE_L )
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
229 {
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
230 sLoc1 = -1;
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
231 sLoc2 = -1;
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
232 }
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
233 else if( last == TOKEN.SQUARE_R)
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
234 {
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
235 index[depth] ++;
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
236 }
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
237 else
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
238 {
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
239 throw new DDataException( loc, c, `: Value, '[' or ']' expected.`);
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
240 }
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
241
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
242 // set array length to index[depth]
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
243 mixin ( casesString(Depth!(T), TOKEN.SQUARE_R) );
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
244
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
245 index[depth] = 0;
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
246 depth--;
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
247 last = TOKEN.SQUARE_R;
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
248 break;
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
249
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
250 default:
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
251 if( last == TOKEN.ECOMMA || last == TOKEN.SQUARE_L || last == TOKEN.VALUE)
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
252 {
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
253 if( sLoc1 < 0 )
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
254 {
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
255 sLoc1 = loc;
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
256 sLoc2 = loc +1;
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
257 } else {
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
258 sLoc2 = loc +1;
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
259 }
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
260 last = TOKEN.VALUE;
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
261 break;
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
262 }
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
263 throw new DDataException( loc, c, `: Out of place char found `);
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
264 break;
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
265 }
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
266 }
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
267 }
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
268
1
8e817772ed3d imports specified
Saaa
parents: 0
diff changeset
269 unittest
8e817772ed3d imports specified
Saaa
parents: 0
diff changeset
270 {
0
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
271 writefln("DData UnitTest...");
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
272
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
273 int[][][] ia = [ [[1,2],[3,4],[5]] , [[6],[],[7,8,9]] , [[]] ];
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
274
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
275 char[] s = to!(char[])(ia);
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
276 int[][][] ia2;
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
277
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
278 ia2 = toArray!(typeof(ia2))(s);
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
279 assert( ia == ia2);
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
280
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
281 writefln("Done!");
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
282 }
277bc71a8eaa First Post!!
Saaa
parents:
diff changeset
283