commit-gnuradio
[Top][All Lists]
Advanced

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

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


From: jcorgan
Subject: [Commit-gnuradio] r3893 - in gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src: lib/runtime python/gnuradio/gr
Date: Sun, 29 Oct 2006 16:23:39 -0700 (MST)

Author: jcorgan
Date: 2006-10-29 16:23:38 -0700 (Sun, 29 Oct 2006)
New Revision: 3893

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.h
   
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_hier_block2.i
   
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_hier_block2_impl.cc
   
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_hier_block2_impl.h
   
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/python/gnuradio/gr/qa_hier_block2.py
Log:
Work in progress.

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-10-29 21:41:19 UTC (rev 3892)
+++ 
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_hier_block2.cc
   2006-10-29 23:23:38 UTC (rev 3893)
@@ -41,8 +41,6 @@
   : gr_basic_block(name, input_signature, output_signature),
     d_impl(new gr_hier_block2_impl())
 {
-    if (GR_HIER_BLOCK2_DEBUG)
-       std::cout << "Constructing hier_block2 with name '" << name << "'." << 
std::endl;
 }
 
 gr_hier_block2::~gr_hier_block2()
@@ -50,17 +48,12 @@
     delete d_impl;
 }
 
-void gr_hier_block2::define_component(const std::string name, 
gr_basic_block_sptr comp)
+void gr_hier_block2::define_component(const std::string name, 
gr_basic_block_sptr basic_block)
 {
-    if (GR_HIER_BLOCK2_DEBUG)
-       std::cout << "Adding block '" << name << "' to container '" << d_name 
<< "'" << std::endl;
+    d_impl->define_component(name, basic_block);
+}
 
-    if (d_impl->get_component_by_name(name))
-       throw std::invalid_argument("Name already in use");
-       
-    std::string result = d_impl->get_name_by_component(comp);
-    if (d_impl->get_name_by_component(comp) != std::string(""))
-       throw std::invalid_argument("Component already defined");
-
-    d_impl->d_components.push_back(gr_hier_component(name, comp));
+void gr_hier_block2::connect(const std::string from_name, int from_port, const 
std::string to_name, int to_port)
+{
+    d_impl->connect_prim(from_name, from_port, to_name, to_port);
 }

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-10-29 21:41:19 UTC (rev 3892)
+++ 
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_hier_block2.h
    2006-10-29 23:23:38 UTC (rev 3893)
@@ -61,11 +61,9 @@
 public:
     ~gr_hier_block2();
 
-    /*!
-     * \brief Add a named block to container
-     * \ingroup block
-     */
-    void define_component(const std::string name, gr_basic_block_sptr comp);
+    void define_component(const std::string name, gr_basic_block_sptr 
basic_block);
+    void connect(const std::string from_name, int from_port, 
+                 const std::string to_name, int to_port);
 };
 
 #endif /* INCLUDED_GR_HIER_BLOCK2_H */

Modified: 
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_hier_block2.i
===================================================================
--- 
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_hier_block2.i
    2006-10-29 21:41:19 UTC (rev 3892)
+++ 
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_hier_block2.i
    2006-10-29 23:23:38 UTC (rev 3893)
@@ -45,6 +45,9 @@
     ~gr_hier_block2 ();
 
     // Add a named block to the container
-    void define_component(const std::string name, gr_basic_block_sptr comp)
+    void define_component(const std::string name, gr_basic_block_sptr 
basic_block)
        throw (std::invalid_argument);
+    void connect(const std::string from_name, int from_port,
+                const std::string to_name, int to_port)
+       throw (std::invalid_argument);
 };

Modified: 
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_hier_block2_impl.cc
===================================================================
--- 
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_hier_block2_impl.cc
      2006-10-29 21:41:19 UTC (rev 3892)
+++ 
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_hier_block2_impl.cc
      2006-10-29 23:23:38 UTC (rev 3893)
@@ -29,32 +29,58 @@
 
 gr_hier_block2_impl::gr_hier_block2_impl()
 {
-    if (GR_HIER_BLOCK2_IMPL_DEBUG)
-       std::cout << "Constructing hier_block2_impl" << std::endl;
 }
 
 gr_hier_block2_impl::~gr_hier_block2_impl()
 {
 }
 
-gr_basic_block_sptr gr_hier_block2_impl::get_component_by_name(std::string 
name)
+void gr_hier_block2_impl::define_component(const std::string &name, 
gr_basic_block_sptr basic_block)
 {
+    if (name == "input" || name == "output")
+       throw std::invalid_argument("name is reserved");
+
+    if (lookup_component(name))
+       throw std::invalid_argument("Name already in use");
+       
+    if (lookup_component(basic_block) != "")
+       throw std::invalid_argument("Component already defined");
+
+    d_components.push_back(gr_hier_component(name, basic_block));
+}
+
+gr_basic_block_sptr gr_hier_block2_impl::lookup_component(const std::string 
&name)
+{
     for (std::vector<gr_hier_component>::const_iterator p = 
d_components.begin();
         p != d_components.end(); p++) {
        if (name == p->name())
-           return p->component();
+           return p->basic_block();
     }
 
     return gr_basic_block_sptr();
 }
 
-std::string gr_hier_block2_impl::get_name_by_component(gr_basic_block_sptr 
component)
+std::string gr_hier_block2_impl::lookup_component(gr_basic_block_sptr 
basic_block)
 {
     for (std::vector<gr_hier_component>::const_iterator p = 
d_components.begin();
         p != d_components.end(); p++) {
-       if (component == p->component())
+       if (basic_block == p->basic_block())
            return p->name();
     }
 
-    return std::string();
+    return std::string("");
 }
+
+void gr_hier_block2_impl::connect_prim(const std::string &from_name, int 
from_port,
+                                      const std::string &to_name, int to_port)
+{
+    /* Need to validate the following:
+
+       from_name is either "input" or a defined component
+       to_name is either "output" or a defined component
+       from_port is valid for from_name
+       to_port is valid for to_name
+       to_name:to_port is not already in use
+       from_name:from_port is same type as to_name:to_port
+    */
+}

Modified: 
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_hier_block2_impl.h
===================================================================
--- 
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_hier_block2_impl.h
       2006-10-29 21:41:19 UTC (rev 3892)
+++ 
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_hier_block2_impl.h
       2006-10-29 23:23:38 UTC (rev 3893)
@@ -33,14 +33,14 @@
 {
 private:
     std::string                d_name;
-    gr_basic_block_sptr d_component;
+    gr_basic_block_sptr d_basic_block;
 
 public:
-    gr_hier_component(const std::string name, gr_basic_block_sptr component)
-      : d_name(name), d_component(component) {}
+    gr_hier_component(const std::string name, gr_basic_block_sptr basic_block)
+      : d_name(name), d_basic_block(basic_block) {}
       
     std::string name() const { return d_name; }
-    gr_basic_block_sptr component() const { return d_component; }
+    gr_basic_block_sptr basic_block() const { return d_basic_block; }
 };
 
 class gr_hier_block2_impl
@@ -55,8 +55,11 @@
 
     std::vector<gr_hier_component> d_components;
 
-    gr_basic_block_sptr get_component_by_name(const std::string name);
-    std::string get_name_by_component(gr_basic_block_sptr component);
+    void define_component(const std::string &name, gr_basic_block_sptr 
basic_block);
+    gr_basic_block_sptr lookup_component(const std::string &name);
+    std::string lookup_component(gr_basic_block_sptr basic_block);
+    void connect_prim(const std::string &from_name, int from_port,
+                     const std::string &to_name, int to_port);
             
 public:
     ~gr_hier_block2_impl();

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-10-29 21:41:19 UTC (rev 3892)
+++ 
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/python/gnuradio/gr/qa_hier_block2.py
    2006-10-29 23:23:38 UTC (rev 3893)
@@ -31,6 +31,21 @@
        hblock.define_component("source", src1)
        hblock.define_component("sink", sink1)
 
+
+    def test_002_define_component_reserved_input(self):
+       hblock = gr.hier_block2("test_block", 
+                               gr.io_signature(1,1,gr.sizeof_int), 
+                               gr.io_signature(1,1,gr.sizeof_int))
+       src1 = gr.nop(gr.sizeof_int)
+       self.assertRaises(ValueError, lambda: hblock.define_component("input", 
src1))
+
+    def test_002_define_component_reserved_output(self):
+       hblock = gr.hier_block2("test_block", 
+                               gr.io_signature(1,1,gr.sizeof_int), 
+                               gr.io_signature(1,1,gr.sizeof_int))
+       src1 = gr.nop(gr.sizeof_int)
+       self.assertRaises(ValueError, lambda: hblock.define_component("output", 
src1))
+
     def test_003_define_component_name_in_use(self):
        hblock = gr.hier_block2("test_block", 
                                gr.io_signature(1,1,gr.sizeof_int), 
@@ -51,6 +66,18 @@
        nop2 = gr.nop(gr.sizeof_int)
        hblock.define_component("nop1", nop1)
        self.assertRaises(ValueError, lambda: hblock.define_component("nop2", 
nop1))
+
+    def test_005_connect_internal(self):
+       hblock = gr.hier_block2("test_block", 
+                               gr.io_signature(1,1,gr.sizeof_int), 
+                               gr.io_signature(1,1,gr.sizeof_int))
+
+       nop1 = gr.nop(gr.sizeof_int)
+       nop2 = gr.nop(gr.sizeof_int)
+       hblock.define_component("nop1", nop1)
+       hblock.define_component("nop2", nop2)
+       hblock.connect("nop1", 0, "nop2", 0)
+
     
 if __name__ == "__main__":
-    gr_unittest.main()
\ No newline at end of file
+    gr_unittest.main()





reply via email to

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