From e83d63263e95471f0fb48cdfbbc794b564e72703 Mon Sep 17 00:00:00 2001
From: Tim O'Shea <tim.oshea753@gmail.com>
Date: Thu, 3 Oct 2013 13:22:16 -0400
Subject: runtime: expose message_subscribers() interface to python blocks

---
 gnuradio-runtime/lib/basic_block.cc | 33 ++++++++++++++++++++-------------
 1 file changed, 20 insertions(+), 13 deletions(-)

(limited to 'gnuradio-runtime/lib/basic_block.cc')

diff --git a/gnuradio-runtime/lib/basic_block.cc b/gnuradio-runtime/lib/basic_block.cc
index 8060c5355c..40edf09b01 100644
--- a/gnuradio-runtime/lib/basic_block.cc
+++ b/gnuradio-runtime/lib/basic_block.cc
@@ -52,7 +52,7 @@ namespace gr {
       d_symbol_name(global_block_registry.register_symbolic_name(this)),
       d_color(WHITE),
       d_rpc_set(false),
-      message_subscribers(pmt::make_dict())
+      d_message_subscribers(pmt::make_dict())
   {
     s_ncurrently_allocated++;
   }
@@ -107,18 +107,18 @@ namespace gr {
     if(!pmt::is_symbol(port_id)) {
       throw std::runtime_error("message_port_register_out: bad port id");
     }
-    if(pmt::dict_has_key(message_subscribers, port_id)) {
+    if(pmt::dict_has_key(d_message_subscribers, port_id)) {
       throw std::runtime_error("message_port_register_out: port already in use");
     }
-    message_subscribers = pmt::dict_add(message_subscribers, port_id, pmt::PMT_NIL);
+    d_message_subscribers = pmt::dict_add(d_message_subscribers, port_id, pmt::PMT_NIL);
   }
 
   pmt::pmt_t
   basic_block::message_ports_out()
   {
-    size_t len = pmt::length(message_subscribers);
+    size_t len = pmt::length(d_message_subscribers);
     pmt::pmt_t port_names = pmt::make_vector(len, pmt::PMT_NIL);
-    pmt::pmt_t keys = pmt::dict_keys(message_subscribers);
+    pmt::pmt_t keys = pmt::dict_keys(d_message_subscribers);
     for(size_t i = 0; i < len; i++) {
       pmt::vector_set(port_names, i, pmt::nth(i, keys));
     }
@@ -128,11 +128,11 @@ namespace gr {
   //  - publish a message on a message port
   void basic_block::message_port_pub(pmt::pmt_t port_id, pmt::pmt_t msg)
   {
-    if(!pmt::dict_has_key(message_subscribers, port_id)) {
+    if(!pmt::dict_has_key(d_message_subscribers, port_id)) {
       throw std::runtime_error("port does not exist");
     }
   
-    pmt::pmt_t currlist = pmt::dict_ref(message_subscribers, port_id, pmt::PMT_NIL);
+    pmt::pmt_t currlist = pmt::dict_ref(d_message_subscribers, port_id, pmt::PMT_NIL);
     // iterate through subscribers on port
     while(pmt::is_pair(currlist)) {
       pmt::pmt_t target = pmt::car(currlist);
@@ -150,23 +150,23 @@ namespace gr {
   //  - subscribe to a message port
   void
   basic_block::message_port_sub(pmt::pmt_t port_id, pmt::pmt_t target){
-    if(!pmt::dict_has_key(message_subscribers, port_id)){ 
+    if(!pmt::dict_has_key(d_message_subscribers, port_id)){ 
       std::stringstream ss;
       ss << "Port does not exist: \"" << pmt::write_string(port_id) << "\" on block: "
          << pmt::write_string(target) << std::endl;
       throw std::runtime_error(ss.str());
     }
-    pmt::pmt_t currlist = pmt::dict_ref(message_subscribers,port_id,pmt::PMT_NIL);
+    pmt::pmt_t currlist = pmt::dict_ref(d_message_subscribers,port_id,pmt::PMT_NIL);
   
     // ignore re-adds of the same target
     if(!pmt::list_has(currlist, target))
-      message_subscribers = pmt::dict_add(message_subscribers,port_id,pmt::list_add(currlist,target));
+      d_message_subscribers = pmt::dict_add(d_message_subscribers,port_id,pmt::list_add(currlist,target));
   }
 
   void
   basic_block::message_port_unsub(pmt::pmt_t port_id, pmt::pmt_t target)
   {
-    if(!pmt::dict_has_key(message_subscribers, port_id)) { 
+    if(!pmt::dict_has_key(d_message_subscribers, port_id)) { 
       std::stringstream ss;
       ss << "Port does not exist: \"" << pmt::write_string(port_id) << "\" on block: "
          << pmt::write_string(target) << std::endl;
@@ -174,8 +174,8 @@ namespace gr {
     }
   
     // ignore unsubs of unknown targets
-    pmt::pmt_t currlist = pmt::dict_ref(message_subscribers,port_id,pmt::PMT_NIL);
-    message_subscribers = pmt::dict_add(message_subscribers,port_id,pmt::list_rm(currlist,target));
+    pmt::pmt_t currlist = pmt::dict_ref(d_message_subscribers,port_id,pmt::PMT_NIL);
+    d_message_subscribers = pmt::dict_add(d_message_subscribers,port_id,pmt::list_rm(currlist,target));
   }
 
   void
@@ -230,4 +230,11 @@ namespace gr {
     return m;
   }
 
+  pmt::pmt_t 
+  basic_block::message_subscribers(pmt::pmt_t port)
+  {
+    return pmt::dict_ref(d_message_subscribers,port,pmt::PMT_NIL);
+  }
+
+
 } /* namespace gr */
-- 
cgit v1.2.3