A single mapped buffer where wrapping conditions are handled explicitly via input/output_blocked_callback functions called from block_executor.
More...
|
| ~buffer_single_mapped () override |
|
block_sptr | buf_owner () |
| Return the block that owns this buffer.
|
|
int | space_available () override |
| return number of items worth of space available for writing
|
|
void | update_reader_block_history (unsigned history, int delay) override |
|
bool | input_blkd_cb_ready (int items_required, unsigned read_index) override |
| Return true if thread is ready to call input_blocked_callback, false otherwise.
|
|
bool | input_blocked_callback (int items_required, int items_avail, unsigned read_index) override=0 |
| Callback function that the scheduler will call when it determines that the input is blocked. Override this function if needed.
|
|
bool | output_blkd_cb_ready (int output_multiple) override |
| Return true if thread is ready to call the callback, false otherwise.
|
|
bool | output_blocked_callback (int output_multiple, bool force) override=0 |
| Callback function that the scheduler will call when it determines that the output is blocked.
|
|
| ~buffer () override |
|
buffer_mapping_type | get_mapping_type () |
| return the buffer's mapping type
|
|
unsigned int | bufsize () const |
| return size of this buffer in items
|
|
const char * | base () const |
| return the base address of the buffer
|
|
virtual void * | write_pointer () |
| return pointer to write buffer.
|
|
virtual const void * | _read_pointer (unsigned int read_index) |
| return pointer to read buffer.
|
|
void | update_write_pointer (int nitems) |
| tell buffer that we wrote nitems into it
|
|
void | set_done (bool done) |
|
bool | done () const |
|
block_sptr | link () |
| Return the block that writes to this buffer.
|
|
size_t | nreaders () const |
|
buffer_reader * | reader (size_t index) |
|
gr::thread::mutex * | mutex () |
|
uint64_t | nitems_written () |
|
void | reset_nitem_counter () |
|
size_t | get_sizeof_item () |
|
uint64_t | get_downstream_lcm_nitems () |
|
uint32_t | get_max_reader_output_multiple () |
|
void | add_item_tag (const tag_t &tag) |
| Adds a new tag to the buffer.
|
|
void | remove_item_tag (const tag_t &tag, long id) |
| Removes an existing tag from the buffer.
|
|
void | prune_tags (uint64_t max_time) |
| Removes all tags before max_time from buffer.
|
|
std::multimap< uint64_t, tag_t >::iterator | get_tags_begin () |
|
std::multimap< uint64_t, tag_t >::iterator | get_tags_end () |
|
std::multimap< uint64_t, tag_t >::iterator | get_tags_lower_bound (uint64_t x) |
|
std::multimap< uint64_t, tag_t >::iterator | get_tags_upper_bound (uint64_t x) |
|
virtual void | post_work (int nitems)=0 |
| Function to be executed after this object's owner completes the call to general_work()
|
|
void | increment_active () |
| Increment the number of active pointers for this buffer.
|
|
void | decrement_active () |
| Decrement the number of active pointers for this buffer and signal anyone waiting when the count reaches zero.
|
|
void | on_lock (gr::thread::scoped_lock &lock) override |
| "on_lock" function from the custom_lock_if.
|
|
void | on_unlock () override |
| "on_unlock" function from the custom_lock_if.
|
|
void | set_transfer_type (const transfer_type &type) |
| Assign buffer's transfer_type.
|
|
virtual | ~custom_lock_if () |
|
|
bool | allocate_buffer (int nitems) override |
| Make reasonable attempt to adjust nitems based on read/write granularity then delegate actual allocation to do_allocate_buffer().
|
|
virtual bool | do_allocate_buffer (size_t final_nitems, size_t sizeof_item)=0 |
| Do actual buffer allocation. This is intended (required) to be handled by the derived class.
|
|
unsigned | index_add (unsigned a, unsigned b) override |
| Increment read or write index for this buffer.
|
|
unsigned | index_sub (unsigned a, unsigned b) override |
| Decrement read or write index for this buffer.
|
|
| buffer_single_mapped (int nitems, size_t sizeof_item, uint64_t downstream_lcm_nitems, uint32_t downstream_max_out_mult, block_sptr link, block_sptr buf_owner) |
| constructor is private. Use gr_make_buffer to create instances.
|
|
virtual bool | input_blocked_callback_logic (int items_required, int items_avail, unsigned read_index, char *buffer_ptr, mem_func_t const &memcpy_func, mem_func_t const &memmove_func) |
| Abstracted logic for the input blocked callback function.
|
|
virtual bool | output_blocked_callback_logic (int output_multiple, bool force, char *buffer_ptr, mem_func_t const &memmove_func) |
| Abstracted logic for the output blocked callback function.
|
|
| buffer (buffer_mapping_type buftype, int nitems, size_t sizeof_item, uint64_t downstream_lcm_nitems, uint32_t downstream_max_out_mult, block_sptr link) |
| constructor is private. Use gr_make_buffer to create instances.
|
|
void | drop_reader (buffer_reader *reader) |
| disassociate reader from this buffer
|
|
A single mapped buffer where wrapping conditions are handled explicitly via input/output_blocked_callback functions called from block_executor.
virtual bool gr::buffer_single_mapped::input_blocked_callback_logic |
( |
int |
items_required, |
|
|
int |
items_avail, |
|
|
unsigned |
read_index, |
|
|
char * |
buffer_ptr, |
|
|
mem_func_t const & |
memcpy_func, |
|
|
mem_func_t const & |
memmove_func |
|
) |
| |
|
protectedvirtual |
Abstracted logic for the input blocked callback function.
This function contains the logic for the input blocked callback however the data adjustment portion of the callback has been abstracted to allow the caller to pass in the desired buffer and corresponding buffer manipulation functions (memcpy and memmove).
The input blocked callback is called when a reader needs to read more data than is available in a buffer and the available data is located at the end of the buffer. The input blocked callback will attempt to move any data located at the beginning of the buffer "down", and will then attempt to copy from the end of the buffer back to the beginning of the buffer. This process explicitly handles wrapping for a single mapped buffer and will realign the data at the beginning of the buffer such that the reader is able to read the available data and becomes unblocked.
- Parameters
-
items_required | is the number of items required by the reader |
items_avail | is the number of items available |
read_index | is the current read index of the buffer reader caller |
buffer_ptr | is the pointer to the desired buffer |
memcpy_func | is a pointer to a memcpy function appropriate for the the passed in buffer |
memmove_func | is a pointer to a memmove function appropriate for the passed in buffer |
virtual bool gr::buffer_single_mapped::output_blocked_callback_logic |
( |
int |
output_multiple, |
|
|
bool |
force, |
|
|
char * |
buffer_ptr, |
|
|
mem_func_t const & |
memmove_func |
|
) |
| |
|
protectedvirtual |
Abstracted logic for the output blocked callback function.
This function contains the logic for the output blocked callback however the data adjustment portion of the callback has been abstracted to allow the caller to pass in the desired buffer and corresponding buffer manipulation functions (memcpy and memmove).
The output blocked callback is called when a block needs to write data to the end of a single mapped buffer but not enough free space exists to write the data before the end of the buffer is reached. The output blocked callback will attempt to copy data located towards the end of a single mapped buffer back to the beginning of the buffer. This process explicitly handles wrapping for a single mapped buffer and will realign data located at the end of a buffer back to the beginning of the buffer such that the writing block can write its output into the buffer after the existing data.
- Parameters
-
output_multiple | |
force | run the callback disregarding the internal checks |
buffer_ptr | is the pointer to the desired buffer |
memmove_func | is a pointer to a memmove function appropriate for the passed in buffer |