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(find(_preconditions.begin(),_preconditions.end(), *effect));
41 if (_preconditions.size() != 0 || _executed)
45 int value = _action.execute();
46 _effects = _action.effects(value);
48 for(vector<Node*>::iterator child = _children.begin(); child != _children.end(); ++child){
49 (*child)->execute(effects);
53 StartNode::StartNode(const literals& init){
56 Node(Action("start",preconditionsVector(), initial));
59 EndNode::EndNode(const literals& goal){
60 preconditionsVector goalState;
61 pair<string,literals> goalPair;
63 goalPair.second = goal;
64 goalState.push_back(goalPair);
65 Node(Action("finish",goalState,effectsMap()));