diff options
Diffstat (limited to 'lib/gras_impl')
-rw-r--r-- | lib/gras_impl/output_buffer_queues.hpp | 45 |
1 files changed, 16 insertions, 29 deletions
diff --git a/lib/gras_impl/output_buffer_queues.hpp b/lib/gras_impl/output_buffer_queues.hpp index d9cd5e4..27a6175 100644 --- a/lib/gras_impl/output_buffer_queues.hpp +++ b/lib/gras_impl/output_buffer_queues.hpp @@ -22,7 +22,7 @@ struct OutputBufferQueues void set_reserve_bytes(const size_t i, const size_t num_bytes) { _reserve_bytes[i] = num_bytes; - _update(i); + if (_queues[i]) _update(i); } GRAS_FORCE_INLINE void resize(const size_t size) @@ -32,9 +32,11 @@ struct OutputBufferQueues _reserve_bytes.resize(size, 1); } - GRAS_FORCE_INLINE void push(const size_t i, const SBuffer &value) + GRAS_FORCE_INLINE void push(const size_t i, const SBuffer &buff) { - _queues[i]->push(value); + ASSERT(buff); + ASSERT(_queues[i]); + _queues[i]->push(buff); _update(i); } @@ -45,16 +47,6 @@ struct OutputBufferQueues this->resize(old_size); } - //! used for input buffer inlining - /* - GRAS_FORCE_INLINE void push_front(const size_t i, const T &value) - { - ASSERT(not _queues[i].full()); - _queues[i].push_front(value); - _bitset.set(i); - } - */ - GRAS_FORCE_INLINE SBuffer &front(const size_t i) { ASSERT(not this->empty(i)); @@ -63,6 +55,8 @@ struct OutputBufferQueues GRAS_FORCE_INLINE void pop(const size_t i) { + ASSERT(_queues[i]); + ASSERT(not _queues[i]->empty()); _queues[i]->pop(); _update(i); } @@ -71,24 +65,10 @@ struct OutputBufferQueues { _bitset.reset(i); } -/* - GRAS_FORCE_INLINE void flush(const size_t i) - { - _queues[i].clear(); - _bitset.reset(i); - } - GRAS_FORCE_INLINE void flush_all(void) - { - for (size_t i = 0; i < this->size(); i++) this->flush(i); - } -*/ GRAS_FORCE_INLINE bool ready(const size_t i) const { - if (_queues[i]->empty()) return false; - const SBuffer &front = _queues[i]->front(); - const size_t avail = front.get_actual_length() - front.offset - front.length; - return avail >= _reserve_bytes[i]; + return _bitset[i]; } GRAS_FORCE_INLINE bool empty(const size_t i) const @@ -109,7 +89,14 @@ struct OutputBufferQueues GRAS_FORCE_INLINE void _update(const size_t i) { - _bitset.set(i, this->ready(i)); + if (not _queues[i] or _queues[i]->empty()) + { + _bitset.reset(i); + return; + } + const SBuffer &front = _queues[i]->front(); + const size_t avail = front.get_actual_length() - front.offset - front.length; + _bitset.set(i, avail >= _reserve_bytes[i]); } BitSet _bitset; |