[Top][All Lists]
[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);
}
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Commit-gnuradio] r4015 - gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime,
jcorgan <=