1 #ifndef SILICIUM_BUFFER_HPP
2 #define SILICIUM_BUFFER_HPP
4 #include <silicium/observable/observer.hpp>
6 #include <boost/circular_buffer.hpp>
12 template <
class Element,
class Original>
14 :
private observer<Element>
32 #if defined(_MSC_VER) || (BOOST_VERSION <= 105400)
35 , elements(
std::
move(other.elements))
57 assert(!this->receiver);
58 this->receiver = receiver.get();
65 return deliver_front();
77 boost::circular_buffer<Element> elements;
78 observer<element_type> *receiver;
83 assert(!elements.full());
86 if (elements.empty() &&
105 exchange(receiver,
nullptr)->ended();
110 auto front =
std::move(elements.front());
111 elements.pop_front();
126 from.async_get_one(observe_by_ref(
static_cast<observer<Element> &
>(*
this)));
133 template <class Original>
136 typedef typename std::decay<Original>::type clean_original;
137 typedef typename clean_original::element_type element;
void async_get_one(ptr_observer< observer< element_type >> receiver)
Definition: buffer.hpp:55
std::remove_reference< T >::type && move(T &&ref)
Definition: move.hpp:10
buffer_observable(buffer_observable &&other)
Definition: buffer.hpp:33
Definition: buffer.hpp:13
Definition: absolute_path.hpp:352
auto make_buffer_observable(Original &&from, std::size_t size) -> buffer_observable< typename std::decay< Original >::type::element_type, typename std::decay< Original >::type >
Definition: buffer.hpp:134
Definition: absolute_path.hpp:19
buffer_observable(Original from, std::size_t size)
Definition: buffer.hpp:24
#define SILICIUM_OVERRIDE
Definition: config.hpp:140
buffer_observable()
Definition: buffer.hpp:18
T exchange(T &dest, U &&source)
Definition: exchange.hpp:30
void prefetch()
Definition: buffer.hpp:69
#define SILICIUM_DELETED_FUNCTION(f)
Definition: config.hpp:111
Element element_type
Definition: buffer.hpp:16
buffer_observable & operator=(buffer_observable &&other)
Definition: buffer.hpp:41