commit-gnuradio
[Top][All Lists]
Advanced

[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)





reply via email to

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