diff options
Diffstat (limited to 'src/engine/Node.cpp')
-rw-r--r-- | src/engine/Node.cpp | 90 |
1 files changed, 51 insertions, 39 deletions
diff --git a/src/engine/Node.cpp b/src/engine/Node.cpp index 744d7ac..c0e4654 100644 --- a/src/engine/Node.cpp +++ b/src/engine/Node.cpp @@ -39,12 +39,12 @@ Node::Node(TimeDuration duration, bool initial) , _is_initial(initial) , _is_selector(false) , _is_active(false) -{ -} +{} Node::Node(const Node& copy) - : Stateful() // don't copy RDF ID - , _enter_time(copy._enter_time) + : Stateful() + , // don't copy RDF ID + _enter_time(copy._enter_time) , _duration(copy._duration) , _enter_action(ActionFactory::copy(copy._enter_action)) , _exit_action(ActionFactory::copy(copy._exit_action)) @@ -52,7 +52,8 @@ Node::Node(const Node& copy) , _is_selector(copy._is_selector) , _is_active(false) { - for (Edges::const_iterator i = copy._edges.begin(); i != copy._edges.end(); ++i) { + for (Edges::const_iterator i = copy._edges.begin(); i != copy._edges.end(); + ++i) { SharedPtr<Edge> edge(new Edge(*i->get())); _edges.push_back(edge); } @@ -63,13 +64,15 @@ SharedPtr<Edge> Node::random_edge() { SharedPtr<Edge> ret; - if (_edges.empty()) + if (_edges.empty()) { return ret; + } size_t i = rand() % _edges.size(); // FIXME: O(n) worst case :( - for (Edges::const_iterator e = _edges.begin(); e != _edges.end(); ++e, --i) { + for (Edges::const_iterator e = _edges.begin(); e != _edges.end(); ++e, + --i) { if (i == 0) { ret = *e; break; @@ -82,17 +85,20 @@ Node::random_edge() void Node::edges_changed() { - if ( ! _is_selector) + if (!_is_selector) { return; + } // Normalize edge probabilities if we're a selector double prob_sum = 0; - for (Edges::iterator i = _edges.begin(); i != _edges.end(); ++i) + for (Edges::iterator i = _edges.begin(); i != _edges.end(); ++i) { prob_sum += (*i)->probability(); + } - for (Edges::iterator i = _edges.begin(); i != _edges.end(); ++i) + for (Edges::iterator i = _edges.begin(); i != _edges.end(); ++i) { (*i)->set_probability((*i)->probability() / prob_sum); + } _changed = true; } @@ -102,8 +108,9 @@ Node::set_selector(bool yn) { _is_selector = yn; - if (yn) + if (yn) { edges_changed(); + } _changed = true; } @@ -112,14 +119,14 @@ void Node::set_enter_action(SharedPtr<Action> action) { _enter_action = action; - _changed = true; + _changed = true; } void Node::set_exit_action(SharedPtr<Action> action) { _exit_action = action; - _changed = true; + _changed = true; } void @@ -127,12 +134,13 @@ Node::enter(MIDISink* sink, TimeStamp time) { assert(!_is_active); - _changed = true; - _is_active = true; + _changed = true; + _is_active = true; _enter_time = time; - if (sink && _enter_action) + if (sink && _enter_action) { _enter_action->execute(sink, time); + } } void @@ -140,11 +148,12 @@ Node::exit(MIDISink* sink, TimeStamp time) { assert(_is_active); - if (sink && _exit_action) + if (sink && _exit_action) { _exit_action->execute(sink, time); + } - _changed = true; - _is_active = false; + _changed = true; + _is_active = false; _enter_time = 0; } @@ -152,9 +161,11 @@ void Node::add_edge(SharedPtr<Edge> edge) { assert(edge->tail().lock().get() == this); - for (Edges::const_iterator i = _edges.begin(); i != _edges.end(); ++i) - if ((*i)->head() == edge->head()) + for (Edges::const_iterator i = _edges.begin(); i != _edges.end(); ++i) { + if ((*i)->head() == edge->head()) { return; + } + } _edges.push_back(edge); edges_changed(); @@ -170,9 +181,11 @@ Node::remove_edge(SharedPtr<Edge> edge) bool Node::connected_to(SharedPtr<Node> node) { - for (Edges::const_iterator i = _edges.begin(); i != _edges.end(); ++i) - if ((*i)->head() == node) + for (Edges::const_iterator i = _edges.begin(); i != _edges.end(); ++i) { + if ((*i)->head() == node) { return true; + } + } return false; } @@ -211,29 +224,29 @@ Node::write_state(Sord::Model& model) if (_is_selector) model.add_statement( - rdf_id, - Sord::Curie(model.world(), "rdf:type"), - Sord::Curie(model.world(), "machina:SelectorNode")); + rdf_id, + Sord::Curie(model.world(), "rdf:type"), + Sord::Curie(model.world(), "machina:SelectorNode")); else model.add_statement( - rdf_id, - Sord::Curie(model.world(), "rdf:type"), - Sord::Curie(model.world(), "machina:Node")); + rdf_id, + Sord::Curie(model.world(), "rdf:type"), + Sord::Curie(model.world(), "machina:Node")); std::cerr << "ATOMRDF" << std::endl; /* - model.add_statement( - rdf_id, - Sord::Curie(model.world(), "machina:duration"), - AtomRDF::atom_to_node(model, Atom((float)_duration.to_double()))); - */ + model.add_statement( + rdf_id, + Sord::Curie(model.world(), "machina:duration"), + AtomRDF::atom_to_node(model, Atom((float)_duration.to_double()))); + */ if (_enter_action) { - _enter_action->write_state(model); + _enter_action->write_state(model); - model.add_statement(rdf_id, - Sord::Curie(model.world(), "machina:enterAction"), - _enter_action->rdf_id(model.world())); + model.add_statement(rdf_id, + Sord::Curie(model.world(), "machina:enterAction"), + _enter_action->rdf_id(model.world())); } if (_exit_action) { @@ -246,4 +259,3 @@ Node::write_state(Sord::Model& model) } } // namespace Machina - |