void StoreSession::store_proc(shared_ptr<data::LogicSnapshot> snapshot) { assert(snapshot); uint64_t start_sample = 0; /// TODO: Wrap this in a std::unique_ptr when we transition to C++11 uint8_t *const data = new uint8_t[BlockSize]; assert(data); const int unit_size = snapshot->unit_size(); assert(unit_size != 0); { lock_guard<mutex> lock(_mutex); _unit_count = snapshot->get_sample_count(); } const unsigned int samples_per_block = BlockSize / unit_size; while (!boost::this_thread::interruption_requested() && start_sample < _unit_count) { progress_updated(); const uint64_t end_sample = min( start_sample + samples_per_block, _unit_count); snapshot->get_samples(data, start_sample, end_sample); if(sr_session_append(_file_name.c_str(), data, unit_size, end_sample - start_sample) != SR_OK) { _error = tr("Error while saving."); break; } start_sample = end_sample; { lock_guard<mutex> lock(_mutex); _units_stored = start_sample; } } progress_updated(); delete[] data; }
StoreProgress::StoreProgress(const QString &file_name, SigSession &session, QWidget *parent) : QProgressDialog(tr("Saving..."), tr("Cancel"), 0, 0, parent), _session(file_name.toStdString(), session) { connect(&_session, SIGNAL(progress_updated()), this, SLOT(on_progress_updated())); }
StoreProgress::StoreProgress(const QString &file_name, const shared_ptr<sigrok::OutputFormat> output_format, const map<string, VariantBase> &options, const pair<uint64_t, uint64_t> sample_range, const Session &session, QWidget *parent) : QProgressDialog(tr("Saving..."), tr("Cancel"), 0, 0, parent), session_(file_name.toStdString(), output_format, options, sample_range, session) { connect(&session_, SIGNAL(progress_updated()), this, SLOT(on_progress_updated())); connect(&session_, SIGNAL(store_successful()), &session, SLOT(on_data_saved())); }