aboutsummaryrefslogtreecommitdiffstats
path: root/src/engine/Node.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/engine/Node.cpp')
-rw-r--r--src/engine/Node.cpp90
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
-