| 
									
										
										
										
											2011-02-25 13:31:23 +00:00
										 |  |  | /** \file gameengine/Expressions/BoolValue.cpp
 | 
					
						
							|  |  |  |  *  \ingroup expressions | 
					
						
							|  |  |  |  */ | 
					
						
							| 
									
										
										
										
											2002-10-12 11:37:38 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | // BoolValue.cpp: implementation of the CBoolValue 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 "BoolValue.h"
 | 
					
						
							|  |  |  | #include "StringValue.h"
 | 
					
						
							|  |  |  | #include "ErrorValue.h"
 | 
					
						
							|  |  |  | #include "VoidValue.h"
 | 
					
						
							| 
									
										
										
										
											2002-11-25 15:29:57 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-10-12 11:37:38 +00:00
										 |  |  | //////////////////////////////////////////////////////////////////////
 | 
					
						
							|  |  |  | // Construction/Destruction
 | 
					
						
							|  |  |  | //////////////////////////////////////////////////////////////////////
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-06-08 20:08:19 +00:00
										 |  |  | const STR_String CBoolValue::sTrueString  = "TRUE"; | 
					
						
							|  |  |  | const STR_String CBoolValue::sFalseString = "FALSE"; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-10-12 11:37:38 +00:00
										 |  |  | CBoolValue::CBoolValue() | 
					
						
							|  |  |  | /*
 | 
					
						
							| 
									
										
										
										
											2012-03-09 18:28:30 +00:00
										 |  |  |  * pre: false | 
					
						
							|  |  |  |  * effect: constructs a new CBoolValue | 
					
						
							|  |  |  |  */ | 
					
						
							| 
									
										
										
										
											2002-10-12 11:37:38 +00:00
										 |  |  | { | 
					
						
							|  |  |  | 	trace("Bool constructor error"); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | CBoolValue::CBoolValue(bool inBool) | 
					
						
							|  |  |  | : m_bool(inBool) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | } // Constructs a new CBoolValue containing <inBool>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-06-08 20:08:19 +00:00
										 |  |  | CBoolValue::CBoolValue(bool innie,const char *name,AllocationTYPE alloctype) | 
					
						
							| 
									
										
										
										
											2002-10-12 11:37:38 +00:00
										 |  |  | { | 
					
						
							|  |  |  | 	m_bool = innie; | 
					
						
							|  |  |  | 	SetName(name); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if (alloctype == CValue::STACKVALUE) | 
					
						
							|  |  |  | 		CValue::DisableRefCount(); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void CBoolValue::SetValue(CValue* newval) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	m_bool = (newval->GetNumber() != 0); | 
					
						
							|  |  |  | 	SetModified(true); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | CValue* CBoolValue::Calc(VALUE_OPERATOR op, CValue *val) | 
					
						
							|  |  |  | /*
 | 
					
						
							|  |  |  | pre: | 
					
						
							|  |  |  | ret: a new object containing the result of applying operator op to this | 
					
						
							|  |  |  | object and val | 
					
						
							|  |  |  | */ | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	switch (op) | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 	case VALUE_POS_OPERATOR: | 
					
						
							|  |  |  | 	case VALUE_NEG_OPERATOR: | 
					
						
							|  |  |  | 		{ | 
					
						
							|  |  |  | 			return new CErrorValue (op2str(op) + GetText()); | 
					
						
							|  |  |  | 			break; | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	case VALUE_NOT_OPERATOR: | 
					
						
							|  |  |  | 		{ | 
					
						
							|  |  |  | 			return new CBoolValue (!m_bool); | 
					
						
							|  |  |  | 			break; | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	default: | 
					
						
							|  |  |  | 		{ | 
					
						
							|  |  |  | 			return val->CalcFinal(VALUE_BOOL_TYPE, op, this); | 
					
						
							|  |  |  | 			break; | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | CValue* CBoolValue::CalcFinal(VALUE_DATA_TYPE dtype, VALUE_OPERATOR op, CValue *val) | 
					
						
							|  |  |  | /*
 | 
					
						
							|  |  |  | pre: the type of val is dtype | 
					
						
							|  |  |  | ret: a new object containing the result of applying operator op to val and | 
					
						
							|  |  |  | this object | 
					
						
							|  |  |  | */ | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	CValue *ret; | 
					
						
							|  |  |  | 	 | 
					
						
							| 
									
										
										
										
											2012-10-21 07:58:38 +00:00
										 |  |  | 	switch (dtype) { | 
					
						
							|  |  |  | 		case VALUE_EMPTY_TYPE: | 
					
						
							|  |  |  | 		case VALUE_BOOL_TYPE: | 
					
						
							| 
									
										
										
										
											2002-10-12 11:37:38 +00:00
										 |  |  | 		{ | 
					
						
							| 
									
										
										
										
											2012-10-21 07:58:38 +00:00
										 |  |  | 			switch (op) { | 
					
						
							|  |  |  | 				case VALUE_AND_OPERATOR: | 
					
						
							| 
									
										
										
										
											2002-10-12 11:37:38 +00:00
										 |  |  | 				{ | 
					
						
							|  |  |  | 					ret = new CBoolValue (((CBoolValue *) val)->GetBool() && m_bool); | 
					
						
							|  |  |  | 					break; | 
					
						
							|  |  |  | 				} | 
					
						
							| 
									
										
										
										
											2012-10-21 07:58:38 +00:00
										 |  |  | 				case VALUE_OR_OPERATOR: | 
					
						
							| 
									
										
										
										
											2002-10-12 11:37:38 +00:00
										 |  |  | 				{ | 
					
						
							|  |  |  | 					ret = new CBoolValue (((CBoolValue *) val)->GetBool() || m_bool); | 
					
						
							|  |  |  | 					break; | 
					
						
							|  |  |  | 				} | 
					
						
							| 
									
										
										
										
											2012-10-21 07:58:38 +00:00
										 |  |  | 				case VALUE_EQL_OPERATOR: | 
					
						
							| 
									
										
										
										
											2002-10-12 11:37:38 +00:00
										 |  |  | 				{ | 
					
						
							|  |  |  | 					ret = new CBoolValue (((CBoolValue *) val)->GetBool() == m_bool); | 
					
						
							|  |  |  | 					break; | 
					
						
							|  |  |  | 				} | 
					
						
							| 
									
										
										
										
											2012-10-21 07:58:38 +00:00
										 |  |  | 				case VALUE_NEQ_OPERATOR: | 
					
						
							| 
									
										
										
										
											2002-10-12 11:37:38 +00:00
										 |  |  | 				{ | 
					
						
							|  |  |  | 					ret = new CBoolValue (((CBoolValue *) val)->GetBool() != m_bool); | 
					
						
							|  |  |  | 					break; | 
					
						
							|  |  |  | 				} | 
					
						
							| 
									
										
										
										
											2012-10-21 07:58:38 +00:00
										 |  |  | 				case VALUE_NOT_OPERATOR: | 
					
						
							| 
									
										
										
										
											2002-10-12 11:37:38 +00:00
										 |  |  | 				{ | 
					
						
							|  |  |  | 					return new CBoolValue (!m_bool); | 
					
						
							|  |  |  | 					break; | 
					
						
							|  |  |  | 				} | 
					
						
							| 
									
										
										
										
											2012-10-21 07:58:38 +00:00
										 |  |  | 				default: | 
					
						
							| 
									
										
										
										
											2002-10-12 11:37:38 +00:00
										 |  |  | 				{ | 
					
						
							|  |  |  | 					ret =  new CErrorValue(val->GetText() + op2str(op) + | 
					
						
							| 
									
										
										
										
											2012-08-26 11:35:43 +00:00
										 |  |  | 					                       "[operator not allowed on booleans]"); | 
					
						
							| 
									
										
										
										
											2002-10-12 11:37:38 +00:00
										 |  |  | 					break; | 
					
						
							|  |  |  | 				} | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 			break; | 
					
						
							|  |  |  | 		} | 
					
						
							| 
									
										
										
										
											2012-10-21 07:58:38 +00:00
										 |  |  | 		case VALUE_STRING_TYPE: | 
					
						
							| 
									
										
										
										
											2002-10-12 11:37:38 +00:00
										 |  |  | 		{ | 
					
						
							| 
									
										
										
										
											2012-10-21 07:58:38 +00:00
										 |  |  | 			switch (op) { | 
					
						
							|  |  |  | 				case VALUE_ADD_OPERATOR: | 
					
						
							| 
									
										
										
										
											2002-10-12 11:37:38 +00:00
										 |  |  | 				{ | 
					
						
							|  |  |  | 					ret = new CStringValue(val->GetText() + GetText(),""); | 
					
						
							|  |  |  | 					break; | 
					
						
							|  |  |  | 				} | 
					
						
							| 
									
										
										
										
											2012-10-21 07:58:38 +00:00
										 |  |  | 				default: | 
					
						
							| 
									
										
										
										
											2002-10-12 11:37:38 +00:00
										 |  |  | 				{ | 
					
						
							|  |  |  | 					ret =  new CErrorValue(val->GetText() + op2str(op) + "[Only + allowed on boolean and string]"); | 
					
						
							|  |  |  | 					break; | 
					
						
							|  |  |  | 				} | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 			break; | 
					
						
							|  |  |  | 		} | 
					
						
							| 
									
										
										
										
											2012-10-21 07:58:38 +00:00
										 |  |  | 		default: | 
					
						
							|  |  |  | 			ret =  new CErrorValue("[type mismatch]" + op2str(op) + GetText()); | 
					
						
							| 
									
										
										
										
											2002-10-12 11:37:38 +00:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return ret; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | bool CBoolValue::GetBool() | 
					
						
							|  |  |  | /*
 | 
					
						
							|  |  |  | pre: | 
					
						
							|  |  |  | ret: the bool stored in the object | 
					
						
							|  |  |  | */ | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	return m_bool; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-04-20 15:06:46 +00:00
										 |  |  | double CBoolValue::GetNumber() | 
					
						
							| 
									
										
										
										
											2002-10-12 11:37:38 +00:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2009-04-20 15:06:46 +00:00
										 |  |  | 	return (double)m_bool; | 
					
						
							| 
									
										
										
										
											2002-10-12 11:37:38 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | const STR_String& CBoolValue::GetText() | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	return m_bool ? sTrueString : sFalseString; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | CValue* CBoolValue::GetReplica() | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	CBoolValue* replica = new CBoolValue(*this); | 
					
						
							| 
									
										
										
										
											2009-06-08 20:08:19 +00:00
										 |  |  | 	replica->ProcessReplica(); | 
					
						
							| 
									
										
										
										
											2002-10-12 11:37:38 +00:00
										 |  |  | 	 | 
					
						
							|  |  |  | 	return replica; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-10-31 04:11:39 +00:00
										 |  |  | #ifdef WITH_PYTHON
 | 
					
						
							| 
									
										
										
										
											2012-09-16 04:58:18 +00:00
										 |  |  | PyObject *CBoolValue::ConvertValueToPython() | 
					
						
							| 
									
										
										
										
											2002-10-12 11:37:38 +00:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2009-06-29 02:25:54 +00:00
										 |  |  | 	return PyBool_FromLong(m_bool != 0); | 
					
						
							| 
									
										
										
										
											2002-10-12 11:37:38 +00:00
										 |  |  | } | 
					
						
							| 
									
										
										
										
											2010-10-31 04:11:39 +00:00
										 |  |  | #endif // WITH_PYTHON
 |