Changeset 146

Show
Ignore:
Timestamp:
11/26/07 02:59:29 (10 months ago)
Author:
Don Clugston
Message:

A bit more support for dot product

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/blade/BladeDemo.d

    r145 r146  
    1414// Use heap-allocated arrays, or static arrays (DMD 1.023 or later) 
    1515// cdouble[] always remains aligned, even when sliced. 
    16      
     16 
     17    
    1718void main() 
    1819{    
     
    3132    double [4][] another = [[33.1, 4543, 43, 878.7], [5.14, 455, 554, 2.43]]; 
    3233    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) 
    3536     
    3637    mixin(vectorize(` a += (d[2..$-1]*2.01*a[2]-another[][1])["abc".length-3..$]`)); 
  • trunk/blade/BladeRank.d

    r145 r146  
    7272        } 
    7373    } 
    74     assert(0, "BLADE BUG: " ~ s);    
     74    assert(0, "BLADE ICE: " ~ s);    
    7575} 
    7676 
  • trunk/blade/BladeSimplify.d

    r145 r146  
    158158 */ 
    159159char [] 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    } 
    161176    // Deal with ++ and --. Only for scalars 
    162177    if (expr.length>2 && (expr[0..2]=="++" || expr[0..2]=="--")) { 
     
    233248bool isStrided(char [] s) 
    234249{ 
    235    assert(s[$-1]==']', "BLADE BUG"); 
     250   assert(s[$-1]==']', "BLADE ICE"); 
    236251   if (s[$-2..$]=="[]") return false; 
    237252   int numbrack=0;