My mixin try (doesn't compile though :) <3...@downs string ctToString(int i) { if (!i) return "0"; string res; while (i) { res = "0123456789"[i%10] ~ res; i /= 10; } return res; }
string index(int len) { string res; for (int i = 0; i < len; ++i) res ~= "[indices["~ctToString(i)~"]] "; return res; } string casesString(T)(T array) { string res; for (int i = 0; i < Depth!(T); ++i) { res ~= `case `~ctToString(i)~`:`~ ` if( temp`~ index(i) ~`.length < index[`~ctToString(i)~`] ) temp`~ index(i) ~`.length = temp`~ index(i) ~`.length * 2 ;` ~`break;`; } return res; } pragma(msg, casesString!(T)(parsed)); ddata\ddata.d(330): Error: variable parsed is used before initialization ddata\ddata.d(330): Error: cannot evaluate casesString(parsed) at compile time ddata\ddata.d(330): Error: string expected for message, not 'casesString(parsed)' > -- > switch( depth ) > { > case 0: > if( temp.length < index[depth] ) temp.length = temp.length * 2; > break; > static if( is(T A:A[][])) > { > case 1: > if( temp[ index[0] ].length < index[depth] ) temp[index[0]].length = > temp[index[0]].length * 2; > break; > } > static if( is(T A:A[][][])) > { > case 2: > if( temp[ index[0] ][ index[1] ].length < index[depth] ) temp[ > index[0] ][ index[1] ].length = temp[ index[0] ][ index[1] ].length * 2; > break; > } > default: > assert(false); > break; > } > --