commit-gnuradio
[Top][All Lists]
Advanced

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

[Commit-gnuradio] r3990 - in gnuradio/branches/developers/jcorgan/hier/g


From: jcorgan
Subject: [Commit-gnuradio] r3990 - in gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src: lib/runtime python/gnuradio/gr
Date: Wed, 15 Nov 2006 17:17:52 -0700 (MST)

Author: jcorgan
Date: 2006-11-15 17:17:52 -0700 (Wed, 15 Nov 2006)
New Revision: 3990

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_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_runtime_impl.cc
   
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_runtime.py
Log:
Work in progress.  Cleanup and refactoring public/protected/private methods.

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-15 22:25:07 UTC (rev 3989)
+++ 
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_basic_block.cc
   2006-11-16 00:17:52 UTC (rev 3990)
@@ -26,6 +26,7 @@
 
 #include <gr_basic_block.h>
 #include <stdexcept>
+#include <iostream>
 
 static long s_next_id = 0;
 static long s_ncurrently_allocated = 0;
@@ -58,3 +59,16 @@
 {
     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-15 22:25:07 UTC (rev 3989)
+++ 
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_basic_block.h
    2006-11-16 00:17:52 UTC (rev 3990)
@@ -27,12 +27,17 @@
 #include <boost/enable_shared_from_this.hpp>
 #include <string>
 
+/*!
+ * \brief Abstract class implementing visitor pattern
+ * \ingroup internal
+ */
+
 class gr_tree_visitor
 {
 public:
     virtual ~gr_tree_visitor() {};
-    bool operator()(gr_basic_block_sptr block) { return visited(block); }
-    virtual bool visited(gr_basic_block_sptr block) = 0;
+    bool operator()(gr_basic_block_sptr block) { return visit(block); }
+    virtual bool visit(gr_basic_block_sptr block) = 0;
 };
 
 /*!
@@ -49,6 +54,9 @@
 class gr_basic_block : public boost::enable_shared_from_this<gr_basic_block>
 {
 protected:
+    friend class gr_tree_visitor;
+    friend class gr_runtime_impl;
+        
     std::string                 d_name;
     gr_basic_block      *d_parent;     // Temp until shared pointer method 
works
     gr_io_signature_sptr d_input_signature;
@@ -63,12 +71,22 @@
     void set_input_signature(gr_io_signature_sptr iosig) {
         d_input_signature = iosig;
     }
-
+    
     //! may only be called during constructor
     void set_output_signature(gr_io_signature_sptr iosig) {
         d_output_signature = iosig;
     }
 
+    // Adjusts arguments to reflect topology of passed child pointer
+    // Overridden in gr_hier_block2 to calculate from connection database
+    virtual void get_child_topology(gr_basic_block_sptr child, int &ninputs, 
int &noutputs)
+        { };
+        
+    /*! overridden in gr_hier_block2 to implement tree traversal
+     *  otherwise invoke callback with shared pointer to this object
+     */
+    virtual bool visit(gr_tree_visitor &visitor) { return 
visitor(shared_from_this()); }
+
 public:
     virtual ~gr_basic_block();
     long unique_id() const { return d_unique_id; }
@@ -76,17 +94,10 @@
     gr_io_signature_sptr input_signature() const  { return d_input_signature; }
     gr_io_signature_sptr output_signature() const { return d_output_signature; 
}
     gr_basic_block_sptr basic_block(); // Needed for Python type coercion
-    
     void set_parent(gr_basic_block *parent) { d_parent = parent; }
     gr_basic_block *parent() const { return d_parent; }
+    virtual bool validate();
 
-    virtual void get_child_topology(gr_basic_block_sptr child, int &ninputs, 
int &noutputs)
-        { };
-        
-    /*! overridden in gr_hier_block2 to implement tree traversal
-     *  otherwise invoke callback with shared pointer to this object
-     */
-    virtual bool visit(gr_tree_visitor &visitor) { return 
visitor(shared_from_this()); }
     /*!
      * \brief Confirm that ninputs and noutputs is an acceptable combination.
      *
@@ -101,10 +112,6 @@
      * and output gr_io_signatures.
      */
     virtual bool check_topology(int ninputs, int noutputs) { return true; }
-    /*! 
-     * overridden in gr_block and gr_hier_block2 for type specific behavior
-     */
-    virtual bool validate() { return true; }
 };
 
 typedef std::vector<gr_basic_block_sptr> gr_basic_block_vector_t;

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-15 22:25:07 UTC (rev 3989)
+++ 
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_block.cc
 2006-11-16 00:17:52 UTC (rev 3990)
@@ -112,19 +112,3 @@
 {
   throw std::runtime_error("Unimplemented");
 }
-
-bool
-gr_block::validate()
-{
-    if (GR_BLOCK_DEBUG)
-       std::cout << "gr_block::validate(): parent is " << d_parent << 
std::endl;
-
-    // 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_block.h
===================================================================
--- 
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_block.h
  2006-11-15 22:25:07 UTC (rev 3989)
+++ 
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_block.h
  2006-11-16 00:17:52 UTC (rev 3990)
@@ -196,10 +196,6 @@
   gr_block_detail_sptr d_detail;               // implementation details
   unsigned             d_history;
   bool                 d_fixed_rate;
-
-  // Overrides gr_basic_block.  Asks parent for assigned ports and calls
-  // check_topology on itself
-  virtual bool validate();
     
  protected:
 

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-15 22:25:07 UTC (rev 3989)
+++ 
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_hier_block2.cc
   2006-11-16 00:17:52 UTC (rev 3990)
@@ -29,8 +29,6 @@
 #include <gr_io_signature.h>
 #include <iostream>
 
-#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)
@@ -104,17 +102,14 @@
 bool
 gr_hier_block2::validate()
 {
-    if (GR_HIER_BLOCK2_DEBUG)
-       std::cout << "gr_hier_block2::validate(): parent is " << d_parent << 
std::endl;
-
-    return d_impl->validate();
+    // Make sure base class is ok, then do my stuff
+    return gr_basic_block::validate() && 
+           d_impl->validate();
 }
 
 bool
 gr_hier_block2::visit(gr_tree_visitor &visitor)
 {
-    if (GR_HIER_BLOCK2_DEBUG)
-       std::cout << "gr_hier_block2::visit" << std::endl;
     if (!visitor(shared_from_this()))
        return false;
        

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-15 22:25:07 UTC (rev 3989)
+++ 
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_hier_block2.h
    2006-11-16 00:17:52 UTC (rev 3990)
@@ -40,6 +40,7 @@
 class gr_hier_block2 : public gr_basic_block
 {
 private:
+    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);
@@ -51,11 +52,14 @@
 
     void get_child_topology(gr_basic_block_sptr child, int &ninputs, int 
&noutputs);
         
+    // Overrides gr_basic_block, invokes visitor call back on self and all 
children
+    virtual bool visit(gr_tree_visitor &visitor);
+
 protected: 
     gr_hier_block2(const std::string &name,
                   gr_io_signature_sptr input_signature,
                   gr_io_signature_sptr output_signature);
-    
+
 public:
     ~gr_hier_block2();
 
@@ -63,9 +67,6 @@
     void connect(const std::string &src_name, int src_port, 
                  const std::string &dst_name, int dst_port);
 
-    // Overrides gr_basic_block, invokes visitor call back on self and all 
children
-    virtual bool visit(gr_tree_visitor &visitor);
-
     // Overrides gr_basic_block, checks validity of connection/component 
databases
     virtual bool validate();
 };

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-15 22:25:07 UTC (rev 3989)
+++ 
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_runtime_impl.cc
  2006-11-16 00:17:52 UTC (rev 3990)
@@ -44,7 +44,7 @@
 class validation_visitor : public gr_tree_visitor
 {
 public:
-    virtual bool visited(gr_basic_block_sptr block)
+    virtual bool visit(gr_basic_block_sptr block)
        { return block->validate(); }
 };
 
@@ -59,6 +59,7 @@
     else
        d_running = true;
 
+    // Visit every node in the tree and call validate() on it
     validation_visitor visitor;
     if (!d_top_block->visit(visitor))
        throw std::runtime_error("tree validation failed");

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-15 22:25:07 UTC (rev 3989)
+++ 
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/python/gnuradio/gr/qa_hier_block2.py
    2006-11-16 00:17:52 UTC (rev 3990)
@@ -162,5 +162,19 @@
        hblock.define_component("nop1", nop1)
        self.assertRaises(ValueError, lambda: hblock.connect("nop1", 0, "self", 
0))
 
+    def test_018_check_topology(self):
+       hblock = gr.hier_block2("test_block", 
+                               gr.io_signature(0,0,gr.sizeof_int), 
+                               gr.io_signature(0,0,gr.sizeof_int))
+       hblock.check_topology(0, 0);
+
+    def test_019_validate(self):
+       hblock = gr.hier_block2("test_block", 
+                               gr.io_signature(0,0,gr.sizeof_int), 
+                               gr.io_signature(0,0,gr.sizeof_int))
+       runtime = gr.runtime(hblock)
+       runtime.run()
+               
+
 if __name__ == "__main__":
     gr_unittest.main()

Modified: 
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/python/gnuradio/gr/qa_runtime.py
===================================================================
--- 
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/python/gnuradio/gr/qa_runtime.py
        2006-11-15 22:25:07 UTC (rev 3989)
+++ 
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/python/gnuradio/gr/qa_runtime.py
        2006-11-16 00:17:52 UTC (rev 3990)
@@ -17,7 +17,7 @@
        runtime = gr.runtime(hblock)
        runtime.run()
 
-    def test_019_run_twice(self):
+    def test_002_run_twice(self):
        hblock = gr.hier_block2("test_block", 
                                gr.io_signature(0,0,0), 
                                gr.io_signature(0,0,0))





reply via email to

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