Changeset 146
- Timestamp:
- 11/26/07 02:59:29 (10 months ago)
- Files:
-
- trunk/blade/BladeDemo.d (modified) (2 diffs)
- trunk/blade/BladeRank.d (modified) (1 diff)
- trunk/blade/BladeSimplify.d (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/blade/BladeDemo.d
r145 r146 14 14 // Use heap-allocated arrays, or static arrays (DMD 1.023 or later) 15 15 // cdouble[] always remains aligned, even when sliced. 16 16 17 17 18 void main() 18 19 { … … 31 32 double [4][] another = [[33.1, 4543, 43, 878.7], [5.14, 455, 554, 2.43]]; 32 33 real k=3.4; 33 34 // mixin(vectorize("dot(q,q*dot(q,q))"));34 //mixin(vectorize("dot(q,q*dot(q,q))")); 35 // should simplify to: dot(q.q) * dot(q,q) 35 36 36 37 mixin(vectorize(` a += (d[2..$-1]*2.01*a[2]-another[][1])["abc".length-3..$]`)); trunk/blade/BladeRank.d
r145 r146 72 72 } 73 73 } 74 assert(0, "BLADE BUG: " ~ s);74 assert(0, "BLADE ICE: " ~ s); 75 75 } 76 76 trunk/blade/BladeSimplify.d
r145 r146 158 158 */ 159 159 char [] exprSimplify(char [] expr, char [] rank, char [] mulexpr, char [] indexexpr) 160 { 160 { 161 if (expr.length>3 && expr[0..2]=="d(") { // dot product 162 int x = exprLength(expr[2..$-1]); 163 char [] left = expr[2..x+3]; 164 char [] right = expr[x+4..$-1]; 165 // if (hasScalarMultiply(left, rank)) { 166 // // pull the scalar mul out 167 // } 168 // if (hasScalarMultiply(right, rank)) { 169 // } // ditto for right. 170 char [] m = ""; 171 if (mulexpr.length>0) m ~= "*" ~ mulexpr; 172 assert(indexexpr.length==0, "BLADE ICE: rank mismatch in dot product"); 173 return "d(" ~ subexprSimplify(left, rank, mulexpr,"") ~ "," ~ 174 subexprSimplify(right, rank, mulexpr,"") ~ ")" ~ m; 175 } 161 176 // Deal with ++ and --. Only for scalars 162 177 if (expr.length>2 && (expr[0..2]=="++" || expr[0..2]=="--")) { … … 233 248 bool isStrided(char [] s) 234 249 { 235 assert(s[$-1]==']', "BLADE BUG");250 assert(s[$-1]==']', "BLADE ICE"); 236 251 if (s[$-2..$]=="[]") return false; 237 252 int numbrack=0;
