#include <logic_condition.h>
Nevrax France
Definition at line 187 of file logic_condition.h.
Public Types | |
enum | TConditionNodeType { TERMINATOR = 0, LOGIC_NODE } |
all condition node types More... | |
Public Member Functions | |
void | addNode (CLogicConditionNode *node) |
CLogicConditionNode () | |
void | fillVarSet (std::set< std::string > &condVars) |
void | read (xmlNodePtr node) |
void | setLogicStateMachine (CLogicStateMachine *logicStateMachine) |
bool | testLogic () |
void | write (xmlNodePtr node) const |
~CLogicConditionNode () | |
Data Fields | |
std::vector< CLogicConditionNode * > | _Nodes |
condition nodes | |
CLogicConditionLogicBlock | LogicBlock |
condition logic node | |
TConditionNodeType | Type |
type of this condition node | |
Private Attributes | |
CLogicStateMachine * | _LogicStateMachine |
state machine managing this logic block |
|
all condition node types
Definition at line 195 of file logic_condition.h. Referenced by read().
00196 { 00197 TERMINATOR = 0, 00198 LOGIC_NODE 00199 }; |
|
Default constructor Definition at line 214 of file logic_condition.h. References TERMINATOR. Referenced by read().
00215 { 00216 _LogicStateMachine = 0; 00217 Type = TERMINATOR; 00218 } |
|
Destructor Definition at line 507 of file logic_condition.cpp.
|
|
add a node in the subtree
Definition at line 325 of file logic_condition.cpp. References setLogicStateMachine().
00326 { 00327 node->setLogicStateMachine( _LogicStateMachine ); 00328 _Nodes.push_back( node ); 00329 00330 } // addToSubNodes // |
|
Fill a set with all the variables name referenced by this condition
Definition at line 388 of file logic_condition.cpp. References NLLOGIC::CLogicConditionLogicBlock::fillVarSet(), LOGIC_NODE, and LogicBlock.
00389 { 00390 if( Type == LOGIC_NODE ) 00391 { 00392 LogicBlock.fillVarSet( condVars ); 00393 } 00394 00395 vector<CLogicConditionNode *>::iterator itNode; 00396 for( itNode = _Nodes.begin(); itNode != _Nodes.end(); ++itNode ) 00397 { 00398 (*itNode)->fillVarSet( condVars ); 00399 } 00400 00401 } // fillVarSet // |
|
Definition at line 470 of file logic_condition.cpp. References CLogicConditionNode(), NLLOGIC::getXMLProp(), LOGIC_NODE, LogicBlock, NLLOGIC::CLogicConditionLogicBlock::read(), TConditionNodeType, TERMINATOR, uint, v, and NLLOGIC::xmlCheckNodeName().
00471 { 00472 xmlCheckNodeName (node, "CONDITION_NODE"); 00473 00474 Type = (TConditionNodeType )atoi(getXMLProp (node, "Type").c_str()); 00475 switch( Type ) 00476 { 00477 case TERMINATOR : break; 00478 case LOGIC_NODE : 00479 { 00480 LogicBlock.read (node); 00481 00482 { 00483 // Count the parent 00484 uint nb = CIXml::countChildren (node, "CONDITION_NODE"); 00485 uint i = 0; 00486 xmlNodePtr parent = CIXml::getFirstChildNode (node, "CONDITION_NODE"); 00487 while (i<nb) 00488 { 00489 CLogicConditionNode *v = new CLogicConditionNode(); 00490 v->read(parent); 00491 _Nodes.push_back (v); 00492 00493 // Next parent 00494 parent = CIXml::getNextChildNode (parent, "CONDITION_NODE"); 00495 i++; 00496 } 00497 } 00498 } 00499 break; 00500 }; 00501 } |
|
Set the logic state machine
Definition at line 296 of file logic_condition.cpp. References LogicBlock, nlwarning, and NLLOGIC::CLogicConditionLogicBlock::setLogicStateMachine(). Referenced by addNode().
00297 { 00298 if( logicStateMachine == 0 ) 00299 { 00300 nlwarning("(LOGIC)<CLogicConditionNode::setLogicStateMachine> The state machine is null"); 00301 } 00302 else 00303 { 00304 // set the state machine of this node 00305 _LogicStateMachine = logicStateMachine; 00306 00307 // set the state machine of the logic block 00308 LogicBlock.setLogicStateMachine( logicStateMachine ); 00309 00310 // set the state machine for the sub nodes 00311 vector<CLogicConditionNode *>::iterator itNodes; 00312 for( itNodes = _Nodes.begin(); itNodes != _Nodes.end(); ++itNodes ) 00313 { 00314 (*itNodes)->setLogicStateMachine( logicStateMachine ); 00315 } 00316 } 00317 00318 } // setLogicStateMachine // |
|
Test the condition
Definition at line 337 of file logic_condition.cpp. References NLLOGIC::CLogicConditionLogicBlock::isNotBlock(), LogicBlock, and NLLOGIC::CLogicConditionLogicBlock::testLogic().
00338 { 00339 // test the logic block 00340 if( LogicBlock.testLogic() == false ) 00341 { 00342 return false; 00343 } 00344 00345 // if there's no subtree we assess the subtree is true 00346 if( _Nodes.size() == 0 ) 00347 { 00348 return true; 00349 } 00350 00351 // test the subtree 00352 if( LogicBlock.isNotBlock() ) 00353 { 00354 // the subtree is false if at least one node is true 00355 vector<CLogicConditionNode *>::iterator itNodes; 00356 for( itNodes = _Nodes.begin(); itNodes != _Nodes.end(); ++itNodes ) 00357 { 00358 if( (*itNodes)->testLogic() == true ) 00359 { 00360 return false; 00361 } 00362 } 00363 00364 return true; 00365 } 00366 else 00367 { 00368 // the subtree is true if at least one node is true 00369 vector<CLogicConditionNode *>::iterator itNodes; 00370 for( itNodes = _Nodes.begin(); itNodes != _Nodes.end(); ++itNodes ) 00371 { 00372 if( (*itNodes)->testLogic() == true ) 00373 { 00374 return true; 00375 } 00376 } 00377 00378 return false; 00379 } 00380 00381 } // testLogic // |
|
Definition at line 449 of file logic_condition.cpp. References LOGIC_NODE, LogicBlock, TERMINATOR, uint32, and NLLOGIC::CLogicConditionLogicBlock::write().
00450 { 00451 xmlNodePtr elmPtr = xmlNewChild ( node, NULL, (const xmlChar*)"CONDITION_NODE", NULL); 00452 xmlSetProp (elmPtr, (const xmlChar*)"Type", (const xmlChar*)toString((uint32)Type).c_str()); 00453 00454 switch( Type ) 00455 { 00456 case TERMINATOR : break; 00457 case LOGIC_NODE : 00458 { 00459 LogicBlock.write(elmPtr); 00460 vector<CLogicConditionNode *>::const_iterator itNode = _Nodes.begin(); 00461 for( ; itNode != _Nodes.end(); ++itNode ) 00462 { 00463 (*itNode)->write(elmPtr); 00464 } 00465 } 00466 break; 00467 }; 00468 } |
|
state machine managing this logic block
Definition at line 190 of file logic_condition.h. |
|
condition nodes
Definition at line 209 of file logic_condition.h. |
|
condition logic node
Definition at line 206 of file logic_condition.h. Referenced by fillVarSet(), read(), setLogicStateMachine(), testLogic(), and write(). |
|
type of this condition node
Definition at line 202 of file logic_condition.h. |