commit-gnuradio
[Top][All Lists]
Advanced

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

[Commit-gnuradio] r3973 - gnuradio/branches/developers/jcorgan/hier/gnur


From: jcorgan
Subject: [Commit-gnuradio] r3973 - gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime
Date: Sun, 12 Nov 2006 11:03:14 -0700 (MST)

Author: jcorgan
Date: 2006-11-12 11:03:13 -0700 (Sun, 12 Nov 2006)
New Revision: 3973

Modified:
   
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_basic_block.h
   
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_block.h
   
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_hier_block2_impl.cc
   
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_hier_block2_impl.h
Log:
Work in progress, completed tree visit.

Modified: 
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_basic_block.h
===================================================================
--- 
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_basic_block.h
    2006-11-12 17:15:05 UTC (rev 3972)
+++ 
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_basic_block.h
    2006-11-12 18:03:13 UTC (rev 3973)
@@ -105,6 +105,9 @@
     virtual bool validate() { return true; }
 };
 
+typedef std::vector<gr_basic_block_sptr> gr_basic_block_vector_t;
+typedef std::vector<gr_basic_block_sptr>::iterator gr_basic_block_viter_t;
+
 long gr_basic_block_ncurrently_allocated();
 
 #endif /* INCLUDED_GR_BASIC_BLOCK_H */

Modified: 
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_block.h
===================================================================
--- 
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_block.h
  2006-11-12 17:15:05 UTC (rev 3972)
+++ 
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_block.h
  2006-11-12 18:03:13 UTC (rev 3973)
@@ -217,4 +217,7 @@
   void set_detail (gr_block_detail_sptr detail) { d_detail = detail; }
 };
 
+typedef std::vector<gr_block_sptr> gr_block_vector_t;
+typedef std::vector<gr_block_sptr>::iterator gr_block_viter_t;
+
 #endif /* INCLUDED_GR_BLOCK_H */

Modified: 
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_hier_block2_impl.cc
===================================================================
--- 
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_hier_block2_impl.cc
      2006-11-12 17:15:05 UTC (rev 3972)
+++ 
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_hier_block2_impl.cc
      2006-11-12 18:03:13 UTC (rev 3973)
@@ -57,7 +57,7 @@
 gr_basic_block_sptr 
 gr_hier_block2_impl::get_block_by_name(const std::string &name)
 {
-    for (std::vector<gr_hier_component>::const_iterator p = 
d_components.begin();
+    for (gr_hier_component_viter_t p = d_components.begin();
         p != d_components.end(); p++) {
        if (name == p->name())
            return p->basic_block();
@@ -69,7 +69,7 @@
 std::string 
 gr_hier_block2_impl::get_name_by_block(gr_basic_block_sptr basic_block)
 {
-    for (std::vector<gr_hier_component>::const_iterator p = 
d_components.begin();
+    for (gr_hier_component_viter_t p = d_components.begin();
         p != d_components.end(); p++) {
        if (basic_block == p->basic_block())
            return p->name();
@@ -91,7 +91,7 @@
 void 
 gr_hier_block2_impl::check_dst_not_used(const std::string name, int port)
 {
-    for (std::vector<gr_connection>::const_iterator p = d_connections.begin();
+    for (gr_connection_viter_t p = d_connections.begin();
         p != d_connections.end(); p++) {
 
        if (p->dst().name() == name && p->dst().port() == port)
@@ -130,6 +130,42 @@
 bool
 gr_hier_block2_impl::visit(gr_tree_visitor &visitor)
 {
-    // Iterate only through connected children and callback visitor on each
+    gr_basic_block_vector_t blocks = get_connected_blocks();
+    
+    for (gr_basic_block_viter_t p = blocks.begin();
+        p != blocks.end(); p++) {
+
+       if (!visitor(*p))
+           return false;
+    }    
+
     return true;
 }
+
+gr_basic_block_vector_t
+gr_hier_block2_impl::get_connected_blocks()
+{
+    gr_basic_block_vector_t blocks;
+    gr_basic_block_viter_t  block_iter;
+    
+    // Accumulate vector of blocks that are actually in connection list
+    for (gr_connection_viter_t p = d_connections.begin();
+        p != d_connections.end(); p++) {
+
+       gr_basic_block_sptr src_block = get_block_by_name(p->src().name());
+       gr_basic_block_sptr dst_block = get_block_by_name(p->dst().name());
+       
+       block_iter = find(blocks.begin(), blocks.end(), src_block);
+           if (block_iter == blocks.end())
+               blocks.push_back(src_block);
+               
+       block_iter = find(blocks.begin(), blocks.end(), dst_block);
+           if (block_iter == blocks.end())
+               blocks.push_back(dst_block);
+    }
+
+    if (GR_HIER_BLOCK2_IMPL_DEBUG)
+       std::cout << "Found " << blocks.size() << " connected blocks." << 
std::endl;
+
+    return blocks;
+}

Modified: 
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_hier_block2_impl.h
===================================================================
--- 
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_hier_block2_impl.h
       2006-11-12 17:15:05 UTC (rev 3972)
+++ 
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_hier_block2_impl.h
       2006-11-12 18:03:13 UTC (rev 3973)
@@ -42,6 +42,9 @@
     gr_basic_block_sptr basic_block() const { return d_basic_block; }
 };
 
+typedef std::vector<gr_hier_component> gr_hier_component_vector_t;
+typedef std::vector<gr_hier_component>::iterator gr_hier_component_viter_t;
+
 class gr_endpoint
 {
 private:
@@ -70,6 +73,9 @@
     gr_endpoint dst() const { return d_dst; }
 };
 
+typedef std::vector<gr_connection> gr_connection_vector_t;
+typedef std::vector<gr_connection>::iterator gr_connection_viter_t;
+
 class gr_hier_block2_impl : boost::noncopyable
 {
 private:
@@ -86,6 +92,7 @@
     void check_dst_not_used(const std::string name, int port);
     void check_type_match(gr_io_signature_sptr src_sig, int src_port,
                          gr_io_signature_sptr dst_sig, int dst_port);
+    gr_basic_block_vector_t get_connected_blocks();
     bool visit(gr_tree_visitor &visitor);
     bool validate();
                                 





reply via email to

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