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