/[escript]/branches/clazy/escriptcore/src/DataLazy.cpp
ViewVC logotype

Diff of /branches/clazy/escriptcore/src/DataLazy.cpp

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1947 by jfenwick, Wed Oct 29 23:19:45 2008 UTC revision 1993 by phornby, Fri Nov 7 04:52:15 2008 UTC
# Line 26  Line 26 
26  #include "DataTypes.h"  #include "DataTypes.h"
27  #include "Data.h"  #include "Data.h"
28  #include "UnaryFuncs.h"     // for escript::fsign  #include "UnaryFuncs.h"     // for escript::fsign
29    #include "Utils.h"
30    
31  /*  /*
32  How does DataLazy work?  How does DataLazy work?
# Line 78  using namespace boost; Line 79  using namespace boost;
79  namespace escript  namespace escript
80  {  {
81    
 const std::string&  
 opToString(ES_optype op);  
   
82  namespace  namespace
83  {  {
84    
# Line 508  DataLazy::resolveUnary(ValueType& v, siz Line 506  DataLazy::resolveUnary(ValueType& v, siz
506    switch (m_op)    switch (m_op)
507    {    {
508      case SIN:        case SIN:  
509      tensor_unary_operation(m_samplesize, left, result, ::sin);      tensor_unary_operation<double (*)(double)>(m_samplesize, left, result, ::sin);
510      break;      break;
511      case COS:      case COS:
512      tensor_unary_operation(m_samplesize, left, result, ::cos);      tensor_unary_operation<double (*)(double)>(m_samplesize, left, result, ::cos);
513      break;      break;
514      case TAN:      case TAN:
515      tensor_unary_operation(m_samplesize, left, result, ::tan);      tensor_unary_operation<double (*)(double)>(m_samplesize, left, result, ::tan);
516      break;      break;
517      case ASIN:      case ASIN:
518      tensor_unary_operation(m_samplesize, left, result, ::asin);      tensor_unary_operation<double (*)(double)>(m_samplesize, left, result, ::asin);
519      break;      break;
520      case ACOS:      case ACOS:
521      tensor_unary_operation(m_samplesize, left, result, ::acos);      tensor_unary_operation<double (*)(double)>(m_samplesize, left, result, ::acos);
522      break;      break;
523      case ATAN:      case ATAN:
524      tensor_unary_operation(m_samplesize, left, result, ::atan);      tensor_unary_operation<double (*)(double)>(m_samplesize, left, result, ::atan);
525      break;      break;
526      case SINH:      case SINH:
527      tensor_unary_operation(m_samplesize, left, result, ::sinh);      tensor_unary_operation<double (*)(double)>(m_samplesize, left, result, ::sinh);
528      break;      break;
529      case COSH:      case COSH:
530      tensor_unary_operation(m_samplesize, left, result, ::cosh);      tensor_unary_operation<double (*)(double)>(m_samplesize, left, result, ::cosh);
531      break;      break;
532      case TANH:      case TANH:
533      tensor_unary_operation(m_samplesize, left, result, ::tanh);      tensor_unary_operation<double (*)(double)>(m_samplesize, left, result, ::tanh);
534      break;      break;
535      case ERF:      case ERF:
536  #ifdef _WIN32  #ifdef _WIN32
# Line 563  DataLazy::resolveUnary(ValueType& v, siz Line 561  DataLazy::resolveUnary(ValueType& v, siz
561  #endif    #endif  
562      break;      break;
563      case LOG10:      case LOG10:
564      tensor_unary_operation(m_samplesize, left, result, ::log10);      tensor_unary_operation<double (*)(double)>(m_samplesize, left, result, ::log10);
565      break;      break;
566      case LOG:      case LOG:
567      tensor_unary_operation(m_samplesize, left, result, ::log);      tensor_unary_operation<double (*)(double)>(m_samplesize, left, result, ::log);
568      break;      break;
569      case SIGN:      case SIGN:
570      tensor_unary_operation(m_samplesize, left, result, escript::fsign);      tensor_unary_operation(m_samplesize, left, result, escript::fsign);
571      break;      break;
572      case ABS:      case ABS:
573      tensor_unary_operation(m_samplesize, left, result, ::fabs);      tensor_unary_operation<double (*)(double)>(m_samplesize, left, result, ::fabs);
574      break;      break;
575      case NEG:      case NEG:
576      tensor_unary_operation(m_samplesize, left, result, negate<double>());      tensor_unary_operation(m_samplesize, left, result, negate<double>());
# Line 583  DataLazy::resolveUnary(ValueType& v, siz Line 581  DataLazy::resolveUnary(ValueType& v, siz
581      throw DataException("Programmer error - POS not supported for lazy data.");      throw DataException("Programmer error - POS not supported for lazy data.");
582      break;      break;
583      case EXP:      case EXP:
584      tensor_unary_operation(m_samplesize, left, result, ::exp);      tensor_unary_operation<double (*)(double)>(m_samplesize, left, result, ::exp);
585      break;      break;
586      case SQRT:      case SQRT:
587      tensor_unary_operation(m_samplesize, left, result, ::sqrt);      tensor_unary_operation<double (*)(double)>(m_samplesize, left, result, ::sqrt);
588      break;      break;
589      case RECIP:      case RECIP:
590      tensor_unary_operation(m_samplesize, left, result, bind1st(divides<double>(),1.));      tensor_unary_operation(m_samplesize, left, result, bind1st(divides<double>(),1.));
# Line 614  DataLazy::resolveUnary(ValueType& v, siz Line 612  DataLazy::resolveUnary(ValueType& v, siz
612    
613    
614    
615  #define PROC_OP(X) \  #define PROC_OP(TYPE,X)                               \
616      for (int i=0;i<steps;++i,resultp+=resultStep) \      for (int i=0;i<steps;++i,resultp+=resultStep) \
617      { \      { \
618         tensor_binary_operation(chunksize, &((*left)[lroffset]), &((*right)[rroffset]), resultp, X); \         tensor_binary_operation##TYPE(chunksize, &((*left)[lroffset]), &((*right)[rroffset]), resultp, X); \
619         lroffset+=leftStep; \         lroffset+=leftStep; \
620         rroffset+=rightStep; \         rroffset+=rightStep; \
621      }      }
# Line 672  cout << "Resolve binary: " << toString() Line 670  cout << "Resolve binary: " << toString()
670    switch(m_op)    switch(m_op)
671    {    {
672      case ADD:      case ADD:
673      PROC_OP(plus<double>());          PROC_OP(/**/,plus<double>());
674      break;      break;
675      case SUB:      case SUB:
676      PROC_OP(minus<double>());      PROC_OP(/**/,minus<double>());
677      break;      break;
678      case MUL:      case MUL:
679      PROC_OP(multiplies<double>());      PROC_OP(/**/,multiplies<double>());
680      break;      break;
681      case DIV:      case DIV:
682      PROC_OP(divides<double>());      PROC_OP(/**/,divides<double>());
683      break;      break;
684      case POW:      case POW:
685      PROC_OP(::pow);         PROC_OP(<double (double,double)>,::pow);
686      break;      break;
687      default:      default:
688      throw DataException("Programmer error - resolveBinary can not resolve operator "+opToString(m_op)+".");      throw DataException("Programmer error - resolveBinary can not resolve operator "+opToString(m_op)+".");

Legend:
Removed from v.1947  
changed lines
  Added in v.1993

  ViewVC Help
Powered by ViewVC 1.1.26