src/tools/values/vebCFunction.h

Go to the documentation of this file.
00001 /*
00002 
00003 *************************************************************************
00004 
00005 ArmageTron -- Just another Tron Lightcycle Game in 3D.
00006 Copyright (C) 2000  Manuel Moos (manuel@moosnet.de)
00007 
00008 **************************************************************************
00009 
00010 This program is free software; you can redistribute it and/or
00011 modify it under the terms of the GNU General Public License
00012 as published by the Free Software Foundation; either version 2
00013 of the License, or (at your option) any later version.
00014 
00015 This program is distributed in the hope that it will be useful,
00016 but WITHOUT ANY WARRANTY; without even the implied warranty of
00017 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00018 GNU General Public License for more details.
00019 
00020 You should have received a copy of the GNU General Public License
00021 along with this program; if not, write to the Free Software
00022 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
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, /* Aa (Base::*GAa)(void) const, */ 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

Generated on Sat Mar 15 22:56:03 2008 for Armagetron Advanced by  doxygen 1.5.4