commit-gnuradio
[Top][All Lists]
Advanced

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

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


From: jcorgan
Subject: [Commit-gnuradio] r4015 - gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime
Date: Wed, 22 Nov 2006 10:43:27 -0700 (MST)

Author: jcorgan
Date: 2006-11-22 10:43:26 -0700 (Wed, 22 Nov 2006)
New Revision: 4015

Modified:
   
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_hier_block2.cc
   
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_hier_block2.h
   
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_hier_block2_detail.cc
   
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_hier_block2_detail.h
   
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_runtime_impl.cc
   
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_simple_flowgraph.cc
Log:
Work in progress.

Modified: 
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_hier_block2.cc
===================================================================
--- 
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_hier_block2.cc
   2006-11-22 07:13:47 UTC (rev 4014)
+++ 
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_hier_block2.cc
   2006-11-22 17:43:26 UTC (rev 4015)
@@ -64,8 +64,8 @@
     d_detail->connect(src_name, src_port, dst_name, dst_port);
 }
 
-gr_simple_flowgraph_sptr
-gr_hier_block2::flatten(const std::string &prefix)
+void
+gr_hier_block2::flatten(gr_simple_flowgraph_sptr sfg, const std::string 
&prefix)
 {
-    return d_detail->flatten(prefix);
+    return d_detail->flatten(sfg, prefix);
 }

Modified: 
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_hier_block2.h
===================================================================
--- 
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_hier_block2.h
    2006-11-22 07:13:47 UTC (rev 4014)
+++ 
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_hier_block2.h
    2006-11-22 17:43:26 UTC (rev 4015)
@@ -59,7 +59,7 @@
     void define_component(const std::string &name, gr_basic_block_sptr 
basic_block);
     void connect(const std::string &src_name, int src_port, 
                  const std::string &dst_name, int dst_port);
-    gr_simple_flowgraph_sptr flatten(const std::string &prefix = "");
+    void flatten(gr_simple_flowgraph_sptr sfg, const std::string &prefix = "");
 };
 
 #endif /* INCLUDED_GR_HIER_BLOCK2_H */

Modified: 
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_hier_block2_detail.cc
===================================================================
--- 
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_hier_block2_detail.cc
    2006-11-22 07:13:47 UTC (rev 4014)
+++ 
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_hier_block2_detail.cc
    2006-11-22 17:43:26 UTC (rev 4015)
@@ -41,40 +41,40 @@
     d_owner = 0; // Don't use delete, we didn't allocate
 }
 
+gr_basic_block_sptr
+gr_hier_block2_detail::lookup_block(const std::string &name)
+{
+    gr_hier_component_miter_t p = d_components.find(name);
+    if (p != d_components.end())
+       return p->second;
+    else
+       return gr_basic_block_sptr();
+}
+
 void 
 gr_hier_block2_detail::define_component(const std::string &name, 
gr_basic_block_sptr block)
 {
+    if (!block)
+       throw std::invalid_argument("null block passed");
+
     if (name == "self")
        throw std::invalid_argument("name is reserved");
 
-    if (get_block_by_name(name))
+    // TODO: reject names with '.' inside
+    
+    if (!lookup_block(name))
+       d_components[name] = block;
+    else
        throw std::invalid_argument("name already in use");
-       
-    if (get_name_by_block(block) != "")
-       throw std::invalid_argument("component already defined");
-
-    d_components.push_back(gr_hier_component(name, block));
 }
 
-gr_basic_block_sptr 
-gr_hier_block2_detail::get_block_by_name(const std::string &name)
-{
-    for (gr_hier_component_viter_t p = d_components.begin();
-        p != d_components.end(); p++) {
-       if (name == p->name())
-           return p->block();
-    }
-
-    return gr_basic_block_sptr();
-}
-
 std::string 
 gr_hier_block2_detail::get_name_by_block(gr_basic_block_sptr block)
 {
-    for (gr_hier_component_viter_t p = d_components.begin();
+    for (gr_hier_component_miter_t p = d_components.begin();
         p != d_components.end(); p++) {
-       if (block == p->block())
-           return p->name();
+       if (block == p->second)
+           return p->first;
     }
 
     return std::string("");
@@ -91,7 +91,7 @@
     if (src_name == "self") 
        src_io_signature = d_owner->input_signature();
     else {
-       gr_basic_block_sptr src_block = get_block_by_name(src_name);
+       gr_basic_block_sptr src_block = lookup_block(src_name);
        if (!src_block)
            throw std::invalid_argument("undefined src name");
        src_io_signature = src_block->output_signature();
@@ -101,7 +101,7 @@
     if (dst_name == "self") 
        dst_io_signature = d_owner->output_signature();
     else {
-       gr_basic_block_sptr dst_block = get_block_by_name(dst_name);
+       gr_basic_block_sptr dst_block = lookup_block(dst_name);
        if (!dst_block)
            throw std::invalid_argument("undefined dst name");
        dst_io_signature = dst_block->input_signature();
@@ -148,9 +148,22 @@
        throw std::invalid_argument("type mismatch");
 }
 
-gr_simple_flowgraph_sptr
-gr_hier_block2_detail::flatten(const std::string &prefix)
+void
+gr_hier_block2_detail::flatten(gr_simple_flowgraph_sptr sfg, const std::string 
&prefix)
 {
-    gr_simple_flowgraph_sptr result = gr_make_simple_flowgraph();
-    return result;
+    if (GR_HIER_BLOCK2_DETAIL_DEBUG)
+       std::cout << "Flattening hierarchy with prefix: " << prefix << 
std::endl;
+
+    // First, add my non-hierarchical components to the simple flowgraph, 
+    // appending the supplied prefix.
+    for (gr_hier_component_miter_t p = d_components.begin(); p != 
d_components.end(); p++) {
+       std::string name(prefix + ((prefix == "") ? "":".") + p->first);
+
+       gr_basic_block_sptr basic_block = p->second;
+       gr_block_sptr block(boost::dynamic_pointer_cast<gr_block, 
gr_basic_block>(basic_block));
+       if (block)      
+           sfg->define_component(name, block);
+    }
+
+    // More to follow...
 }

Modified: 
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_hier_block2_detail.h
===================================================================
--- 
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_hier_block2_detail.h
     2006-11-22 07:13:47 UTC (rev 4014)
+++ 
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_hier_block2_detail.h
     2006-11-22 17:43:26 UTC (rev 4015)
@@ -25,23 +25,9 @@
 #include <gr_simple_flowgraph_detail.h>
 #include <boost/utility.hpp>
 
-class gr_hier_component
-{
-private:
-    std::string                d_name;
-    gr_basic_block_sptr d_block;
+typedef std::map<std::string, gr_basic_block_sptr> gr_hier_component_map_t;
+typedef std::map<std::string, gr_basic_block_sptr>::iterator 
gr_hier_component_miter_t;
 
-public:
-    gr_hier_component(const std::string name, gr_basic_block_sptr block)
-      : d_name(name), d_block(block) {}
-      
-    std::string name() const { return d_name; }
-    gr_basic_block_sptr block() const { return d_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_hier_block2_detail : boost::noncopyable
 {
 private:
@@ -52,13 +38,13 @@
 
     // Private implementation data
     gr_hier_block2 *d_owner;
-    gr_hier_component_vector_t d_components;
+    gr_hier_component_map_t d_components;
     gr_edge_vector_t d_edges;
         
     // Private implementation methods
     void define_component(const std::string &name, gr_basic_block_sptr block);
+    gr_basic_block_sptr lookup_block(const std::string &name);
     std::string get_name_by_block(gr_basic_block_sptr block);
-    gr_basic_block_sptr get_block_by_name(const std::string &name);
 
     void connect(const std::string &src_name, int src_port, 
                  const std::string &dst_name, int dst_port);
@@ -67,7 +53,7 @@
     void check_type_match(gr_io_signature_sptr src_sig, int src_port,
                          gr_io_signature_sptr dst_sig, int dst_port);
 
-    gr_simple_flowgraph_sptr flatten(const std::string &prefix = "");
+    void flatten(gr_simple_flowgraph_sptr sfg, const std::string &prefix = "");
                                                     
 public:
     ~gr_hier_block2_detail();

Modified: 
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_runtime_impl.cc
===================================================================
--- 
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_runtime_impl.cc
  2006-11-22 07:13:47 UTC (rev 4014)
+++ 
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_runtime_impl.cc
  2006-11-22 17:43:26 UTC (rev 4015)
@@ -27,13 +27,15 @@
 #define GR_RUNTIME_IMPL_DEBUG 1
 
 #include <gr_runtime_impl.h>
+#include <gr_simple_flowgraph.h>
 #include <gr_hier_block2.h>
 #include <stdexcept>
 #include <iostream>
 
 gr_runtime_impl::gr_runtime_impl(gr_hier_block2_sptr top_block) :
 d_running(false),
-d_top_block(top_block)
+d_top_block(top_block),
+d_sfg(gr_make_simple_flowgraph())
 {
 }
   
@@ -52,7 +54,7 @@
     else
        d_running = true;
 
-    d_sfg = d_top_block->flatten();
+    d_top_block->flatten(d_sfg);
 }
 
 void 

Modified: 
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_simple_flowgraph.cc
===================================================================
--- 
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_simple_flowgraph.cc
      2006-11-22 07:13:47 UTC (rev 4014)
+++ 
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_simple_flowgraph.cc
      2006-11-22 17:43:26 UTC (rev 4015)
@@ -26,7 +26,10 @@
 
 #include <gr_simple_flowgraph.h>
 #include <gr_simple_flowgraph_detail.h>
+#include <iostream>
 
+#define GR_SIMPLE_FLOWGRAPH_DEBUG 1
+
 gr_simple_flowgraph_sptr gr_make_simple_flowgraph()
 {
     return gr_simple_flowgraph_sptr(new gr_simple_flowgraph());
@@ -45,6 +48,8 @@
 void
 gr_simple_flowgraph::define_component(const std::string &name, gr_block_sptr 
block)
 {
+    if (GR_SIMPLE_FLOWGRAPH_DEBUG)
+       std::cout << "Defining block " << block << " as " << name << std::endl;
     d_detail->define_component(name, block);
 }
 





reply via email to

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