23 #ifndef INCLUDED_GR_BUFFER_H
24 #define INCLUDED_GR_BUFFER_H
28 #include <boost/weak_ptr.hpp>
61 int space_available ();
74 void *write_pointer ();
79 void update_write_pointer (
int nitems);
81 void set_done (
bool done);
82 bool done ()
const {
return d_done; }
89 size_t nreaders()
const {
return d_readers.size(); }
103 void add_item_tag(
const gr_tag_t &tag);
112 void remove_item_tag(
const gr_tag_t &tag);
122 std::deque<gr_tag_t>::iterator
get_tags_end() {
return d_item_tags.end(); }
137 size_t d_sizeof_item;
138 std::vector<gr_buffer_reader *> d_readers;
139 boost::weak_ptr<gr_block> d_link;
146 unsigned int d_write_index;
149 std::deque<gr_tag_t> d_item_tags;
153 index_add (
unsigned a,
unsigned b)
160 assert (s < d_bufsize);
165 index_sub (
unsigned a,
unsigned b)
172 assert ((
unsigned) s < d_bufsize);
176 virtual bool allocate_buffer (
int nitems,
size_t sizeof_item);
228 int items_available ()
const;
247 const void *read_pointer ();
252 void update_read_pointer (
int nitems);
254 void set_done (
bool done) { d_buffer->set_done (done); }
255 bool done ()
const {
return d_buffer->done (); }
283 void get_tags_in_range(std::vector<gr_tag_t> &v,
297 unsigned int d_read_index;
299 boost::weak_ptr<gr_block> d_link;
gruel::mutex * mutex()
Definition: gr_buffer.h:92
size_t get_sizeof_item()
Definition: gr_buffer.h:96
char * d_base
Definition: gr_buffer.h:133
GR_CORE_API gr_buffer_sptr gr_make_buffer(int nitems, size_t sizeof_item, gr_block_sptr link=gr_block_sptr())
Allocate a buffer that holds at least nitems of size sizeof_item.
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: gr_buffer.h:240
void set_done(bool done)
Definition: gr_buffer.h:254
uint64_t nitems_read()
Definition: gr_buffer.h:260
boost::mutex mutex
Definition: thread.h:44
std::deque< gr_tag_t >::iterator get_tags_end()
Definition: gr_buffer.h:122
uint64_t nitems_written()
Definition: gr_buffer.h:94
GR_CORE_API gr_buffer_reader_sptr gr_buffer_add_reader(gr_buffer_sptr buf, int nzero_preload, gr_block_sptr link=gr_block_sptr())
Create a new gr_buffer_reader and attach it to buffer buf.
bool done() const
Definition: gr_buffer.h:82
shared_ptr documentation stub
Definition: shared_ptr_docstub.h:15
gr_buffer_sptr buffer() const
Return buffer this reader reads from.
Definition: gr_buffer.h:233
friend class gr_buffer
Definition: gr_buffer.h:291
#define GR_CORE_API
Definition: gr_core_api.h:30
unsigned __int64 uint64_t
Definition: stdint.h:90
gr_buffer_reader * reader(size_t index)
Definition: gr_buffer.h:90
friend class gr_buffer_reader
Definition: gr_buffer.h:128
size_t nreaders() const
Definition: gr_buffer.h:89
Single writer, multiple reader fifo.
Definition: gr_buffer.h:53
unsigned int d_bufsize
Definition: gr_buffer.h:134
gr_block_sptr link()
Return the block that writes to this buffer.
Definition: gr_buffer.h:87
GR_CORE_API long gr_buffer_reader_ncurrently_allocated()
returns # of gr_buffer_readers currently allocated
bool done() const
Definition: gr_buffer.h:255
abstract class to implement doubly mapped virtual memory circular buffers
Definition: gr_vmcircbuf.h:33
gruel::mutex * mutex()
Definition: gr_buffer.h:257
GR_CORE_API long gr_buffer_ncurrently_allocated()
returns # of gr_buffers currently allocated
How we keep track of the readers of a gr_buffer.
Definition: gr_buffer.h:220
std::deque< gr_tag_t >::iterator get_tags_begin()
Definition: gr_buffer.h:121
int bufsize() const
return size of this buffer in items
Definition: gr_buffer.h:66
size_t get_sizeof_item()
Definition: gr_buffer.h:262
gr_block_sptr link()
Return the block that reads via this reader.
Definition: gr_buffer.h:268