[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Commit-gnuradio] r3760 - gnuradio/branches/developers/jcorgan/cppwrap/g
From: |
jcorgan |
Subject: |
[Commit-gnuradio] r3760 - gnuradio/branches/developers/jcorgan/cppwrap/gnuradio-examples/native |
Date: |
Mon, 9 Oct 2006 23:56:21 -0600 (MDT) |
Author: jcorgan
Date: 2006-10-09 23:56:21 -0600 (Mon, 09 Oct 2006)
New Revision: 3760
Modified:
gnuradio/branches/developers/jcorgan/cppwrap/gnuradio-examples/native/gr_flow_graph.cc
gnuradio/branches/developers/jcorgan/cppwrap/gnuradio-examples/native/gr_flow_graph.h
Log:
Work in progress.
Implemented gr_flow_graph::validate() and sub-functions.
Modified:
gnuradio/branches/developers/jcorgan/cppwrap/gnuradio-examples/native/gr_flow_graph.cc
===================================================================
---
gnuradio/branches/developers/jcorgan/cppwrap/gnuradio-examples/native/gr_flow_graph.cc
2006-10-10 03:34:42 UTC (rev 3759)
+++
gnuradio/branches/developers/jcorgan/cppwrap/gnuradio-examples/native/gr_flow_graph.cc
2006-10-10 05:56:21 UTC (rev 3760)
@@ -135,6 +135,7 @@
gr_block_vector_iterator_t block;
gr_edge_vector_iterator_t edge;
+ // TODO: use sort() and unique() instead
for(edge = d_edges.begin(); edge != d_edges.end(); edge++) {
gr_block_sptr src_block = edge->first.first;
gr_block_sptr dst_block = edge->second.first;
@@ -153,8 +154,77 @@
void gr_flow_graph::validate()
{
+ gr_block_vector_iterator_t block;
+ for(block = d_blocks.begin(); block != d_blocks.end(); block++) {
+ std::vector<int> used_inputs = calc_used_inputs(*block);
+ std::vector<int> used_outputs = calc_used_outputs(*block);
+
+ int ninputs = check_contiguity(*block, (*block)->input_signature(),
used_inputs);
+ int noutputs = check_contiguity(*block, (*block)->output_signature(),
used_outputs);
+
+ printf("%i %i\n", used_inputs.size(), used_outputs.size());
+
+ if (!(*block)->check_topology(ninputs, noutputs))
+ throw std::invalid_argument("gr_flow_graph::validate");
+ }
}
+std::vector<int> gr_flow_graph::calc_used_inputs(gr_block_sptr block)
+{
+ gr_edge_vector_iterator_t edge;
+ std::vector<int> result;
+
+ for(edge = d_edges.begin(); edge != d_edges.end(); edge++) {
+ gr_block_sptr dst_block = edge->second.first;
+ if (dst_block == block)
+ result.push_back(edge->second.second);
+ }
+
+ return result;
+}
+
+std::vector<int> gr_flow_graph::calc_used_outputs(gr_block_sptr block)
+{
+ gr_edge_vector_iterator_t edge;
+ std::vector<int> result;
+
+ for(edge = d_edges.begin(); edge != d_edges.end(); edge++) {
+ gr_block_sptr src_block = edge->first.first;
+ if (src_block == block)
+ result.push_back(edge->first.second);
+ }
+
+ return result;
+}
+
+int gr_flow_graph::check_contiguity(gr_block_sptr block, gr_io_signature_sptr
sig,
+ std::vector<int> used_ports)
+{
+ sort(used_ports.begin(), used_ports.end());
+ unique(used_ports.begin(), used_ports.end());
+
+ int min_s = sig->min_streams();
+ int l = used_ports.size();
+
+ if (l == 0) {
+ if (min_s == 0)
+ return 0;
+ else
+ throw std::invalid_argument("gr_flow_graph::check_contiguity");
+ }
+
+ if (used_ports[l-1]+1 < min_s)
+ throw std::invalid_argument("gr_flow_graph::check_contiguity");
+
+ if (used_ports[l-1]+1 != l) {
+ for (int i = 0; i < l; i++)
+ if (used_ports[i] != i)
+ throw std::invalid_argument("gr_flow_graph::check_contiguity");
+ }
+
+ return l;
+}
+
void gr_flow_graph::assign_details()
{
}
Modified:
gnuradio/branches/developers/jcorgan/cppwrap/gnuradio-examples/native/gr_flow_graph.h
===================================================================
---
gnuradio/branches/developers/jcorgan/cppwrap/gnuradio-examples/native/gr_flow_graph.h
2006-10-10 03:34:42 UTC (rev 3759)
+++
gnuradio/branches/developers/jcorgan/cppwrap/gnuradio-examples/native/gr_flow_graph.h
2006-10-10 05:56:21 UTC (rev 3760)
@@ -50,6 +50,10 @@
void setup_connections();
void create_block_list();
void validate();
+ std::vector<int> calc_used_inputs(gr_block_sptr block);
+ std::vector<int> calc_used_outputs(gr_block_sptr block);
+ int check_contiguity(gr_block_sptr block, gr_io_signature_sptr sig,
+ std::vector<int> used_ports);
void assign_details();
void assign_buffers();
void connect_inputs();
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Commit-gnuradio] r3760 - gnuradio/branches/developers/jcorgan/cppwrap/gnuradio-examples/native,
jcorgan <=