23 #ifndef INCLUDED_GR_BLOCK_H
24 #define INCLUDED_GR_BLOCK_H
64 WORK_CALLED_PRODUCE = -2,
83 unsigned history ()
const {
return d_history; }
107 virtual void forecast (
int noutput_items,
124 virtual int general_work (
int noutput_items,
137 virtual bool start();
153 void set_output_multiple (
int multiple);
173 void set_alignment (
int multiple);
176 void set_unaligned (
int na);
178 void set_is_unaligned (
bool u);
184 void consume (
int which_input,
int how_many_items);
189 void consume_each (
int how_many_items);
196 void produce (
int which_output,
int how_many_items);
207 void set_relative_rate (
double relative_rate);
225 virtual int fixed_rate_ninput_to_noutput(
int ninput);
232 virtual int fixed_rate_noutput_to_ninput(
int noutput);
237 uint64_t nitems_read(
unsigned int which_input);
242 uint64_t nitems_written(
unsigned int which_output);
247 tag_propagation_policy_t tag_propagation_policy();
252 void set_tag_propagation_policy(tag_propagation_policy_t p);
275 int max_noutput_items();
283 void set_max_noutput_items(
int m);
300 void unset_max_noutput_items();
306 bool is_set_max_noutput_items();
316 if((
size_t)port >= d_max_output_buffer.size())
317 set_max_output_buffer(port, -1);
318 if((
size_t)port >= d_min_output_buffer.size())
319 set_min_output_buffer(port, -1);
326 if(i >= d_max_output_buffer.size())
327 throw std::invalid_argument(
"gr_basic_block::max_output_buffer: port out of range.");
328 return d_max_output_buffer[i];
336 set_max_output_buffer(i, max_output_buffer);
344 if((
size_t)port >= d_max_output_buffer.size())
345 d_max_output_buffer.push_back(max_output_buffer);
347 d_max_output_buffer[port] = max_output_buffer;
354 if(i >= d_min_output_buffer.size())
355 throw std::invalid_argument(
"gr_basic_block::min_output_buffer: port out of range.");
356 return d_min_output_buffer[i];
364 set_min_output_buffer(i, min_output_buffer);
372 if((
size_t)port >= d_min_output_buffer.size())
373 d_min_output_buffer.push_back(min_output_buffer);
375 d_min_output_buffer[port] = min_output_buffer;
383 float pc_noutput_items();
388 float pc_noutput_items_var();
393 float pc_nproduced();
398 float pc_nproduced_var();
403 float pc_input_buffers_full(
int which);
408 float pc_input_buffers_full_var(
int which);
413 std::vector<float> pc_input_buffers_full();
418 std::vector<float> pc_input_buffers_full_var();
423 float pc_output_buffers_full(
int which);
428 float pc_output_buffers_full_var(
int which);
433 std::vector<float> pc_output_buffers_full();
437 std::vector<float> pc_output_buffers_full_var();
442 float pc_work_time();
447 float pc_work_time_var();
452 void reset_perf_counters();
463 void set_processor_affinity(
const std::vector<unsigned int> &mask);
468 void unset_processor_affinity();
479 int d_output_multiple;
480 bool d_output_multiple_set;
483 double d_relative_rate;
487 bool d_max_noutput_items_set;
488 int d_max_noutput_items;
489 int d_min_noutput_items;
490 tag_propagation_policy_t d_tag_propagation_policy;
491 std::vector<unsigned int> d_affinity;
512 inline void add_item_tag(
unsigned int which_output,
523 this->add_item_tag(which_output, tag);
532 void add_item_tag(
unsigned int which_output,
const gr_tag_t &tag);
546 inline void remove_item_tag(
unsigned int which_input,
557 this->remove_item_tag(which_input, tag);
568 void remove_item_tag(
unsigned int which_input,
const gr_tag_t &tag);
583 void get_tags_in_range(std::vector<gr_tag_t> &v,
584 unsigned int which_input,
603 void get_tags_in_range(std::vector<gr_tag_t> &v,
604 unsigned int which_input,