23 #ifndef INCLUDED_GR_RUNTIME_BUFFER_H
24 #define INCLUDED_GR_RUNTIME_BUFFER_H
29 #include <boost/weak_ptr.hpp>
49 block_sptr link=block_sptr());
63 int space_available();
76 void *write_pointer();
81 void update_write_pointer(
int nitems);
83 void set_done(
bool done);
84 bool done()
const {
return d_done; }
91 size_t nreaders()
const {
return d_readers.size(); }
105 void add_item_tag(
const tag_t &tag);
119 void remove_item_tag(
const tag_t &tag,
long id);
129 std::deque<tag_t>::iterator
get_tags_end() {
return d_item_tags.end(); }
142 gr::vmcircbuf *d_vmcircbuf;
143 size_t d_sizeof_item;
144 std::vector<buffer_reader *> d_readers;
145 boost::weak_ptr<block> d_link;
152 unsigned int d_write_index;
155 std::deque<tag_t> d_item_tags;
158 unsigned index_add(
unsigned a,
unsigned b)
165 assert(s < d_bufsize);
169 unsigned index_sub(
unsigned a,
unsigned b)
176 assert((
unsigned) s < d_bufsize);
180 virtual bool allocate_buffer(
int nitems,
size_t sizeof_item);
195 buffer(
int nitems,
size_t sizeof_item, block_sptr link);
200 void drop_reader(buffer_reader *reader);
210 buffer_add_reader(buffer_sptr buf,
int nzero_preload, block_sptr link=block_sptr());
230 int items_available()
const;
248 const void *read_pointer();
253 void update_read_pointer(
int nitems);
255 void set_done(
bool done) { d_buffer->set_done(done); }
256 bool done()
const {
return d_buffer->done(); }
283 void get_tags_in_range(std::vector<tag_t> &v,
296 unsigned int d_read_index;
298 boost::weak_ptr<block> d_link;
buffer_sptr buffer() const
Return buffer this reader reads from.
Definition: buffer.h:235
How we keep track of the readers of a gr::buffer.
Definition: buffer.h:222
void set_done(bool done)
Definition: buffer.h:255
char * d_base
Definition: buffer.h:139
uint64_t nitems_read()
Definition: buffer.h:260
gr::thread::mutex * mutex()
Definition: buffer.h:94
int max_possible_items_available() const
Return maximum number of items that could ever be available for reading. This is used as a sanity che...
Definition: buffer.h:241
std::deque< tag_t >::iterator get_tags_end()
Definition: buffer.h:129
std::deque< tag_t >::iterator get_tags_begin()
Definition: buffer.h:128
#define GR_RUNTIME_API
Definition: gnuradio-runtime/include/gnuradio/api.h:30
shared_ptr documentation stub
Definition: shared_ptr_docstub.h:15
bool done() const
Definition: buffer.h:256
GR_RUNTIME_API buffer_reader_sptr buffer_add_reader(buffer_sptr buf, int nzero_preload, block_sptr link=block_sptr())
Create a new gr::buffer_reader and attach it to buffer buf.
Single writer, multiple reader fifo.
Definition: buffer.h:55
block_sptr link()
Return the block that reads via this reader.
Definition: buffer.h:268
size_t get_sizeof_item()
Definition: buffer.h:98
size_t get_sizeof_item()
Definition: buffer.h:262
unsigned __int64 uint64_t
Definition: stdint.h:90
gr::thread::mutex * mutex()
Definition: buffer.h:258
GR_RUNTIME_API long buffer_ncurrently_allocated()
returns # of buffers currently allocated
block_sptr link()
Return the block that writes to this buffer.
Definition: buffer.h:89
buffer_reader * reader(size_t index)
Definition: buffer.h:92
size_t nreaders() const
Definition: buffer.h:91
uint64_t nitems_written()
Definition: buffer.h:96
boost::mutex mutex
Definition: thread.h:46
bool done() const
Definition: buffer.h:84
int bufsize() const
return size of this buffer in items
Definition: buffer.h:68
unsigned int d_bufsize
Definition: buffer.h:140
GR_RUNTIME_API buffer_sptr make_buffer(int nitems, size_t sizeof_item, block_sptr link=block_sptr())
Allocate a buffer that holds at least nitems of size sizeof_item.
GR_RUNTIME_API long buffer_reader_ncurrently_allocated()
returns # of buffer_readers currently allocated