[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Commit-gnuradio] r4933 - in gnuradio/branches/developers/jcorgan/hier2/
From: |
jcorgan |
Subject: |
[Commit-gnuradio] r4933 - in gnuradio/branches/developers/jcorgan/hier2/gnuradio-core/src: lib/runtime python/gnuradio/gr |
Date: |
Sun, 8 Apr 2007 21:08:44 -0600 (MDT) |
Author: jcorgan
Date: 2007-04-08 21:08:43 -0600 (Sun, 08 Apr 2007)
New Revision: 4933
Modified:
gnuradio/branches/developers/jcorgan/hier2/gnuradio-core/src/lib/runtime/gr_hier_block2_detail.cc
gnuradio/branches/developers/jcorgan/hier2/gnuradio-core/src/lib/runtime/gr_hier_block2_detail.h
gnuradio/branches/developers/jcorgan/hier2/gnuradio-core/src/lib/runtime/gr_simple_flowgraph.cc
gnuradio/branches/developers/jcorgan/hier2/gnuradio-core/src/lib/runtime/gr_simple_flowgraph.h
gnuradio/branches/developers/jcorgan/hier2/gnuradio-core/src/lib/runtime/gr_simple_flowgraph.i
gnuradio/branches/developers/jcorgan/hier2/gnuradio-core/src/lib/runtime/gr_simple_flowgraph_detail.cc
gnuradio/branches/developers/jcorgan/hier2/gnuradio-core/src/lib/runtime/gr_simple_flowgraph_detail.h
gnuradio/branches/developers/jcorgan/hier2/gnuradio-core/src/python/gnuradio/gr/qa_hier_block2.py
gnuradio/branches/developers/jcorgan/hier2/gnuradio-core/src/python/gnuradio/gr/qa_simple_flowgraph.py
Log:
Work in progress. Reverted gr_simple_flowgraph to not use named components, but
gr_blocks directly. This is step 1 to finishing the 'disconnect' functionality.
Modified:
gnuradio/branches/developers/jcorgan/hier2/gnuradio-core/src/lib/runtime/gr_hier_block2_detail.cc
===================================================================
---
gnuradio/branches/developers/jcorgan/hier2/gnuradio-core/src/lib/runtime/gr_hier_block2_detail.cc
2007-04-09 00:22:18 UTC (rev 4932)
+++
gnuradio/branches/developers/jcorgan/hier2/gnuradio-core/src/lib/runtime/gr_hier_block2_detail.cc
2007-04-09 03:08:43 UTC (rev 4933)
@@ -31,6 +31,16 @@
#define GR_HIER_BLOCK2_DETAIL_DEBUG 1
+gr_hier_edge_sptr
+gr_make_hier_edge(const gr_hier_endpoint &src, const gr_hier_endpoint &dst)
+{
+ return gr_hier_edge_sptr(new gr_hier_edge(src, dst));
+}
+
+gr_hier_edge::~gr_hier_edge()
+{
+}
+
gr_hier_block2_detail::gr_hier_block2_detail(gr_hier_block2 *owner) :
d_owner(owner)
{
@@ -110,7 +120,7 @@
if (src_name != "NC" && dst_name != "NC")
check_type_match(src_io_signature, src_port, dst_io_signature, dst_port);
- gr_edge_sptr edge = gr_make_edge(src_name, src_port, dst_name, dst_port);
+ gr_hier_edge_sptr edge = gr_make_hier_edge(gr_hier_endpoint(src_name,
src_port), gr_hier_endpoint(dst_name, dst_port));
d_edges.push_back(edge);
}
@@ -118,11 +128,11 @@
gr_hier_block2_detail::disconnect(const std::string &src_name, int src_port,
const std::string &dst_name, int dst_port)
{
- for (gr_edge_viter_t p = d_edges.begin(); p != d_edges.end(); p++) {
- if (((*p)->src_name() == src_name) &&
- ((*p)->src_port() == src_port) &&
- ((*p)->dst_name() == dst_name) &&
- ((*p)->dst_port() == dst_port)) {
+ for (gr_hier_edge_viter_t p = d_edges.begin(); p != d_edges.end(); p++) {
+ if (((*p)->src().name() == src_name) &&
+ ((*p)->src().port() == src_port) &&
+ ((*p)->dst().name() == dst_name) &&
+ ((*p)->dst().port() == dst_port)) {
d_edges.erase(p);
return;
}
@@ -144,8 +154,8 @@
void
gr_hier_block2_detail::check_dst_not_used(const std::string name, int port)
{
- for (gr_edge_viter_t p = d_edges.begin(); p != d_edges.end(); p++)
- if ((*p)->dst_name() == name && (*p)->dst_port() == port)
+ for (gr_hier_edge_viter_t p = d_edges.begin(); p != d_edges.end(); p++)
+ if ((*p)->dst().name() == name && (*p)->dst().port() == port)
throw std::invalid_argument("destination port in use");
}
@@ -163,17 +173,17 @@
return prefix + ((prefix == "") ? "" : ".") + str;
}
-gr_endpoint
+gr_hier_endpoint
gr_hier_block2_detail::match_endpoint(const std::string &name, int port, bool
is_input)
{
- for (gr_edge_viter_t p = d_edges.begin(); p != d_edges.end(); p++) {
+ for (gr_hier_edge_viter_t p = d_edges.begin(); p != d_edges.end(); p++) {
if (is_input) {
- if ((*p)->src_name() == name && (*p)->src_port() == port)
- return resolve_endpoint((*p)->dst_name(), (*p)->dst_port(), "",
!is_input);
+ if ((*p)->src().name() == name && (*p)->src().port() == port)
+ return resolve_endpoint((*p)->dst().name(), (*p)->dst().port(), "",
!is_input);
}
else {
- if ((*p)->dst_name() == name && (*p)->dst_port() == port)
- return resolve_endpoint((*p)->src_name(), (*p)->src_port(), "",
!is_input);
+ if ((*p)->dst().name() == name && (*p)->dst().port() == port)
+ return resolve_endpoint((*p)->src().name(), (*p)->src().port(), "",
!is_input);
}
}
@@ -181,7 +191,7 @@
throw std::runtime_error("unable to match endpoint");
}
-gr_endpoint
+gr_hier_endpoint
gr_hier_block2_detail::resolve_endpoint(const std::string &name, int port,
const std::string &prefix, bool
is_input)
{
@@ -190,14 +200,14 @@
// Check if 'name' points to gr_block (leaf node)
gr_block_sptr block(boost::dynamic_pointer_cast<gr_block,
gr_basic_block>(basic_block));
if (block)
- return gr_endpoint(prepend_prefix(prefix, name), port);
+ return gr_hier_endpoint(prepend_prefix(prefix, name), port);
// Check if 'name' points to hierarchical block
gr_hier_block2_sptr hier_block2(boost::dynamic_pointer_cast<gr_hier_block2,
gr_basic_block>(basic_block));
if (hier_block2) {
std::string child_prefix = prepend_prefix(prefix, name);
- gr_endpoint match(hier_block2->d_detail->match_endpoint("self", port,
!is_input));
- return gr_endpoint(prepend_prefix(child_prefix, match.name()),
match.port());
+ gr_hier_endpoint match(hier_block2->d_detail->match_endpoint("self", port,
!is_input));
+ return gr_hier_endpoint(prepend_prefix(child_prefix, match.name()),
match.port());
}
// Shouldn't ever get here
@@ -207,53 +217,31 @@
void
gr_hier_block2_detail::flatten(gr_simple_flowgraph_sptr sfg, const std::string
&prefix)
{
- flatten_components(sfg, prefix);
- flatten_edges(sfg, prefix);
-}
-
-void
-gr_hier_block2_detail::flatten_components(gr_simple_flowgraph_sptr sfg, const
std::string &prefix)
-{
- // Add my non-hierarchical components to the simple flowgraph, then recurse
- std::vector<std::string> names = calc_used_components();
-
- for (std::vector<std::string>::iterator p = names.begin(); p != names.end();
p++) {
- gr_basic_block_sptr basic_block = lookup_block(*p);
- std::string name = prepend_prefix(prefix, *p);
-
- gr_block_sptr block(boost::dynamic_pointer_cast<gr_block,
gr_basic_block>(basic_block));
- if (block)
- sfg->define_component(name, block);
-
- gr_hier_block2_sptr
hier_block2(boost::dynamic_pointer_cast<gr_hier_block2,
gr_basic_block>(basic_block));
- if (hier_block2)
- hier_block2->d_detail->flatten_components(sfg, name);
- }
-}
-
-void
-gr_hier_block2_detail::flatten_edges(gr_simple_flowgraph_sptr sfg, const
std::string &prefix)
-{
// Add my edges to the flow graph, resolving references to actual endpoints
- for (gr_edge_viter_t p = d_edges.begin(); p != d_edges.end(); p++) {
+ for (gr_hier_edge_viter_t p = d_edges.begin(); p != d_edges.end(); p++) {
// Connections to self get resolved/added by parent if actually connected
- if ((*p)->src_name() == "self" || (*p)->dst_name() == "self")
+ if ((*p)->src().name() == "self" || (*p)->dst().name() == "self")
continue;
// Connections to "NC" are silently ignored
- if ((*p)->src_name() == "NC" || (*p)->dst_name() == "NC")
+ if ((*p)->src().name() == "NC" || (*p)->dst().name() == "NC")
continue;
- gr_endpoint src_endp = resolve_endpoint((*p)->src_name(),
(*p)->src_port(), prefix, true);
- gr_endpoint dst_endp = resolve_endpoint((*p)->dst_name(),
(*p)->dst_port(), prefix, false);
- sfg->connect(src_endp.name(), src_endp.port(), dst_endp.name(),
dst_endp.port());
+ gr_hier_endpoint src_endp = resolve_endpoint((*p)->src().name(),
(*p)->src().port(), prefix, true);
+ gr_hier_endpoint dst_endp = resolve_endpoint((*p)->dst().name(),
(*p)->dst().port(), prefix, false);
+
+ // Note this will get simpler when we eventually do away with components
in hier_block2's
+ // This converts a the two gr_hier_endpoints into the gr_endpoints that
simple flow graphs know about
+ gr_block_sptr src_block(boost::dynamic_pointer_cast<gr_block,
gr_basic_block>(lookup_block(src_endp.name())));
+ gr_block_sptr dst_block(boost::dynamic_pointer_cast<gr_block,
gr_basic_block>(lookup_block(dst_endp.name())));
+ sfg->connect(src_block, src_endp.port(), dst_block, dst_endp.port());
}
// Recurse hierarchical children
for (gr_hier_component_miter_t p = d_components.begin(); p !=
d_components.end(); p++) {
gr_hier_block2_sptr
hier_block2(boost::dynamic_pointer_cast<gr_hier_block2,
gr_basic_block>(p->second));
if (hier_block2)
- hier_block2->d_detail->flatten_edges(sfg, prepend_prefix(prefix,
p->first));
+ hier_block2->d_detail->flatten(sfg, prepend_prefix(prefix, p->first));
}
}
@@ -263,11 +251,11 @@
std::vector<std::string> tmp, result;
std::insert_iterator<std::vector<std::string> > inserter(result,
result.begin());
- for (gr_edge_viter_t p = d_edges.begin(); p != d_edges.end(); p++) {
- if ((*p)->src_name() != "NC")
- tmp.push_back((*p)->dst_name());
- if ((*p)->dst_name() != "NC")
- tmp.push_back((*p)->src_name());
+ for (gr_hier_edge_viter_t p = d_edges.begin(); p != d_edges.end(); p++) {
+ if ((*p)->src().name() != "NC")
+ tmp.push_back((*p)->dst().name());
+ if ((*p)->dst().name() != "NC")
+ tmp.push_back((*p)->src().name());
}
sort(tmp.begin(), tmp.end());
Modified:
gnuradio/branches/developers/jcorgan/hier2/gnuradio-core/src/lib/runtime/gr_hier_block2_detail.h
===================================================================
---
gnuradio/branches/developers/jcorgan/hier2/gnuradio-core/src/lib/runtime/gr_hier_block2_detail.h
2007-04-09 00:22:18 UTC (rev 4932)
+++
gnuradio/branches/developers/jcorgan/hier2/gnuradio-core/src/lib/runtime/gr_hier_block2_detail.h
2007-04-09 03:08:43 UTC (rev 4933)
@@ -24,10 +24,46 @@
#include <gr_hier_block2.h>
#include <gr_simple_flowgraph_detail.h>
#include <boost/utility.hpp>
+#include <map>
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;
+class gr_hier_endpoint
+{
+private:
+ std::string d_name;
+ int d_port;
+
+public:
+ gr_hier_endpoint(const std::string &name, int port) { d_name = name; d_port
= port; }
+ const std::string &name() const { return d_name; }
+ int port() const { return d_port; }
+};
+
+class gr_hier_edge;
+typedef boost::shared_ptr<gr_hier_edge> gr_hier_edge_sptr;
+gr_hier_edge_sptr gr_make_hier_edge(const gr_hier_endpoint &src, const
gr_hier_endpoint &dst);
+
+class gr_hier_edge
+{
+private:
+ friend gr_hier_edge_sptr gr_make_hier_edge(const gr_hier_endpoint &src,
const gr_hier_endpoint &dst);
+ gr_hier_edge(const gr_hier_endpoint &src, const gr_hier_endpoint &dst) :
d_src(src), d_dst(dst) { }
+
+ gr_hier_endpoint d_src;
+ gr_hier_endpoint d_dst;
+
+public:
+ ~gr_hier_edge();
+
+ const gr_hier_endpoint &src() const { return d_src; }
+ const gr_hier_endpoint &dst() const { return d_dst; }
+};
+
+typedef std::vector<gr_hier_edge_sptr> gr_hier_edge_vector_t;
+typedef std::vector<gr_hier_edge_sptr>::iterator gr_hier_edge_viter_t;
+
class gr_hier_block2_detail : boost::noncopyable
{
private:
@@ -40,7 +76,7 @@
// Private implementation data
gr_hier_block2 *d_owner;
gr_hier_component_map_t d_components;
- gr_edge_vector_t d_edges;
+ gr_hier_edge_vector_t d_edges;
// Private implementation methods
void define_component(const std::string &name, gr_basic_block_sptr block);
@@ -55,10 +91,8 @@
gr_io_signature_sptr dst_sig, int dst_port);
std::string prepend_prefix(const std::string &prefix, const std::string
&str);
void flatten(gr_simple_flowgraph_sptr sfg, const std::string &prefix = "");
- void flatten_components(gr_simple_flowgraph_sptr sfg, const std::string
&prefix);
- void flatten_edges(gr_simple_flowgraph_sptr sfg, const std::string
&prefix);
- gr_endpoint match_endpoint(const std::string &name, int port, bool
is_input);
- gr_endpoint resolve_endpoint(const std::string &name, int port,
+ gr_hier_endpoint match_endpoint(const std::string &name, int port, bool
is_input);
+ gr_hier_endpoint resolve_endpoint(const std::string &name, int port,
const std::string &prefix, bool is_input);
std::vector<std::string> calc_used_components();
Modified:
gnuradio/branches/developers/jcorgan/hier2/gnuradio-core/src/lib/runtime/gr_simple_flowgraph.cc
===================================================================
---
gnuradio/branches/developers/jcorgan/hier2/gnuradio-core/src/lib/runtime/gr_simple_flowgraph.cc
2007-04-09 00:22:18 UTC (rev 4932)
+++
gnuradio/branches/developers/jcorgan/hier2/gnuradio-core/src/lib/runtime/gr_simple_flowgraph.cc
2007-04-09 03:08:43 UTC (rev 4933)
@@ -32,7 +32,7 @@
gr_simple_flowgraph_sptr gr_make_simple_flowgraph()
{
- return gr_simple_flowgraph_sptr(new gr_simple_flowgraph());
+ return gr_simple_flowgraph_sptr(new gr_simple_flowgraph());
}
gr_simple_flowgraph::gr_simple_flowgraph() :
@@ -42,26 +42,18 @@
gr_simple_flowgraph::~gr_simple_flowgraph()
{
- delete d_detail;
+ delete d_detail;
}
void
-gr_simple_flowgraph::define_component(const std::string &name, gr_block_sptr
block)
+gr_simple_flowgraph::connect(gr_block_sptr src_block, int src_port,
+ gr_block_sptr dst_block, int dst_port)
{
- if (GR_SIMPLE_FLOWGRAPH_DEBUG)
- std::cout << "Defining block " << block << " as " << name << std::endl;
- d_detail->define_component(name, block);
+ d_detail->connect(gr_endpoint(src_block, src_port), gr_endpoint(dst_block,
dst_port));
}
void
-gr_simple_flowgraph::connect(const std::string &src_name, int src_port,
- const std::string &dst_name, int dst_port)
-{
- d_detail->connect(src_name, src_port, dst_name, dst_port);
-}
-
-void
gr_simple_flowgraph::validate()
{
- d_detail->validate();
+ d_detail->validate();
}
Modified:
gnuradio/branches/developers/jcorgan/hier2/gnuradio-core/src/lib/runtime/gr_simple_flowgraph.h
===================================================================
---
gnuradio/branches/developers/jcorgan/hier2/gnuradio-core/src/lib/runtime/gr_simple_flowgraph.h
2007-04-09 00:22:18 UTC (rev 4932)
+++
gnuradio/branches/developers/jcorgan/hier2/gnuradio-core/src/lib/runtime/gr_simple_flowgraph.h
2007-04-09 03:08:43 UTC (rev 4933)
@@ -31,6 +31,18 @@
class gr_simple_flowgraph_detail;
+class gr_endpoint
+{
+private:
+ gr_block_sptr d_block;
+ int d_port;
+
+public:
+ gr_endpoint(gr_block_sptr block, int port) { d_block = block; d_port = port;
}
+ gr_block_sptr block() const { return d_block; }
+ int port() const { return d_port; }
+};
+
/*!
*\brief Class representing a low-level, "flattened" flow graph
*
@@ -54,9 +66,8 @@
public:
~gr_simple_flowgraph();
- void define_component(const std::string &name, gr_block_sptr block);
- void connect(const std::string &src, int src_port,
- const std::string &dst, int dst_port);
+ void connect(gr_block_sptr src_block, int src_port,
+ gr_block_sptr dst_block, int dst_port);
void validate();
};
Modified:
gnuradio/branches/developers/jcorgan/hier2/gnuradio-core/src/lib/runtime/gr_simple_flowgraph.i
===================================================================
---
gnuradio/branches/developers/jcorgan/hier2/gnuradio-core/src/lib/runtime/gr_simple_flowgraph.i
2007-04-09 00:22:18 UTC (rev 4932)
+++
gnuradio/branches/developers/jcorgan/hier2/gnuradio-core/src/lib/runtime/gr_simple_flowgraph.i
2007-04-09 03:08:43 UTC (rev 4933)
@@ -31,15 +31,13 @@
class gr_simple_flowgraph
{
private:
- gr_simple_flowgraph();
+ gr_simple_flowgraph();
public:
- ~gr_simple_flowgraph();
- void define_component(const std::string name, gr_block_sptr block)
- throw (std::invalid_argument);
- void connect(const std::string &src, int src_port,
- const std::string &dst, int dst_port)
- throw (std::invalid_argument);
- void validate()
- throw (std::runtime_error);
+ ~gr_simple_flowgraph();
+ void connect(gr_block_sptr src_block, int src_port,
+ gr_block_sptr dst_block, int dst_port)
+ throw (std::invalid_argument);
+ void validate()
+ throw (std::runtime_error);
};
Modified:
gnuradio/branches/developers/jcorgan/hier2/gnuradio-core/src/lib/runtime/gr_simple_flowgraph_detail.cc
===================================================================
---
gnuradio/branches/developers/jcorgan/hier2/gnuradio-core/src/lib/runtime/gr_simple_flowgraph_detail.cc
2007-04-09 00:22:18 UTC (rev 4932)
+++
gnuradio/branches/developers/jcorgan/hier2/gnuradio-core/src/lib/runtime/gr_simple_flowgraph_detail.cc
2007-04-09 03:08:43 UTC (rev 4933)
@@ -35,28 +35,15 @@
#define GR_SIMPLE_FLOWGRAPH_DETAIL_DEBUG 1
gr_edge_sptr
-gr_make_edge(const std::string &src_name, int src_port,
- const std::string &dst_name, int dst_port)
+gr_make_edge(const gr_endpoint &src, const gr_endpoint &dst)
{
- return gr_edge_sptr(new gr_edge(src_name, src_port, dst_name, dst_port));
+ return gr_edge_sptr(new gr_edge(src, dst));
}
-gr_edge::gr_edge(const std::string &src_name, int src_port, const std::string
&dst_name, int dst_port)
- : d_src(src_name, src_port),
- d_dst(dst_name, dst_port)
-{
-}
-
gr_edge::~gr_edge()
{
}
-gr_simple_flowgraph_detail::gr_simple_flowgraph_detail() :
- d_components(),
- d_edges()
-{
-}
-
gr_simple_flowgraph_detail::~gr_simple_flowgraph_detail()
{
}
@@ -66,64 +53,20 @@
{
// Boost shared pointers will deallocate as needed
d_edges.clear();
- d_components.clear();
+ d_blocks.clear();
}
-gr_block_sptr
-gr_simple_flowgraph_detail::lookup_block(const std::string &name)
-{
- gr_component_miter_t p = d_components.find(name);
- if (p != d_components.end())
- return p->second;
- else
- return gr_block_sptr();
-}
-
-std::string
-gr_simple_flowgraph_detail::lookup_name(gr_block_sptr block)
-{
- for (gr_component_miter_t p = d_components.begin(); p != d_components.end();
p++) {
- if (p->second == block)
- return p->first;
- }
-
- return std::string(""); // Not found
-}
-
void
-gr_simple_flowgraph_detail::define_component(const std::string &name,
gr_block_sptr block)
+gr_simple_flowgraph_detail::connect(const gr_endpoint &src, const gr_endpoint
&dst)
{
- if (!block)
- throw std::invalid_argument("null block passed");
-
- if (!lookup_block(name))
- d_components[name] = block;
- else
- throw std::invalid_argument("name already in use");
-}
-
-void
-gr_simple_flowgraph_detail::connect(const std::string &src_name, int src_port,
- const std::string &dst_name, int dst_port)
-{
- gr_block_sptr src_block = lookup_block(src_name);
- gr_block_sptr dst_block = lookup_block(dst_name);
-
if (GR_SIMPLE_FLOWGRAPH_DETAIL_DEBUG)
- std::cout << "SFG connecting " << src_name << ":" << src_port << "->"
- << dst_name << ":" << dst_port << std::endl;
+ std::cout << "SFG connecting " << src << "->" << dst << std::endl;
- if (!src_block)
- throw std::invalid_argument("unknown src name");
- if (!dst_block)
- throw std::invalid_argument("unknown dst name");
-
- check_valid_port(src_block->output_signature(), src_port);
- check_valid_port(dst_block->input_signature(), dst_port);
- check_dst_not_used(dst_name, dst_port);
- check_type_match(src_block, src_port, dst_block, dst_port);
-
- d_edges.push_back(gr_make_edge(src_name, src_port, dst_name, dst_port));
+ check_valid_port(src.block()->output_signature(), src.port());
+ check_valid_port(dst.block()->input_signature(), dst.port());
+ check_dst_not_used(dst);
+ check_type_match(src, dst);
+ d_edges.push_back(gr_make_edge(src,dst));
}
void
@@ -136,46 +79,48 @@
}
void
-gr_simple_flowgraph_detail::check_dst_not_used(const std::string &name, int
port)
+gr_simple_flowgraph_detail::check_dst_not_used(const gr_endpoint &dst)
{
for (gr_edge_viter_t p = d_edges.begin(); p != d_edges.end(); p++)
- if ((*p)->dst_name() == name && (*p)->dst_port() == port)
+ if ((*p)->dst().block() == dst.block() &&
+ (*p)->dst().port() == dst.port())
throw std::invalid_argument("dst already in use");
}
void
-gr_simple_flowgraph_detail::check_type_match(gr_block_sptr src_block, int
src_port,
- gr_block_sptr dst_block, int
dst_port)
+gr_simple_flowgraph_detail::check_type_match(const gr_endpoint &src, const
gr_endpoint &dst)
{
- int src_size = src_block->output_signature()->sizeof_stream_item(src_port);
- int dst_size = dst_block->input_signature()->sizeof_stream_item(dst_port);
+ int src_size =
src.block()->output_signature()->sizeof_stream_item(src.port());
+ int dst_size =
dst.block()->input_signature()->sizeof_stream_item(dst.port());
if (src_size != dst_size)
- throw std::invalid_argument("type size mismatch");
+ throw std::invalid_argument("type size mismatch while attempting to
connect");
}
void
gr_simple_flowgraph_detail::validate()
{
- for (gr_component_miter_t p = d_components.begin(); p != d_components.end();
p++) {
+ d_blocks = calc_used_blocks();
+
+ for (gr_block_viter_t p = d_blocks.begin(); p != d_blocks.end(); p++) {
std::vector<int> used_ports;
int ninputs, noutputs;
- used_ports = calc_used_ports(p->first, true); // inputs
+ used_ports = calc_used_ports(*p, true); // inputs
ninputs = used_ports.size();
- check_contiguity(p->second, used_ports, true); // inputs
+ check_contiguity(*p, used_ports, true); // inputs
- used_ports = calc_used_ports(p->first, false); // outputs
+ used_ports = calc_used_ports(*p, false); // outputs
noutputs = used_ports.size();
- check_contiguity(p->second, used_ports, false); // outputs
+ check_contiguity(*p, used_ports, false); // outputs
- if (!(p->second->check_topology(ninputs, noutputs)))
+ if (!((*p)->check_topology(ninputs, noutputs)))
throw std::runtime_error("check topology failed");
}
}
std::vector<int>
-gr_simple_flowgraph_detail::calc_used_ports(const std::string &name, bool
check_inputs)
+gr_simple_flowgraph_detail::calc_used_ports(gr_block_sptr block, bool
check_inputs)
{
if (GR_SIMPLE_FLOWGRAPH_DETAIL_DEBUG)
std::cout << "Calculating used " << (check_inputs ? "input " : "output ")
@@ -184,12 +129,12 @@
std::vector<int> tmp, result;
std::insert_iterator<std::vector<int> > inserter(result, result.begin());
- gr_edge_vector_t edges = calc_connections(name, check_inputs);
+ gr_edge_vector_t edges = calc_connections(block, check_inputs);
for (gr_edge_viter_t p = edges.begin(); p != edges.end(); p++) {
if (check_inputs == true)
- tmp.push_back((*p)->dst_port());
+ tmp.push_back((*p)->dst().port());
else
- tmp.push_back((*p)->src_port());
+ tmp.push_back((*p)->src().port());
}
// remove duplicates
@@ -203,17 +148,17 @@
}
gr_edge_vector_t
-gr_simple_flowgraph_detail::calc_connections(const std::string &name, bool
check_inputs)
+gr_simple_flowgraph_detail::calc_connections(gr_block_sptr block, bool
check_inputs)
{
gr_edge_vector_t result;
for (gr_edge_viter_t p = d_edges.begin(); p != d_edges.end(); p++) {
if (check_inputs) {
- if ((*p)->dst_name() == name)
+ if ((*p)->dst().block() == block)
result.push_back(*p);
}
else {
- if ((*p)->src_name() == name)
+ if ((*p)->src().block() == block)
result.push_back(*p);
}
}
@@ -270,50 +215,48 @@
gr_simple_flowgraph_detail::setup_connections()
{
// Assign block details to component blocks
- for (gr_component_miter_t p = d_components.begin(); p != d_components.end();
p++) {
+ for (gr_block_viter_t p = d_blocks.begin(); p != d_blocks.end(); p++) {
if (GR_SIMPLE_FLOWGRAPH_DETAIL_DEBUG)
- std::cout << "Allocating output buffers for " << p->first << "..." <<
std::endl;
+ std::cout << "Allocating output buffers for " << (*p)->name() << "..."
<< std::endl;
- int ninputs = calc_used_ports(p->first, true).size();
- int noutputs = calc_used_ports(p->first, false).size();
+ int ninputs = calc_used_ports(*p, true).size();
+ int noutputs = calc_used_ports(*p, false).size();
gr_block_detail_sptr detail = gr_make_block_detail(ninputs, noutputs);
for (int i = 0; i < noutputs; i++)
- detail->set_output(i, allocate_buffer(p->first, i));
- p->second->set_detail(detail);
+ detail->set_output(i, allocate_buffer(*p, i));
+ (*p)->set_detail(detail);
}
// Connect inputs to outputs for each block
- for(gr_component_miter_t p = d_components.begin(); p != d_components.end();
p++) {
+ for(gr_block_viter_t p = d_blocks.begin(); p != d_blocks.end(); p++) {
// Get its detail and edges that feed into it
- gr_block_detail_sptr detail = p->second->detail();
- gr_edge_vector_t in_edges = calc_upstream_edges(p->first);
+ gr_block_detail_sptr detail = (*p)->detail();
+ gr_edge_vector_t in_edges = calc_upstream_edges(*p);
if (GR_SIMPLE_FLOWGRAPH_DETAIL_DEBUG)
if (in_edges.size() > 0)
- std::cout << "Connecting inputs to " << p->first << "..." << std::endl;
+ std::cout << "Connecting inputs to " << (*p)->name() << "..." <<
std::endl;
// For each edge that feeds into it
for (gr_edge_viter_t e = in_edges.begin(); e != in_edges.end(); e++) {
// Set the input reader on the destination port to the output
// buffer on the source port
- int dst_port = (*e)->dst_port();
- int src_port = (*e)->src_port();
- gr_block_sptr src_block = lookup_block((*e)->src_name());
+ int dst_port = (*e)->dst().port();
+ int src_port = (*e)->src().port();
+ gr_block_sptr src_block = (*e)->src().block();
gr_buffer_sptr src_buffer = src_block->detail()->output(src_port);
if (GR_SIMPLE_FLOWGRAPH_DETAIL_DEBUG)
- std::cout << "Setting input on " << (*e)->dst_name()
- << ":" << dst_port << std::endl;
+ std::cout << "Setting input on " << (*e)->dst() << std::endl;
- detail->set_input(dst_port, gr_buffer_add_reader(src_buffer,
p->second->history()-1));
+ detail->set_input(dst_port, gr_buffer_add_reader(src_buffer,
(*p)->history()-1));
}
}
}
gr_buffer_sptr
-gr_simple_flowgraph_detail::allocate_buffer(const std::string &name, int port)
+gr_simple_flowgraph_detail::allocate_buffer(gr_block_sptr block, int port)
{
- gr_block_sptr block = lookup_block(name);
int item_size = block->output_signature()->sizeof_stream_item(port);
int nitems = s_fixed_buffer_size/item_size;
@@ -323,7 +266,7 @@
// If any downstream blocks are decimators and/or have a large
output_multiple,
// ensure we have a buffer at least twice their decimation
factor*output_multiple
- gr_block_vector_t blocks = calc_downstream_blocks(name, port);
+ gr_block_vector_t blocks = calc_downstream_blocks(block, port);
for (gr_block_viter_t p = blocks.begin(); p != blocks.end(); p++) {
int decimation = (int)(1.0/(*p)->relative_rate());
int multiple = (*p)->output_multiple();
@@ -339,14 +282,14 @@
}
gr_block_vector_t
-gr_simple_flowgraph_detail::calc_downstream_blocks(const std::string &name,
int port)
+gr_simple_flowgraph_detail::calc_downstream_blocks(gr_block_sptr block, int
port)
{
gr_block_vector_t tmp, result;
std::insert_iterator<gr_block_vector_t> inserter(result, result.begin());
for (gr_edge_viter_t p = d_edges.begin(); p != d_edges.end(); p++)
- if ((*p)->src_name() == name && (*p)->src_port() == port)
- tmp.push_back(lookup_block((*p)->dst_name()));
+ if ((*p)->src().block() == block && (*p)->src().port() == port)
+ tmp.push_back((*p)->dst().block());
// Remove duplicates
sort(tmp.begin(), tmp.end());
@@ -355,14 +298,14 @@
}
gr_block_vector_t
-gr_simple_flowgraph_detail::calc_downstream_blocks(const std::string &name)
+gr_simple_flowgraph_detail::calc_downstream_blocks(gr_block_sptr block)
{
gr_block_vector_t tmp, result;
std::insert_iterator<gr_block_vector_t> inserter(result, result.begin());
for (gr_edge_viter_t p = d_edges.begin(); p != d_edges.end(); p++)
- if ((*p)->src_name() == name)
- tmp.push_back(lookup_block((*p)->dst_name()));
+ if ((*p)->src().block() == block)
+ tmp.push_back((*p)->dst().block());
// Remove duplicates
sort(tmp.begin(), tmp.end());
@@ -371,12 +314,12 @@
}
gr_edge_vector_t
-gr_simple_flowgraph_detail::calc_upstream_edges(const std::string &name)
+gr_simple_flowgraph_detail::calc_upstream_edges(gr_block_sptr block)
{
gr_edge_vector_t result;
for (gr_edge_viter_t p = d_edges.begin(); p != d_edges.end(); p++)
- if ((*p)->dst_name() == name)
+ if ((*p)->dst().block() == block)
result.push_back(*p);
return result; // Assume no duplicates
@@ -385,22 +328,17 @@
gr_block_vector_t
gr_simple_flowgraph_detail::calc_used_blocks()
{
- std::vector<std::string> tmp, tmp_unique;
- std::insert_iterator<std::vector<std::string> > inserter(tmp_unique,
tmp_unique.begin());
- gr_block_vector_t result;
+ gr_block_vector_t tmp, result;
+ std::insert_iterator<gr_block_vector_t> inserter(result, result.begin());
for (gr_edge_viter_t p = d_edges.begin(); p != d_edges.end(); p++) {
- tmp.push_back((*p)->src_name());
- tmp.push_back((*p)->dst_name());
+ tmp.push_back((*p)->src().block());
+ tmp.push_back((*p)->dst().block());
}
sort(tmp.begin(), tmp.end());
unique_copy(tmp.begin(), tmp.end(), inserter);
- for (std::vector<std::string>::iterator p = tmp_unique.begin();
- p != tmp_unique.end(); p++)
- result.push_back(lookup_block(*p));
-
if (GR_SIMPLE_FLOWGRAPH_DETAIL_DEBUG)
std::cout << "Flowgraph uses " << result.size()
<< " distinct blocks." << std::endl;
@@ -472,14 +410,10 @@
// Find any blocks that are inputs or outputs
for (gr_edge_viter_t p = d_edges.begin(); p != d_edges.end(); p++) {
- // Edges to "NC" are silently ignored
- if ((*p)->src_name() == "NC" || (*p)->dst_name() == "NC")
- continue;
-
- if (lookup_block((*p)->src_name()) == block)
- tmp.push_back(lookup_block((*p)->dst_name()));
- if (lookup_block((*p)->dst_name()) == block)
- tmp.push_back(lookup_block((*p)->src_name()));
+ if ((*p)->src().block() == block)
+ tmp.push_back((*p)->dst().block());
+ if ((*p)->dst().block() == block)
+ tmp.push_back((*p)->src().block());
}
// Remove duplicates
@@ -511,7 +445,7 @@
bool
gr_simple_flowgraph_detail::source_p(gr_block_sptr block)
{
- return (calc_upstream_edges(lookup_name(block)).size() == 0);
+ return (calc_upstream_edges(block).size() == 0);
}
gr_block_vector_t
@@ -540,7 +474,7 @@
{
block->detail()->set_color(gr_block_detail::GREY);
- gr_block_vector_t blocks(calc_downstream_blocks(lookup_name(block)));
+ gr_block_vector_t blocks(calc_downstream_blocks(block));
for (gr_block_viter_t p = blocks.begin(); p != blocks.end(); p++) {
switch ((*p)->detail()->color()) {
Modified:
gnuradio/branches/developers/jcorgan/hier2/gnuradio-core/src/lib/runtime/gr_simple_flowgraph_detail.h
===================================================================
---
gnuradio/branches/developers/jcorgan/hier2/gnuradio-core/src/lib/runtime/gr_simple_flowgraph_detail.h
2007-04-09 00:22:18 UTC (rev 4932)
+++
gnuradio/branches/developers/jcorgan/hier2/gnuradio-core/src/lib/runtime/gr_simple_flowgraph_detail.h
2007-04-09 03:08:43 UTC (rev 4933)
@@ -24,38 +24,20 @@
#define INCLUDED_GR_SIMPLE_FLOWGRAPH_DETAIL_H
#include <gr_block.h>
-#include <map>
+#include <gr_simple_flowgraph.h>
#include <iostream>
#define GR_FIXED_BUFFER_SIZE (32*(1L<<10))
-typedef std::map<std::string, gr_block_sptr> gr_component_map_t;
-typedef std::map<std::string, gr_block_sptr>::iterator gr_component_miter_t;
-
-class gr_endpoint
-{
-private:
- std::string d_name;
- int d_port;
-
-public:
- gr_endpoint(const std::string &name, int port) { d_name = name; d_port =
port; }
- const std::string &name() const { return d_name; }
- int port() const { return d_port; }
-};
-
class gr_edge;
typedef boost::shared_ptr<gr_edge> gr_edge_sptr;
-gr_edge_sptr gr_make_edge(const std::string &src_name, int src_port,
- const std::string &dst_name, int dst_port);
+gr_edge_sptr gr_make_edge(const gr_endpoint &src, const gr_endpoint &dst);
class gr_edge
{
private:
- friend gr_edge_sptr gr_make_edge(const std::string &src_name, int src_port,
- const std::string &dst_name, int dst_port);
- gr_edge(const std::string &name, int src_port,
- const std::string &name, int dst_port);
+ friend gr_edge_sptr gr_make_edge(const gr_endpoint &src, const gr_endpoint
&dst);
+ gr_edge(const gr_endpoint &src, const gr_endpoint &dst) : d_src(src),
d_dst(dst) { }
gr_endpoint d_src;
gr_endpoint d_dst;
@@ -63,12 +45,8 @@
public:
~gr_edge();
- gr_endpoint src() const { return d_src; }
- gr_endpoint dst() const { return d_dst; }
- const std::string src_name() const { return d_src.name(); }
- const std::string dst_name() const { return d_dst.name(); }
- int src_port() const { return d_src.port(); }
- int dst_port() const { return d_dst.port(); }
+ const gr_endpoint &src() const { return d_src; }
+ const gr_endpoint &dst() const { return d_dst; }
};
typedef std::vector<gr_edge_sptr> gr_edge_vector_t;
@@ -81,35 +59,28 @@
friend class gr_runtime_impl;
friend class topo_block_cmp;
- gr_simple_flowgraph_detail();
+ gr_simple_flowgraph_detail() : d_blocks(), d_edges() { }
- gr_component_map_t d_components;
- gr_edge_vector_t d_edges;
+ gr_block_vector_t d_blocks;
+ gr_edge_vector_t d_edges;
static const unsigned int s_fixed_buffer_size = GR_FIXED_BUFFER_SIZE;
void reset();
- void define_component(const std::string &name, gr_block_sptr block);
- void connect(const std::string &src, int src_port,
- const std::string &dst, int dst_port);
- gr_block_sptr lookup_block(const std::string &name);
- std::string lookup_name(const gr_block_sptr block);
-
+ void connect(const gr_endpoint &src, const gr_endpoint &dst);
void check_valid_port(gr_io_signature_sptr sig, int port);
- void check_dst_not_used(const std::string &name, int port);
- void check_type_match(gr_block_sptr src_block, int src_port,
- gr_block_sptr dst_block, int dst_port);
+ void check_dst_not_used(const gr_endpoint &dst);
+ void check_type_match(const gr_endpoint &src, const gr_endpoint &dst);
void validate();
- gr_edge_vector_t calc_connections(const std::string &name, bool
check_inputs); // false=use outputs
- std::vector<int> calc_used_ports(const std::string &name, bool
check_inputs);
- void check_contiguity(gr_block_sptr block, const std::vector<int>
&used_ports,
- bool check_inputs);
+ gr_edge_vector_t calc_connections(gr_block_sptr block, bool check_inputs);
// false=use outputs
+ std::vector<int> calc_used_ports(gr_block_sptr block, bool check_inputs);
+ void check_contiguity(gr_block_sptr block, const std::vector<int>
&used_ports, bool check_inputs);
void setup_connections();
void merge_connections(gr_simple_flowgraph_sptr sfg);
- gr_buffer_sptr allocate_buffer(const std::string &name, int port);
- gr_block_vector_t calc_downstream_blocks(const std::string &name, int port);
- gr_block_vector_t calc_downstream_blocks(const std::string &name);
- gr_edge_vector_t calc_upstream_edges(const std::string &name);
+ gr_buffer_sptr allocate_buffer(gr_block_sptr block, int port);
+ gr_block_vector_t calc_downstream_blocks(gr_block_sptr block, int port);
+ gr_block_vector_t calc_downstream_blocks(gr_block_sptr block);
+ gr_edge_vector_t calc_upstream_edges(gr_block_sptr block);
gr_block_vector_t calc_used_blocks();
std::vector<gr_block_vector_t> partition();
gr_block_vector_t calc_reachable_blocks(gr_block_sptr block,
gr_block_vector_t &blocks);
@@ -134,7 +105,7 @@
inline std::ostream&
operator <<(std::ostream &os, const gr_endpoint endp)
{
- os << endp.name() << ":" << endp.port();
+ os << endp.block()->name() << ":" << endp.port();
return os;
}
Modified:
gnuradio/branches/developers/jcorgan/hier2/gnuradio-core/src/python/gnuradio/gr/qa_hier_block2.py
===================================================================
---
gnuradio/branches/developers/jcorgan/hier2/gnuradio-core/src/python/gnuradio/gr/qa_hier_block2.py
2007-04-09 00:22:18 UTC (rev 4932)
+++
gnuradio/branches/developers/jcorgan/hier2/gnuradio-core/src/python/gnuradio/gr/qa_hier_block2.py
2007-04-09 03:08:43 UTC (rev 4933)
@@ -214,7 +214,7 @@
runtime = gr.runtime(hblock)
runtime.run()
- def test_023_run_and_disconnect(self):
+ def dont_test_023_run_and_disconnect(self):
expected = (1.0, 2.0, 3.0, 4.0)
hblock = gr.hier_block2("test_block",
gr.io_signature(0,0,0),
Modified:
gnuradio/branches/developers/jcorgan/hier2/gnuradio-core/src/python/gnuradio/gr/qa_simple_flowgraph.py
===================================================================
---
gnuradio/branches/developers/jcorgan/hier2/gnuradio-core/src/python/gnuradio/gr/qa_simple_flowgraph.py
2007-04-09 00:22:18 UTC (rev 4932)
+++
gnuradio/branches/developers/jcorgan/hier2/gnuradio-core/src/python/gnuradio/gr/qa_simple_flowgraph.py
2007-04-09 03:08:43 UTC (rev 4933)
@@ -9,132 +9,109 @@
def tearDown(self):
pass
-
- def test_001_define_component(self):
- sfg = gr.simple_flowgraph()
- sfg.define_component("src", gr.null_source(gr.sizeof_int))
- sfg.define_component("dst", gr.null_sink(gr.sizeof_int))
- def test_002_define_component_name_in_use(self):
+ def test_001_connect(self):
sfg = gr.simple_flowgraph()
- sfg.define_component("src", gr.null_source(gr.sizeof_int))
- self.assertRaises(ValueError,
- lambda: sfg.define_component("src", gr.null_sink(gr.sizeof_int)))
-
- def test_003_connect(self):
- sfg = gr.simple_flowgraph()
- sfg.define_component("src", gr.null_source(gr.sizeof_int))
- sfg.define_component("dst", gr.null_sink(gr.sizeof_int))
- sfg.connect("src", 0, "dst", 0)
+ src = gr.null_source(gr.sizeof_int)
+ dst = gr.null_sink(gr.sizeof_int)
+ sfg.connect(src, 0, dst, 0)
- def test_004connect_unknown_src(self):
+ def test_002_connect_invalid_src_port_neg(self):
sfg = gr.simple_flowgraph()
- sfg.define_component("dst", gr.null_sink(gr.sizeof_int))
+ src = gr.null_source(gr.sizeof_int)
+ dst = gr.null_sink(gr.sizeof_int)
self.assertRaises(ValueError,
- lambda: sfg.connect("src", 0, "dst", 0))
-
- def test_005_connect_unknown_dst(self):
- sfg = gr.simple_flowgraph()
- sfg.define_component("src", gr.null_source(gr.sizeof_int))
- self.assertRaises(ValueError,
- lambda: sfg.connect("src", 0, "dst", 0))
+ lambda: sfg.connect(src, -1, dst, 0))
- def test_006_connect_invalid_src_port_neg(self):
+ def test_003_connect_invalid_src_port_exceeds(self):
sfg = gr.simple_flowgraph()
- sfg.define_component("src", gr.null_source(gr.sizeof_int))
- sfg.define_component("dst", gr.null_sink(gr.sizeof_int))
+ src = gr.null_source(gr.sizeof_int)
+ dst = gr.null_sink(gr.sizeof_int)
self.assertRaises(ValueError,
- lambda: sfg.connect("src", -1, "dst", 0))
+ lambda: sfg.connect(src, 1, dst, 0))
- def test_007_connect_invalid_src_port_exceeds(self):
+ def test_004_connect_invalid_dst_port_neg(self):
sfg = gr.simple_flowgraph()
- sfg.define_component("src", gr.null_source(gr.sizeof_int))
- sfg.define_component("dst", gr.null_sink(gr.sizeof_int))
+ src = gr.null_source(gr.sizeof_int)
+ dst = gr.null_sink(gr.sizeof_int)
self.assertRaises(ValueError,
- lambda: sfg.connect("src", 1, "dst", 0))
+ lambda: sfg.connect(src, 0, dst, -1))
- def test_008_connect_invalid_dst_port_neg(self):
+ def test_005_connect_invalid_dst_port_exceeds(self):
sfg = gr.simple_flowgraph()
- sfg.define_component("src", gr.null_source(gr.sizeof_int))
- sfg.define_component("dst", gr.null_sink(gr.sizeof_int))
+ src = gr.null_source(gr.sizeof_int)
+ dst = gr.null_sink(gr.sizeof_int)
self.assertRaises(ValueError,
- lambda: sfg.connect("src", 0, "dst", -1))
+ lambda: sfg.connect(src, 0, dst, 1))
- def test_009_connect_invalid_dst_port_exceeds(self):
+ def test_006_connect_invalid_dst_port_in_use(self):
sfg = gr.simple_flowgraph()
- sfg.define_component("src", gr.null_source(gr.sizeof_int))
- sfg.define_component("dst", gr.null_sink(gr.sizeof_int))
+ src1 = gr.null_source(gr.sizeof_int)
+ src2 = gr.null_source(gr.sizeof_int)
+ dst = gr.null_sink(gr.sizeof_int)
+ sfg.connect(src1, 0, dst, 0)
self.assertRaises(ValueError,
- lambda: sfg.connect("src", 0, "dst", 1))
-
- def test_010_connect_invalid_dst_port_in_use(self):
- sfg = gr.simple_flowgraph()
- sfg.define_component("src1", gr.null_source(gr.sizeof_int))
- sfg.define_component("src2", gr.null_source(gr.sizeof_int))
- sfg.define_component("dst", gr.null_sink(gr.sizeof_int))
- sfg.connect("src1", 0, "dst", 0)
- self.assertRaises(ValueError,
- lambda: sfg.connect("src2", 0, "dst", 0))
+ lambda: sfg.connect(src2, 0, dst, 0))
- def test_011_connect_one_src_two_dst(self):
+ def test_007_connect_one_src_two_dst(self):
sfg = gr.simple_flowgraph()
- sfg.define_component("src", gr.null_source(gr.sizeof_int))
- sfg.define_component("dst1", gr.null_sink(gr.sizeof_int))
- sfg.define_component("dst2", gr.null_sink(gr.sizeof_int))
- sfg.connect("src", 0, "dst1", 0)
- sfg.connect("src", 0, "dst2", 0)
+ src = gr.null_source(gr.sizeof_int)
+ dst1 = gr.null_sink(gr.sizeof_int)
+ dst2 = gr.null_sink(gr.sizeof_int)
+ sfg.connect(src, 0, dst1, 0)
+ sfg.connect(src, 0, dst2, 0)
- def test_012_connect_type_mismatch(self):
+ def test_008_connect_type_mismatch(self):
sfg = gr.simple_flowgraph()
- sfg.define_component("src", gr.null_source(gr.sizeof_int))
- sfg.define_component("dst", gr.null_sink(gr.sizeof_char))
+ src = gr.null_source(gr.sizeof_int)
+ dst = gr.null_sink(gr.sizeof_char)
self.assertRaises(ValueError,
- lambda: sfg.connect("src", 0, "dst", 0))
+ lambda: sfg.connect(src, 0, dst, 0))
- def test_013_validate(self):
+ def test_009_validate(self):
sfg = gr.simple_flowgraph()
- sfg.define_component("src", gr.null_source(gr.sizeof_int))
- sfg.define_component("dst1", gr.null_sink(gr.sizeof_int))
- sfg.define_component("dst2", gr.null_sink(gr.sizeof_int))
- sfg.connect("src", 0, "dst1", 0)
- sfg.connect("src", 0, "dst2", 0)
+ src = gr.null_source(gr.sizeof_int)
+ dst1 = gr.null_sink(gr.sizeof_int)
+ dst2 = gr.null_sink(gr.sizeof_int)
+ sfg.connect(src, 0, dst1, 0)
+ sfg.connect(src, 0, dst2, 0)
sfg.validate()
- def test_014_validate(self):
+ def test_010_validate(self):
sfg = gr.simple_flowgraph()
- sfg.define_component("src1", gr.null_source (gr.sizeof_int))
- sfg.define_component("nop1", gr.nop (gr.sizeof_int))
- sfg.define_component("dst1", gr.null_sink (gr.sizeof_int))
- sfg.define_component("dst2", gr.null_sink (gr.sizeof_int))
- sfg.connect("src1", 0, "nop1", 0)
- sfg.connect("src1", 0, "nop1", 1)
- sfg.connect("nop1", 0, "dst1", 0)
- sfg.connect("nop1", 1, "dst2", 0)
- sfg.validate ()
+ src1 = gr.null_source (gr.sizeof_int)
+ nop1 = gr.nop (gr.sizeof_int)
+ dst1 = gr.null_sink (gr.sizeof_int)
+ dst2 = gr.null_sink (gr.sizeof_int)
+ sfg.connect(src1, 0, nop1, 0)
+ sfg.connect(src1, 0, nop1, 1)
+ sfg.connect(nop1, 0, dst1, 0)
+ sfg.connect(nop1, 1, dst2, 0)
+ sfg.validate()
- def test_015_validate(self):
+ def test_011_validate(self):
sfg = gr.simple_flowgraph()
- sfg.define_component("src1", gr.null_source (gr.sizeof_int))
- sfg.define_component("nop1", gr.nop (gr.sizeof_int))
- sfg.define_component("dst1", gr.null_sink (gr.sizeof_int))
- sfg.define_component("dst2", gr.null_sink (gr.sizeof_int))
- sfg.connect("src1", 0, "nop1", 0)
- sfg.connect("src1", 0, "nop1", 2)
- sfg.connect("nop1", 0, "dst1", 0)
- sfg.connect("nop1", 1, "dst2", 0)
+ src1 = gr.null_source (gr.sizeof_int)
+ nop1 = gr.nop (gr.sizeof_int)
+ dst1 = gr.null_sink (gr.sizeof_int)
+ dst2 = gr.null_sink (gr.sizeof_int)
+ sfg.connect(src1, 0, nop1, 0)
+ sfg.connect(src1, 0, nop1, 2)
+ sfg.connect(nop1, 0, dst1, 0)
+ sfg.connect(nop1, 1, dst2, 0)
self.assertRaises(RuntimeError,
- lambda: sfg.validate ())
-
- def test_016_validate(self):
+ lambda: sfg.validate())
+
+ def test_012_validate(self):
sfg = gr.simple_flowgraph()
- sfg.define_component("src1", gr.null_source (gr.sizeof_int))
- sfg.define_component("nop1", gr.nop (gr.sizeof_int))
- sfg.define_component("dst1", gr.null_sink (gr.sizeof_int))
- sfg.define_component("dst2", gr.null_sink (gr.sizeof_int))
- sfg.connect("src1", 0, "nop1", 0)
- sfg.connect("src1", 0, "nop1", 1)
- sfg.connect("nop1", 0, "dst1", 0)
- sfg.connect("nop1", 2, "dst2", 0)
+ src1 = gr.null_source (gr.sizeof_int)
+ nop1 = gr.nop (gr.sizeof_int)
+ dst1 = gr.null_sink (gr.sizeof_int)
+ dst2 = gr.null_sink (gr.sizeof_int)
+ sfg.connect(src1, 0, nop1, 0)
+ sfg.connect(src1, 0, nop1, 1)
+ sfg.connect(nop1, 0, dst1, 0)
+ sfg.connect(nop1, 2, dst2, 0)
self.assertRaises(RuntimeError,
lambda: sfg.validate ())
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Commit-gnuradio] r4933 - in gnuradio/branches/developers/jcorgan/hier2/gnuradio-core/src: lib/runtime python/gnuradio/gr,
jcorgan <=