commit-gnuradio
[Top][All Lists]
Advanced

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

[Commit-gnuradio] r3970 - gnuradio/branches/developers/jcorgan/hier/gnur


From: jcorgan
Subject: [Commit-gnuradio] r3970 - gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime
Date: Sat, 11 Nov 2006 16:21:12 -0700 (MST)

Author: jcorgan
Date: 2006-11-11 16:21:12 -0700 (Sat, 11 Nov 2006)
New Revision: 3970

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_hier_block2.h
   
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_runtime_impl.cc
Log:
Work in progress.

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-11 20:49:40 UTC (rev 3969)
+++ 
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_basic_block.h
    2006-11-11 23:21:12 UTC (rev 3970)
@@ -27,6 +27,14 @@
 #include <boost/enable_shared_from_this.hpp>
 #include <string>
 
+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;
+};
+
 /*!
  * \brief The abstract base class for all signal processing blocks.
  * \ingroup block
@@ -60,9 +68,7 @@
         d_output_signature = iosig;
     }
 
-    //! overridden in gr_block and gr_hier_block2 for type specific behavior
-    virtual bool validate() { return true; }
-
+    
 public:
     virtual ~gr_basic_block();
     long unique_id() const { return d_unique_id; }
@@ -71,6 +77,10 @@
     gr_io_signature_sptr output_signature() const { return d_output_signature; 
}
     gr_basic_block_sptr basic_block();
 
+    /*! 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.
      *
@@ -85,6 +95,10 @@
      * 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; }
 };
 
 long gr_basic_block_ncurrently_allocated();

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-11 20:49:40 UTC (rev 3969)
+++ 
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_hier_block2.h
    2006-11-11 23:21:12 UTC (rev 3970)
@@ -53,7 +53,7 @@
     gr_hier_block2(const std::string &name,
                   gr_io_signature_sptr input_signature,
                   gr_io_signature_sptr output_signature);
-
+    
 public:
     ~gr_hier_block2();
 
@@ -61,8 +61,8 @@
     void connect(const std::string &src_name, int src_port, 
                  const std::string &dst_name, int dst_port);
 
-    // Overrides gr_basic_block, performs recursive validation of connections
-    bool validate();
+    // Overrides gr_basic_block, checks validity of connection/component 
databases
+    virtual bool validate();
 };
 
 inline std::ostream &operator << (std::ostream &os, gr_basic_block_sptr 
basic_block)

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-11 20:49:40 UTC (rev 3969)
+++ 
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_runtime_impl.cc
  2006-11-11 23:21:12 UTC (rev 3970)
@@ -30,6 +30,7 @@
 #include <gr_hier_block2.h>
 #include <stdexcept>
 #include <iostream>
+#include <boost/bind.hpp>
 
 gr_runtime_impl::gr_runtime_impl(gr_hier_block2_sptr top_block) :
 d_running(false),
@@ -41,6 +42,13 @@
 {
 }
 
+class validation_visitor : public gr_tree_visitor
+{
+public:
+    virtual bool visited(gr_basic_block_sptr block)
+       { std::cout << "validation_visitor::visited()" << std::endl; return 
block->validate(); }
+};
+
 void 
 gr_runtime_impl::start()
 {
@@ -52,7 +60,8 @@
     else
        d_running = true;
 
-    if (!d_top_block->validate())
+    validation_visitor validator;
+    if (!d_top_block->visit(validator))
        throw std::runtime_error("tree validation failed");
 }
 





reply via email to

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