X-Git-Url: http://git.code-monkey.de/?a=blobdiff_plain;f=pv%2Fdata%2Fdecoderstack.cpp;h=31dc8b309221c4721a01e3d881255955cf2ff7e5;hb=3b68d03ddae96edb38a80f31bf6a990bde21cd1d;hp=f82d3ecc1ef82f32dbfbee4f460d5af588a2fd1c;hpb=f46e495ef1db0a4e522462ac18260f2151fa2b89;p=pulseview.git diff --git a/pv/data/decoderstack.cpp b/pv/data/decoderstack.cpp index f82d3ec..31dc8b3 100644 --- a/pv/data/decoderstack.cpp +++ b/pv/data/decoderstack.cpp @@ -20,9 +20,6 @@ #include -#include -#include - #include #include @@ -36,11 +33,10 @@ #include #include -using boost::lock_guard; -using boost::mutex; +using std::lock_guard; +using std::mutex; using boost::optional; -using boost::shared_ptr; -using boost::unique_lock; +using std::unique_lock; using std::deque; using std::make_pair; using std::max; @@ -48,6 +44,7 @@ using std::min; using std::list; using std::map; using std::pair; +using std::shared_ptr; using std::vector; using namespace pv::data::decode; @@ -83,18 +80,18 @@ DecoderStack::DecoderStack(pv::SigSession &session, DecoderStack::~DecoderStack() { if (_decode_thread.joinable()) { - _decode_thread.interrupt(); + _interrupt = true; _decode_thread.join(); } } -const std::list< boost::shared_ptr >& +const std::list< std::shared_ptr >& DecoderStack::stack() const { return _stack; } -void DecoderStack::push(boost::shared_ptr decoder) +void DecoderStack::push(std::shared_ptr decoder) { assert(decoder); _stack.push_back(decoder); @@ -126,7 +123,7 @@ std::vector DecoderStack::get_visible_rows() const vector rows; - BOOST_FOREACH (const shared_ptr &dec, _stack) + for (const shared_ptr &dec : _stack) { assert(dec); if (!dec->shown()) @@ -187,14 +184,14 @@ void DecoderStack::begin_decode() shared_ptr data; if (_decode_thread.joinable()) { - _decode_thread.interrupt(); + _interrupt = true; _decode_thread.join(); } clear(); // Check that all decoders have the required channels - BOOST_FOREACH(const shared_ptr &dec, _stack) + for (const shared_ptr &dec : _stack) if (!dec->have_required_probes()) { _error_message = tr("One or more required channels " "have not been specified"); @@ -202,7 +199,7 @@ void DecoderStack::begin_decode() } // Add classes - BOOST_FOREACH (const shared_ptr &dec, _stack) + for (const shared_ptr &dec : _stack) { assert(dec); const srd_decoder *const decc = dec->decoder(); @@ -235,7 +232,7 @@ void DecoderStack::begin_decode() // We get the logic data of the first channel in the list. // This works because we are currently assuming all // LogicSignals have the same data/snapshot - BOOST_FOREACH (const shared_ptr &dec, _stack) + for (const shared_ptr &dec : _stack) if (dec && !dec->channels().empty() && ((logic_signal = (*dec->channels().begin()).second)) && ((data = logic_signal->logic_data()))) @@ -257,7 +254,8 @@ void DecoderStack::begin_decode() if (_samplerate == 0.0) _samplerate = 1.0; - _decode_thread = boost::thread(&DecoderStack::decode_proc, this); + _interrupt = false; + _decode_thread = std::thread(&DecoderStack::decode_proc, this); } uint64_t DecoderStack::get_max_sample_count() const @@ -274,11 +272,10 @@ uint64_t DecoderStack::get_max_sample_count() const optional DecoderStack::wait_for_data() const { unique_lock input_lock(_input_mutex); - while(!boost::this_thread::interruption_requested() && - !_frame_complete && _samples_decoded >= _sample_count) + while(!_interrupt && !_frame_complete && + _samples_decoded >= _sample_count) _input_cond.wait(input_lock); - return boost::make_optional( - !boost::this_thread::interruption_requested() && + return boost::make_optional(!_interrupt && (_samples_decoded < _sample_count || !_frame_complete), _sample_count); } @@ -292,9 +289,7 @@ void DecoderStack::decode_data( const unsigned int chunk_sample_count = DecodeChunkLength / _snapshot->unit_size(); - for (int64_t i = 0; - !boost::this_thread::interruption_requested() && - i < sample_count; + for (int64_t i = 0; !_interrupt && i < sample_count; i += chunk_sample_count) { lock_guard decode_lock(_global_decode_mutex); @@ -336,7 +331,7 @@ void DecoderStack::decode_proc() // Create the decoders const unsigned int unit_size = _snapshot->unit_size(); - BOOST_FOREACH(const shared_ptr &dec, _stack) + for (const shared_ptr &dec : _stack) { srd_decoder_inst *const di = dec->create_decoder_inst(session, unit_size);