summaryrefslogtreecommitdiff
path: root/lib/gras_impl
diff options
context:
space:
mode:
Diffstat (limited to 'lib/gras_impl')
-rw-r--r--lib/gras_impl/output_buffer_queues.hpp45
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;