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