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