summaryrefslogtreecommitdiff
path: root/lib/gras_impl/input_buffer_queues.hpp
diff options
context:
space:
mode:
authorJosh Blum2012-09-09 18:54:49 -0700
committerJosh Blum2012-09-09 18:54:49 -0700
commit920d654bcf22024fe08c35474fdfcf8df7c72a4d (patch)
tree46db7e638d8e65b643c0e62ea3b62b73b2127b39 /lib/gras_impl/input_buffer_queues.hpp
parent203950da07d91482a05bd364367d116e0916e198 (diff)
downloadsandhi-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.hpp12
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);