X-Git-Url: http://sigrok.org/gitweb/?a=blobdiff_plain;f=pv%2Fdata%2Fdecode%2Fannotation.cpp;h=8ac8d5f9e4970e193771cffe107c414da73f077a;hb=38b77a3ba1738aebf516491cc95e25219938a877;hp=4a6890b5a4e519a5aac786d408d97953985a4836;hpb=619e8bd3c0c2ca5ae059ba2eabdbd3b3f5233d7e;p=pulseview.git diff --git a/pv/data/decode/annotation.cpp b/pv/data/decode/annotation.cpp index 4a6890b5..8ac8d5f9 100644 --- a/pv/data/decode/annotation.cpp +++ b/pv/data/decode/annotation.cpp @@ -14,79 +14,118 @@ * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + * along with this program; if not, see . */ extern "C" { #include } +#include #include -#include "annotation.h" +#include +#include + +using std::vector; namespace pv { namespace data { namespace decode { -Annotation::Annotation(const srd_proto_data *const pdata) : - _start_sample(pdata->start_sample), - _end_sample(pdata->end_sample) +Annotation::Annotation(const srd_proto_data *const pdata, const Row *row) : + start_sample_(pdata->start_sample), + end_sample_(pdata->end_sample), + row_(row) { assert(pdata); const srd_proto_data_annotation *const pda = (const srd_proto_data_annotation*)pdata->data; assert(pda); - _format = pda->ann_format; - _row = 0; + ann_class_id_ = (Class)(pda->ann_class); + + annotations_ = new vector(); const char *const *annotations = (char**)pda->ann_text; - while(*annotations) { - _annotations.push_back(QString::fromUtf8(*annotations)); + while (*annotations) { + annotations_->push_back(QString::fromUtf8(*annotations)); annotations++; } + + annotations_->shrink_to_fit(); } -uint64_t Annotation::start_sample() const +Annotation::Annotation(Annotation&& a) : + start_sample_(a.start_sample_), + end_sample_(a.end_sample_), + annotations_(a.annotations_), + row_(a.row_), + ann_class_id_(a.ann_class_id_) { - return _start_sample; + a.annotations_ = nullptr; } -uint64_t Annotation::end_sample() const +Annotation& Annotation::operator=(Annotation&& a) +{ + if (&a != this) { + if (annotations_) + delete annotations_; + + start_sample_ = a.start_sample_; + end_sample_ = a.end_sample_; + annotations_ = a.annotations_; + row_ = a.row_; + ann_class_id_ = a.ann_class_id_; + + a.annotations_ = nullptr; + } + + return *this; +} + +Annotation::~Annotation() { - return _end_sample; + if (annotations_) + delete annotations_; } -int Annotation::format() const +uint64_t Annotation::start_sample() const { - return _format; + return start_sample_; } -int Annotation::row() const +uint64_t Annotation::end_sample() const { - return _row; + return end_sample_; } -int Annotation::pd_index() const +Annotation::Class Annotation::ann_class_id() const { - return _pd_index; + return ann_class_id_; +} + +const QString Annotation::ann_class_name() const +{ + const AnnotationClass* ann_class = + row_->decoder()->get_ann_class_by_id(ann_class_id_); + + return QString(ann_class->name); } -const std::vector& Annotation::annotations() const +const vector* Annotation::annotations() const { - return _annotations; + return annotations_; } -void Annotation::set_row(int row) +const Row* Annotation::row() const { - _row = row; + return row_; } -void Annotation::set_pd_index(int pd_index) +bool Annotation::operator<(const Annotation &other) const { - _pd_index = pd_index; + return (start_sample_ < other.start_sample_); } } // namespace decode