src/tools/values/veComparison.cpp

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 
00028 #include "vCore.h"
00029 #include "veComparison.h"
00030 
00031 namespace vValue {
00032 namespace Expr {
00033 namespace Comparison {
00034 
00035 #define CodeStdBinOp(classname, op)       \
00036 Variant                                   \
00037 classname::GetValue(void) const {         \
00038     return (int)(*m_lvalue op *m_rvalue); \
00039 }                                         \
00040 Base *classname::copy(void) const {       \
00041     return new classname(*this);          \
00042 }                                         \
00043 
00044 CodeStdBinOp(GreaterThan    , >  )
00045 CodeStdBinOp(GreaterOrEquals, >= )
00046 CodeStdBinOp(         Equals, == )
00047 CodeStdBinOp(   LessOrEquals, <= )
00048 CodeStdBinOp(   LessThan    , <  )
00049 
00050 Variant
00051 Compare::GetValue(void) const {
00052     // This could probably be optimized
00053     if (*m_lvalue == *m_rvalue)
00054         return 0;
00055     else
00056         if (*m_lvalue < *m_rvalue)
00057             return -1;
00058         else
00059             if (*m_lvalue > *m_rvalue)
00060                 return 1;
00061     // cast required for windows
00062     return (REAL)NAN;
00063 }
00064 
00065 Base *Compare::copy(void) const {
00066     return new Compare(*this);
00067 }
00068 
00069 }
00070 }
00071 }

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