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

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

00001 #ifndef Div_h
00002 #define Div_h
00003 #include "Function.h"
00004 
00005 namespace cart
00006 {
00007     template <class T>
00008     class Div : public Function
00009     {
00010     public:
00011         Div();
00012         Div(uint numArgs);
00013         ~Div();
00014 
00015         void evaluate(voidP inputs, void* result);
00016     };
00017 
00018     typedef Div<double> DivDouble;
00019     typedef Div<int> DivInt;
00020 
00021     template <class T>
00022     Div<T>::Div()
00023     {
00024         name_ = "/";
00025         numOfArgs_ = 2;
00026     }
00027 
00028     template <class T>
00029     Div<T>::Div(uint numArgs)
00030     {
00031         name_ = "/";
00032         numOfArgs_ = numArgs;
00033     }
00034 
00035     template <class T>
00036     Div<T>::~Div()
00037     {
00038     }
00039 
00040     template <class T>
00041     void Div<T>::evaluate(voidP inputs, void* result)
00042     {
00043         T& divs = *(T*) result;
00044         stringstream ss;
00045         ss << *((string*) inputs.get());
00046         vector<T> readInputs;
00047         T input;
00048         uint i = 0;
00049         while (ss >> input)
00050         {
00051             readInputs.push_back(input);
00052             ++i;
00053             if (i == numOfArgs_)
00054             {
00055                 break;
00056             }
00057         }
00058 
00059         divs = readInputs.at(0);
00060         for (int i = 1; i < (int)numOfArgs_; i++)
00061         {
00062             if (readInputs.at(i))
00063             {
00064                 divs /= readInputs.at(i);
00065             }
00066             else
00067             {
00068                 divs = 0;
00069                 break;
00070             }
00071         }
00072     }
00073 
00074 }
00075 
00076 #endif /* Div_h */

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