commit-gnuradio
[Top][All Lists]
Advanced

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

[Commit-gnuradio] r5129 - gnuradio/branches/developers/jcorgan/hier2/gnu


From: jcorgan
Subject: [Commit-gnuradio] r5129 - gnuradio/branches/developers/jcorgan/hier2/gnuradio-core/src/lib/runtime
Date: Thu, 26 Apr 2007 14:02:35 -0600 (MDT)

Author: jcorgan
Date: 2007-04-26 14:02:35 -0600 (Thu, 26 Apr 2007)
New Revision: 5129

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.h
Log:
Work in progress, still debugging.

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-26 19:35:28 UTC (rev 5128)
+++ 
gnuradio/branches/developers/jcorgan/hier2/gnuradio-core/src/lib/runtime/gr_hier_block2_detail.cc
   2007-04-26 20:02:35 UTC (rev 5129)
@@ -29,9 +29,13 @@
 #include <stdexcept>
 #include <iostream>
 
+#define GR_HIER_BLOCK2_DETAIL_DEBUG 1
+
 gr_hier_block2_detail::gr_hier_block2_detail(gr_hier_block2 *owner) :
   d_owner(owner), 
-  d_fg(gr_make_simple_flowgraph())
+  d_fg(gr_make_simple_flowgraph()),
+  d_inputs(owner->input_signature()->max_streams()),
+  d_outputs(owner->output_signature()->max_streams())
 {
 }
 
@@ -44,6 +48,15 @@
 gr_hier_block2_detail::connect(gr_basic_block_sptr src, int src_port, 
                                gr_basic_block_sptr dst, int dst_port)
 {
+  if (src.get() == dst.get())
+    throw std::runtime_error("src and destination blocks cannot be the same");
+
+  if (src.get() == d_owner)
+    return assign_output(src_port, dst_port, dst);
+
+  if (dst.get() == d_owner)
+    return assign_input(dst_port, src_port, src);
+
   d_fg->connect(src, src_port, dst, dst_port);
 
   // TODO: connects to NC
@@ -76,6 +89,24 @@
   throw std::runtime_error("unable to match endpoint");
 }
 
+void
+gr_hier_block2_detail::assign_input(int my_port, int port, gr_basic_block_sptr 
block)
+{
+  if (port < 0 || port >= (signed)d_inputs.size())
+    throw std::invalid_argument("input port number out of range");
+
+  d_inputs[my_port] = gr_endpoint(block, port);
+}
+
+void
+gr_hier_block2_detail::assign_output(int my_port, int port, 
gr_basic_block_sptr block)
+{
+  if (port < 0 || port >= (signed)d_outputs.size())
+    throw std::invalid_argument("output port number out of range");
+
+  d_outputs[my_port] = gr_endpoint(block, port);
+}
+
 gr_endpoint
 gr_hier_block2_detail::resolve_endpoint(const gr_endpoint &endp, bool is_input)
 {

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-26 19:35:28 UTC (rev 5128)
+++ 
gnuradio/branches/developers/jcorgan/hier2/gnuradio-core/src/lib/runtime/gr_hier_block2_detail.h
    2007-04-26 20:02:35 UTC (rev 5129)
@@ -37,13 +37,16 @@
     // Private implementation data
     gr_hier_block2 *d_owner;
     gr_simple_flowgraph_sptr d_fg;
+    gr_endpoint_vector_t d_inputs;
+    gr_endpoint_vector_t d_outputs;
         
     // Private implementation methods
     void connect(gr_basic_block_sptr src, int src_port, 
                  gr_basic_block_sptr dst, int dst_port);
     void disconnect(gr_basic_block_sptr, int src_port, 
                     gr_basic_block_sptr, int dst_port);
-
+    void assign_input(int my_port, int port, gr_basic_block_sptr block);
+    void assign_output(int my_port, int port, gr_basic_block_sptr block);
     void flatten(gr_simple_flowgraph_sptr sfg);
     gr_endpoint match_endpoint(const gr_endpoint &endp, bool is_input);
     gr_endpoint resolve_endpoint(const gr_endpoint &endp, bool is_input);

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-26 19:35:28 UTC (rev 5128)
+++ 
gnuradio/branches/developers/jcorgan/hier2/gnuradio-core/src/lib/runtime/gr_simple_flowgraph.h
      2007-04-26 20:02:35 UTC (rev 5129)
@@ -34,15 +34,19 @@
 class gr_endpoint
 {
 private:
+  friend class gr_hier_block2_detail;
   gr_basic_block_sptr d_block;
   int d_port;
 
 public:
+  gr_endpoint() : d_block(), d_port(0) { } // Internal use only
   gr_endpoint(gr_basic_block_sptr block, int port) { d_block = block; d_port = 
port; }
   gr_basic_block_sptr block() const { return d_block; }
   int port() const { return d_port; }
 };    
 
+typedef std::vector<gr_endpoint> gr_endpoint_vector_t;
+
 /*!
  *\brief Class representing a low-level, "flattened" flow graph
  *





reply via email to

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