commit-gnuradio
[Top][All Lists]
Advanced

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

[Commit-gnuradio] r4002 - gnuradio/branches/developers/eb/mb/mblock/src/


From: eb
Subject: [Commit-gnuradio] r4002 - gnuradio/branches/developers/eb/mb/mblock/src/lib
Date: Fri, 17 Nov 2006 00:46:39 -0700 (MST)

Author: eb
Date: 2006-11-17 00:46:38 -0700 (Fri, 17 Nov 2006)
New Revision: 4002

Modified:
   gnuradio/branches/developers/eb/mb/mblock/src/lib/mb_mblock.cc
   gnuradio/branches/developers/eb/mb/mblock/src/lib/mb_mblock.h
   gnuradio/branches/developers/eb/mb/mblock/src/lib/mb_mblock_impl.cc
   gnuradio/branches/developers/eb/mb/mblock/src/lib/mb_mblock_impl.h
Log:
added walk_tree

Modified: gnuradio/branches/developers/eb/mb/mblock/src/lib/mb_mblock.cc
===================================================================
--- gnuradio/branches/developers/eb/mb/mblock/src/lib/mb_mblock.cc      
2006-11-17 06:43:22 UTC (rev 4001)
+++ gnuradio/branches/developers/eb/mb/mblock/src/lib/mb_mblock.cc      
2006-11-17 07:46:38 UTC (rev 4002)
@@ -107,3 +107,9 @@
 {
   return d_impl->nconnections();
 }
+
+bool
+mb_mblock::walk_tree(mb_visitor *visitor, const std::string &path)
+{
+  return d_impl->walk_tree(visitor, path);
+}

Modified: gnuradio/branches/developers/eb/mb/mblock/src/lib/mb_mblock.h
===================================================================
--- gnuradio/branches/developers/eb/mb/mblock/src/lib/mb_mblock.h       
2006-11-17 06:43:22 UTC (rev 4001)
+++ gnuradio/branches/developers/eb/mb/mblock/src/lib/mb_mblock.h       
2006-11-17 07:46:38 UTC (rev 4002)
@@ -26,11 +26,18 @@
 #include <mb_port.h>
 
 
-class mb_runtime;
+/*!
+ * Abstract class implementing visitor pattern
+ * \ingroup internal
+ */
+class mb_visitor
+{
+public:
+  virtual ~mb_visitor();
+  bool operator()(mb_mblock *mblock, const std::string &path) { return 
visit(mblock, path); }
+  virtual bool visit(mb_mblock *mblock, const std::string &path) = 0;
+};
 
-class mb_mblock;
-typedef boost::shared_ptr<mb_mblock> mb_mblock_sptr;
-
 // ----------------------------------------------------------------------
 
 /*!
@@ -169,6 +176,12 @@
 public:
   virtual ~mb_mblock();
 
+  /*!
+   * \brief Perform a pre-order depth-first traversal of the hierarchy.
+   *
+   * The traversal stops and returns false if any call to visitor returns 
false.
+   */
+  bool walk_tree(mb_visitor *visitor, const std::string &path="");
 };
 
 

Modified: gnuradio/branches/developers/eb/mb/mblock/src/lib/mb_mblock_impl.cc
===================================================================
--- gnuradio/branches/developers/eb/mb/mblock/src/lib/mb_mblock_impl.cc 
2006-11-17 06:43:22 UTC (rev 4001)
+++ gnuradio/branches/developers/eb/mb/mblock/src/lib/mb_mblock_impl.cc 
2006-11-17 07:46:38 UTC (rev 4002)
@@ -197,3 +197,18 @@
   return (pmt_subsetp(p0_outgoing, p1_incoming)
          && pmt_subsetp(p1_outgoing, p0_incoming));
 }
+
+bool
+mb_mblock_impl::walk_tree(mb_visitor *visitor, const std::string &path)
+{
+  if (!(*visitor)(d_mb, path))
+    return false;
+
+  mb_comp_map_t::iterator it;
+  for (it = d_comp_map.begin(); it != d_comp_map.end(); ++it)
+    if (!(it->second->walk_tree(visitor, path + "/" + it->first)))
+      return false;
+
+  return true;
+}
+

Modified: gnuradio/branches/developers/eb/mb/mblock/src/lib/mb_mblock_impl.h
===================================================================
--- gnuradio/branches/developers/eb/mb/mblock/src/lib/mb_mblock_impl.h  
2006-11-17 06:43:22 UTC (rev 4001)
+++ gnuradio/branches/developers/eb/mb/mblock/src/lib/mb_mblock_impl.h  
2006-11-17 07:46:38 UTC (rev 4002)
@@ -132,6 +132,8 @@
   int
   nconnections() const;
 
+  bool
+  walk_tree(mb_visitor *visitor, const std::string &path="");
   
   /*
    * Our implementation methods





reply via email to

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