1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144
|
// IfExpr.cpp: implementation of the CIfExpr class.
/*
* Copyright (c) 1996-2000 Erwin Coumans <coockie@acm.org>
*
* Permission to use, copy, modify, distribute and sell this software
* and its documentation for any purpose is hereby granted without fee,
* provided that the above copyright notice appear in all copies and
* that both that copyright notice and this permission notice appear
* in supporting documentation. Erwin Coumans makes no
* representations about the suitability of this software for any
* purpose. It is provided "as is" without express or implied warranty.
*
*/
#include "IfExpr.h"
#include "EmptyValue.h"
#include "ErrorValue.h"
#ifdef HAVE_CONFIG_H
#include <config.h>
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CIfExpr::CIfExpr()
{
}
CIfExpr::CIfExpr(CExpression *guard, CExpression *e1, CExpression *e2)
/*
pre:
effect: constructs an CifExpr-object corresponding to IF(guard, e1, e2)
*/
{
m_guard = guard;
m_e1 = e1;
m_e2 = e2;
}
CIfExpr::~CIfExpr()
/*
pre:
effect: dereferences the object
*/
{
if (m_guard)
m_guard->Release();
if (m_e1)
m_e1->Release();
if (m_e2)
m_e2->Release();
}
CValue* CIfExpr::Calculate()
/*
pre:
ret: a new object containing the value of m_e1 if m_guard is a boolean TRUE
a new object containing the value of m_e2 if m_guard is a boolean FALSE
an new errorvalue if m_guard is not a boolean
*/
{
CValue *guardval;
guardval = m_guard->Calculate();
STR_String text = guardval->GetText();
guardval->Release();
if (text == STR_String("TRUE"))
{
return m_e1->Calculate();
}
else if (text == STR_String("FALSE"))
{
return m_e2->Calculate();
}
else
{
return new CErrorValue("Guard should be of boolean type");
}
}
bool CIfExpr::MergeExpression(CExpression *otherexpr)
{
assertd(false);
return false;
}
bool CIfExpr::IsInside(float x,float y,float z,bool bBorderInclude)
{
assertd(false);
return false;
}
bool CIfExpr::NeedsRecalculated()
{
return (m_guard->NeedsRecalculated() ||
m_e1->NeedsRecalculated() ||
m_e2->NeedsRecalculated());
}
CExpression* CIfExpr::CheckLink(std::vector<CBrokenLinkInfo*>& brokenlinks)
{
assertd(false);
return NULL;
}
void CIfExpr::ClearModified()
{
assertd(false);
}
void CIfExpr::BroadcastOperators(VALUE_OPERATOR op)
{
assertd(false);
}
unsigned char CIfExpr::GetExpressionID()
{
return CIFEXPRESSIONID;
}
|