[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Commit-gnuradio] r4037 - in gnuradio/branches/developers/jcorgan/hier/g
From: |
jcorgan |
Subject: |
[Commit-gnuradio] r4037 - in gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src: lib/runtime python/gnuradio/gr |
Date: |
Mon, 27 Nov 2006 23:23:20 -0700 (MST) |
Author: jcorgan
Date: 2006-11-27 23:23:20 -0700 (Mon, 27 Nov 2006)
New Revision: 4037
Modified:
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_basic_block.cc
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.cc
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.i
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.i
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.i
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.h
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_runtime_types.h
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.h
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_simple_flowgraph.i
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_simple_flowgraph_detail.cc
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_simple_flowgraph_detail.h
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/python/gnuradio/gr/qa_hier_block2.py
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/python/gnuradio/gr/qa_simple_flowgraph.py
Log:
Work in progress, clean up.
Modified:
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_basic_block.cc
===================================================================
---
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_basic_block.cc
2006-11-28 00:03:58 UTC (rev 4036)
+++
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_basic_block.cc
2006-11-28 06:23:20 UTC (rev 4037)
@@ -57,18 +57,3 @@
{
return shared_from_this();
}
-
-/*
-bool
-gr_basic_block::validate()
-{
- // Call my parent, get my assigned inputs and outputs, then call check
topology,
- // which may be overridden by descendent classes
-
- int ninputs = 0, noutputs = 0;
- if (d_parent)
- d_parent->get_child_topology(shared_from_this(), &ninputs, &noutputs);
-
- return check_topology(ninputs, noutputs);
-}
-*/
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-28 00:03:58 UTC (rev 4036)
+++
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_basic_block.h
2006-11-28 06:23:20 UTC (rev 4037)
@@ -41,12 +41,12 @@
class gr_basic_block : public boost::enable_shared_from_this<gr_basic_block>
{
protected:
-
- std::string d_name;
+ std::string d_name;
gr_io_signature_sptr d_input_signature;
gr_io_signature_sptr d_output_signature;
- long d_unique_id;
+ long d_unique_id;
+ //! Protected constructor prevents instantiation by non-derived classes
gr_basic_block(const std::string &name,
gr_io_signature_sptr input_signature,
gr_io_signature_sptr output_signature);
Modified:
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_block.cc
===================================================================
---
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_block.cc
2006-11-28 00:03:58 UTC (rev 4036)
+++
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_block.cc
2006-11-28 06:23:20 UTC (rev 4037)
@@ -29,8 +29,6 @@
#include <stdexcept>
#include <iostream>
-#define GR_BLOCK_DEBUG 1
-
gr_block::gr_block (const std::string &name,
gr_io_signature_sptr input_signature,
gr_io_signature_sptr output_signature)
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-28 00:03:58 UTC (rev 4036)
+++
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_block.h
2006-11-28 06:23:20 UTC (rev 4037)
@@ -189,19 +189,17 @@
private:
- gr_io_signature_sptr d_input_signature;
- gr_io_signature_sptr d_output_signature;
- int d_output_multiple;
- double d_relative_rate; // approx output_rate /
input_rate
- gr_block_detail_sptr d_detail; // implementation details
- unsigned d_history;
- bool d_fixed_rate;
+ int d_output_multiple;
+ double d_relative_rate; // approx output_rate /
input_rate
+ gr_block_detail_sptr d_detail; // implementation details
+ unsigned d_history;
+ bool d_fixed_rate;
protected:
gr_block (const std::string &name,
- gr_io_signature_sptr input_signature,
- gr_io_signature_sptr output_signature);
+ gr_io_signature_sptr input_signature,
+ gr_io_signature_sptr output_signature);
void set_fixed_rate(bool fixed_rate){ d_fixed_rate = fixed_rate; }
Modified:
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_block.i
===================================================================
---
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_block.i
2006-11-28 00:03:58 UTC (rev 4036)
+++
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_block.i
2006-11-28 06:23:20 UTC (rev 4037)
@@ -34,8 +34,8 @@
class gr_block : public gr_basic_block {
protected:
gr_block (const std::string &name,
- gr_io_signature_sptr input_signature,
- gr_io_signature_sptr output_signature);
+ gr_io_signature_sptr input_signature,
+ gr_io_signature_sptr output_signature);
public:
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-28 00:03:58 UTC (rev 4036)
+++
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_hier_block2.cc
2006-11-28 06:23:20 UTC (rev 4037)
@@ -32,15 +32,15 @@
#define GR_HIER_BLOCK2_DEBUG 1
gr_hier_block2_sptr gr_make_hier_block2(const std::string &name,
- gr_io_signature_sptr input_signature,
- gr_io_signature_sptr output_signature)
+ gr_io_signature_sptr input_signature,
+ gr_io_signature_sptr output_signature)
{
return gr_hier_block2_sptr(new gr_hier_block2(name, input_signature,
output_signature));
}
gr_hier_block2::gr_hier_block2(const std::string &name,
- gr_io_signature_sptr input_signature,
- gr_io_signature_sptr output_signature)
+ gr_io_signature_sptr input_signature,
+ gr_io_signature_sptr output_signature)
: gr_basic_block(name, input_signature, output_signature),
d_detail(new gr_hier_block2_detail(this))
{
@@ -63,22 +63,3 @@
{
d_detail->connect(src_name, src_port, dst_name, dst_port);
}
-
-void
-gr_hier_block2::flatten(gr_simple_flowgraph_sptr sfg, const std::string
&prefix)
-{
- flatten_components(sfg, prefix);
- flatten_edges(sfg, prefix);
-}
-
-void
-gr_hier_block2::flatten_components(gr_simple_flowgraph_sptr sfg, const
std::string &prefix)
-{
- d_detail->flatten_components(sfg, prefix);
-}
-
-void
-gr_hier_block2::flatten_edges(gr_simple_flowgraph_sptr sfg, const std::string
&prefix)
-{
- d_detail->flatten_edges(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-28 00:03:58 UTC (rev 4036)
+++
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_hier_block2.h
2006-11-28 06:23:20 UTC (rev 4037)
@@ -28,8 +28,8 @@
* \brief public constructor for gr_hier_block2
*/
gr_hier_block2_sptr gr_make_hier_block2(const std::string &name,
- gr_io_signature_sptr input_signature,
- gr_io_signature_sptr output_signature);
+ gr_io_signature_sptr input_signature,
+ gr_io_signature_sptr output_signature);
class gr_hier_block2_detail;
@@ -41,28 +41,27 @@
{
private:
friend class gr_hier_block2_detail;
+ friend class gr_runtime_impl;
friend gr_hier_block2_sptr gr_make_hier_block2(const std::string &name,
- gr_io_signature_sptr
input_signature,
- gr_io_signature_sptr
output_signature);
- gr_hier_block2_detail *d_detail;
-
-protected:
+ gr_io_signature_sptr
input_signature,
+ gr_io_signature_sptr
output_signature);
+
/*!
* \brief Private implementation details of gr_hier_block2
*/
+ gr_hier_block2_detail *d_detail;
+
+protected:
gr_hier_block2(const std::string &name,
- gr_io_signature_sptr input_signature,
- gr_io_signature_sptr output_signature);
+ gr_io_signature_sptr input_signature,
+ gr_io_signature_sptr output_signature);
public:
- ~gr_hier_block2();
+ virtual ~gr_hier_block2();
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);
- 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);
};
#endif /* INCLUDED_GR_HIER_BLOCK2_H */
Modified:
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_hier_block2.i
===================================================================
---
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_hier_block2.i
2006-11-28 00:03:58 UTC (rev 4036)
+++
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_hier_block2.i
2006-11-28 06:23:20 UTC (rev 4037)
@@ -30,26 +30,23 @@
// that instantiates one of these and passes through calls
%rename(hier_block2_swig) gr_make_hier_block2;
gr_hier_block2_sptr gr_make_hier_block2(const std::string name,
- gr_io_signature_sptr input_signature,
- gr_io_signature_sptr output_signature);
+ gr_io_signature_sptr input_signature,
+ gr_io_signature_sptr output_signature);
-/*!
- * \brief gr_hier_block2 - Container class for tree of gr_block's
- *
- */
class gr_hier_block2 : public gr_basic_block
{
+private:
gr_hier_block2(const std::string name,
- gr_io_signature_sptr input_signature,
- gr_io_signature_sptr output_signature);
+ gr_io_signature_sptr input_signature,
+ gr_io_signature_sptr output_signature);
public:
~gr_hier_block2 ();
// Add a named block to the container
void define_component(const std::string &name, gr_basic_block_sptr
basic_block)
- throw (std::invalid_argument);
+ throw (std::invalid_argument);
void connect(const std::string &src_name, int src_port,
- const std::string &dst_name, int dst_port)
- throw (std::invalid_argument);
+ const std::string &dst_name, int dst_port)
+ throw (std::invalid_argument);
};
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-28 00:03:58 UTC (rev 4036)
+++
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_hier_block2_detail.cc
2006-11-28 06:23:20 UTC (rev 4037)
@@ -46,9 +46,9 @@
{
gr_hier_component_miter_t p = d_components.find(name);
if (p != d_components.end())
- return p->second;
+ return p->second;
else
- return gr_basic_block_sptr();
+ return gr_basic_block_sptr();
}
void
@@ -58,28 +58,16 @@
throw std::invalid_argument("null block passed");
if (name == "self")
- throw std::invalid_argument("name is reserved");
+ throw std::invalid_argument("name is reserved");
// TODO: reject names with '.' inside
if (!lookup_block(name))
- d_components[name] = block;
+ d_components[name] = block;
else
- throw std::invalid_argument("name already in use");
+ throw std::invalid_argument("name already in use");
}
-std::string
-gr_hier_block2_detail::get_name_by_block(gr_basic_block_sptr block)
-{
- for (gr_hier_component_miter_t p = d_components.begin();
- p != d_components.end(); p++) {
- if (block == p->second)
- return p->first;
- }
-
- return std::string("");
-}
-
void
gr_hier_block2_detail::connect(const std::string &src_name, int src_port,
const std::string &dst_name, int dst_port)
@@ -89,22 +77,22 @@
// Check against our *input_signature* if we're wiring from one of our
external inputs
if (src_name == "self")
- src_io_signature = d_owner->input_signature();
+ src_io_signature = d_owner->input_signature();
else {
- 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();
+ 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();
}
// Check against our *output_signature* if we're wiring to one of our
external outputs
if (dst_name == "self")
dst_io_signature = d_owner->output_signature();
else {
- 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();
+ 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();
}
// Check port numbers are valid
@@ -115,8 +103,7 @@
check_dst_not_used(dst_name, dst_port);
// Check endpoint types match
- check_type_match(src_io_signature, src_port,
- dst_io_signature, dst_port);
+ check_type_match(src_io_signature, src_port, dst_io_signature, dst_port);
d_edges.push_back(gr_make_edge(src_name, src_port, dst_name, dst_port));
}
@@ -125,27 +112,26 @@
gr_hier_block2_detail::check_valid_port(gr_io_signature_sptr sig, int port)
{
if (port < 0)
- throw std::invalid_argument("port number must not be negative");
+ throw std::invalid_argument("port number must not be negative");
if (sig->max_streams() >= 0 && port >= sig->max_streams())
- throw std::invalid_argument("port number exceeds max streams");
+ throw std::invalid_argument("port number exceeds max streams");
}
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)
- throw std::invalid_argument("destination port in use");
+ if ((*p)->dst_name() == name && (*p)->dst_port() == port)
+ throw std::invalid_argument("destination port in use");
}
void
gr_hier_block2_detail::check_type_match(gr_io_signature_sptr src_sig, int
src_port,
- gr_io_signature_sptr dst_sig, int
dst_port)
+ gr_io_signature_sptr dst_sig, int
dst_port)
{
- if (src_sig->sizeof_stream_item(src_port) !=
- dst_sig->sizeof_stream_item(dst_port))
- throw std::invalid_argument("type mismatch");
+ if (src_sig->sizeof_stream_item(src_port) !=
dst_sig->sizeof_stream_item(dst_port))
+ throw std::invalid_argument("type mismatch");
}
std::string
@@ -157,18 +143,15 @@
gr_endpoint
gr_hier_block2_detail::match_endpoint(const std::string &name, int port, bool
is_input)
{
- std::string match_name;
- int match_port;
-
for (gr_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);
- }
- else {
- if ((*p)->dst_name() == name && (*p)->dst_port() == port)
- return resolve_endpoint((*p)->src_name(), (*p)->src_port(), "",
!is_input);
- }
+ if (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);
+ }
}
// Should never get here
@@ -177,7 +160,7 @@
gr_endpoint
gr_hier_block2_detail::resolve_endpoint(const std::string &name, int port,
- const std::string &prefix, bool
is_input)
+ const std::string &prefix, bool
is_input)
{
gr_basic_block_sptr basic_block = lookup_block(name);
@@ -189,9 +172,9 @@
// 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());
+ 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());
}
// Shouldn't ever get here
@@ -199,20 +182,27 @@
}
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
for (gr_hier_component_miter_t p = d_components.begin(); p !=
d_components.end(); p++) {
- std::string name = prepend_prefix(prefix, p->first);
+ std::string name = prepend_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);
+ 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);
- gr_hier_block2_sptr
hier_block2(boost::dynamic_pointer_cast<gr_hier_block2,
gr_basic_block>(basic_block));
- if (hier_block2)
- hier_block2->flatten_components(sfg, name);
+ 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);
}
}
@@ -221,21 +211,19 @@
{
// 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++) {
+ // Connections to self get resolved/added by parent if actually
connected
+ if ((*p)->src_name() == "self" || (*p)->dst_name() == "self")
+ continue;
- // Connections to self get resolved/added by parent
- if ((*p)->src_name() == "self" ||
- (*p)->dst_name() == "self")
- 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_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());
}
// 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->flatten_edges(sfg, prepend_prefix(prefix, p->first));
+ 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));
}
}
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-28 00:03:58 UTC (rev 4036)
+++
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_hier_block2_detail.h
2006-11-28 06:23:20 UTC (rev 4037)
@@ -32,7 +32,8 @@
{
private:
friend class gr_hier_block2;
-
+ friend class gr_runtime_impl;
+
// Constructor--it's private, only friends can instantiate
gr_hier_block2_detail(gr_hier_block2 *owner);
@@ -44,20 +45,19 @@
// 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);
-
void connect(const std::string &src_name, int src_port,
const std::string &dst_name, int dst_port);
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_io_signature_sptr src_sig, int src_port,
- gr_io_signature_sptr dst_sig, int dst_port);
+ 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,
- const std::string &prefix, bool is_input);
+ const std::string &prefix, bool is_input);
public:
~gr_hier_block2_detail();
Modified:
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_runtime.i
===================================================================
---
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_runtime.i
2006-11-28 00:03:58 UTC (rev 4036)
+++
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_runtime.i
2006-11-28 06:23:20 UTC (rev 4037)
@@ -33,9 +33,10 @@
gr_runtime(gr_hier_block2_sptr top_block);
public:
- void start();
+ void start()
+ throw (std::runtime_error);
void stop();
void wait();
void run()
- throw (std::runtime_error);
+ throw (std::runtime_error);
};
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-28 00:03:58 UTC (rev 4036)
+++
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_runtime_impl.cc
2006-11-28 06:23:20 UTC (rev 4037)
@@ -29,6 +29,7 @@
#include <gr_runtime_impl.h>
#include <gr_simple_flowgraph.h>
#include <gr_hier_block2.h>
+#include <gr_hier_block2_detail.h>
#include <stdexcept>
#include <iostream>
@@ -47,25 +48,25 @@
gr_runtime_impl::start()
{
if (GR_RUNTIME_IMPL_DEBUG)
- std::cout << "gr_runtime_impl::start()" << std::endl;
+ std::cout << "gr_runtime_impl::start()" << std::endl;
if (d_running)
- throw std::runtime_error("already running");
+ throw std::runtime_error("already running");
else
- d_running = true;
+ d_running = true;
- d_top_block->flatten(d_sfg);
- d_sfg->validate();
- d_sfg->setup_connections();
+ d_top_block->d_detail->flatten(d_sfg);
+ d_sfg->d_detail->validate();
+ d_sfg->d_detail->setup_connections();
}
void
gr_runtime_impl::stop()
{
if (GR_RUNTIME_IMPL_DEBUG)
- std::cout << "gr_runtime_impl::stop()" << std::endl;
+ std::cout << "gr_runtime_impl::stop()" << std::endl;
if (!d_running)
- return;
+ return;
// Stop
@@ -76,5 +77,5 @@
gr_runtime_impl::wait()
{
if (GR_RUNTIME_IMPL_DEBUG)
- std::cout << "gr_runtime_impl::wait()" << std::endl;
+ std::cout << "gr_runtime_impl::wait()" << std::endl;
}
Modified:
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_runtime_impl.h
===================================================================
---
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_runtime_impl.h
2006-11-28 00:03:58 UTC (rev 4036)
+++
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_runtime_impl.h
2006-11-28 06:23:20 UTC (rev 4037)
@@ -31,8 +31,8 @@
gr_runtime_impl(gr_hier_block2_sptr top_block);
friend class gr_runtime;
- bool d_running;
- gr_hier_block2_sptr d_top_block;
+ bool d_running;
+ gr_hier_block2_sptr d_top_block;
gr_simple_flowgraph_sptr d_sfg;
void start();
Modified:
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_runtime_types.h
===================================================================
---
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_runtime_types.h
2006-11-28 00:03:58 UTC (rev 4036)
+++
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_runtime_types.h
2006-11-28 06:23:20 UTC (rev 4037)
@@ -39,14 +39,14 @@
class gr_simple_flowgraph;
class gr_runtime;
-typedef boost::shared_ptr<gr_basic_block> gr_basic_block_sptr;
-typedef boost::shared_ptr<gr_block> gr_block_sptr;
-typedef boost::shared_ptr<gr_block_detail> gr_block_detail_sptr;
-typedef boost::shared_ptr<gr_hier_block2> gr_hier_block2_sptr;
-typedef boost::shared_ptr<gr_io_signature> gr_io_signature_sptr;
-typedef boost::shared_ptr<gr_buffer> gr_buffer_sptr;
-typedef boost::shared_ptr<gr_buffer_reader> gr_buffer_reader_sptr;
-typedef boost::shared_ptr<gr_runtime> gr_runtime_sptr;
+typedef boost::shared_ptr<gr_basic_block> gr_basic_block_sptr;
+typedef boost::shared_ptr<gr_block> gr_block_sptr;
+typedef boost::shared_ptr<gr_block_detail> gr_block_detail_sptr;
+typedef boost::shared_ptr<gr_hier_block2> gr_hier_block2_sptr;
+typedef boost::shared_ptr<gr_io_signature> gr_io_signature_sptr;
+typedef boost::shared_ptr<gr_buffer> gr_buffer_sptr;
+typedef boost::shared_ptr<gr_buffer_reader> gr_buffer_reader_sptr;
+typedef boost::shared_ptr<gr_runtime> gr_runtime_sptr;
typedef boost::shared_ptr<gr_simple_flowgraph> gr_simple_flowgraph_sptr;
#endif /* INCLUDED_GR_RUNTIME_TYPES_H */
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-28 00:03:58 UTC (rev 4036)
+++
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_simple_flowgraph.cc
2006-11-28 06:23:20 UTC (rev 4037)
@@ -49,13 +49,13 @@
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;
+ std::cout << "Defining block " << block << " as " << name << std::endl;
d_detail->define_component(name, block);
}
void
gr_simple_flowgraph::connect(const std::string &src_name, int src_port,
- const std::string &dst_name, int dst_port)
+ const std::string &dst_name, int dst_port)
{
d_detail->connect(src_name, src_port, dst_name, dst_port);
}
@@ -65,9 +65,3 @@
{
d_detail->validate();
}
-
-void
-gr_simple_flowgraph::setup_connections()
-{
- d_detail->setup_connections();
-}
Modified:
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_simple_flowgraph.h
===================================================================
---
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_simple_flowgraph.h
2006-11-28 00:03:58 UTC (rev 4036)
+++
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_simple_flowgraph.h
2006-11-28 06:23:20 UTC (rev 4037)
@@ -34,6 +34,7 @@
class gr_simple_flowgraph
{
private:
+ friend class gr_runtime_impl;
friend gr_simple_flowgraph_sptr gr_make_simple_flowgraph();
gr_simple_flowgraph();
@@ -44,9 +45,8 @@
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);
+ const std::string &dst, int dst_port);
void validate();
- void setup_connections();
};
#endif /* INCLUDED_GR_SIMPLE_FLOWGRAPH_H */
Modified:
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_simple_flowgraph.i
===================================================================
---
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_simple_flowgraph.i
2006-11-28 00:03:58 UTC (rev 4036)
+++
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_simple_flowgraph.i
2006-11-28 06:23:20 UTC (rev 4037)
@@ -36,12 +36,10 @@
public:
~gr_simple_flowgraph();
void define_component(const std::string name, gr_block_sptr block)
- throw (std::invalid_argument);
+ throw (std::invalid_argument);
void connect(const std::string &src, int src_port,
- const std::string &dst, int dst_port)
- throw (std::invalid_argument);
+ const std::string &dst, int dst_port)
+ throw (std::invalid_argument);
void validate()
- throw (std::runtime_error);
- void setup_connections()
- throw (std::runtime_error);
+ throw (std::runtime_error);
};
Modified:
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_simple_flowgraph_detail.cc
===================================================================
---
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_simple_flowgraph_detail.cc
2006-11-28 00:03:58 UTC (rev 4036)
+++
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_simple_flowgraph_detail.cc
2006-11-28 06:23:20 UTC (rev 4037)
@@ -66,38 +66,38 @@
{
gr_component_miter_t p = d_components.find(name);
if (p != d_components.end())
- return p->second;
+ return p->second;
else
- return gr_block_sptr();
+ return gr_block_sptr();
}
void
gr_simple_flowgraph_detail::define_component(const std::string &name,
gr_block_sptr block)
{
if (!block)
- throw std::invalid_argument("null block passed");
+ throw std::invalid_argument("null block passed");
if (!lookup_block(name))
- d_components[name] = block;
+ d_components[name] = block;
else
- throw std::invalid_argument("name already in use");
+ 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)
+ 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 << "Connecting " << src_name << ":" << src_port << "->"
- << dst_name << ":" << dst_port << std::endl;
+ << dst_name << ":" << dst_port << std::endl;
if (!src_block)
- throw std::invalid_argument("unknown src name");
+ throw std::invalid_argument("unknown src name");
if (!dst_block)
- throw std::invalid_argument("unknown dst name");
+ 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);
@@ -111,9 +111,9 @@
gr_simple_flowgraph_detail::check_valid_port(gr_io_signature_sptr sig, int
port)
{
if (port < 0)
- throw std::invalid_argument("negative port number");
+ throw std::invalid_argument("negative port number");
if (sig->max_streams() >= 0 && port >= sig->max_streams())
- throw std::invalid_argument("port number exceeds max");
+ throw std::invalid_argument("port number exceeds max");
}
void
@@ -126,13 +126,13 @@
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_block_sptr dst_block, int
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");
}
void
@@ -140,22 +140,22 @@
{
for (gr_component_miter_t p = d_components.begin(); p !=
d_components.end(); p++) {
if (GR_SIMPLE_FLOWGRAPH_DETAIL_DEBUG)
- std::cout << "Validating block named " << p->first << ", which is "
- << p->second << std::endl;
+ std::cout << "Validating block named " << p->first << ", which is "
+ << p->second << std::endl;
- std::vector<int> used_ports;
- int ninputs, noutputs;
-
- used_ports = calc_used_ports(p->first, true); // inputs
- ninputs = used_ports.size();
- check_contiguity(p->second, used_ports, true); // inputs
+ std::vector<int> used_ports;
+ int ninputs, noutputs;
- used_ports = calc_used_ports(p->first, false); // outputs
- noutputs = used_ports.size();
- check_contiguity(p->second, used_ports, false); // outputs
+ used_ports = calc_used_ports(p->first, true); // inputs
+ ninputs = used_ports.size();
+ check_contiguity(p->second, used_ports, true); // inputs
+
+ used_ports = calc_used_ports(p->first, false); // outputs
+ noutputs = used_ports.size();
+ check_contiguity(p->second, used_ports, false); // outputs
- if (!(p->second->check_topology(ninputs, noutputs)))
- throw std::runtime_error("check topology failed");
+ if (!(p->second->check_topology(ninputs, noutputs)))
+ throw std::runtime_error("check topology failed");
}
}
@@ -163,8 +163,8 @@
gr_simple_flowgraph_detail::calc_used_ports(const std::string &name, bool
check_inputs)
{
if (GR_SIMPLE_FLOWGRAPH_DETAIL_DEBUG)
- std::cout << "Calculating used " << (check_inputs ? "input " : "output
")
- << "ports...";
+ std::cout << "Calculating used " << (check_inputs ? "input " : "output
")
+ << "ports...";
std::vector<int> tmp, result;
std::insert_iterator<std::vector<int> > inserter(result, result.begin());
@@ -172,10 +172,10 @@
gr_edge_vector_t edges = calc_connections(name, check_inputs);
for (gr_edge_viter_t p = edges.begin(); p != edges.end(); p++) {
- if (check_inputs == true)
- tmp.push_back((*p)->dst_port());
- else
- tmp.push_back((*p)->src_port());
+ if (check_inputs == true)
+ tmp.push_back((*p)->dst_port());
+ else
+ tmp.push_back((*p)->src_port());
}
// remove duplicates
@@ -183,26 +183,25 @@
std::unique_copy(tmp.begin(), tmp.end(), inserter);
if (GR_SIMPLE_FLOWGRAPH_DETAIL_DEBUG)
- std::cout << result.size() << std::endl;
+ std::cout << result.size() << std::endl;
return result;
}
gr_edge_vector_t
-gr_simple_flowgraph_detail::calc_connections(const std::string &name,
- bool check_inputs)
+gr_simple_flowgraph_detail::calc_connections(const std::string &name, 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)
- result.push_back(*p);
- }
- else {
- if ((*p)->src_name() == name)
- result.push_back(*p);
- }
+ if (check_inputs) {
+ if ((*p)->dst_name() == name)
+ result.push_back(*p);
+ }
+ else {
+ if ((*p)->src_name() == name)
+ result.push_back(*p);
+ }
}
return result; // assumes no duplicates
@@ -210,48 +209,48 @@
void
gr_simple_flowgraph_detail::check_contiguity(gr_block_sptr block,
- const std::vector<int> &used_ports,
- bool check_inputs)
+ const std::vector<int>
&used_ports,
+ bool check_inputs)
{
if (GR_SIMPLE_FLOWGRAPH_DETAIL_DEBUG)
- std::cout << "Checking " << (check_inputs ? "input " : "output ")
- << "contiguity...";
+ std::cout << "Checking " << (check_inputs ? "input " : "output ")
+ << "contiguity...";
gr_io_signature_sptr sig =
- check_inputs ? block->input_signature() : block->output_signature();
+ check_inputs ? block->input_signature() : block->output_signature();
int nports = used_ports.size();
int min_ports = sig->min_streams();
if (nports == 0) {
- if (min_ports == 0) {
- if (GR_SIMPLE_FLOWGRAPH_DETAIL_DEBUG)
- std::cout << "ok." << std::endl;
- return;
- }
- else {
- if (GR_SIMPLE_FLOWGRAPH_DETAIL_DEBUG)
- std::cout << "needs " << min_ports << ", only has "
- << nports << std::endl;
+ if (min_ports == 0) {
+ if (GR_SIMPLE_FLOWGRAPH_DETAIL_DEBUG)
+ std::cout << "ok." << std::endl;
+ return;
+ }
+ else {
+ if (GR_SIMPLE_FLOWGRAPH_DETAIL_DEBUG)
+ std::cout << "needs " << min_ports << ", only has "
+ << nports << std::endl;
- throw std::runtime_error("insufficient ports");
- }
+ throw std::runtime_error("insufficient ports");
+ }
}
if (used_ports[nports-1]+1 != nports) {
- for (int i = 0; i < nports; i++) {
- if (used_ports[i] != i) {
- if (GR_SIMPLE_FLOWGRAPH_DETAIL_DEBUG)
- std::cout << "missing " << (check_inputs ? "input ":"output
")
- << i << std::endl;
+ for (int i = 0; i < nports; i++) {
+ if (used_ports[i] != i) {
+ if (GR_SIMPLE_FLOWGRAPH_DETAIL_DEBUG)
+ std::cout << "missing " << (check_inputs ? "input
":"output ")
+ << i << std::endl;
- throw std::runtime_error("missing input assignment");
+ throw std::runtime_error("missing input assignment");
+ }
}
- }
}
if (GR_SIMPLE_FLOWGRAPH_DETAIL_DEBUG)
- std::cout << "ok." << std::endl;
+ std::cout << "ok." << std::endl;
}
void
@@ -260,40 +259,40 @@
// Assign block details to component blocks
for (gr_component_miter_t p = d_components.begin(); p !=
d_components.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->first << "..."
<< std::endl;
- int ninputs = calc_used_ports(p->first, true).size();
- int noutputs = calc_used_ports(p->first, 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);
+ int ninputs = calc_used_ports(p->first, true).size();
+ int noutputs = calc_used_ports(p->first, 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);
}
// Connect inputs to outputs for each block
for(gr_component_miter_t p = d_components.begin(); p !=
d_components.end(); p++) {
if (GR_SIMPLE_FLOWGRAPH_DETAIL_DEBUG)
- std::cout << "Connecting inputs to " << p->first << "..." <<
std::endl;
+ std::cout << "Connecting inputs to " << p->first << "..." <<
std::endl;
- // 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);
+ // 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);
- // For each edge that feeds into it
- for (gr_edge_viter_t e = in_edges.begin(); e != in_edges.end(); e++) {
- // Set the input buffer 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());
- gr_buffer_sptr src_buffer = src_block->detail()->output(src_port);
+ // For each edge that feeds into it
+ for (gr_edge_viter_t e = in_edges.begin(); e != in_edges.end(); e++) {
+ // Set the input buffer 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());
+ 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;
+ if (GR_SIMPLE_FLOWGRAPH_DETAIL_DEBUG)
+ std::cout << "Setting input on " << (*e)->dst_name()
+ << ":" << dst_port << 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->second->history()-1));
+ }
}
}
@@ -306,21 +305,21 @@
// Make sure there are at least twice the output_multiple no. of items
if (nitems < 2*block->output_multiple()) // Note: this means
output_multiple()
- nitems = 2*block->output_multiple(); // can't be changed by block
dynamically
+ nitems = 2*block->output_multiple(); // can't be changed by block
dynamically
// 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);
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();
- int history = (*p)->history();
- nitems = std::max(nitems, 2*(decimation*multiple+history));
+ int decimation = (int)(1.0/(*p)->relative_rate());
+ int multiple = (*p)->output_multiple();
+ int history = (*p)->history();
+ nitems = std::max(nitems, 2*(decimation*multiple+history));
}
if (GR_SIMPLE_FLOWGRAPH_DETAIL_DEBUG)
- std::cout << "Allocating buffer for port " << port << " with "
- << nitems << " items of size " << item_size << std::endl;
+ std::cout << "Allocating buffer for port " << port << " with "
+ << nitems << " items of size " << item_size << std::endl;
return gr_make_buffer(nitems, item_size);
}
@@ -332,8 +331,8 @@
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_name() == name && (*p)->src_port() == port)
+ tmp.push_back(lookup_block((*p)->dst_name()));
// Remove duplicates
sort(tmp.begin(), tmp.end());
@@ -347,8 +346,8 @@
gr_edge_vector_t result;
for (gr_edge_viter_t p = d_edges.begin(); p != d_edges.end(); p++)
- if ((*p)->dst_name() == name)
- result.push_back(*p);
+ if ((*p)->dst_name() == name)
+ result.push_back(*p);
return result; // Assume no duplicates
}
Modified:
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_simple_flowgraph_detail.h
===================================================================
---
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_simple_flowgraph_detail.h
2006-11-28 00:03:58 UTC (rev 4036)
+++
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_simple_flowgraph_detail.h
2006-11-28 06:23:20 UTC (rev 4037)
@@ -52,7 +52,7 @@
{
private:
friend gr_edge_sptr gr_make_edge(const std::string &src_name, int src_port,
- const std::string &dst_name, int dst_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);
@@ -74,6 +74,8 @@
{
private:
friend class gr_simple_flowgraph;
+ friend class gr_runtime_impl;
+
gr_simple_flowgraph_detail();
gr_component_map_t d_components;
@@ -82,19 +84,16 @@
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);
+ const std::string &dst, int dst_port);
gr_block_sptr lookup_block(const std::string &name);
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);
+ gr_block_sptr dst_block, int dst_port);
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,
+ 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);
void setup_connections();
gr_buffer_sptr allocate_buffer(const std::string &name, int port);
Modified:
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/python/gnuradio/gr/qa_hier_block2.py
===================================================================
---
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/python/gnuradio/gr/qa_hier_block2.py
2006-11-28 00:03:58 UTC (rev 4036)
+++
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/python/gnuradio/gr/qa_hier_block2.py
2006-11-28 06:23:20 UTC (rev 4037)
@@ -42,17 +42,6 @@
self.assertRaises(ValueError,
lambda: hblock.define_component("src", gr.null_sink(gr.sizeof_int)))
- """ This is probably not going to stay
- def test_005_define_component_block_in_use(self):
- hblock = gr.hier_block2("test_block",
- gr.io_signature(1,1,gr.sizeof_int),
- gr.io_signature(1,1,gr.sizeof_int))
- nop = gr.nop(gr.sizeof_int)
- hblock.define_component("nop1", nop)
- self.assertRaises(ValueError,
- lambda: hblock.define_component("nop2", nop))
- """
-
def test_006_connect_internal(self):
hblock = gr.hier_block2("test_block",
gr.io_signature(1,1,gr.sizeof_int),
Modified:
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/python/gnuradio/gr/qa_simple_flowgraph.py
===================================================================
---
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/python/gnuradio/gr/qa_simple_flowgraph.py
2006-11-28 00:03:58 UTC (rev 4036)
+++
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/python/gnuradio/gr/qa_simple_flowgraph.py
2006-11-28 06:23:20 UTC (rev 4037)
@@ -138,35 +138,5 @@
self.assertRaises(RuntimeError,
lambda: sfg.validate ())
- def test_017_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()
- # pending implementation of disconnect
- #sfg.disconnect("src1", 0, "nop1", 1)
- #sfg.validate
- #self.assertRaises(RuntimeError,
- # lambda: sfg.disconnect("src1", 0, "nop1", 1))
-
- def test_018_setup(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 ()
- sfg.setup_connections()
-
if __name__ == "__main__":
gr_unittest.main()
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Commit-gnuradio] r4037 - in gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src: lib/runtime python/gnuradio/gr,
jcorgan <=