• Main Page
  • Classes
  • Files
  • File List

D:/Radagast_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 
00014 template <class T>
00015 class DivT : public Primitive
00016 {
00017 public:
00018     DivT(void);
00019     void execute(void* result, Tree& tree);
00020     ~DivT(void);
00021 };
00022 typedef DivT<double> Div;
00023 
00024 
00025 template <class T>
00026 DivT<T>::DivT(void)
00027 {
00028     nArguments_ = 2;
00029     name_ = "/";
00030     complementName_ = "*";
00031 }
00032 
00033 
00034 template <class T>
00035 DivT<T>::~DivT(void)
00036 {   }
00037 
00038 
00039 template <class T>
00040 void DivT<T>::execute(void* result, Tree &tree)
00041 {
00042     T first, second;
00043     T& division = *(T*)result;
00044     getNextArgument(&first, tree);
00045     getNextArgument(&second, tree);
00046 
00047     // T must be auto castable to double!
00048     division = fabs(second) > MIN ? first / second : 1.;
00049 }
00050 
00051 }
00052 }
00053 
00054 #endif

Generated on Wed Sep 1 2010 14:31:21 for ECF by  doxygen 1.7.1