[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Commit-gnuradio] r4374 - gnuradio/branches/developers/eb/mb/mblock/src/
From: |
eb |
Subject: |
[Commit-gnuradio] r4374 - gnuradio/branches/developers/eb/mb/mblock/src/lib |
Date: |
Sun, 4 Feb 2007 21:27:33 -0700 (MST) |
Author: eb
Date: 2007-02-04 21:27:32 -0700 (Sun, 04 Feb 2007)
New Revision: 4374
Modified:
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_exception.cc
gnuradio/branches/developers/eb/mb/mblock/src/lib/mb_exception.h
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_simple.cc
gnuradio/branches/developers/eb/mb/mblock/src/lib/mb_port_simple.h
gnuradio/branches/developers/eb/mb/mblock/src/lib/qa_mblock_send.cc
Log:
Work-in-progress on mblocks: sends to INTERNAL & EXTERNAL ports are
being resolved correctly.
Modified: gnuradio/branches/developers/eb/mb/mblock/src/lib/mb_connection.cc
===================================================================
--- gnuradio/branches/developers/eb/mb/mblock/src/lib/mb_connection.cc
2007-02-05 02:39:43 UTC (rev 4373)
+++ gnuradio/branches/developers/eb/mb/mblock/src/lib/mb_connection.cc
2007-02-05 04:27:32 UTC (rev 4374)
@@ -52,17 +52,17 @@
}
bool
-mb_conn_table::lookup_conn_by_port(mb_port_sptr port,
+mb_conn_table::lookup_conn_by_port(const mb_port *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){
+ if (it->d_ep[0].port().get() == port){
*itp = it;
*which_ep = 0;
return true;
}
- if (it->d_ep[1].port() == port){
+ if (it->d_ep[1].port().get() == port){
*itp = it;
*which_ep = 1;
return true;
Modified: gnuradio/branches/developers/eb/mb/mblock/src/lib/mb_connection.h
===================================================================
--- gnuradio/branches/developers/eb/mb/mblock/src/lib/mb_connection.h
2007-02-05 02:39:43 UTC (rev 4373)
+++ gnuradio/branches/developers/eb/mb/mblock/src/lib/mb_connection.h
2007-02-05 04:27:32 UTC (rev 4374)
@@ -53,8 +53,8 @@
mb_conn_iter *it, int *which_ep);
bool
- lookup_conn_by_port(mb_port_sptr port,
- mb_conn_iter *it, int *which_ep);
+ lookup_conn_by_port(const mb_port *port,
+ mb_conn_iter *it, int *which_ep);
void
create_conn(const mb_endpoint &ep0, const mb_endpoint &ep1);
Modified: gnuradio/branches/developers/eb/mb/mblock/src/lib/mb_exception.cc
===================================================================
--- gnuradio/branches/developers/eb/mb/mblock/src/lib/mb_exception.cc
2007-02-05 02:39:43 UTC (rev 4373)
+++ gnuradio/branches/developers/eb/mb/mblock/src/lib/mb_exception.cc
2007-02-05 04:27:32 UTC (rev 4374)
@@ -33,6 +33,11 @@
{
}
+mbe_not_implemented::mbe_not_implemented(const std::string &msg)
+ : mbe_base(0, "Not implemented: " + msg)
+{
+}
+
mbe_no_such_component::mbe_no_such_component(mb_mblock *mb, const std::string
&component_name)
: mbe_base(mb, "No such component: " + component_name)
{
Modified: gnuradio/branches/developers/eb/mb/mblock/src/lib/mb_exception.h
===================================================================
--- gnuradio/branches/developers/eb/mb/mblock/src/lib/mb_exception.h
2007-02-05 02:39:43 UTC (rev 4373)
+++ gnuradio/branches/developers/eb/mb/mblock/src/lib/mb_exception.h
2007-02-05 04:27:32 UTC (rev 4374)
@@ -32,6 +32,11 @@
mbe_base(mb_mblock *mb, const std::string &msg);
};
+class mbe_not_implemented : public mbe_base
+{
+public:
+ mbe_not_implemented(const std::string &msg);
+};
class mbe_no_such_component : public mbe_base
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
2007-02-05 02:39:43 UTC (rev 4373)
+++ gnuradio/branches/developers/eb/mb/mblock/src/lib/mb_mblock_impl.cc
2007-02-05 04:27:32 UTC (rev 4374)
@@ -234,3 +234,27 @@
return mb_msg_accepter_sptr(ma);
}
+
+mb_port_sptr
+mb_mblock_impl::lookup_port_on_other_end(const mb_port *port)
+{
+ mb_conn_iter it;
+ int which_ep = 0;
+
+ if (!d_conn_table.lookup_conn_by_port(port, &it, &which_ep))
+ return mb_port_sptr(); // eqv to null pointer
+
+ return it->d_ep[which_ep^1].port();
+}
+
+mb_mblock_sptr
+mb_mblock_impl::component(const std::string &comp_name)
+{
+ if (comp_name == "self")
+ return d_mb->shared_from_this();
+
+ if (d_comp_map.count(comp_name) == 0)
+ return mb_mblock_sptr(); // null pointer
+
+ return d_comp_map[comp_name];
+}
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
2007-02-05 02:39:43 UTC (rev 4373)
+++ gnuradio/branches/developers/eb/mb/mblock/src/lib/mb_mblock_impl.h
2007-02-05 04:27:32 UTC (rev 4374)
@@ -150,6 +150,20 @@
//! Return full name of this block
std::string fullname() const { return d_fullname; }
+ //! If bound, return port on the other end of the connection, else null.
+ mb_port_sptr
+ lookup_port_on_other_end(const mb_port *port);
+
+
+ mb_mblock *
+ mblock() const { return d_mb; }
+
+ mb_mblock *
+ mblock_parent() const { return d_mb_parent; }
+
+ mb_mblock_sptr
+ component(const std::string &comp_name);
+
/*
* Our implementation methods
*/
Modified: gnuradio/branches/developers/eb/mb/mblock/src/lib/mb_port_simple.cc
===================================================================
--- gnuradio/branches/developers/eb/mb/mblock/src/lib/mb_port_simple.cc
2007-02-05 02:39:43 UTC (rev 4373)
+++ gnuradio/branches/developers/eb/mb/mblock/src/lib/mb_port_simple.cc
2007-02-05 04:27:32 UTC (rev 4374)
@@ -25,7 +25,11 @@
#include <mb_port_simple.h>
#include <mb_msg_accepter.h>
+#include <mb_exception.h>
+#include <mb_mblock.h>
+#include <mb_mblock_impl.h>
+
mb_port_simple::mb_port_simple(mb_mblock *mblock,
const std::string &port_name,
const std::string &protocol_class_name,
@@ -52,8 +56,56 @@
mb_port_simple::find_accepter()
{
mb_msg_accepter_sptr r;
+ mb_mblock *mb = 0;
- // FIXME, actually do the work ;)
+ switch(port_type()){
+ case mb_port::INTERNAL: // binding is in our name space
+ mb = d_mblock;
+ break;
- return r;
+ case mb_port::EXTERNAL: // binding is in parent's name space
+ mb = d_mblock->impl()->mblock_parent();
+ break;
+
+ case mb_port::RELAY:
+ throw std::logic_error("Can't happen: mb_port_simple::find_accepter send
to relay [1]");
+
+ default:
+ throw std::logic_error("Can't happen: mb_port_simple::find_accepter [2]");
+ }
+
+ // std::cerr << d_mblock->fullname() << ":" << port_name();
+
+ mb_port_sptr peer = mb->impl()->lookup_port_on_other_end(this);
+ // std::cerr << "\n@@@ find_accepter: peer = " << peer << std::endl;
+ if (!peer){ // not bound, return equivalent of null pointer.
+ // std::cerr << std::endl;
+ return r;
+ }
+
+
+ mb_port_simple *ps_peer = 0;
+
+ switch (peer->port_type()){
+ case mb_port::INTERNAL:
+ case mb_port::EXTERNAL:
+ // FIXME if we ever instantiate other types of ports, this will need work
+ ps_peer = dynamic_cast<mb_port_simple *>(peer.get());
+ // std::cerr << " --> " << ps_peer->d_mblock->fullname() << ":" <<
ps_peer->port_name() << std::endl;
+ r = ps_peer->make_accepter();
+ // FIXME cache the result
+ return r;
+
+ case mb_port::RELAY:
+ throw mbe_not_implemented("mb_port_simple::find_accepter(RELAY)");
+
+ default:
+ throw std::logic_error("Can't happen: mb_port_simple::find_accepter [3]");
+ }
}
+
+mb_msg_accepter_sptr
+mb_port_simple::make_accepter()
+{
+ return d_mblock->impl()->make_accepter(port_name());
+}
Modified: gnuradio/branches/developers/eb/mb/mblock/src/lib/mb_port_simple.h
===================================================================
--- gnuradio/branches/developers/eb/mb/mblock/src/lib/mb_port_simple.h
2007-02-05 02:39:43 UTC (rev 4373)
+++ gnuradio/branches/developers/eb/mb/mblock/src/lib/mb_port_simple.h
2007-02-05 04:27:32 UTC (rev 4374)
@@ -32,6 +32,9 @@
mb_msg_accepter_sptr
find_accepter();
+ mb_msg_accepter_sptr
+ make_accepter();
+
public:
mb_port_simple(mb_mblock *mblock,
const std::string &port_name,
Modified: gnuradio/branches/developers/eb/mb/mblock/src/lib/qa_mblock_send.cc
===================================================================
--- gnuradio/branches/developers/eb/mb/mblock/src/lib/qa_mblock_send.cc
2007-02-05 02:39:43 UTC (rev 4373)
+++ gnuradio/branches/developers/eb/mb/mblock/src/lib/qa_mblock_send.cc
2007-02-05 04:27:32 UTC (rev 4374)
@@ -146,11 +146,70 @@
// mb0 should have received two messages sent from mb1 via its p1
msg = mb0->impl()->msgq().get_highest_pri_msg();
CPPUNIT_ASSERT(msg);
- CPPUNIT_ASSERT_EQUAL(pmt_list3(pmt_intern("top/mb1"), s_p1,
pmt_from_long(0)),
- msg->data());
+ // std::cerr << msg->data() << std::endl;
+ CPPUNIT_ASSERT_EQUAL(s_p0, msg->port_id());
+ CPPUNIT_ASSERT(pmt_equal(pmt_list3(pmt_intern("top/mb1"), s_p1,
pmt_from_long(0)),
+ msg->data()));
+
msg = mb0->impl()->msgq().get_highest_pri_msg();
CPPUNIT_ASSERT(msg);
- CPPUNIT_ASSERT_EQUAL(pmt_list3(pmt_intern("top/mb1"), s_p1,
pmt_from_long(1)),
- msg->data());
+ // std::cerr << msg->data() << std::endl;
+ CPPUNIT_ASSERT_EQUAL(s_p0, msg->port_id());
+ CPPUNIT_ASSERT(pmt_equal(pmt_list3(pmt_intern("top/mb1"), s_p1,
pmt_from_long(1)),
+ msg->data()));
+
+ // mb1 should have received
+ // two messages from mb0 via its p0 and
+ // two messages from mb2 via its p2
+
+ mb_mblock_sptr mb1 = mb0->impl()->component("mb1");
+
+ msg = mb1->impl()->msgq().get_highest_pri_msg();
+ CPPUNIT_ASSERT(msg);
+ // std::cerr << msg->data() << std::endl;
+ CPPUNIT_ASSERT_EQUAL(s_p1, msg->port_id());
+ CPPUNIT_ASSERT(pmt_equal(pmt_list3(pmt_intern("top"), s_p0,
pmt_from_long(0)),
+ msg->data()));
+
+ msg = mb1->impl()->msgq().get_highest_pri_msg();
+ CPPUNIT_ASSERT(msg);
+ // std::cerr << msg->data() << std::endl;
+ CPPUNIT_ASSERT_EQUAL(s_p1, msg->port_id());
+ CPPUNIT_ASSERT(pmt_equal(pmt_list3(pmt_intern("top"), s_p0,
pmt_from_long(1)),
+ msg->data()));
+
+ msg = mb1->impl()->msgq().get_highest_pri_msg();
+ CPPUNIT_ASSERT(msg);
+ // std::cerr << msg->data() << std::endl;
+ CPPUNIT_ASSERT_EQUAL(s_p2, msg->port_id());
+ CPPUNIT_ASSERT(pmt_equal(pmt_list3(pmt_intern("top/mb2"), s_p2,
pmt_from_long(0)),
+ msg->data()));
+
+ msg = mb1->impl()->msgq().get_highest_pri_msg();
+ CPPUNIT_ASSERT(msg);
+ // std::cerr << msg->data() << std::endl;
+ CPPUNIT_ASSERT_EQUAL(s_p2, msg->port_id());
+ CPPUNIT_ASSERT(pmt_equal(pmt_list3(pmt_intern("top/mb2"), s_p2,
pmt_from_long(1)),
+ msg->data()));
+
+
+ // mb2 should have received
+ // two messages from mb2 via its p2
+
+ mb_mblock_sptr mb2 = mb0->impl()->component("mb2");
+
+ msg = mb2->impl()->msgq().get_highest_pri_msg();
+ CPPUNIT_ASSERT(msg);
+ // std::cerr << msg->data() << std::endl;
+ CPPUNIT_ASSERT_EQUAL(s_p2, msg->port_id());
+ CPPUNIT_ASSERT(pmt_equal(pmt_list3(pmt_intern("top/mb1"), s_p2,
pmt_from_long(0)),
+ msg->data()));
+
+ msg = mb2->impl()->msgq().get_highest_pri_msg();
+ CPPUNIT_ASSERT(msg);
+ // std::cerr << msg->data() << std::endl;
+ CPPUNIT_ASSERT_EQUAL(s_p2, msg->port_id());
+ CPPUNIT_ASSERT(pmt_equal(pmt_list3(pmt_intern("top/mb1"), s_p2,
pmt_from_long(1)),
+ msg->data()));
}
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Commit-gnuradio] r4374 - gnuradio/branches/developers/eb/mb/mblock/src/lib,
eb <=