[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Commit-gnuradio] r6359 - in gnuradio/branches/developers/jcorgan/t162/g
From: |
jcorgan |
Subject: |
[Commit-gnuradio] r6359 - in gnuradio/branches/developers/jcorgan/t162/gnuradio-core/src: lib/runtime python/gnuradio/gr |
Date: |
Fri, 7 Sep 2007 22:25:25 -0600 (MDT) |
Author: jcorgan
Date: 2007-09-07 22:25:24 -0600 (Fri, 07 Sep 2007)
New Revision: 6359
Modified:
gnuradio/branches/developers/jcorgan/t162/gnuradio-core/src/lib/runtime/gr_hier_block2.cc
gnuradio/branches/developers/jcorgan/t162/gnuradio-core/src/lib/runtime/gr_hier_block2.h
gnuradio/branches/developers/jcorgan/t162/gnuradio-core/src/lib/runtime/gr_hier_block2.i
gnuradio/branches/developers/jcorgan/t162/gnuradio-core/src/lib/runtime/gr_hier_block2_detail.cc
gnuradio/branches/developers/jcorgan/t162/gnuradio-core/src/lib/runtime/gr_hier_block2_detail.h
gnuradio/branches/developers/jcorgan/t162/gnuradio-core/src/python/gnuradio/gr/hier_block2.py
gnuradio/branches/developers/jcorgan/t162/gnuradio-core/src/python/gnuradio/gr/qa_hier_block2.py
gnuradio/branches/developers/jcorgan/t162/gnuradio-core/src/python/gnuradio/gr/top_block.py
Log:
Work-in-progress
Modified:
gnuradio/branches/developers/jcorgan/t162/gnuradio-core/src/lib/runtime/gr_hier_block2.cc
===================================================================
---
gnuradio/branches/developers/jcorgan/t162/gnuradio-core/src/lib/runtime/gr_hier_block2.cc
2007-09-08 03:01:53 UTC (rev 6358)
+++
gnuradio/branches/developers/jcorgan/t162/gnuradio-core/src/lib/runtime/gr_hier_block2.cc
2007-09-08 04:25:24 UTC (rev 6359)
@@ -65,6 +65,12 @@
}
void
+gr_hier_block2::disconnect(gr_basic_block_sptr block)
+{
+ d_detail->disconnect(block);
+}
+
+void
gr_hier_block2::disconnect(gr_basic_block_sptr src, int src_port,
gr_basic_block_sptr dst, int dst_port)
{
Modified:
gnuradio/branches/developers/jcorgan/t162/gnuradio-core/src/lib/runtime/gr_hier_block2.h
===================================================================
---
gnuradio/branches/developers/jcorgan/t162/gnuradio-core/src/lib/runtime/gr_hier_block2.h
2007-09-08 03:01:53 UTC (rev 6358)
+++
gnuradio/branches/developers/jcorgan/t162/gnuradio-core/src/lib/runtime/gr_hier_block2.h
2007-09-08 04:25:24 UTC (rev 6359)
@@ -58,34 +58,17 @@
public:
virtual ~gr_hier_block2();
- void connect(gr_basic_block_sptr src);
+ void connect(gr_basic_block_sptr block);
void connect(gr_basic_block_sptr src, int src_port,
gr_basic_block_sptr dst, int dst_port);
+ void disconnect(gr_basic_block_sptr block);
+
void disconnect(gr_basic_block_sptr src, int src_port,
gr_basic_block_sptr dst, int dst_port);
- /*!
- * Lock a flowgraph in preparation for reconfiguration. When an equal
- * number of calls to lock() and unlock() have occurred, the flowgraph
- * will be restarted automatically.
- *
- * N.B. lock() and unlock() cannot be called from a flowgraph thread
- * (E.g., gr_block::work method) or deadlock will occur when
- * reconfiguration happens.
- */
virtual void lock();
-
- /*!
- * Lock a flowgraph in preparation for reconfiguration. When an equal
- * number of calls to lock() and unlock() have occurred, the flowgraph
- * will be restarted automatically.
- *
- * N.B. lock() and unlock() cannot be called from a flowgraph thread
- * (E.g., gr_block::work method) or deadlock will occur when
- * reconfiguration happens.
- */
virtual void unlock();
gr_flat_flowgraph_sptr flatten() const;
Modified:
gnuradio/branches/developers/jcorgan/t162/gnuradio-core/src/lib/runtime/gr_hier_block2.i
===================================================================
---
gnuradio/branches/developers/jcorgan/t162/gnuradio-core/src/lib/runtime/gr_hier_block2.i
2007-09-08 03:01:53 UTC (rev 6358)
+++
gnuradio/branches/developers/jcorgan/t162/gnuradio-core/src/lib/runtime/gr_hier_block2.i
2007-09-08 04:25:24 UTC (rev 6359)
@@ -36,21 +36,23 @@
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_hier_block2(const std::string name,
+ gr_io_signature_sptr input_signature,
+ gr_io_signature_sptr output_signature);
+
public:
- ~gr_hier_block2 ();
-
- void connect(gr_basic_block_sptr block)
- throw (std::invalid_argument);
- void connect(gr_basic_block_sptr src, int src_port,
- gr_basic_block_sptr dst, int dst_port)
- throw (std::invalid_argument);
- void disconnect(gr_basic_block_sptr src, int src_port,
- gr_basic_block_sptr dst, int dst_port)
- throw (std::invalid_argument);
- void lock();
- void unlock();
+ ~gr_hier_block2 ();
+
+ void connect(gr_basic_block_sptr block)
+ throw (std::invalid_argument);
+ void connect(gr_basic_block_sptr src, int src_port,
+ gr_basic_block_sptr dst, int dst_port)
+ throw (std::invalid_argument);
+ void disconnect(gr_basic_block_sptr block)
+ throw (std::invalid_argument);
+ void disconnect(gr_basic_block_sptr src, int src_port,
+ gr_basic_block_sptr dst, int dst_port)
+ throw (std::invalid_argument);
+ void lock();
+ void unlock();
};
Modified:
gnuradio/branches/developers/jcorgan/t162/gnuradio-core/src/lib/runtime/gr_hier_block2_detail.cc
===================================================================
---
gnuradio/branches/developers/jcorgan/t162/gnuradio-core/src/lib/runtime/gr_hier_block2_detail.cc
2007-09-08 03:01:53 UTC (rev 6358)
+++
gnuradio/branches/developers/jcorgan/t162/gnuradio-core/src/lib/runtime/gr_hier_block2_detail.cc
2007-09-08 04:25:24 UTC (rev 6359)
@@ -121,6 +121,21 @@
// TODO: connects to NC
}
+void
+gr_hier_block2_detail::disconnect(gr_basic_block_sptr block)
+{
+ for (gr_basic_block_viter_t p = d_blocks.begin(); p != d_blocks.end(); p++) {
+ if (*p == block) {
+ d_blocks.erase(p);
+ return;
+ }
+ }
+
+ std::stringstream msg;
+ msg << "cannot disconnect block " << block << ", not found";
+ throw std::invalid_argument(msg.str());
+}
+
void
gr_hier_block2_detail::disconnect(gr_basic_block_sptr src, int src_port,
gr_basic_block_sptr dst, int dst_port)
Modified:
gnuradio/branches/developers/jcorgan/t162/gnuradio-core/src/lib/runtime/gr_hier_block2_detail.h
===================================================================
---
gnuradio/branches/developers/jcorgan/t162/gnuradio-core/src/lib/runtime/gr_hier_block2_detail.h
2007-09-08 03:01:53 UTC (rev 6358)
+++
gnuradio/branches/developers/jcorgan/t162/gnuradio-core/src/lib/runtime/gr_hier_block2_detail.h
2007-09-08 04:25:24 UTC (rev 6359)
@@ -27,39 +27,36 @@
class gr_hier_block2_detail : boost::noncopyable
{
-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);
+public:
+ gr_hier_block2_detail(gr_hier_block2 *owner);
+ ~gr_hier_block2_detail();
- // Private implementation data
- gr_hier_block2 *d_owner;
- gr_hier_block2_detail *d_parent_detail;
- gr_flowgraph_sptr d_fg;
- gr_endpoint_vector_t d_inputs;
- gr_endpoint_vector_t d_outputs;
- gr_basic_block_vector_t d_blocks;
-
- // Private implementation methods
- void connect(gr_basic_block_sptr block);
- 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 connect_input(int my_port, int port, gr_basic_block_sptr block);
- void connect_output(int my_port, int port, gr_basic_block_sptr block);
- void disconnect_input(int my_port, int port, gr_basic_block_sptr block);
- void disconnect_output(int my_port, int port, gr_basic_block_sptr block);
- void flatten_aux(gr_flat_flowgraph_sptr sfg) const;
- gr_endpoint resolve_port(int port, bool is_input);
- gr_endpoint resolve_endpoint(const gr_endpoint &endp, bool is_input) const;
- void lock();
- void unlock();
+ void connect(gr_basic_block_sptr block);
+ void connect(gr_basic_block_sptr src, int src_port,
+ gr_basic_block_sptr dst, int dst_port);
+ void disconnect(gr_basic_block_sptr block);
+ void disconnect(gr_basic_block_sptr, int src_port,
+ gr_basic_block_sptr, int dst_port);
+ void lock();
+ void unlock();
+ void flatten_aux(gr_flat_flowgraph_sptr sfg) const;
-public:
- ~gr_hier_block2_detail();
+private:
+
+ // Private implementation data
+ gr_hier_block2 *d_owner;
+ gr_hier_block2_detail *d_parent_detail;
+ gr_flowgraph_sptr d_fg;
+ gr_endpoint_vector_t d_inputs;
+ gr_endpoint_vector_t d_outputs;
+ gr_basic_block_vector_t d_blocks;
+
+ void connect_input(int my_port, int port, gr_basic_block_sptr block);
+ void connect_output(int my_port, int port, gr_basic_block_sptr block);
+ void disconnect_input(int my_port, int port, gr_basic_block_sptr block);
+ void disconnect_output(int my_port, int port, gr_basic_block_sptr block);
+ gr_endpoint resolve_port(int port, bool is_input);
+ gr_endpoint resolve_endpoint(const gr_endpoint &endp, bool is_input) const;
};
#endif /* INCLUDED_GR_HIER_BLOCK2_DETAIL_H */
Modified:
gnuradio/branches/developers/jcorgan/t162/gnuradio-core/src/python/gnuradio/gr/hier_block2.py
===================================================================
---
gnuradio/branches/developers/jcorgan/t162/gnuradio-core/src/python/gnuradio/gr/hier_block2.py
2007-09-08 03:01:53 UTC (rev 6358)
+++
gnuradio/branches/developers/jcorgan/t162/gnuradio-core/src/python/gnuradio/gr/hier_block2.py
2007-09-08 04:25:24 UTC (rev 6359)
@@ -37,7 +37,7 @@
return getattr(self._hb, name)
def connect(self, *points):
- '''connect requires two or more arguments that can be coerced to
endpoints.
+ '''connect requires one or more arguments that can be coerced to
endpoints.
If more than two arguments are provided, they are connected together
successively.
'''
if len (points) < 1:
@@ -65,13 +65,17 @@
raise ValueError("unable to coerce endpoint")
def disconnect(self, *points):
- '''connect requires two or more arguments that can be coerced to
endpoints.
+ '''connect requires one or more arguments that can be coerced to
endpoints.
If more than two arguments are provided, they are disconnected
successively.
'''
- if len (points) < 2:
+ if len (points) < 1:
raise ValueError, ("disconnect requires at least two endpoints; %d
provided." % (len (points),))
- for i in range (1, len (points)):
- self._disconnect(points[i-1], points[i])
+ else:
+ if len (points) == 1:
+ self._hb.disconnect(points[0].basic_block())
+ else:
+ for i in range (1, len (points)):
+ self._disconnect(points[i-1], points[i])
def _disconnect(self, src, dst):
(src_block, src_port) = self._coerce_endpoint(src)
Modified:
gnuradio/branches/developers/jcorgan/t162/gnuradio-core/src/python/gnuradio/gr/qa_hier_block2.py
===================================================================
---
gnuradio/branches/developers/jcorgan/t162/gnuradio-core/src/python/gnuradio/gr/qa_hier_block2.py
2007-09-08 03:01:53 UTC (rev 6358)
+++
gnuradio/branches/developers/jcorgan/t162/gnuradio-core/src/python/gnuradio/gr/qa_hier_block2.py
2007-09-08 04:25:24 UTC (rev 6359)
@@ -187,5 +187,45 @@
hblock.run()
self.assertEquals(data, dst.data())
+ def test_021_connect_single(self):
+ hblock = gr.top_block("test_block")
+ blk = gr.hier_block2("block",
+ gr.io_signature(0, 0, 0),
+ gr.io_signature(0, 0, 0))
+ hblock.connect(blk)
+
+ def test_022_connect_single_with_ports(self):
+ hblock = gr.top_block("test_block")
+ blk = gr.hier_block2("block",
+ gr.io_signature(1, 1, 1),
+ gr.io_signature(1, 1, 1))
+ self.assertRaises(ValueError,
+ lambda: hblock.connect(blk))
+
+ def test_023_connect_single_twice(self):
+ hblock = gr.top_block("test_block")
+ blk = gr.hier_block2("block",
+ gr.io_signature(0, 0, 0),
+ gr.io_signature(0, 0, 0))
+ hblock.connect(blk)
+ self.assertRaises(ValueError,
+ lambda: hblock.connect(blk))
+
+ def test_024_disconnect_single(self):
+ hblock = gr.top_block("test_block")
+ blk = gr.hier_block2("block",
+ gr.io_signature(0, 0, 0),
+ gr.io_signature(0, 0, 0))
+ hblock.connect(blk)
+ hblock.disconnect(blk)
+
+ def test_025_disconnect_single_not_connected(self):
+ hblock = gr.top_block("test_block")
+ blk = gr.hier_block2("block",
+ gr.io_signature(0, 0, 0),
+ gr.io_signature(0, 0, 0))
+ self.assertRaises(ValueError,
+ lambda: hblock.disconnect(blk))
+
if __name__ == "__main__":
gr_unittest.main()
Modified:
gnuradio/branches/developers/jcorgan/t162/gnuradio-core/src/python/gnuradio/gr/top_block.py
===================================================================
---
gnuradio/branches/developers/jcorgan/t162/gnuradio-core/src/python/gnuradio/gr/top_block.py
2007-09-08 03:01:53 UTC (rev 6358)
+++
gnuradio/branches/developers/jcorgan/t162/gnuradio-core/src/python/gnuradio/gr/top_block.py
2007-09-08 04:25:24 UTC (rev 6359)
@@ -51,13 +51,17 @@
# in the original C++ class (gr_hier_block2), then they would all be
inherited here
def connect(self, *points):
- '''connect requires two or more arguments that can be coerced to
endpoints.
+ '''connect requires one or more arguments that can be coerced to
endpoints.
If more than two arguments are provided, they are connected together
successively.
'''
- if len (points) < 2:
- raise ValueError, ("connect requires at least two endpoints; %d
provided." % (len (points),))
- for i in range (1, len (points)):
- self._connect(points[i-1], points[i])
+ if len (points) < 1:
+ raise ValueError, ("connect requires at least one endpoint; %d
provided." % (len (points),))
+ else:
+ if len(points) == 1:
+ self._tb.connect(points[0].basic_block())
+ else:
+ for i in range (1, len (points)):
+ self._connect(points[i-1], points[i])
def _connect(self, src, dst):
(src_block, src_port) = self._coerce_endpoint(src)
@@ -75,13 +79,17 @@
raise ValueError("unable to coerce endpoint")
def disconnect(self, *points):
- '''connect requires two or more arguments that can be coerced to
endpoints.
+ '''connect requires one or more arguments that can be coerced to
endpoints.
If more than two arguments are provided, they are disconnected
successively.
'''
- if len (points) < 2:
+ if len (points) < 1:
raise ValueError, ("disconnect requires at least two endpoints; %d
provided." % (len (points),))
- for i in range (1, len (points)):
- self._disconnect(points[i-1], points[i])
+ else:
+ if len(points) == 1:
+ self._tb.disconnect(points[0].basic_block())
+ else:
+ for i in range (1, len (points)):
+ self._disconnect(points[i-1], points[i])
def _disconnect(self, src, dst):
(src_block, src_port) = self._coerce_endpoint(src)
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Commit-gnuradio] r6359 - in gnuradio/branches/developers/jcorgan/t162/gnuradio-core/src: lib/runtime python/gnuradio/gr,
jcorgan <=