19 #ifndef SNARK_TBB_BURSTY_READER_H_
20 #define SNARK_TBB_BURSTY_READER_H_
22 #include <snark/tbb/queue.h>
23 #include <boost/thread.hpp>
24 #include <tbb/pipeline.h>
26 namespace snark{
namespace tbb{
30 template<
typename T >
33 static bool valid(
const T& t ) {
return true; }
38 template<
typename T >
42 bursty_reader( boost::function0< T > read,
unsigned int size = 0 );
43 bursty_reader( boost::function0< T > read,
unsigned int size,
unsigned int capacity );
49 ::tbb::filter_t< void, T >& filter() {
return m_read_filter; }
52 T read( ::tbb::flow_control& flow );
59 boost::scoped_ptr< boost::thread > m_thread;
60 boost::function0< T > m_read;
61 ::tbb::filter_t< void, T > m_read_filter;
68 template<
typename T >
73 m_read_filter( ::tbb::filter::serial_in_order, boost::bind( &
bursty_reader< T >::read, this, _1 ) )
82 template<
typename T >
88 m_read_filter( ::tbb::filter::serial_in_order, boost::bind( &
bursty_reader< T >::read, this, _1 ) )
94 template<
typename T >
103 template<
typename T >
106 if( !m_running && m_queue.empty() ) {
return false; }
108 return !m_queue.empty();
113 template<
typename T >
121 template<
typename T >
125 if( !m_thread ) {
return; }
132 template<
typename T >
135 if( m_queue.empty() )
144 while( m_queue.size() > m_size )
156 if( !bursty_reader_traits< T >::valid( t ) )
166 template<
typename T >
167 void bursty_reader< T >::push()
170 if( !bursty_reader_traits< T >::valid( t ) )
182 template<
typename T >
183 void bursty_reader< T >::push_thread()
194 #endif // SNARK_TBB_BURSTY_READER_H_