00001 #ifndef ASYNC_SAMPLE_COLLECTOR_HPP 00002 #define ASYNC_SAMPLE_COLLECTOR_HPP 00003 00004 #include <boost/lockfree/spsc_queue.hpp> 00005 #include <boost/atomic.hpp> 00006 #include <cstddef> 00007 00008 #include "ISignal.hpp" 00009 #include "Sample.hpp" 00010 #include "SampleBuffer.hpp" 00011 #include "IWorkController.hpp" 00012 #include "Portability.hpp" 00013 00014 using namespace boost; 00015 using namespace boost::lockfree; 00016 00017 class DllExport AsyncSampleCollector 00018 { 00019 public: 00020 AsyncSampleCollector(ISignal* pSignal, lockfree::spsc_queue<Sample<uint32_t> >* pQueue, 00021 IWorkController* pWorkController, Sample<uint32_t>* pSamples, 00022 size_t samplesSize, SampleBuffer<uint32_t>* pRingBuffer); 00023 AsyncSampleCollector(const AsyncSampleCollector& copy); 00024 virtual ~AsyncSampleCollector(); 00025 00026 public: 00027 size_t currentSample() const; 00028 void incrementCurrentSample(); 00029 00030 public: 00031 AsyncSampleCollector& operator=(const AsyncSampleCollector& rhs); 00032 bool operator==(const AsyncSampleCollector& rhs) const; 00033 bool operator!=(const AsyncSampleCollector& rhs) const; 00034 void operator()(); 00035 00036 private: 00037 ISignal* mpSignal; 00038 spsc_queue<Sample<uint32_t> >* mpQueue; 00039 IWorkController* mpWorkController; 00040 Sample<uint32_t>* mpSamples; 00041 size_t mSamplesSize; 00042 size_t mCurrentSample; 00043 SampleBuffer<uint32_t>* mpRingBuffer; 00044 }; 00045 00046 #endif