+
+ const Annotation a(pdata);
+
+ // Find the row
+ assert(pdata->pdo);
+ assert(pdata->pdo->di);
+ const srd_decoder *const decc = pdata->pdo->di->decoder;
+ assert(decc);
+
+ map<const Row, decode::RowData>::iterator row_iter = d->_rows.end();
+
+ // Try looking up the sub-row of this class
+ const map<pair<const srd_decoder*, int>, Row>::const_iterator r =
+ d->_class_rows.find(make_pair(decc, a.format()));
+ if (r != d->_class_rows.end())
+ row_iter = d->_rows.find((*r).second);
+ else
+ {
+ // Failing that, use the decoder as a key
+ row_iter = d->_rows.find(Row(decc));
+ }
+
+ assert(row_iter != d->_rows.end());
+ if (row_iter == d->_rows.end()) {
+ qDebug() << "Unexpected annotation: decoder = " << decc <<
+ ", format = " << a.format();
+ assert(0);
+ return;
+ }
+
+ // Add the annotation
+ (*row_iter).second.push_annotation(a);