• Main Page
  • Modules
  • Classes
  • Files
  • File List

D:/Projekt/ECF_trunk/ECF/tree/Div.h

00001 #ifndef Div_h
00002 #define Div_h
00003 #include <cmath>
00004 #include "Primitive.h"
00005 
00006 namespace Tree {
00007 namespace Primitives {
00008 
00009 const double MIN = 0.000000001; // protected division parameter
00010 
00015 template <class T>
00016 class DivT : public Primitive
00017 {
00018 public:
00019     DivT(void);
00020     void execute(void* result, Tree& tree);
00021     ~DivT(void);
00022 };
00023 typedef DivT<double> Div;
00024 
00025 
00026 template <class T>
00027 DivT<T>::DivT(void)
00028 {
00029     nArguments_ = 2;
00030     name_ = "/";
00031     complementName_ = "*";
00032 }
00033 
00034 
00035 template <class T>
00036 DivT<T>::~DivT(void)
00037 {   }
00038 
00039 
00040 template <class T>
00041 void DivT<T>::execute(void* result, Tree &tree)
00042 {
00043     T first, second;
00044     T& division = *(T*)result;
00045     getNextArgument(&first, tree);
00046     getNextArgument(&second, tree);
00047 
00048     // T must be auto castable to double!
00049     division = fabs(second) > MIN ? first / second : 1.;
00050 }
00051 
00052 }
00053 }
00054 
00055 #endif

Generated on Tue Nov 4 2014 13:04:30 for ECF by  doxygen 1.7.1