[Top][All Lists]
[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);
}
// ================================================================
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Commit-gnuradio] r3978 - gnuradio/branches/developers/eb/mb/mblock/src/lib,
eb <=