diff options
Diffstat (limited to 'lib/gras_impl/simple_buffer_queue.hpp')
-rw-r--r-- | lib/gras_impl/simple_buffer_queue.hpp | 50 |
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*/ |