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