#ifndef OPENPOSE__PRODUCER__W_DATUM_PRODUCER_HPP #define OPENPOSE__PRODUCER__W_DATUM_PRODUCER_HPP #include // std::numeric_limits #include // std::shared_ptr #include #include "datumProducer.hpp" namespace op { template class WDatumProducer : public WorkerProducer { public: explicit WDatumProducer(const std::shared_ptr>& datumProducer); void initializationOnThread(); TDatums workProducer(); private: std::shared_ptr> spDatumProducer; DELETE_COPY(WDatumProducer); }; } // Implementation #include #include #include #include #include namespace op { template WDatumProducer::WDatumProducer(const std::shared_ptr>& datumProducer) : spDatumProducer{datumProducer} { } template void WDatumProducer::initializationOnThread() { } template TDatums WDatumProducer::workProducer() { try { // Debugging log dLog("", Priority::Low, __LINE__, __FUNCTION__, __FILE__); // Profiling speed const auto profilerKey = Profiler::timerInit(__LINE__, __FUNCTION__, __FILE__); // Create and fill TDatums const auto isRunningAndTDatums = spDatumProducer->checkIfRunningAndGetDatum(); // Stop Worker if producer finished if (!isRunningAndTDatums.first) this->stop(); // Profiling speed Profiler::timerEnd(profilerKey); Profiler::printAveragedTimeMsOnIterationX(profilerKey, __LINE__, __FUNCTION__, __FILE__, Profiler::DEFAULT_X); // Debugging log dLog("", Priority::Low, __LINE__, __FUNCTION__, __FILE__); // Return TDatums return isRunningAndTDatums.second; } catch (const std::exception& e) { this->stop(); error(e.what(), __LINE__, __FUNCTION__, __FILE__); return TDatums{}; } } extern template class WDatumProducer; } #endif // OPENPOSE__PRODUCER__W_DATUM_PRODUCER_HPP