11#ifndef INCLUDED_GR_RUNTIME_BUFFER_H
12#define INCLUDED_GR_RUNTIME_BUFFER_H
37typedef std::function<
void*(
void*,
const void*, std::size_t)>
mem_func_t;
58 uint64_t downstream_lcm_nitems,
59 uint32_t downstream_max_out_mult,
60 block_sptr link = block_sptr(),
61 block_sptr buf_owner = block_sptr());
98 const char*
base()
const {
return static_cast<const char*
>(
d_base); }
193 [[maybe_unused]]
unsigned read_index)
203 [[maybe_unused]]
int items_avail,
204 [[maybe_unused]]
unsigned read_index)
225 [[maybe_unused]]
bool force =
false)
275 virtual buffer_reader_sptr
302 uint64_t downstream_lcm_nitems,
383 uint64_t downstream_lcm_nitems,
384 uint32_t downstream_max_out_mult,
Definition buffer_reader_sm.h:22
How we keep track of the readers of a gr::buffer.
Definition buffer_reader.h:53
uint32_t d_active_pointer_counter
Definition buffer.h:342
size_t nreaders() const
Definition buffer.h:128
unsigned d_max_reader_delay
Definition buffer.h:315
std::multimap< uint64_t, tag_t >::iterator get_tags_lower_bound(uint64_t x)
Definition buffer.h:172
virtual void * write_pointer()
return pointer to write buffer.
std::multimap< uint64_t, tag_t >::iterator get_tags_end()
Definition buffer.h:171
gr::thread::mutex d_mutex
Definition buffer.h:333
std::weak_ptr< block > d_link
Definition buffer.h:326
uint64_t get_downstream_lcm_nitems()
Definition buffer.h:143
uint64_t d_write_multiple
Definition buffer.h:345
virtual const void * _read_pointer(unsigned int read_index)
return pointer to read buffer.
std::multimap< uint64_t, tag_t >::iterator get_tags_upper_bound(uint64_t x)
Definition buffer.h:176
void prune_tags(uint64_t max_time)
Removes all tags before max_time from buffer.
virtual bool allocate_buffer(int nitems)
Definition buffer.h:360
bool done() const
Definition buffer.h:121
void decrement_active()
Decrement the number of active pointers for this buffer and signal anyone waiting when the count reac...
Definition buffer.h:245
void increment_active()
Increment the number of active pointers for this buffer.
Definition buffer.h:233
void add_item_tag(const tag_t &tag)
Adds a new tag to the buffer.
virtual void post_work(int nitems)=0
Function to be executed after this object's owner completes the call to general_work().
virtual buffer_reader_sptr create_reader(buffer_sptr buf, int nzero_preload, block_sptr link, int delay)
Create a buffer_reader for this buffer.
gr::logger_ptr d_logger
Definition buffer.h:70
virtual unsigned index_add(unsigned a, unsigned b)=0
Increment read or write index for this buffer.
virtual bool output_blkd_cb_ready(int output_multiple)
Returns true if the current thread is ready to execute output_blocked_callback(), false otherwise....
Definition buffer.h:215
friend GR_RUNTIME_API buffer_sptr make_buffer(int nitems, size_t sizeof_item, uint64_t downstream_lcm_nitems, block_sptr link)
friend GR_RUNTIME_API buffer_reader_sptr buffer_add_reader(buffer_sptr buf, int nzero_preload, block_sptr link, int delay)
Create a new gr::buffer_reader and attach it to buffer buf.
unsigned int d_bufsize
Definition buffer.h:311
virtual bool input_blocked_callback(int items_required, int items_avail, unsigned read_index)
Callback function that the scheduler will call when it determines that the input is blocked....
Definition buffer.h:202
virtual bool output_blocked_callback(int output_multiple, bool force=false)
Callback function that the scheduler will call when it determines that the output is blocked....
Definition buffer.h:224
uint32_t d_max_reader_output_multiple
Definition buffer.h:346
buffer_reader * reader(size_t index)
Definition buffer.h:129
friend std::ostream & operator<<(std::ostream &os, const buffer &buf)
void reset_nitem_counter()
Definition buffer.h:135
void on_unlock() override
"on_unlock" function from the custom_lock_if.
uint64_t d_abs_write_offset
Definition buffer.h:335
buffer_mapping_type d_buf_map_type
Definition buffer.h:312
uint32_t get_max_reader_output_multiple()
Definition buffer.h:145
bool d_has_history
Definition buffer.h:322
virtual int space_available()=0
return number of items worth of space available for writing
void drop_reader(buffer_reader *reader)
disassociate reader from this buffer
virtual bool input_blkd_cb_ready(int items_required, unsigned read_index)
Returns true when the current thread is ready to call the callback, false otherwise....
Definition buffer.h:192
block_sptr link()
Return the block that writes to this buffer.
Definition buffer.h:126
buffer_mapping_type get_mapping_type()
return the buffer's mapping type
Definition buffer.h:78
virtual void update_reader_block_history(unsigned history, int delay)
Definition buffer.h:147
void set_transfer_type(const transfer_type &type)
Assign buffer's transfer_type.
size_t get_sizeof_item()
Definition buffer.h:141
const char * base() const
return the base address of the buffer
Definition buffer.h:98
unsigned int bufsize() const
return size of this buffer in items
Definition buffer.h:93
uint64_t d_downstream_lcm_nitems
Definition buffer.h:344
std::multimap< uint64_t, tag_t > d_item_tags
Definition buffer.h:337
std::vector< buffer_reader * > d_readers
Definition buffer.h:325
friend class buffer_reader_sm
Definition buffer.h:298
void on_lock(gr::thread::scoped_lock &lock) override
"on_lock" function from the custom_lock_if.
friend class buffer_reader
Definition buffer.h:297
unsigned d_max_reader_history
Definition buffer.h:319
void update_write_pointer(int nitems)
tell buffer that we wrote nitems into it
bool d_done
Definition buffer.h:336
unsigned int d_write_index
Definition buffer.h:334
std::multimap< uint64_t, tag_t >::iterator get_tags_begin()
Definition buffer.h:167
char * d_base
Definition buffer.h:310
virtual unsigned index_sub(unsigned a, unsigned b)=0
Decrement read or write index for this buffer.
gr::thread::mutex * mutex()
Definition buffer.h:131
uint64_t nitems_written()
Definition buffer.h:133
size_t d_sizeof_item
Definition buffer.h:324
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.
virtual void on_transfer_type_set(const transfer_type &)
Called after the transfer type has been successfully assigned.
Definition buffer.h:294
virtual buffer_type get_buffer_type() const =0
return the buffer's buffer_type
transfer_type d_transfer_type
Definition buffer.h:348
gr::thread::condition_variable d_cv
Definition buffer.h:340
gr::logger_ptr d_debug_logger
Definition buffer.h:71
uint64_t d_last_min_items_read
Definition buffer.h:338
bool d_callback_flag
Definition buffer.h:341
Definition custom_lock.h:27
#define GR_RUNTIME_API
Definition gnuradio-runtime/include/gnuradio/api.h:18
boost::mutex mutex
Definition thread.h:34
boost::unique_lock< boost::mutex > scoped_lock
Definition thread.h:35
boost::condition_variable condition_variable
Definition thread.h:36
GNU Radio logging wrapper.
Definition basic_block.h:29
std::function< void *(void *, const void *, std::size_t)> mem_func_t
Definition buffer.h:37
const buffer_type_base & buffer_type
Definition buffer_type.h:85
std::shared_ptr< logger > logger_ptr
Definition logger.h:248
GR_RUNTIME_API buffer_sptr make_buffer(int nitems, size_t sizeof_item, uint64_t downstream_lcm_nitems, uint32_t downstream_max_out_mult, block_sptr link=block_sptr(), block_sptr buf_owner=block_sptr())
Allocate a buffer that holds at least nitems of size sizeof_item.
transfer_type
Definition transfer_type.h:19
buffer_mapping_type
Definition buffer.h:35
@ double_mapped
Definition buffer.h:35
@ single_mapped
Definition buffer.h:35
GR_RUNTIME_API long buffer_ncurrently_allocated()
returns # of buffers currently allocated
Template used to create buffer types. Note that the factory_class parameter must contain a static fun...
Definition buffer_type.h:94