5 Node::Node(const Action& action){
7 _preconditions = _action.preconditions();
14 Node::Node(const Node& node){
15 _action = node._action;
16 _preconditions = node._preconditions;
17 _executed = node._executed;
20 const Action& Node::action() const{
25 void Node::addChild(Node* node){
26 _children.push_back(node);
29 bool Node::executed() const{
33 const Literals& Node::effects() const{
37 void Node::execute(const Literals& effects){
38 for (Literals::const_iterator effect = effects.begin(); effect != effects.end(); ++effect){
39 _preconditions.erase(_preconditions.find(*effect));
41 if ((_preconditions.size() != 0) || _executed)
44 if (_preconditions.size() != 0){
45 for (Preconditions::iterator precond = _preconditions.begin(); precond != _preconditions.end(); ++precond){
52 int value = _action.execute();
53 _effects = _action.effects(value);
55 for(vector<Node*>::iterator child = _children.begin(); child != _children.end(); ++child){
56 (*child)->execute(effects);
60 StartNode::StartNode(const Literals& init){
63 _action = Action("start",Preconditions(),"", initial);
66 EndNode::EndNode(const Literals& goal){
67 Preconditions goalState;
68 for(Literals::const_iterator g = goal.begin(); g != goal.end(); ++g)
70 _action = Action("finish",goalState,"",EffectsMap());
71 _preconditions = _action.preconditions();