summaryrefslogtreecommitdiff
path: root/lib/gras_impl/simple_buffer_queue.hpp
diff options
context:
space:
mode:
authorJosh Blum2012-12-15 09:53:25 -0800
committerJosh Blum2012-12-15 09:53:25 -0800
commitb7c0a59c0a86f289f55935b19efaf448e892eefb (patch)
tree1e641f9816237481124835ac2fbf2792a8b1d50f /lib/gras_impl/simple_buffer_queue.hpp
parent6a03c661ede88203ff90eb01bf1e678b87cb6056 (diff)
downloadsandhi-b7c0a59c0a86f289f55935b19efaf448e892eefb.tar.gz
sandhi-b7c0a59c0a86f289f55935b19efaf448e892eefb.tar.bz2
sandhi-b7c0a59c0a86f289f55935b19efaf448e892eefb.zip
work on the buffer queue api
Diffstat (limited to 'lib/gras_impl/simple_buffer_queue.hpp')
-rw-r--r--lib/gras_impl/simple_buffer_queue.hpp50
1 files changed, 50 insertions, 0 deletions
diff --git a/lib/gras_impl/simple_buffer_queue.hpp b/lib/gras_impl/simple_buffer_queue.hpp
new file mode 100644
index 0000000..db6ecc0
--- /dev/null
+++ b/lib/gras_impl/simple_buffer_queue.hpp
@@ -0,0 +1,50 @@
+// Copyright (C) by Josh Blum. See LICENSE.txt for licensing information.
+
+#ifndef INCLUDED_LIBGRAS_IMPL_SIMPLE_BUFFER_QUEUE_HPP
+#define INCLUDED_LIBGRAS_IMPL_SIMPLE_BUFFER_QUEUE_HPP
+
+#include <gras/sbuffer.hpp>
+#include <boost/bind.hpp>
+#include <queue>
+
+namespace gras
+{
+
+struct SimpleBufferQueue : std::queue<SBuffer>
+{
+ SimpleBufferQueue(void)
+ {
+ SBufferDeleter deleter = boost::bind(&SimpleBufferQueue::push_back, this, _1);
+ _token = SBufferToken(new SBufferDeleter(deleter));
+ }
+
+ ~SimpleBufferQueue(void)
+ {
+ _token.reset();
+ while (not this->empty())
+ {
+ this->pop();
+ }
+ }
+
+ void push_back(const SBuffer &buff)
+ {
+ this->push(buff);
+ }
+
+ void allocate_one(const size_t num_bytes)
+ {
+ SBufferConfig config;
+ config.memory = NULL;
+ config.length = num_bytes;
+ config.token = _token;
+ SBuffer buff(config);
+ //buffer derefs here and the token messages it back to the queue
+ }
+
+ SBufferToken _token;
+};
+
+} //namespace gras
+
+#endif /*INCLUDED_LIBGRAS_IMPL_SIMPLE_BUFFER_QUEUE_HPP*/