00001 #ifndef Max_h
00002 #define Max_h
00003 #include "Primitive.h"
00004
00005 #include <algorithm>
00006
00007 namespace Tree {
00008 namespace Primitives {
00009
00013 template <class T>
00014 class MaxT : public Primitive
00015 {
00016 public:
00017 MaxT();
00018 void execute(void* result, Tree& tree);
00019 ~MaxT();
00020 };
00021 typedef MaxT<double> Max;
00022
00023
00024 template <class T>
00025 MaxT<T>::MaxT()
00026 {
00027 nArguments_ = 2;
00028 name_ = "max";
00029 complementName_ = "min";
00030 }
00031
00032
00033 template <class T>
00034 MaxT<T>::~MaxT()
00035 { }
00036
00037
00038 template <class T>
00039 void MaxT<T>::execute(void* result, Tree& tree)
00040 {
00041 T first, second;
00042 T& max = *(T*)result;
00043 getNextArgument(&first, tree);
00044 getNextArgument(&second, tree);
00045 max = std::max(first, second);
00046 }
00047
00048 }
00049 }
00050
00051 #endif