22 #ifndef INCLUDED_GNURADIO_GR_BLOCK_H
23 #define INCLUDED_GNURADIO_GR_BLOCK_H
26 #include <gras/block.hpp>
33 #include <boost/foreach.hpp>
43 const std::string &
name,
49 std::string
name(
void)
const{
return _name;}
53 virtual ~gr_block(
void);
61 virtual bool check_topology(
int ninputs,
int noutputs);
64 virtual void forecast(
int, std::vector<int> &);
69 WORK_CALLED_PRODUCE = -2,
87 virtual int general_work(
89 gr_vector_int &ninput_items,
90 gr_vector_const_void_star &input_items,
91 gr_vector_void_star &output_items
94 virtual bool start(
void);
95 virtual bool stop(
void);
98 void consume_each(
const int how_many_items);
100 void consume(
const size_t i,
const int how_many_items);
102 void produce(
const size_t o,
const int how_many_items);
105 uint64_t nitems_read(
const size_t which_input = 0);
108 uint64_t nitems_written(
const size_t which_output = 0);
111 const size_t which_output,
const gr_tag_t &tag
115 const size_t which_output,
122 void get_tags_in_range(
123 std::vector<gr_tag_t> &tags,
124 const size_t which_input,
130 void set_alignment(
const size_t alignment);
132 bool is_unaligned(
void);
134 size_t fixed_rate_noutput_to_ninput(
const size_t noutput_items);
136 size_t interpolation(
void)
const;
138 void set_interpolation(
const size_t);
140 size_t decimation(
void)
const;
142 void set_decimation(
const size_t);
144 int max_noutput_items(
void)
const;
146 void set_max_noutput_items(
int);
148 void unset_max_noutput_items(
void);
150 bool is_set_max_noutput_items(
void)
const;
156 unsigned history(
void)
const;
158 void set_history(
unsigned history);
166 void set_fixed_rate(
const bool fixed_rate);
169 bool fixed_rate(
void)
const;
175 void set_relative_rate(
const double relative_rate);
178 double relative_rate(
void)
const;
184 void set_output_multiple(
const size_t multiple);
187 size_t output_multiple(
void)
const;
200 tag_propagation_policy_t tag_propagation_policy(
void);
202 void set_tag_propagation_policy(tag_propagation_policy_t p);
217 std::string
alias(){
return alias_set()?d_symbol_alias:symbol_name(); }
262 if(msg_queue.find(which_port) == msg_queue.end())
263 throw std::runtime_error(
"port does not exist!");
264 return msg_queue[which_port].empty();
268 BOOST_FOREACH(msg_queue_map_t::value_type &i, msg_queue){ rv &= msg_queue[i.first].empty(); }
285 return msg_queue[which_port].begin();
289 msg_queue[which_port].erase(it);
293 if(msg_queue.find(which_port) != msg_queue.end()){
306 return (d_msg_handlers.find(which_port) != d_msg_handlers.end());
318 if(has_msg_handler(which_port)) {
319 d_msg_handlers[which_port](msg);
368 void work(
const InputItems &,
const OutputItems &);
371 void notify_topology(
const size_t,
const size_t);
374 void notify_active(
void);
377 void notify_inactive(
void);
380 virtual void propagate_tags(
const size_t,
const gras::TagIter &);
382 void _update_input_reserve(
void);
384 gras::BufferQueueSptr input_buffer_allocator(
const size_t,
const gras::SBufferConfig &);
385 gras::BufferQueueSptr output_buffer_allocator(
const size_t,
const gras::SBufferConfig &);
393 if GRAS_UNLIKELY(how_many_items < 0)
return;
394 gras::Block::consume(
size_t(how_many_items));
399 if GRAS_UNLIKELY(how_many_items < 0)
return;
400 gras::Block::consume(i,
size_t(how_many_items));
405 if GRAS_UNLIKELY(how_many_items < 0)
return;
406 gras::Block::produce(o,
size_t(how_many_items));
411 return Block::get_consumed(which_input);
416 return Block::get_produced(which_output);
GRUEL_API pmt_t pmt_intern(const std::string &s)
Alias for pmt_string_to_symbol.
bool _enable_fixed_rate
Definition: gr_block.h:359
void message_port_register_out(pmt::pmt_t)
Definition: gr_block.h:235
pmt::pmt_t alias_pmt()
Definition: gr_block.h:218
long min_output_buffer(size_t)
Definition: gr_block.h:210
bool has_msg_handler(pmt::pmt_t which_port)
Tests if there is a handler attached to port which_port.
Definition: gr_block.h:305
size_t _input_history_items
Definition: gr_block.h:360
pmt::pmt_t message_ports_out()
Get output message port names.
Definition: gr_block.h:258
tag_propagation_policy_t
Definition: gr_block.h:193
d_msg_handlers_t d_msg_handlers
Definition: gr_block.h:230
std::map< pmt::pmt_t, msg_handler_t, pmt::pmt_comperator > d_msg_handlers_t
Definition: gr_block.h:229
bool empty_p()
Definition: gr_block.h:266
size_t _decim
Definition: gr_block.h:362
pmt::pmt_t delete_head_blocking(pmt::pmt_t)
Definition: gr_block.h:282
GRUEL_API const pmt_t PMT_F
bool is_unaligned(void)
Definition: gr_block.h:429
boost::mutex mutex
Definition: thread.h:44
uint64_t nitems_read(const size_t which_input=0)
Get absolute count of all items consumed on the given input port.
Definition: gr_block.h:409
size_t decimation(void) const
Definition: gr_block.h:424
std::vector< int > processor_affinity()
Get the current processor affinity.
Definition: gr_block.h:349
void set_min_output_buffer(int, long)
Definition: gr_block.h:209
long unique_id(void) const
Definition: gr_block.h:48
double _relative_rate
Definition: gr_block.h:358
void set_min_output_buffer(long)
Definition: gr_block.h:208
long max_output_buffer(size_t)
Definition: gr_block.h:207
void insert_tail(pmt::pmt_t, pmt::pmt_t)
Definition: gr_block.h:273
Definition: gr_block.h:37
void consume_each(const int how_many_items)
Call during work to consume items.
Definition: gr_block.h:391
void message_port_sub(pmt::pmt_t, pmt::pmt_t)
Definition: gr_block.h:237
void set_max_output_buffer(int, long)
Definition: gr_block.h:206
gr_vector_int _work_ninput_items
Definition: gr_block.h:353
pmt::pmt_t message_ports_in()
Get input message port names.
Definition: gr_block.h:250
gruel::mutex d_setlock
Definition: gr_block.h:328
#define GR_CORE_API
Definition: gr_core_api.h:30
virtual bool message_port_is_hier_out(pmt::pmt_t port_id)
Definition: gr_block.h:242
size_t interpolation(void) const
Definition: gr_block.h:419
void message_port_register_in(pmt::pmt_t)
Definition: gr_block.h:234
size_t _output_multiple_items
Definition: gr_block.h:357
std::string _name
Definition: gr_block.h:51
pmt::pmt_t delete_head_nowait(pmt::pmt_t)
Definition: gr_block.h:277
void set_block_alias(std::string name)
Definition: gr_block.h:219
std::deque< pmt::pmt_t > msg_queue_t
Definition: gr_block.h:222
unsigned __int64 uint64_t
Definition: stdint.h:90
std::string d_symbol_alias
Definition: gr_block.h:213
GRUEL_API bool pmt_dict_has_key(const pmt_t &dict, const pmt_t &key)
Return true if key exists in dict.
void consume(const size_t i, const int how_many_items)
Definition: gr_block.h:397
void set_processor_affinity(const std::vector< int > &mask)
Set the thread's affinity to processor core n.
Definition: gr_block.h:339
std::map< pmt::pmt_t, msg_queue_t, pmt::pmt_comperator >::iterator msg_queue_map_itr
Definition: gr_block.h:224
tag_propagation_policy_t _tag_prop_policy
Definition: gr_block.h:361
std::string d_symbol_name
Definition: gr_block.h:214
boost::function< void(pmt::pmt_t)> msg_handler_t
Definition: gr_block.h:228
VOLK_API void(kern.name) _manual($kern.arglist_full
Call into a specific implementation given by name.
void produce(const size_t o, const int how_many_items)
Definition: gr_block.h:403
void set_msg_handler(pmt::pmt_t which_port, T msg_handler)
Definition: gr_block.h:232
std::map< pmt::pmt_t, msg_queue_t, pmt::pmt_comperator > msg_queue_map_t
Definition: gr_block.h:223
virtual void dispatch_msg(pmt::pmt_t which_port, pmt::pmt_t msg)
Definition: gr_block.h:315
size_t _interp
Definition: gr_block.h:362
size_t _num_outputs
Definition: gr_block.h:355
std::string alias()
Definition: gr_block.h:217
GRUEL_API const pmt_t PMT_NIL
msg_queue_t::iterator get_iterator(pmt::pmt_t which_port)
Definition: gr_block.h:284
pmt::pmt_t message_subscribers
Definition: gr_block.h:226
VOLK_API $kern pname $kern name
A function pointer to the dispatcher implementation.
gr_io_signature_sptr _out_sig
Definition: gr_block.h:363
virtual bool message_port_is_hier(pmt::pmt_t port_id)
Definition: gr_block.h:240
virtual bool has_msg_port(pmt::pmt_t which_port)
Definition: gr_block.h:292
uint64_t nitems_written(const size_t which_output=0)
Get absolute count of all items produced on the given output port.
Definition: gr_block.h:414
void message_port_unsub(pmt::pmt_t, pmt::pmt_t)
Definition: gr_block.h:238
ptrdiff_t _work_io_ptr_mask
Definition: gr_block.h:356
bool empty_p(pmt::pmt_t which_port)
is the queue empty?
Definition: gr_block.h:261
boost::intrusive_ptr< pmt_base > pmt_t
typedef for shared pointer (transparent reference counting). See http://www.boost.org/libs/smart_ptr/smart_ptr.htm
Definition: pmt.h:54
gr_vector_int _fcast_ninput_items
Definition: gr_block.h:354
std::string symbol_name() const
Definition: gr_block.h:215
void set_max_output_buffer(long)
Definition: gr_block.h:205
msg_queue_map_t msg_queue
Definition: gr_block.h:225
virtual bool message_port_is_hier_in(pmt::pmt_t port_id)
Definition: gr_block.h:241
void erase_msg(pmt::pmt_t which_port, msg_queue_t::iterator it)
Definition: gr_block.h:288
void unset_processor_affinity()
Remove processor affinity to a specific core.
Definition: gr_block.h:344
long _unique_id
Definition: gr_block.h:50
void message_port_pub(pmt::pmt_t, pmt::pmt_t)
Definition: gr_block.h:236
bool alias_set()
Definition: gr_block.h:216
std::string name(void) const
Definition: gr_block.h:49
std::vector< int > d_affinity
Definition: gr_block.h:332