commit-gnuradio
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Commit-gnuradio] r6165 - gnuradio/branches/developers/jcorgan/fg/gnurad


From: jcorgan
Subject: [Commit-gnuradio] r6165 - gnuradio/branches/developers/jcorgan/fg/gnuradio-core/src/lib/runtime
Date: Wed, 22 Aug 2007 11:58:07 -0600 (MDT)

Author: jcorgan
Date: 2007-08-22 11:58:06 -0600 (Wed, 22 Aug 2007)
New Revision: 6165

Modified:
   
gnuradio/branches/developers/jcorgan/fg/gnuradio-core/src/lib/runtime/gr_basic_block.cc
   
gnuradio/branches/developers/jcorgan/fg/gnuradio-core/src/lib/runtime/gr_basic_block.h
   
gnuradio/branches/developers/jcorgan/fg/gnuradio-core/src/lib/runtime/gr_block_detail.cc
   
gnuradio/branches/developers/jcorgan/fg/gnuradio-core/src/lib/runtime/gr_block_detail.h
   
gnuradio/branches/developers/jcorgan/fg/gnuradio-core/src/lib/runtime/gr_flat_flowgraph.cc
Log:
Move topological sort 'color' variable out of gr_block_detail and
put in gr_basic_block where it belongs.  Eliminates many casts and 
indirections.


Modified: 
gnuradio/branches/developers/jcorgan/fg/gnuradio-core/src/lib/runtime/gr_basic_block.cc
===================================================================
--- 
gnuradio/branches/developers/jcorgan/fg/gnuradio-core/src/lib/runtime/gr_basic_block.cc
     2007-08-22 17:27:12 UTC (rev 6164)
+++ 
gnuradio/branches/developers/jcorgan/fg/gnuradio-core/src/lib/runtime/gr_basic_block.cc
     2007-08-22 17:58:06 UTC (rev 6165)
@@ -42,7 +42,8 @@
   : d_name(name),
     d_input_signature(input_signature),
     d_output_signature(output_signature),
-    d_unique_id(s_next_id++)
+    d_unique_id(s_next_id++),
+    d_color(WHITE)
 {
     s_ncurrently_allocated++;
 }

Modified: 
gnuradio/branches/developers/jcorgan/fg/gnuradio-core/src/lib/runtime/gr_basic_block.h
===================================================================
--- 
gnuradio/branches/developers/jcorgan/fg/gnuradio-core/src/lib/runtime/gr_basic_block.h
      2007-08-22 17:27:12 UTC (rev 6164)
+++ 
gnuradio/branches/developers/jcorgan/fg/gnuradio-core/src/lib/runtime/gr_basic_block.h
      2007-08-22 17:58:06 UTC (rev 6165)
@@ -41,10 +41,16 @@
 class gr_basic_block : public boost::enable_shared_from_this<gr_basic_block>
 {
 protected:
+    friend class gr_flowgraph;
+    friend class gr_flat_flowgraph; // TODO: will be redundant
+
+    enum vcolor { WHITE, GREY, BLACK };
+
     std::string          d_name;
     gr_io_signature_sptr d_input_signature;
     gr_io_signature_sptr d_output_signature;
     long                 d_unique_id;
+    vcolor               d_color;
 
     //! Protected constructor prevents instantiation by non-derived classes
     gr_basic_block(const std::string &name,
@@ -61,6 +67,12 @@
         d_output_signature = iosig;
     }
 
+    /*!
+     * \brief Allow the flowgraph to set for sorting and partitioning
+     */
+    void set_color(vcolor color) { d_color = color; }
+    vcolor color() const { return d_color; }
+
 public:
     virtual ~gr_basic_block();
     long unique_id() const { return d_unique_id; }

Modified: 
gnuradio/branches/developers/jcorgan/fg/gnuradio-core/src/lib/runtime/gr_block_detail.cc
===================================================================
--- 
gnuradio/branches/developers/jcorgan/fg/gnuradio-core/src/lib/runtime/gr_block_detail.cc
    2007-08-22 17:27:12 UTC (rev 6164)
+++ 
gnuradio/branches/developers/jcorgan/fg/gnuradio-core/src/lib/runtime/gr_block_detail.cc
    2007-08-22 17:58:06 UTC (rev 6165)
@@ -38,8 +38,7 @@
 gr_block_detail::gr_block_detail (unsigned int ninputs, unsigned int noutputs)
   : d_ninputs (ninputs), d_noutputs (noutputs),
     d_input (ninputs), d_output (noutputs),
-    d_done (false),
-    d_color (gr_block_detail::WHITE)
+    d_done (false)
 {
   s_ncurrently_allocated++;
 }

Modified: 
gnuradio/branches/developers/jcorgan/fg/gnuradio-core/src/lib/runtime/gr_block_detail.h
===================================================================
--- 
gnuradio/branches/developers/jcorgan/fg/gnuradio-core/src/lib/runtime/gr_block_detail.h
     2007-08-22 17:27:12 UTC (rev 6164)
+++ 
gnuradio/branches/developers/jcorgan/fg/gnuradio-core/src/lib/runtime/gr_block_detail.h
     2007-08-22 17:58:06 UTC (rev 6165)
@@ -75,13 +75,6 @@
 
   void produce_each (int how_many_items);
 
-  /*!
-   * \brief Allow the flowgraph to set for sorting and partitioning
-   */
-  enum vcolor { WHITE, GREY, BLACK };
-  void set_color(vcolor color) { d_color = color; }
-  vcolor color() const { return d_color; }
-
   // 
----------------------------------------------------------------------------
 
  private:
@@ -90,7 +83,6 @@
   std::vector<gr_buffer_reader_sptr> d_input;
   std::vector<gr_buffer_sptr>       d_output;
   bool                               d_done;
-  vcolor                             d_color;
 
   gr_block_detail (unsigned int ninputs, unsigned int noutputs);
 

Modified: 
gnuradio/branches/developers/jcorgan/fg/gnuradio-core/src/lib/runtime/gr_flat_flowgraph.cc
===================================================================
--- 
gnuradio/branches/developers/jcorgan/fg/gnuradio-core/src/lib/runtime/gr_flat_flowgraph.cc
  2007-08-22 17:27:12 UTC (rev 6164)
+++ 
gnuradio/branches/developers/jcorgan/fg/gnuradio-core/src/lib/runtime/gr_flat_flowgraph.cc
  2007-08-22 17:58:06 UTC (rev 6165)
@@ -245,14 +245,14 @@
 
   // Mark all blocks as unvisited
   for (gr_basic_block_viter_t p = blocks.begin(); p != blocks.end(); p++)
-    make_gr_block_sptr(*p)->detail()->set_color(gr_block_detail::WHITE);
+    (*p)->set_color(gr_basic_block::WHITE);
 
   // Recursively mark all reachable blocks
   reachable_dfs_visit(block, blocks);
 
   // Collect all the blocks that have been visited
   for (gr_basic_block_viter_t p = blocks.begin(); p != blocks.end(); p++)
-    if ((make_gr_block_sptr(*p))->detail()->color() == gr_block_detail::BLACK)
+    if ((*p)->color() == gr_basic_block::BLACK)
       result.push_back(*p);
 
   return result;
@@ -263,13 +263,13 @@
 gr_flat_flowgraph::reachable_dfs_visit(gr_basic_block_sptr block, 
gr_basic_block_vector_t &blocks)
 {
   // Mark the current one as visited
-  boost::dynamic_pointer_cast<gr_block, 
gr_basic_block>(block)->detail()->set_color(gr_block_detail::BLACK);
+  block->set_color(gr_basic_block::BLACK);
 
   // Recurse into adjacent vertices
   gr_basic_block_vector_t adjacent = calc_adjacent_blocks(block, blocks);
 
   for (gr_basic_block_viter_t p = adjacent.begin(); p != adjacent.end(); p++)
-    if (boost::dynamic_pointer_cast<gr_block, 
gr_basic_block>(*p)->detail()->color() == gr_block_detail::WHITE)
+    if ((*p)->color() == gr_basic_block::WHITE)
       reachable_dfs_visit(*p, blocks);
 }
 
@@ -304,10 +304,10 @@
 
   // Start 'em all white
   for (gr_basic_block_viter_t p = tmp.begin(); p != tmp.end(); p++)
-    make_gr_block_sptr(*p)->detail()->set_color(gr_block_detail::WHITE);
+    (*p)->set_color(gr_basic_block::WHITE);
 
   for (gr_basic_block_viter_t p = tmp.begin(); p != tmp.end(); p++) {
-    if (make_gr_block_sptr(*p)->detail()->color() == gr_block_detail::WHITE)
+    if ((*p)->color() == gr_basic_block::WHITE)
       topological_dfs_visit(*p, result);
   }    
 
@@ -345,19 +345,19 @@
 void
 gr_flat_flowgraph::topological_dfs_visit(gr_basic_block_sptr block, 
gr_block_vector_t &output)
 {
-  make_gr_block_sptr(block)->detail()->set_color(gr_block_detail::GREY);
+  block->set_color(gr_basic_block::GREY);
   gr_basic_block_vector_t blocks(calc_downstream_blocks(block));
 
   for (gr_basic_block_viter_t p = blocks.begin(); p != blocks.end(); p++) {
-    switch (make_gr_block_sptr(*p)->detail()->color()) {
-    case gr_block_detail::WHITE:           
+    switch ((*p)->color()) {
+    case gr_basic_block::WHITE:           
       topological_dfs_visit(*p, output);
       break;
 
-    case gr_block_detail::GREY:            
+    case gr_basic_block::GREY:            
       throw std::runtime_error("flow graph has loops!");
 
-    case gr_block_detail::BLACK:
+    case gr_basic_block::BLACK:
       continue;
 
     default:
@@ -365,8 +365,7 @@
     }
   }
 
-  gr_block_sptr result_block = make_gr_block_sptr(block);
-  result_block->detail()->set_color(gr_block_detail::BLACK);
-  output.push_back(result_block);
+  block->set_color(gr_basic_block::BLACK);
+  output.push_back(make_gr_block_sptr(block));
 }
 





reply via email to

[Prev in Thread] Current Thread [Next in Thread]