32 #include <type_traits>
34 #include "bufferdata.tcc"
35 #include "blocked.hpp"
36 #include "signalvars.hpp"
50 #include "autorelease.tcc"
69 virtual std::size_t
size() = 0;
96 typename std::enable_if<
97 std::is_pod< T >::value >::type* =
nullptr > T&
allocate()
102 return( *( reinterpret_cast< T* >( ptr ) ) );
107 typename std::enable_if<
108 std::is_object< T >::value and not
109 std::is_fundamental< T >::value >::type* =
nullptr > T&
112 void *ptr(
nullptr );
115 T * __attribute__((__unused__)) temp(
new (ptr) T( std::forward< Args >( params )... ) );
116 return( *( reinterpret_cast< T* >( ptr ) ) );
134 autorelease< T, allocatetype >
136 void *ptr(
nullptr );
138 return( autorelease< T, allocatetype >(
139 reinterpret_cast< T* >( ptr ), (*
this) ) );
159 std::vector< std::reference_wrapper< T > >
161 std::vector< std::reference_wrapper< T > > output;
162 void *ptr( (
void*) &output );
165 return( std::forward<
167 std::reference_wrapper< T > > >( output ) );
175 virtual void send(
const raft::signal = raft::none ) = 0;
183 virtual void send_range(
const raft::signal = raft::none ) = 0;
196 void push(
const T &item,
const raft::signal signal = raft::none )
198 void *ptr( (
void*) &item );
215 void push( T &&item,
const raft::signal signal = raft::none )
218 void *ptr( reinterpret_cast< void* >( &item ) );
235 template<
class iterator_type >
238 const raft::signal signal = raft::none )
240 void *begin_ptr( reinterpret_cast< void* >( &begin ) );
241 void *end_ptr ( reinterpret_cast< void* >( &end ) );
242 local_insert( begin_ptr, end_ptr, signal,
typeid( iterator_type ).hash_code() );
254 void pop( T &item, raft::signal *signal =
nullptr )
256 void *ptr( reinterpret_cast< void* >( &item ) );
263 auto pop_s() -> autorelease< T, poptype >
265 return( autorelease< T, poptype >( (*
this) ) );
282 const std::size_t n_items )
284 void *ptr_items( (
void*)&items );
298 T&
peek( raft::signal *signal =
nullptr )
300 void *ptr(
nullptr );
302 return( *( reinterpret_cast< T* >( ptr ) ) );
315 autorelease< T, peekrange >
319 std::size_t curr_pointer_loc( 0 );
321 return( autorelease< T, peekrange >(
323 reinterpret_cast< T * const >( ptr ),
324 reinterpret_cast< Buffer::Signal* >( sig ),
337 virtual void unpeek() = 0;
352 typename std::enable_if<
353 std::is_pod< T >::value >::type* =
nullptr >
354 void recycle(
const T &t,
const std::size_t range = 1 )
360 typename std::enable_if<
361 std::is_object< T >::value and not
362 std::is_fundamental< T >::value >::type* =
nullptr >
363 void recycle(
const T &t,
const std::size_t range = 1 )
365 recyclefunc f( [](
void *ptr )
367 T *ptr_cast( reinterpret_cast< T* >( ptr ) );
411 virtual void resize(
const std::size_t n_items,
412 const std::size_t align,
413 volatile bool &exit_alloc ) = 0;
446 std::function< void ( void* ) >;
513 virtual void local_push(
void *ptr,
const raft::signal &signal ) = 0;
525 const raft::signal &signal,
526 const std::size_t iterator_type ) = 0;
534 virtual void local_pop(
void *ptr, raft::signal *signal ) = 0;
543 std::size_t n_items ) = 0;
551 raft::signal *signal ) = 0;
565 const std::size_t n_items,
566 std::size_t &curr_pointer_loc ) = 0;
576 recyclefunc func ) = 0;
virtual void inline_signal_send(const raft::signal sig)=0
virtual std::size_t capacity()=0
void recycle(const T &t, const std::size_t range=1)
Definition: fifo.hpp:354
virtual void get_zero_read_stats(Blocked ©)
Definition: fifo.cpp:32
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:196
virtual float get_frac_write_blocked()=0
auto allocate_range(const std::size_t n) -> std::vector< std::reference_wrapper< T > >
Definition: fifo.hpp:158
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:254
auto allocate_s() -> autorelease< T, allocatetype >
Definition: fifo.hpp:133
void push(T &&item, const raft::signal signal=raft::none)
Definition: fifo.hpp:215
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:298
virtual void signal_pop()=0
virtual void local_push(void *ptr, const raft::signal &signal)=0
virtual std::size_t space_avail()=0
virtual ~FIFO()
Definition: fifo.cpp:27
Definition: allocate.hpp:54
void insert(iterator_type begin, iterator_type end, const raft::signal signal=raft::none)
Definition: fifo.hpp:236
virtual void set_src_kernel(raft::kernel *const k)=0
T & allocate(Args &&...params)
Definition: fifo.hpp:110
Definition: schedule.hpp:34
virtual void invalidate()=0
virtual void deallocate()=0
Definition: kernel.hpp:57
Definition: globalmap.cpp:3
virtual raft::signal signal_peek()=0
virtual bool is_invalid()=0
virtual void get_zero_write_stats(Blocked ©)
Definition: fifo.cpp:39
void pop_range(pop_range_t< T > &items, const std::size_t n_items)
Definition: fifo.hpp:281
virtual void set_dst_kernel(raft::kernel *const k)=0
T & allocate()
Definition: fifo.hpp:97
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
virtual void local_recycle(const std::size_t range)=0
auto peek_range(const std::size_t n) -> autorelease< T, peekrange >
Definition: fifo.hpp:314