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