00001 #ifndef Add_h
00002 #define Add_h
00003 #include "Function.h"
00004
00005 namespace cart
00006 {
00007 template <class T>
00008 class Add : public Function
00009 {
00010 public:
00011 Add();
00012 Add(uint numArgs);
00013 ~Add();
00014
00015 void evaluate(voidP inputs, void* result);
00016 };
00017
00018 typedef Add<double> AddDouble;
00019 typedef Add<int> AddInt;
00020
00021 template <class T>
00022 Add<T>::Add()
00023 {
00024 name_ = "+";
00025 numOfArgs_ = 2;
00026 }
00027
00028 template <class T>
00029 Add<T>::Add(uint numArgs)
00030 {
00031 name_ = "+";
00032 numOfArgs_ = numArgs;
00033 }
00034
00035 template <class T>
00036 Add<T>::~Add()
00037 {
00038 }
00039
00040 template <class T>
00041 void Add<T>::evaluate(voidP inputs, void* result)
00042 {
00043 T& sum = *(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 sum = readInputs.at(0);
00060 for (int i = 1; i < (int)numOfArgs_; i++)
00061 {
00062 sum += readInputs.at(i);
00063 }
00064 }
00065
00066 }
00067
00068 #endif