32 #include "bufferdata.tcc"
33 #include "blocked.hpp"
34 #include "signalvars.hpp"
43 #include "autorelease.tcc"
56 virtual ~FIFO() =
default;
62 virtual std::size_t
size() = 0;
91 return( *( reinterpret_cast< T* >( ptr ) ) );
109 autorelease< T, allocatetype >
111 void *ptr(
nullptr );
113 return( autorelease< T, allocatetype >(
114 reinterpret_cast< T* >( ptr ), (*
this) ) );
133 std::reference_wrapper< T > >
135 std::vector< std::reference_wrapper< T > > output;
136 void *ptr( (
void*) &output );
147 virtual void send(
const raft::signal = raft::none ) = 0;
155 virtual void send_range(
const raft::signal = raft::none ) = 0;
168 void push(
const T &item,
const raft::signal signal = raft::none )
170 void *ptr( (
void*) &item );
187 void push( T &&item,
const raft::signal signal = raft::none )
190 void *ptr( (
void*) &item );
207 template<
class iterator_type >
210 const raft::signal signal = raft::none )
212 void *begin_ptr( (
void*)&begin );
213 void *end_ptr ( (
void*)&end );
214 local_insert( begin_ptr, end_ptr, signal,
typeid( iterator_type ).hash_code() );
226 void pop( T &item, raft::signal *signal =
nullptr )
228 void *ptr( (
void*)&item );
235 auto pop_s() -> autorelease< T, poptype >
237 return( autorelease< T, poptype >( (*
this) ) );
254 const std::size_t n_items )
256 void *ptr_items( (
void*)&items );
270 T&
peek( raft::signal *signal =
nullptr )
272 void *ptr(
nullptr );
274 return( *( reinterpret_cast< T* >( ptr ) ) );
287 autorelease< T, peekrange >
291 std::size_t curr_pointer_loc( 0 );
293 return( autorelease< T, peekrange >(
295 reinterpret_cast< T * const >( ptr ),
296 *reinterpret_cast< Buffer::Signal* >( sig ),
305 virtual void unpeek() = 0;
314 virtual void recycle(
const std::size_t range = 1 ) = 0;
352 virtual void resize(
const std::size_t n_items,
353 const std::size_t align,
354 volatile bool &exit_alloc ) = 0;
436 virtual void local_push(
void *ptr,
const raft::signal &signal ) = 0;
448 const raft::signal &signal,
449 const std::size_t iterator_type ) = 0;
457 virtual void local_pop(
void *ptr, raft::signal *signal ) = 0;
466 std::size_t n_items ) = 0;
474 raft::signal *signal ) = 0;
488 const std::size_t n_items,
489 std::size_t &curr_pointer_loc ) = 0;
virtual void inline_signal_send(const raft::signal sig)=0
virtual std::size_t capacity()=0
virtual void get_zero_read_stats(Blocked ©)
Definition: fifo.cpp:28
T & allocate()
Definition: fifo.hpp:86
virtual void send(const raft::signal=raft::none)=0
virtual void resize(const std::size_t n_items, const std::size_t align, volatile bool &exit_alloc)=0
void push(const T &item, const raft::signal signal=raft::none)
Definition: fifo.hpp:168
virtual float get_frac_write_blocked()=0
virtual void recycle(const std::size_t range=1)=0
auto allocate_range(const std::size_t n) -> std::vector< std::reference_wrapper< T > >
Definition: fifo.hpp:132
virtual std::size_t size()=0
Definition: blocked.hpp:24
virtual void send_range(const raft::signal=raft::none)=0
virtual void local_allocate(void **ptr)=0
void pop(T &item, raft::signal *signal=nullptr)
Definition: fifo.hpp:226
auto allocate_s() -> autorelease< T, allocatetype >
Definition: fifo.hpp:108
void push(T &&item, const raft::signal signal=raft::none)
Definition: fifo.hpp:187
FIFO()
Definition: fifo.cpp:22
virtual void local_pop(void *ptr, raft::signal *signal)=0
virtual void local_allocate_n(void *ptr, const std::size_t n)=0
T & peek(raft::signal *signal=nullptr)
Definition: fifo.hpp:270
virtual void signal_pop()=0
virtual void local_push(void *ptr, const raft::signal &signal)=0
virtual std::size_t space_avail()=0
void invalidate()
Definition: fifo.cpp:42
bool is_invalid()
Definition: fifo.cpp:48
void insert(iterator_type begin, iterator_type end, const raft::signal signal=raft::none)
Definition: fifo.hpp:208
Definition: schedule.hpp:31
virtual void deallocate()=0
virtual raft::signal signal_peek()=0
virtual void get_zero_write_stats(Blocked ©)
Definition: fifo.cpp:35
void pop_range(pop_range_t< T > &items, const std::size_t n_items)
Definition: fifo.hpp:253
virtual void local_insert(void *ptr_begin, void *ptr_end, const raft::signal &signal, const std::size_t iterator_type)=0
virtual void local_pop_range(void *ptr_data, std::size_t n_items)=0
virtual void local_peek_range(void **ptr, void **sig, const std::size_t n_items, std::size_t &curr_pointer_loc)=0
virtual void local_peek(void **ptr, raft::signal *signal)=0
volatile bool valid
Definition: fifo.hpp:492
auto peek_range(const std::size_t n) -> autorelease< T, peekrange >
Definition: fifo.hpp:286