00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00030
00031 #ifndef ARMAGETRON_vBindings_CFunction_h
00032 #define ARMAGETRON_vBindings_CFunction_h
00033
00034 #include "values/vCore.h"
00035
00036 namespace vValue {
00037 namespace Expr {
00038 namespace Bindings {
00039 namespace CFunction {
00040
00041 template<typename T, T F(void)> class fZeroary : public Base {
00042 public:
00043 fZeroary() { };
00044 virtual Variant GetValue() const { return F(); };
00045 };
00046 template<typename T, typename Aa, T F(Aa)> class fUnary : public Base {
00047 BasePtr m_ArgA;
00048 public:
00049 fUnary(BasePtr ArgA): m_ArgA(ArgA) { }
00050 virtual Variant GetValue() const { return F(m_ArgA->Get<Aa>()); };
00051 };
00052 template<typename T, typename Aa, typename Ab, T F(Aa, Ab)> class fBinary : public Base {
00053 BasePtr m_ArgA, m_ArgB;
00054 public:
00055 fBinary(BasePtr ArgA, BasePtr ArgB): m_ArgA(ArgA), m_ArgB(ArgB) { }
00056 virtual Variant GetValue() const { return F(m_ArgA->Get<Aa>(), m_ArgB->Get<Ab>()); };
00057 };
00058
00059 }
00060 }
00061 }
00062 }
00063
00064 #endif