commit-gnuradio
[Top][All Lists]
Advanced

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

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


From: eb
Subject: [Commit-gnuradio] r3498 - gnuradio/branches/developers/eb/mb/mblock/src/lib
Date: Thu, 7 Sep 2006 18:00:42 -0600 (MDT)

Author: eb
Date: 2006-09-07 18:00:42 -0600 (Thu, 07 Sep 2006)
New Revision: 3498

Modified:
   gnuradio/branches/developers/eb/mb/mblock/src/lib/mb_mblock.cc
   gnuradio/branches/developers/eb/mb/mblock/src/lib/mb_mblock_impl.cc
   gnuradio/branches/developers/eb/mb/mblock/src/lib/mb_mblock_impl.h
   gnuradio/branches/developers/eb/mb/mblock/src/lib/qa_mblock_prims.cc
   gnuradio/branches/developers/eb/mb/mblock/src/lib/qa_mblock_prims.h
Log:
define_component works

Modified: gnuradio/branches/developers/eb/mb/mblock/src/lib/mb_mblock.cc
===================================================================
--- gnuradio/branches/developers/eb/mb/mblock/src/lib/mb_mblock.cc      
2006-09-07 23:37:08 UTC (rev 3497)
+++ gnuradio/branches/developers/eb/mb/mblock/src/lib/mb_mblock.cc      
2006-09-08 00:00:42 UTC (rev 3498)
@@ -28,7 +28,7 @@
 #include <mb_protocol_class.h>
 
 mb_mblock::mb_mblock(mb_runtime_sptr runtime)
-  : d_impl(mb_mblock_impl_sptr(new mb_mblock_impl())),
+  : d_impl(mb_mblock_impl_sptr(new mb_mblock_impl(this))),
     d_runtime(runtime)
 {
   // FIXME
@@ -90,6 +90,14 @@
   return d_impl->disconnect(endpoint_1, endpoint_2);
 }
 
+void
+mb_mblock::send(pmt_t port_name, pmt_t signal,
+               pmt_t data, pmt_t metadata, mb_pri_t priority)
+{
+  d_impl->send(port_name, signal, data, metadata, priority);
+}
+
+
 const std::vector<mb_port_class_sptr>
 mb_mblock::peer_interface() const
 {

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-09-07 23:37:08 UTC (rev 3497)
+++ gnuradio/branches/developers/eb/mb/mblock/src/lib/mb_mblock_impl.cc 
2006-09-08 00:00:42 UTC (rev 3498)
@@ -25,7 +25,8 @@
 #include <mb_mblock_impl.h>
 #include <mb_port.h>
 
-mb_mblock_impl::mb_mblock_impl()
+mb_mblock_impl::mb_mblock_impl(mb_mblock *mb)
+  : d_mblock(mb)
 {
   // FIXME
 }
@@ -42,10 +43,14 @@
                            mb_port_class::port_type_t port_type)
 {
   if (port_type == mb_port_class::RELAY)
-    throw pmt_unimplemented("mb_block_impl::define_port: RELAY ports are not 
implemented", port_name);
+    throw pmt_notimplemented(
+        "mb_block_impl::define_port: RELAY ports are not implemented",
+       port_name);
   
   if (lookup_port(port_name))
-    throw pmt_exception("mb_mblock_impl::define_port: port_name already 
defined", port_name);
+    throw pmt_exception(
+        "mb_mblock_impl::define_port: port_name already defined",
+       port_name);
 
   mb_port_sptr p = mb_port_sptr(new mb_port(port_name, protocol_class_name,
                                            conjugated, port_type));
@@ -56,7 +61,13 @@
 mb_mblock_impl::define_component(const std::string &component_name,
                                 mb_mblock_sptr component)
 {
-  // FIXME
+  pmt_t name = pmt_intern(component_name);
+  if (lookup_component(name))
+    throw pmt_exception(
+       "mb_mblock_impl::define_component: component_name already defined",
+       name);
+
+  d_components.push_back(mb_component(name, component));
 }
 
 bool
@@ -89,11 +100,22 @@
       return *p;
   }
 
-  return mb_port_sptr();
+  return mb_port_sptr();       // equivalent to the NULL pointer
 }
 
+mb_mblock_sptr
+mb_mblock_impl::lookup_component(pmt_t component_name)
+{
+  for (std::vector<mb_component>::const_iterator p = d_components.begin();
+       p != d_components.end(); p++){
+    if (pmt_eq(component_name, p->name()))
+      return p->component();
+  }
 
+  return mb_mblock_sptr();     // equivalent to the NULL pointer
+}
 
+
 const std::vector<mb_port_class_sptr>
 mb_mblock_impl::peer_interface() const
 {

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-09-07 23:37:08 UTC (rev 3497)
+++ gnuradio/branches/developers/eb/mb/mblock/src/lib/mb_mblock_impl.h  
2006-09-08 00:00:42 UTC (rev 3498)
@@ -30,14 +30,29 @@
 {
 private:
 
+  class mb_component
+  {
+    pmt_t              d_name;
+    mb_mblock_sptr     d_component;
+
+  public:
+    mb_component(pmt_t name, mb_mblock_sptr component)
+      : d_name(name), d_component(component) {}
+
+    pmt_t name() const { return d_name; }
+    mb_mblock_sptr component() const { return d_component; }
+  };
+
+  mb_mblock                   *d_mblock;       // mblock to which we belong
   std::vector<mb_port_sptr>    d_ports;        // our ports
+  std::vector<mb_component>    d_components;   // our components
 
 
   // NOT IMPLEMENTED
   mb_mblock_impl(const mb_mblock_impl &rhs);            // no copy constructor
   mb_mblock_impl &operator=(const mb_mblock_impl &rhs);  // no assignment 
operator
 
-  mb_mblock_impl();
+  mb_mblock_impl(mb_mblock *mb);
 
   friend class mb_mblock;
 
@@ -121,6 +136,9 @@
   mb_port_sptr
   lookup_port(pmt_t port_name);
 
+  mb_mblock_sptr
+  lookup_component(pmt_t component_name);
+
 public:
   ~mb_mblock_impl();
 

Modified: gnuradio/branches/developers/eb/mb/mblock/src/lib/qa_mblock_prims.cc
===================================================================
--- gnuradio/branches/developers/eb/mb/mblock/src/lib/qa_mblock_prims.cc        
2006-09-07 23:37:08 UTC (rev 3497)
+++ gnuradio/branches/developers/eb/mb/mblock/src/lib/qa_mblock_prims.cc        
2006-09-08 00:00:42 UTC (rev 3498)
@@ -30,7 +30,7 @@
 static pmt_t s_cs = pmt_intern("cs");
 static pmt_t s_debug = pmt_intern("debug");
 
-// ----------------------------------------------------------------
+// ================================================================
 
 class dp_1 : public mb_mblock
 {
@@ -125,3 +125,69 @@
 #endif
 
 }
+
+// ================================================================
+
+class dc_0 : public mb_mblock
+{
+public:
+  dc_0(mb_runtime_sptr runtime);
+  ~dc_0();
+};
+
+dc_0::dc_0(mb_runtime_sptr runtime)
+  : mb_mblock(runtime)
+{
+}
+
+dc_0::~dc_0() {}
+
+// ----------------------------------------------------------------
+
+class dc_ok : public mb_mblock
+{
+public:
+  dc_ok(mb_runtime_sptr runtime);
+  ~dc_ok();
+};
+
+dc_ok::dc_ok(mb_runtime_sptr runtime)
+  : mb_mblock(runtime)
+{
+  define_component("c0", mb_mblock_sptr(new dc_0(runtime)));
+  define_component("c1", mb_mblock_sptr(new dc_0(runtime)));
+  define_component("c2", mb_mblock_sptr(new dc_0(runtime)));
+}
+
+dc_ok::~dc_ok(){}
+
+// ----------------------------------------------------------------
+
+class dc_not_ok : public mb_mblock
+{
+public:
+  dc_not_ok(mb_runtime_sptr runtime);
+  ~dc_not_ok();
+};
+
+dc_not_ok::dc_not_ok(mb_runtime_sptr runtime)
+  : mb_mblock(runtime)
+{
+  define_component("c0", mb_mblock_sptr(new dc_0(runtime)));
+  define_component("c0", mb_mblock_sptr(new dc_0(runtime)));   // duplicate 
name
+}
+
+dc_not_ok::~dc_not_ok(){}
+
+// ----------------------------------------------------------------
+
+void
+qa_mblock_prims::test_define_components()
+{
+  mb_runtime_sptr      rt = mb_make_runtime();
+  mb_mblock_sptr       mb1 = mb_mblock_sptr(new dc_ok(rt));
+
+  // raises pmt_exception because of duplicate component definition of "c0"
+  CPPUNIT_ASSERT_THROW(mb_mblock_sptr(new dc_not_ok(rt)), pmt_exception);
+}
+

Modified: gnuradio/branches/developers/eb/mb/mblock/src/lib/qa_mblock_prims.h
===================================================================
--- gnuradio/branches/developers/eb/mb/mblock/src/lib/qa_mblock_prims.h 
2006-09-07 23:37:08 UTC (rev 3497)
+++ gnuradio/branches/developers/eb/mb/mblock/src/lib/qa_mblock_prims.h 
2006-09-08 00:00:42 UTC (rev 3498)
@@ -29,10 +29,12 @@
 
   CPPUNIT_TEST_SUITE(qa_mblock_prims);
   CPPUNIT_TEST(test_define_ports);
+  CPPUNIT_TEST(test_define_components);
   CPPUNIT_TEST_SUITE_END();
 
  private:
   void test_define_ports();
+  void test_define_components();
 };
 
 #endif /* INCLUDED_QA_MBLOCK_PRIMS_H */





reply via email to

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