summaryrefslogtreecommitdiff
path: root/gnuradio-runtime/include/gnuradio/buffer.h
diff options
context:
space:
mode:
authorMarcus Müller <mmueller@gnuradio.org>2019-08-07 21:45:12 +0200
committerMarcus Müller <marcus@hostalia.de>2019-08-09 23:04:28 +0200
commitf7bbf2c1d8d780294f3e016aff239ca35eb6516e (patch)
treee09ab6112e02b2215b2d59ac24d3d6ea2edac745 /gnuradio-runtime/include/gnuradio/buffer.h
parent78431dc6941e3acc67c858277dfe4a0ed583643c (diff)
Tree: clang-format without the include sorting
Diffstat (limited to 'gnuradio-runtime/include/gnuradio/buffer.h')
-rw-r--r--gnuradio-runtime/include/gnuradio/buffer.h226
1 files changed, 122 insertions, 104 deletions
diff --git a/gnuradio-runtime/include/gnuradio/buffer.h b/gnuradio-runtime/include/gnuradio/buffer.h
index 914661b318..d51fb92629 100644
--- a/gnuradio-runtime/include/gnuradio/buffer.h
+++ b/gnuradio-runtime/include/gnuradio/buffer.h
@@ -32,29 +32,30 @@
namespace gr {
- class vmcircbuf;
-
- /*!
- * \brief Allocate a buffer that holds at least \p nitems of size \p sizeof_item.
- *
- * The total size of the buffer will be rounded up to a system
- * dependent boundary. This is typically the system page size, but
- * under MS windows is 64KB.
- *
- * \param nitems is the minimum number of items the buffer will hold.
- * \param sizeof_item is the size of an item in bytes.
- * \param link is the block that writes to this buffer.
- */
- GR_RUNTIME_API buffer_sptr make_buffer(int nitems, size_t sizeof_item,
- block_sptr link=block_sptr());
-
- /*!
- * \brief Single writer, multiple reader fifo.
- * \ingroup internal
- */
- class GR_RUNTIME_API buffer
- {
- public:
+class vmcircbuf;
+
+/*!
+ * \brief Allocate a buffer that holds at least \p nitems of size \p sizeof_item.
+ *
+ * The total size of the buffer will be rounded up to a system
+ * dependent boundary. This is typically the system page size, but
+ * under MS windows is 64KB.
+ *
+ * \param nitems is the minimum number of items the buffer will hold.
+ * \param sizeof_item is the size of an item in bytes.
+ * \param link is the block that writes to this buffer.
+ */
+GR_RUNTIME_API buffer_sptr make_buffer(int nitems,
+ size_t sizeof_item,
+ block_sptr link = block_sptr());
+
+/*!
+ * \brief Single writer, multiple reader fifo.
+ * \ingroup internal
+ */
+class GR_RUNTIME_API buffer
+{
+public:
virtual ~buffer();
/*!
@@ -78,7 +79,7 @@ namespace gr {
* The return value points at space that can hold at least
* space_available() items.
*/
- void *write_pointer();
+ void* write_pointer();
/*!
* \brief tell buffer that we wrote \p nitems into it
@@ -96,7 +97,7 @@ namespace gr {
size_t nreaders() const { return d_readers.size(); }
buffer_reader* reader(size_t index) { return d_readers[index]; }
- gr::thread::mutex *mutex() { return &d_mutex; }
+ gr::thread::mutex* mutex() { return &d_mutex; }
uint64_t nitems_written() { return d_abs_write_offset; }
@@ -109,7 +110,7 @@ namespace gr {
*
* \param tag the new tag
*/
- void add_item_tag(const tag_t &tag);
+ void add_item_tag(const tag_t& tag);
/*!
* \brief Removes an existing tag from the buffer.
@@ -123,7 +124,7 @@ namespace gr {
* \param tag the tag that needs to be removed
* \param id the unique ID of the block calling this function
*/
- void remove_item_tag(const tag_t &tag, long id);
+ void remove_item_tag(const tag_t& tag, long id);
/*!
* \brief Removes all tags before \p max_time from buffer
@@ -132,63 +133,76 @@ namespace gr {
*/
void prune_tags(uint64_t max_time);
- std::multimap<uint64_t,tag_t>::iterator get_tags_begin() { return d_item_tags.begin(); }
- std::multimap<uint64_t,tag_t>::iterator get_tags_end() { return d_item_tags.end(); }
- std::multimap<uint64_t,tag_t>::iterator get_tags_lower_bound(uint64_t x) { return d_item_tags.lower_bound(x); }
- std::multimap<uint64_t,tag_t>::iterator get_tags_upper_bound(uint64_t x) { return d_item_tags.upper_bound(x); }
+ std::multimap<uint64_t, tag_t>::iterator get_tags_begin()
+ {
+ return d_item_tags.begin();
+ }
+ std::multimap<uint64_t, tag_t>::iterator get_tags_end() { return d_item_tags.end(); }
+ std::multimap<uint64_t, tag_t>::iterator get_tags_lower_bound(uint64_t x)
+ {
+ return d_item_tags.lower_bound(x);
+ }
+ std::multimap<uint64_t, tag_t>::iterator get_tags_upper_bound(uint64_t x)
+ {
+ return d_item_tags.upper_bound(x);
+ }
// -------------------------------------------------------------------------
- private:
+private:
friend class buffer_reader;
- friend GR_RUNTIME_API buffer_sptr make_buffer(int nitems, size_t sizeof_item, block_sptr link);
- friend GR_RUNTIME_API buffer_reader_sptr buffer_add_reader
- (buffer_sptr buf, int nzero_preload, block_sptr link, int delay);
-
- protected:
- char *d_base; // base address of buffer
- unsigned int d_bufsize; // in items
+ friend GR_RUNTIME_API buffer_sptr make_buffer(int nitems,
+ size_t sizeof_item,
+ block_sptr link);
+ friend GR_RUNTIME_API buffer_reader_sptr buffer_add_reader(buffer_sptr buf,
+ int nzero_preload,
+ block_sptr link,
+ int delay);
+
+protected:
+ char* d_base; // base address of buffer
+ unsigned int d_bufsize; // in items
// Keep track of maximum sample delay of any reader; Only prune tags past this.
unsigned d_max_reader_delay;
- private:
- gr::vmcircbuf *d_vmcircbuf;
- size_t d_sizeof_item; // in bytes
- std::vector<buffer_reader *> d_readers;
- boost::weak_ptr<block> d_link; // block that writes to this buffer
+private:
+ gr::vmcircbuf* d_vmcircbuf;
+ size_t d_sizeof_item; // in bytes
+ std::vector<buffer_reader*> d_readers;
+ boost::weak_ptr<block> d_link; // block that writes to this buffer
//
// The mutex protects d_write_index, d_abs_write_offset, d_done, d_item_tags
// and the d_read_index's and d_abs_read_offset's in the buffer readers.
//
- gr::thread::mutex d_mutex;
- unsigned int d_write_index; // in items [0,d_bufsize)
- uint64_t d_abs_write_offset; // num items written since the start
- bool d_done;
- std::multimap<uint64_t,tag_t> d_item_tags;
- uint64_t d_last_min_items_read;
+ gr::thread::mutex d_mutex;
+ unsigned int d_write_index; // in items [0,d_bufsize)
+ uint64_t d_abs_write_offset; // num items written since the start
+ bool d_done;
+ std::multimap<uint64_t, tag_t> d_item_tags;
+ uint64_t d_last_min_items_read;
unsigned index_add(unsigned a, unsigned b)
{
- unsigned s = a + b;
+ unsigned s = a + b;
- if(s >= d_bufsize)
- s -= d_bufsize;
+ if (s >= d_bufsize)
+ s -= d_bufsize;
- assert(s < d_bufsize);
- return s;
+ assert(s < d_bufsize);
+ return s;
}
unsigned index_sub(unsigned a, unsigned b)
{
- int s = a - b;
+ int s = a - b;
- if(s < 0)
- s += d_bufsize;
+ if (s < 0)
+ s += d_bufsize;
- assert((unsigned) s < d_bufsize);
- return s;
+ assert((unsigned)s < d_bufsize);
+ return s;
}
virtual bool allocate_buffer(int nitems, size_t sizeof_item);
@@ -211,32 +225,34 @@ namespace gr {
/*!
* \brief disassociate \p reader from this buffer
*/
- void drop_reader(buffer_reader *reader);
- };
-
- /*!
- * \brief Create a new gr::buffer_reader and attach it to buffer \p buf
- * \param buf is the buffer the \p gr::buffer_reader reads from.
- * \param nzero_preload -- number of zero items to "preload" into buffer.
- * \param link is the block that reads from the buffer using this gr::buffer_reader.
- * \param delay Optional setting to declare the buffer's sample delay.
- */
- GR_RUNTIME_API buffer_reader_sptr
- buffer_add_reader(buffer_sptr buf, int nzero_preload, block_sptr link=block_sptr(), int delay=0);
-
- //! returns # of buffers currently allocated
- GR_RUNTIME_API long buffer_ncurrently_allocated();
-
-
- // ---------------------------------------------------------------------------
-
- /*!
- * \brief How we keep track of the readers of a gr::buffer.
- * \ingroup internal
- */
- class GR_RUNTIME_API buffer_reader
- {
- public:
+ void drop_reader(buffer_reader* reader);
+};
+
+/*!
+ * \brief Create a new gr::buffer_reader and attach it to buffer \p buf
+ * \param buf is the buffer the \p gr::buffer_reader reads from.
+ * \param nzero_preload -- number of zero items to "preload" into buffer.
+ * \param link is the block that reads from the buffer using this gr::buffer_reader.
+ * \param delay Optional setting to declare the buffer's sample delay.
+ */
+GR_RUNTIME_API buffer_reader_sptr buffer_add_reader(buffer_sptr buf,
+ int nzero_preload,
+ block_sptr link = block_sptr(),
+ int delay = 0);
+
+//! returns # of buffers currently allocated
+GR_RUNTIME_API long buffer_ncurrently_allocated();
+
+
+// ---------------------------------------------------------------------------
+
+/*!
+ * \brief How we keep track of the readers of a gr::buffer.
+ * \ingroup internal
+ */
+class GR_RUNTIME_API buffer_reader
+{
+public:
~buffer_reader();
/*!
@@ -276,7 +292,7 @@ namespace gr {
*
* The return value points to items_available() number of items
*/
- const void *read_pointer();
+ const void* read_pointer();
/*
* \brief tell buffer we read \p items from it
@@ -286,7 +302,7 @@ namespace gr {
void set_done(bool done) { d_buffer->set_done(done); }
bool done() const { return d_buffer->done(); }
- gr::thread::mutex *mutex() { return d_buffer->mutex(); }
+ gr::thread::mutex* mutex() { return d_buffer->mutex(); }
uint64_t nitems_read() { return d_abs_read_offset; }
@@ -311,33 +327,35 @@ namespace gr {
* \param v a vector reference to return tags into
* \param abs_start a uint64 count of the start of the range of interest
* \param abs_end a uint64 count of the end of the range of interest
- * \param id the unique ID of the block to make sure already deleted tags are not returned
+ * \param id the unique ID of the block to make sure already deleted tags
+ * are not returned
*/
- void get_tags_in_range(std::vector<tag_t> &v,
+ void get_tags_in_range(std::vector<tag_t>& v,
uint64_t abs_start,
uint64_t abs_end,
- long id);
+ long id);
// -------------------------------------------------------------------------
- private:
+private:
friend class buffer;
- friend GR_RUNTIME_API buffer_reader_sptr
- buffer_add_reader(buffer_sptr buf, int nzero_preload, block_sptr link, int delay);
+ friend GR_RUNTIME_API buffer_reader_sptr buffer_add_reader(buffer_sptr buf,
+ int nzero_preload,
+ block_sptr link,
+ int delay);
- buffer_sptr d_buffer;
- unsigned int d_read_index; // in items [0,d->buffer.d_bufsize)
- uint64_t d_abs_read_offset; // num items seen since the start
- boost::weak_ptr<block> d_link; // block that reads via this buffer reader
- unsigned d_attr_delay; // sample delay attribute for tag propagation
+ buffer_sptr d_buffer;
+ unsigned int d_read_index; // in items [0,d->buffer.d_bufsize)
+ uint64_t d_abs_read_offset; // num items seen since the start
+ boost::weak_ptr<block> d_link; // block that reads via this buffer reader
+ unsigned d_attr_delay; // sample delay attribute for tag propagation
//! constructor is private. Use gr::buffer::add_reader to create instances
- buffer_reader(buffer_sptr buffer, unsigned int read_index,
- block_sptr link);
- };
+ buffer_reader(buffer_sptr buffer, unsigned int read_index, block_sptr link);
+};
- //! returns # of buffer_readers currently allocated
- GR_RUNTIME_API long buffer_reader_ncurrently_allocated ();
+//! returns # of buffer_readers currently allocated
+GR_RUNTIME_API long buffer_reader_ncurrently_allocated();
} /* namespace gr */