Use new RT-priority API
[ardour.git] / libs / ardour / graphnode.cc
index cfcea4d72640f703fec5874dcafb103d15c26913..47cabfbae09ae7c4152bc39bc3d4709b5233efb3 100644 (file)
 
 using namespace ARDOUR;
 
-GraphNode::GraphNode (graph_ptr_t graph)
-        : _graph(graph)
-{ 
+GraphNode::GraphNode (boost::shared_ptr<Graph> graph)
+       : _graph(graph)
+{
+}
+
+GraphNode::~GraphNode()
+{
 }
 
 void
 GraphNode::prep (int chain)
 {
-        _refcount = _init_refcount[chain];
+       /* This is the number of nodes that directly feed us */
+       _refcount = _init_refcount[chain];
 }
 
+/** Called by another node to tell us that one of the nodes that feed us
+ *  has been processed.
+ */
 void
 GraphNode::dec_ref()
 {
-        if (g_atomic_int_dec_and_test (&_refcount))
-                _graph->trigger (this);
+       if (g_atomic_int_dec_and_test (&_refcount)) {
+               /* All the nodes that feed us are done, so we can queue this node
+                * for processing.
+                */
+               _graph->trigger (this);
+       }
 }
 
 void
 GraphNode::finish (int chain)
 {
-        node_set_t::iterator i;
-        bool feeds_somebody = false;
+       node_set_t::iterator i;
+       bool feeds_somebody = false;
 
-        for (i=_activation_set[chain].begin(); i!=_activation_set[chain].end(); i++) {
-                (*i)->dec_ref();
-                feeds_somebody = true;
-        }
+       /* Tell the nodes that we feed that we've finished */
+       for (i=_activation_set[chain].begin(); i!=_activation_set[chain].end(); i++) {
+               (*i)->dec_ref();
+               feeds_somebody = true;
+       }
 
-        if (!feeds_somebody) {
-                _graph->dec_ref();
-        }
+       if (!feeds_somebody) {
+               /* This node does not feed anybody, so decrement the graph's finished count */
+               _graph->dec_ref();
+       }
 }
 
 
 void
 GraphNode::process()
 {
-        _graph->process_one_route (dynamic_cast<Route *>(this));
+       _graph->process_one_route (dynamic_cast<Route *>(this));
 }