commit-gnuradio
[Top][All Lists]
Advanced

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

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


From: eb
Subject: [Commit-gnuradio] r3978 - gnuradio/branches/developers/eb/mb/mblock/src/lib
Date: Mon, 13 Nov 2006 14:22:13 -0700 (MST)

Author: eb
Date: 2006-11-13 14:22:13 -0700 (Mon, 13 Nov 2006)
New Revision: 3978

Added:
   gnuradio/branches/developers/eb/mb/mblock/src/lib/mb_connection.cc
   gnuradio/branches/developers/eb/mb/mblock/src/lib/mb_connection.h
   gnuradio/branches/developers/eb/mb/mblock/src/lib/mb_endpoint.h
Modified:
   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/mb_port.cc
   gnuradio/branches/developers/eb/mb/mblock/src/lib/mb_port.h
   gnuradio/branches/developers/eb/mb/mblock/src/lib/mb_port_class.cc
   gnuradio/branches/developers/eb/mb/mblock/src/lib/mb_port_class.h
   gnuradio/branches/developers/eb/mb/mblock/src/lib/qa_mblock_prims.cc
Log:
more work-in-progress...

Added: gnuradio/branches/developers/eb/mb/mblock/src/lib/mb_connection.cc
===================================================================
--- gnuradio/branches/developers/eb/mb/mblock/src/lib/mb_connection.cc          
                (rev 0)
+++ gnuradio/branches/developers/eb/mb/mblock/src/lib/mb_connection.cc  
2006-11-13 21:22:13 UTC (rev 3978)
@@ -0,0 +1,144 @@
+/* -*- c++ -*- */
+/*
+ * Copyright 2006 Free Software Foundation, Inc.
+ * 
+ * This file is part of GNU Radio
+ * 
+ * GNU Radio is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, or (at your option)
+ * any later version.
+ * 
+ * GNU Radio is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <mb_connection.h>
+
+bool
+mb_conn_table::lookup_conn0_by_name(const std::string &component_name,
+                                   const std::string &port_name,
+                                   mb_conn_iter *itp)
+{
+  mb_conn_iter end = d_connections.end();
+  for (mb_conn_iter it = d_connections.begin(); it != end; ++it){
+    if (it->d_ep[0].component_name() == component_name
+       && it->d_ep[0].port_name() == port_name){
+      *itp = it;
+      return true;
+    }
+  }
+
+  return false;
+}
+
+bool
+mb_conn_table::lookup_conn1_by_name(const std::string &component_name,
+                                   const std::string &port_name,
+                                   mb_conn_iter *itp)
+{
+  mb_conn_iter end = d_connections.end();
+  for (mb_conn_iter it = d_connections.begin(); it != end; ++it){
+    if (it->d_ep[1].component_name() == component_name
+       && it->d_ep[1].port_name() == port_name){
+      *itp = it;
+      return true;
+    }
+  }
+
+  return false;
+}
+
+bool
+mb_conn_table::lookup_conn_by_name(const std::string &component_name,
+                                  const std::string &port_name,
+                                  mb_conn_iter *itp, int *which_ep)
+{
+  mb_conn_iter end = d_connections.end();
+  for (mb_conn_iter it = d_connections.begin(); it != end; ++it){
+
+    if (it->d_ep[0].component_name() == component_name
+       && it->d_ep[0].port_name() == port_name){
+      *itp = it;
+      *which_ep = 0;
+      return true;
+    }
+
+    if (it->d_ep[1].component_name() == component_name
+       && it->d_ep[1].port_name() == port_name){
+      *itp = it;
+      *which_ep = 1;
+      return true;
+    }
+  }
+
+  return false;
+}
+
+bool
+mb_conn_table::lookup_conn0_by_port(mb_port_sptr port,
+                                   mb_conn_iter *itp)
+{
+  mb_conn_iter end = d_connections.end();
+  for (mb_conn_iter it = d_connections.begin(); it != end; ++it){
+    if (it->d_ep[0].port() == port){
+      *itp = it;
+      return true;
+    }
+  }
+
+  return false;
+}
+
+
+bool
+mb_conn_table::lookup_conn1_by_port(mb_port_sptr port,
+                                   mb_conn_iter *itp)
+{
+  mb_conn_iter end = d_connections.end();
+  for (mb_conn_iter it = d_connections.begin(); it != end; ++it){
+    if (it->d_ep[1].port() == port){
+      *itp = it;
+      return true;
+    }
+  }
+
+  return false;
+}
+
+bool
+mb_conn_table::lookup_conn_by_port(mb_port_sptr port,
+                                  mb_conn_iter *itp, int *which_ep)
+{
+  mb_conn_iter end = d_connections.end();
+  for (mb_conn_iter it = d_connections.begin(); it != end; ++it){
+    if (it->d_ep[0].port() == port){
+      *itp = it;
+      *which_ep = 0;
+      return true;
+    }
+    if (it->d_ep[1].port() == port){
+      *itp = it;
+      *which_ep = 1;
+      return true;
+    }
+  }
+
+  return false;
+}
+
+void
+mb_conn_table::create_conn(const mb_endpoint &ep0, const mb_endpoint &ep1)
+{
+  d_connections.push_back(mb_connection(ep0, ep1));
+}

Added: gnuradio/branches/developers/eb/mb/mblock/src/lib/mb_connection.h
===================================================================
--- gnuradio/branches/developers/eb/mb/mblock/src/lib/mb_connection.h           
                (rev 0)
+++ gnuradio/branches/developers/eb/mb/mblock/src/lib/mb_connection.h   
2006-11-13 21:22:13 UTC (rev 3978)
@@ -0,0 +1,79 @@
+/* -*- c++ -*- */
+/*
+ * Copyright 2006 Free Software Foundation, Inc.
+ * 
+ * This file is part of GNU Radio
+ * 
+ * GNU Radio is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, or (at your option)
+ * any later version.
+ * 
+ * GNU Radio is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+#ifndef INCLUDED_MB_CONNECTION_H
+#define INCLUDED_MB_CONNECTION_H
+
+#include <mb_endpoint.h>
+#include <list>
+
+/*!
+ * \brief Representation of a connection
+ */
+struct mb_connection {
+  mb_endpoint  d_ep[2];
+
+  mb_connection(const mb_endpoint &ep0, const mb_endpoint &ep1){
+    d_ep[0] = ep0;
+    d_ep[1] = ep1;
+  }
+};
+
+typedef std::list<mb_connection>::iterator mb_conn_iter;
+typedef std::list<mb_connection>::const_iterator mb_conn_const_iter;
+
+/*!
+ * \brief data structure that keeps track of connections
+ */
+class mb_conn_table {
+  std::list<mb_connection> d_connections;
+
+public:
+  bool
+  lookup_conn0_by_name(const std::string &component_name,
+                      const std::string &port_name,
+                      mb_conn_iter *it);
+  bool
+  lookup_conn1_by_name(const std::string &component_name,
+                      const std::string &port_name,
+                      mb_conn_iter *it);
+  bool
+  lookup_conn_by_name(const std::string &component_name,
+                     const std::string &port_name,
+                     mb_conn_iter *it, int *which_ep);
+
+  bool
+  lookup_conn0_by_port(mb_port_sptr port,
+                      mb_conn_iter *it);
+
+  bool
+  lookup_conn1_by_port(mb_port_sptr port,
+                      mb_conn_iter *it);
+
+  bool
+  lookup_conn_by_port(mb_port_sptr port,
+                      mb_conn_iter *it, int *which_ep);
+
+  void
+  create_conn(const mb_endpoint &ep0, const mb_endpoint &ep1);
+};
+
+#endif /* INCLUDED_MB_CONNECTION_H */

Added: gnuradio/branches/developers/eb/mb/mblock/src/lib/mb_endpoint.h
===================================================================
--- gnuradio/branches/developers/eb/mb/mblock/src/lib/mb_endpoint.h             
                (rev 0)
+++ gnuradio/branches/developers/eb/mb/mblock/src/lib/mb_endpoint.h     
2006-11-13 21:22:13 UTC (rev 3978)
@@ -0,0 +1,52 @@
+/* -*- c++ -*- */
+/*
+ * Copyright 2006 Free Software Foundation, Inc.
+ * 
+ * This file is part of GNU Radio
+ * 
+ * GNU Radio is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, or (at your option)
+ * any later version.
+ * 
+ * GNU Radio is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+#ifndef INCLUDED_MB_ENDPOINT_H
+#define INCLUDED_MB_ENDPOINT_H
+
+#include <string>
+#include <mb_port.h>
+
+/*!
+ * \brief Endpoint specification for connection
+ */
+class mb_endpoint
+{
+  std::string  d_component_name;
+  std::string  d_port_name;
+  mb_port_sptr d_port;                 // the port object that this maps to
+
+public:
+  mb_endpoint(){}
+
+  mb_endpoint(const std::string &component_name,
+             const std::string &port_name,
+             mb_port_sptr port)
+    : d_component_name(component_name),
+      d_port_name(port_name),
+      d_port(port) {}
+
+  const std::string &component_name() const { return d_component_name; }
+  const std::string &port_name() const { return d_port_name; }
+  mb_port_sptr port() const { return d_port; }
+};
+
+#endif /* INCLUDED_MB_ENDPOINT_H */

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-13 20:48:33 UTC (rev 3977)
+++ gnuradio/branches/developers/eb/mb/mblock/src/lib/mb_mblock_impl.cc 
2006-11-13 21:22:13 UTC (rev 3978)
@@ -39,36 +39,45 @@
 }
 
 static void
+no_such_port(const std::string &port_name)
+{
+  std::string msg = "No such port: " + port_name;
+  throw std::invalid_argument(msg);
+}
+
+static void
 already_connected(const std::string &comp_name, const std::string &port_name)
 {
   std::string msg = "Port is already connected: " + comp_name + ":" + 
port_name;
   throw std::invalid_argument(msg);
 }
 
-////////////////////////////////////////////////////////////////////////
+static void
+port_already_defined(const std::string &port_name)
+{
+  std::string msg = "Port is already defined: " + port_name;
+  throw std::invalid_argument(msg);
+}
 
-bool
-mb_mblock_impl::port_is_defined(pmt_t name)
+static void
+comp_already_defined(const std::string &comp_name)
 {
-  return d_port_map.count(name) != 0;
+  std::string msg = "Component is already defined: " + comp_name;
+  throw std::invalid_argument(msg);
 }
 
+////////////////////////////////////////////////////////////////////////
+
 bool 
 mb_mblock_impl::port_is_defined(const std::string &name)
 {
-  return port_is_defined(pmt_intern(name));
+  return d_port_map.count(name) != 0;
 }
 
 bool
-mb_mblock_impl::comp_is_defined(pmt_t name)
-{
-  return pmt_eq(name, s_self) || d_comp_map.count(name) != 0;
-}
-
-bool
 mb_mblock_impl::comp_is_defined(const std::string &name)
 {
-  return comp_is_defined(pmt_intern(name));
+  return name == "self" || d_comp_map.count(name) != 0;
 }
 
 ////////////////////////////////////////////////////////////////////////
@@ -85,22 +94,17 @@
 
 
 void
-mb_mblock_impl::define_port(const std::string &port_name_string,
+mb_mblock_impl::define_port(const std::string &port_name,
                            const std::string &protocol_class_name,
                            bool conjugated,
                            mb_port_class::port_type_t port_type)
 {
-  pmt_t port_name = pmt_intern(port_name_string);
-
   if (port_type == mb_port_class::RELAY)
-    throw pmt_notimplemented(
-        "mb_block_impl::define_port: RELAY ports are not implemented",
-       port_name);
+    throw std::invalid_argument(
+        "mb_block_impl::define_port: RELAY ports are not implemented: " + 
port_name);
   
   if (port_is_defined(port_name))
-    throw pmt_exception(
-        "mb_mblock_impl::define_port: port_name already defined",
-       port_name);
+    port_already_defined(port_name);
 
   mb_port_sptr p = mb_port_sptr(new mb_port(port_name, protocol_class_name,
                                            conjugated, port_type));
@@ -113,12 +117,12 @@
 {
   mb_conn_iter it;
   int          which_ep;
-  mb_port_sptr port;
+  mb_port_sptr port = resolve_port(comp_name, port_name);
 
+  // Is this endpoint already bound?
   if (d_conn_table.lookup_conn_by_name(comp_name, port_name, &it, &which_ep))
     already_connected(comp_name, port_name);
 
-  port = resolve_port(comp_name, port_name);
   return mb_endpoint(comp_name, port_name, port);
 }
 
@@ -126,12 +130,13 @@
 mb_mblock_impl::resolve_port(const std::string &comp_name,
                             const std::string &port_name)
 {
-  mb_port_sptr port;
-
   if (comp_name == "self"){
-    
+    if (!port_is_defined(port_name))
+      no_such_port(port_name);
+    return d_port_map[port_name];
   }
   else {
+    no_such_port();
   }
 
   return port;
@@ -140,17 +145,12 @@
 
 
 void
-mb_mblock_impl::define_component(const std::string &component_name,
+mb_mblock_impl::define_component(const std::string &name,
                                 mb_mblock_sptr component)
 {
-  pmt_t name = pmt_intern(component_name);
+  if (comp_is_defined(name))   // check for duplicate name
+    comp_already_defined(name);
 
-  // check for duplicate name
-  if (comp_is_defined(name))
-    throw pmt_exception(
-       "mb_mblock_impl::define_component: component_name already defined",
-       name);
-
   d_comp_map[name] = component;
 }
 

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-13 20:48:33 UTC (rev 3977)
+++ gnuradio/branches/developers/eb/mb/mblock/src/lib/mb_mblock_impl.h  
2006-11-13 21:22:13 UTC (rev 3978)
@@ -27,7 +27,7 @@
 #include <map>
 
 
-#if 1
+#if 0
 /*!
  * \brief Define an operator usable for a comparison function for pmt_t's
  *
@@ -167,9 +167,9 @@
    * Our implemenation methods
    */
 private:
-  bool port_is_defined(pmt_t name);
+  //bool port_is_defined(pmt_t name);
   bool port_is_defined(const std::string &name);
-  bool comp_is_defined(pmt_t name);
+  //bool comp_is_defined(pmt_t name);
   bool comp_is_defined(const std::string &name);
 
   mb_endpoint 

Modified: gnuradio/branches/developers/eb/mb/mblock/src/lib/mb_port.cc
===================================================================
--- gnuradio/branches/developers/eb/mb/mblock/src/lib/mb_port.cc        
2006-11-13 20:48:33 UTC (rev 3977)
+++ gnuradio/branches/developers/eb/mb/mblock/src/lib/mb_port.cc        
2006-11-13 21:22:13 UTC (rev 3978)
@@ -28,7 +28,7 @@
 //                         mb_port                                    //
 ////////////////////////////////////////////////////////////////////////
 
-mb_port::mb_port(pmt_t port_name,
+mb_port::mb_port(const std::string &port_name,
                 const std::string &protocol_class_name,
                 bool conjugated,
                 mb_port_class::port_type_t port_type)

Modified: gnuradio/branches/developers/eb/mb/mblock/src/lib/mb_port.h
===================================================================
--- gnuradio/branches/developers/eb/mb/mblock/src/lib/mb_port.h 2006-11-13 
20:48:33 UTC (rev 3977)
+++ gnuradio/branches/developers/eb/mb/mblock/src/lib/mb_port.h 2006-11-13 
21:22:13 UTC (rev 3978)
@@ -38,7 +38,7 @@
   //pmt_t                      d_remote_port_name;     // port_name on other 
end of this port
 
 public:
-  mb_port(pmt_t port_name,
+  mb_port(const std::string &port_name,
          const std::string &protocol_class_name,
          bool conjugated,
          mb_port_class::port_type_t port_type);
@@ -51,7 +51,7 @@
 
   // delegations to d_port_class
 
-  pmt_t                             port_name() const { return 
d_port_class->port_name(); }
+  std::string               port_name() const { return 
d_port_class->port_name(); }
   pmt_t                             protocol_class() const { return 
d_port_class->protocol_class(); }
   bool                      conjugated() const { return 
d_port_class->conjugated(); }
   mb_port_class::port_type_t port_type() const { return 
d_port_class->port_type(); }

Modified: gnuradio/branches/developers/eb/mb/mblock/src/lib/mb_port_class.cc
===================================================================
--- gnuradio/branches/developers/eb/mb/mblock/src/lib/mb_port_class.cc  
2006-11-13 20:48:33 UTC (rev 3977)
+++ gnuradio/branches/developers/eb/mb/mblock/src/lib/mb_port_class.cc  
2006-11-13 21:22:13 UTC (rev 3978)
@@ -27,7 +27,7 @@
 #include <mb_protocol_class.h>
 
 mb_port_class_sptr
-mb_make_port_class(pmt_t port_name,
+mb_make_port_class(const std::string &port_name,
                   const std::string &protocol_class_name,
                   bool conjugated,
                   mb_port_class::port_type_t port_type)
@@ -38,7 +38,7 @@
                                              port_type));
 }
 
-mb_port_class::mb_port_class(pmt_t port_name,
+mb_port_class::mb_port_class(const std::string &port_name,
                             const std::string &protocol_class_name,
                             bool conjugated,
                             mb_port_class::port_type_t port_type)

Modified: gnuradio/branches/developers/eb/mb/mblock/src/lib/mb_port_class.h
===================================================================
--- gnuradio/branches/developers/eb/mb/mblock/src/lib/mb_port_class.h   
2006-11-13 20:48:33 UTC (rev 3977)
+++ gnuradio/branches/developers/eb/mb/mblock/src/lib/mb_port_class.h   
2006-11-13 21:22:13 UTC (rev 3978)
@@ -38,26 +38,26 @@
   };
 
 private:
-  pmt_t                        d_port_name;            // symbol
+  std::string          d_port_name;
   pmt_t                        d_protocol_class;
   bool                 d_conjugated;
   port_type_t          d_port_type;
 
   // private constructor
-  mb_port_class(pmt_t port_name,
+  mb_port_class(const std::string &port_name,
                const std::string &protocol_class_name,
                bool conjugated,
                mb_port_class::port_type_t port_type);
 
   // public constructor
   friend mb_port_class_sptr
-  mb_make_port_class(pmt_t port_name,
+  mb_make_port_class(const std::string &port_name,
                     const std::string &protocol_class_name,
                     bool conjugated,
                     mb_port_class::port_type_t port_type);
 
 public:
-  pmt_t                port_name() const { return d_port_name; }
+  std::string  port_name() const { return d_port_name; }
   pmt_t                protocol_class() const { return d_protocol_class; }
   bool          conjugated() const { return d_conjugated; }
   port_type_t  port_type() const { return d_port_type; }
@@ -72,7 +72,7 @@
  * \param port_type    EXTERNAL, RELAY or INTERNAL
  */
 mb_port_class_sptr
-mb_make_port_class(pmt_t port_name,
+mb_make_port_class(const std::string &port_name,
                   const std::string &protocol_class_name,
                   bool conjugated,
                   mb_port_class::port_type_t port_type);

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-11-13 20:48:33 UTC (rev 3977)
+++ gnuradio/branches/developers/eb/mb/mblock/src/lib/qa_mblock_prims.cc        
2006-11-13 21:22:13 UTC (rev 3978)
@@ -113,7 +113,7 @@
 
 
   // raises pmt_exception because of duplicate port definition of "cs"
-  CPPUNIT_ASSERT_THROW(mb_mblock_sptr(new dp_3()), pmt_exception);
+  CPPUNIT_ASSERT_THROW(mb_mblock_sptr(new dp_3()), std::invalid_argument);
 
 #if 0
   try {
@@ -186,7 +186,7 @@
   mb_mblock_sptr       mb1 = mb_mblock_sptr(new dc_ok());      // OK
 
   // raises pmt_exception because of duplicate component definition of "c0"
-  CPPUNIT_ASSERT_THROW(mb_mblock_sptr(new dc_not_ok()), pmt_exception);
+  CPPUNIT_ASSERT_THROW(mb_mblock_sptr(new dc_not_ok()), std::invalid_argument);
 }
 
 // ================================================================





reply via email to

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