diff options
author | Josh Blum | 2012-09-09 18:54:49 -0700 |
---|---|---|
committer | Josh Blum | 2012-09-09 18:54:49 -0700 |
commit | 920d654bcf22024fe08c35474fdfcf8df7c72a4d (patch) | |
tree | 46db7e638d8e65b643c0e62ea3b62b73b2127b39 /lib/gras_impl/input_buffer_queues.hpp | |
parent | 203950da07d91482a05bd364367d116e0916e198 (diff) | |
download | sandhi-920d654bcf22024fe08c35474fdfcf8df7c72a4d.tar.gz sandhi-920d654bcf22024fe08c35474fdfcf8df7c72a4d.tar.bz2 sandhi-920d654bcf22024fe08c35474fdfcf8df7c72a4d.zip |
work on implementing forecast logic and failure cases
* still a bit to clean up
* commented out case of consume zero and 0 reserve for input queues
Diffstat (limited to 'lib/gras_impl/input_buffer_queues.hpp')
-rw-r--r-- | lib/gras_impl/input_buffer_queues.hpp | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/lib/gras_impl/input_buffer_queues.hpp b/lib/gras_impl/input_buffer_queues.hpp index d1bb692..2066809 100644 --- a/lib/gras_impl/input_buffer_queues.hpp +++ b/lib/gras_impl/input_buffer_queues.hpp @@ -52,6 +52,7 @@ struct BufferWOffset struct BuffInfo { + BuffInfo(void): mem(NULL), len(0){} void *mem; size_t len; }; @@ -148,6 +149,7 @@ struct InputBufferQueues std::vector<std::deque<BufferWOffset> > _queues; std::vector<size_t> _history_bytes; std::vector<size_t> _reserve_bytes; + std::vector<size_t> _multiple_bytes; std::vector<size_t> _post_bytes; std::vector<boost::shared_ptr<BufferQueue> > _aux_queues; }; @@ -160,6 +162,7 @@ inline void InputBufferQueues::resize(const size_t size) _queues.resize(size); _history_bytes.resize(size, 0); _reserve_bytes.resize(size, 0); + _multiple_bytes.resize(size, 0); _post_bytes.resize(size, 0); _aux_queues.resize(size); } @@ -183,6 +186,7 @@ inline void InputBufferQueues::init( //determine byte sizes for buffers and dealing with history _history_bytes[i] = input_item_sizes[i]*input_history_items[i]; _reserve_bytes[i] = input_item_sizes[i]*input_multiple_items[i]; + _multiple_bytes[i] = std::max(size_t(1), _reserve_bytes[i]); _post_bytes[i] = input_item_sizes[i]*max_history_items; _post_bytes[i] = std::max(_post_bytes[i], _reserve_bytes[i]); @@ -209,6 +213,8 @@ inline void InputBufferQueues::init( inline BuffInfo InputBufferQueues::front(const size_t i) { + //if (_queues[i].empty()) return BuffInfo(); + ASSERT(not _queues[i].empty()); ASSERT(this->ready(i)); __prepare(i); @@ -217,8 +223,8 @@ inline BuffInfo InputBufferQueues::front(const size_t i) BuffInfo info; info.mem = front.mem_offset() - _history_bytes[i]; info.len = front.length; - info.len /= _reserve_bytes[i]; - info.len *= _reserve_bytes[i]; + info.len /= _multiple_bytes[i]; + info.len *= _multiple_bytes[i]; return info; } @@ -273,6 +279,8 @@ inline void InputBufferQueues::__prepare(const size_t i) inline bool InputBufferQueues::consume(const size_t i, const size_t bytes_consumed) { + //if (bytes_consumed == 0) return true; + //assert that we dont consume past the bounds of the buffer ASSERT(_queues[i].front().length >= bytes_consumed); |