mirror of git://sigrok.org/pulseview
rowdata: Use emplace_back() for Annotation objects.
This should eliminate one unnecessary allocation per annotation.
This commit is contained in:
parent
83b9c07b79
commit
1becee23bd
|
@ -42,9 +42,9 @@ void RowData::get_annotation_subset(
|
|||
dest.push_back(annotation);
|
||||
}
|
||||
|
||||
void RowData::push_annotation(const Annotation &a)
|
||||
void RowData::emplace_annotation(srd_proto_data *pdata)
|
||||
{
|
||||
annotations_.push_back(a);
|
||||
annotations_.emplace_back(pdata);
|
||||
}
|
||||
|
||||
} // namespace decode
|
||||
|
|
|
@ -22,6 +22,8 @@
|
|||
|
||||
#include <vector>
|
||||
|
||||
#include <libsigrokdecode/libsigrokdecode.h>
|
||||
|
||||
#include "annotation.hpp"
|
||||
|
||||
using std::vector;
|
||||
|
@ -45,7 +47,7 @@ public:
|
|||
vector<pv::data::decode::Annotation> &dest,
|
||||
uint64_t start_sample, uint64_t end_sample) const;
|
||||
|
||||
void push_annotation(const Annotation &a);
|
||||
void emplace_annotation(srd_proto_data *pdata);
|
||||
|
||||
private:
|
||||
vector<Annotation> annotations_;
|
||||
|
|
|
@ -940,18 +940,21 @@ void DecodeSignal::annotation_callback(srd_proto_data *pdata, void *decode_signa
|
|||
|
||||
lock_guard<mutex> lock(ds->output_mutex_);
|
||||
|
||||
const decode::Annotation a(pdata);
|
||||
|
||||
// Find the row
|
||||
assert(pdata->pdo);
|
||||
assert(pdata->pdo->di);
|
||||
const srd_decoder *const decc = pdata->pdo->di->decoder;
|
||||
assert(decc);
|
||||
|
||||
const srd_proto_data_annotation *const pda =
|
||||
(const srd_proto_data_annotation*)pdata->data;
|
||||
assert(pda);
|
||||
|
||||
auto row_iter = ds->rows_.end();
|
||||
|
||||
// Try looking up the sub-row of this class
|
||||
const auto r = ds->class_rows_.find(make_pair(decc, a.format()));
|
||||
const auto format = pda->ann_class;
|
||||
const auto r = ds->class_rows_.find(make_pair(decc, format));
|
||||
if (r != ds->class_rows_.end())
|
||||
row_iter = ds->rows_.find((*r).second);
|
||||
else {
|
||||
|
@ -962,13 +965,13 @@ void DecodeSignal::annotation_callback(srd_proto_data *pdata, void *decode_signa
|
|||
assert(row_iter != ds->rows_.end());
|
||||
if (row_iter == ds->rows_.end()) {
|
||||
qDebug() << "Unexpected annotation: decoder = " << decc <<
|
||||
", format = " << a.format();
|
||||
", format = " << format;
|
||||
assert(false);
|
||||
return;
|
||||
}
|
||||
|
||||
// Add the annotation
|
||||
(*row_iter).second.push_annotation(a);
|
||||
(*row_iter).second.emplace_annotation(pdata);
|
||||
}
|
||||
|
||||
void DecodeSignal::on_capture_state_changed(int state)
|
||||
|
|
Loading…
Reference in New Issue