diff options
-rw-r--r-- | gnuradio-runtime/include/gnuradio/basic_block.h | 5 | ||||
-rw-r--r-- | gnuradio-runtime/include/gnuradio/block_gateway.h | 4 | ||||
-rw-r--r-- | gnuradio-runtime/include/gnuradio/hier_block2.h | 2 | ||||
-rw-r--r-- | gnuradio-runtime/lib/basic_block.cc | 33 | ||||
-rw-r--r-- | gnuradio-runtime/swig/basic_block.i | 1 |
5 files changed, 29 insertions, 16 deletions
diff --git a/gnuradio-runtime/include/gnuradio/basic_block.h b/gnuradio-runtime/include/gnuradio/basic_block.h index 4a2d550fb3..726c63a1b1 100644 --- a/gnuradio-runtime/include/gnuradio/basic_block.h +++ b/gnuradio-runtime/include/gnuradio/basic_block.h @@ -137,9 +137,10 @@ namespace gr { } // Message passing interface - pmt::pmt_t message_subscribers; + pmt::pmt_t d_message_subscribers; public: + pmt::pmt_t message_subscribers(pmt::pmt_t port); virtual ~basic_block(); long unique_id() const { return d_unique_id; } long symbolic_id() const { return d_symbolic_id; } @@ -242,7 +243,7 @@ namespace gr { if(msg_queue.find(which_port) != msg_queue.end()) { return true; } - if(pmt::dict_has_key(message_subscribers, which_port)) { + if(pmt::dict_has_key(d_message_subscribers, which_port)) { return true; } return false; diff --git a/gnuradio-runtime/include/gnuradio/block_gateway.h b/gnuradio-runtime/include/gnuradio/block_gateway.h index 09e372163d..61e50ec6ba 100644 --- a/gnuradio-runtime/include/gnuradio/block_gateway.h +++ b/gnuradio-runtime/include/gnuradio/block_gateway.h @@ -238,6 +238,10 @@ namespace gr { void block__message_port_unsub(pmt::pmt_t port_id, pmt::pmt_t target) { gr::basic_block::message_port_unsub(port_id, target); } + + pmt::pmt_t block__message_subscribers(pmt::pmt_t which_port) { + return gr::basic_block::message_subscribers(which_port); + } pmt::pmt_t block__message_ports_in() { return gr::basic_block::message_ports_in(); diff --git a/gnuradio-runtime/include/gnuradio/hier_block2.h b/gnuradio-runtime/include/gnuradio/hier_block2.h index 0d7b138e4d..3f41930d16 100644 --- a/gnuradio-runtime/include/gnuradio/hier_block2.h +++ b/gnuradio-runtime/include/gnuradio/hier_block2.h @@ -206,7 +206,7 @@ namespace gr { void message_port_register_hier_out(pmt::pmt_t port_id) { if(pmt::list_has(hier_message_ports_out, port_id)) throw std::invalid_argument("hier msg out port by this name already registered"); - if(pmt::dict_has_key(message_subscribers, port_id)) + if(pmt::dict_has_key(d_message_subscribers, port_id)) throw std::invalid_argument("block already has a primitive output port by this name"); hier_message_ports_out = pmt::list_add(hier_message_ports_out, port_id); } 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 */ diff --git a/gnuradio-runtime/swig/basic_block.i b/gnuradio-runtime/swig/basic_block.i index 6599ea4d7b..cf75479bb8 100644 --- a/gnuradio-runtime/swig/basic_block.i +++ b/gnuradio-runtime/swig/basic_block.i @@ -52,6 +52,7 @@ namespace gr { void _post(pmt::pmt_t which_port, pmt::pmt_t msg); pmt::pmt_t message_ports_in(); pmt::pmt_t message_ports_out(); + pmt::pmt_t message_subscribers(pmt::pmt_t which_port); }; %rename(block_ncurrently_allocated) basic_block_ncurrently_allocated; |