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
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
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
00062 return (REAL)NAN;
00063 }
00064
00065 Base *Compare::copy(void) const {
00066 return new Compare(*this);
00067 }
00068
00069 }
00070 }
00071 }