[Top][All Lists]
[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))
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Commit-gnuradio] r3990 - in gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src: lib/runtime python/gnuradio/gr,
jcorgan <=