diff options
author | Josh Blum | 2012-09-10 02:57:38 -0700 |
---|---|---|
committer | Josh Blum | 2012-09-10 02:57:38 -0700 |
commit | fc54cf91b4d487ab34d8bc2f67368747c3dc7a07 (patch) | |
tree | 59d088f054b111e76f61398630059fae4764f6c8 /lib | |
parent | 4adb2a384bb06406ffaf3ca4f5a33e42f8a74491 (diff) | |
download | sandhi-fc54cf91b4d487ab34d8bc2f67368747c3dc7a07.tar.gz sandhi-fc54cf91b4d487ab34d8bc2f67368747c3dc7a07.tar.bz2 sandhi-fc54cf91b4d487ab34d8bc2f67368747c3dc7a07.zip |
use sbuffer directly in the input queues now
Diffstat (limited to 'lib')
-rw-r--r-- | lib/block_task.cpp | 2 | ||||
-rw-r--r-- | lib/gras_impl/input_buffer_queues.hpp | 46 |
2 files changed, 14 insertions, 34 deletions
diff --git a/lib/block_task.cpp b/lib/block_task.cpp index 7855619..5c2137c 100644 --- a/lib/block_task.cpp +++ b/lib/block_task.cpp @@ -134,7 +134,7 @@ void ElementImpl::handle_task(const tsbe::TaskInterface &task_iface) ASSERT(this->output_queues.ready(i)); const SBuffer &buff = this->output_queues.front(i); - char *mem = ((char *)buff.get()) + this->output_bytes_offset[i]; + void *mem = buff.get(this->output_bytes_offset[i]); const size_t bytes = buff.length - this->output_bytes_offset[i]; const size_t items = bytes/this->output_items_sizes[i]; diff --git a/lib/gras_impl/input_buffer_queues.hpp b/lib/gras_impl/input_buffer_queues.hpp index ccce8ad..3cb5b78 100644 --- a/lib/gras_impl/input_buffer_queues.hpp +++ b/lib/gras_impl/input_buffer_queues.hpp @@ -29,27 +29,6 @@ namespace gnuradio { -struct BufferWOffset -{ - BufferWOffset(void): offset(0), length(0){} - BufferWOffset(const SBuffer &buffer): - offset(0), length(buffer.length), buffer(buffer){} - - inline char *mem_offset(void) const - { - return ((char *)buffer.get()) + offset; - } - - inline size_t tail_free(void) const - { - return buffer.length - offset - length; - } - - size_t offset; - size_t length; - SBuffer buffer; -}; - struct BuffInfo { BuffInfo(void): mem(NULL), len(0){} @@ -106,7 +85,7 @@ struct InputBufferQueues inline void flush(const size_t i) { - _queues[i] = std::deque<BufferWOffset>(); + _queues[i] = std::deque<SBuffer>(); _bitset.reset(i); } @@ -146,7 +125,7 @@ struct InputBufferQueues boost::dynamic_bitset<> _bitset; std::vector<size_t> _enqueued_bytes; - std::vector<std::deque<BufferWOffset> > _queues; + std::vector<std::deque<SBuffer> > _queues; std::vector<size_t> _history_bytes; std::vector<size_t> _reserve_bytes; std::vector<size_t> _multiple_bytes; @@ -219,9 +198,9 @@ inline BuffInfo InputBufferQueues::front(const size_t i) ASSERT(this->ready(i)); __prepare(i); - BufferWOffset &front = _queues[i].front(); + SBuffer &front = _queues[i].front(); BuffInfo info; - info.mem = front.mem_offset() - _history_bytes[i]; + info.mem = front.get(-_history_bytes[i]); info.len = front.length; info.len /= _multiple_bytes[i]; info.len *= _multiple_bytes[i]; @@ -235,33 +214,34 @@ inline void InputBufferQueues::__prepare(const size_t i) while (_queues[i].front().length < _reserve_bytes[i]) { - BufferWOffset &front = _queues[i].front(); - BufferWOffset dst; + SBuffer &front = _queues[i].front(); + SBuffer dst; size_t hist_bytes = 0; //do we need a new buffer: //- is the buffer unique (queue has only reference)? //- can its remaining space meet reserve requirements? - const bool enough_space = front.buffer.length >= _reserve_bytes[i] + front.offset; - if (enough_space and front.buffer.unique()) + const bool enough_space = front.get_actual_length() >= _reserve_bytes[i] + front.offset; + if (enough_space and front.unique()) { dst = _queues[i].front(); _queues[i].pop_front(); } else { - dst = BufferWOffset(_aux_queues[i]->front()); + dst = _aux_queues[i]->front(); _aux_queues[i]->pop(); hist_bytes = _history_bytes[i]; dst.offset = hist_bytes; dst.length = 0; } - BufferWOffset src = _queues[i].front(); + SBuffer src = _queues[i].front(); _queues[i].pop_front(); - const size_t bytes = std::min(std::min(dst.tail_free(), src.length), _post_bytes[i]); + const size_t dst_tail = dst.get_actual_length() - (dst.offset + dst.length); + const size_t bytes = std::min(std::min(dst_tail, src.length), _post_bytes[i]); ASSERT(src.offset >= hist_bytes); - std::memcpy(dst.mem_offset()+dst.length-hist_bytes, src.mem_offset()-hist_bytes, bytes+hist_bytes); + std::memcpy(dst.get(dst.length-hist_bytes), src.get(-hist_bytes), bytes+hist_bytes); //update buffer additions, consumptions dst.length += bytes; |