From d36b437239f57a0c3f58a76d9482c87828a40663 Mon Sep 17 00:00:00 2001 From: canpadawan Date: Fri, 8 Jul 2016 11:02:23 +0200 Subject: [PATCH] optimization --- re/sniffer/snifferitem.cpp | 6 +-- re/sniffer/sniffermodel.cpp | 95 +++++++++++++++++++------------------ 2 files changed, 51 insertions(+), 50 deletions(-) diff --git a/re/sniffer/snifferitem.cpp b/re/sniffer/snifferitem.cpp index 0fe870b..af8bee1 100644 --- a/re/sniffer/snifferitem.cpp +++ b/re/sniffer/snifferitem.cpp @@ -4,9 +4,9 @@ SnifferItem::SnifferItem(const CANFrame& pFrame): - mNotch(0) + mNotch(0), + mID(pFrame.ID) { - mID = pFrame.ID; mMarker = {0,0}; mLastMarker = {0,0}; /* that's dirty */ @@ -65,7 +65,7 @@ void SnifferItem::update(const CANFrame& pFrame) /* update marker */ mMarker.data |= mLast.data ^ mCurrent.data; - mMarker.len |= mLast.len ^ mCurrent.data; + mMarker.len |= mLast.len ^ mCurrent.len; /* restart timeout */ mTime.restart(); diff --git a/re/sniffer/sniffermodel.cpp b/re/sniffer/sniffermodel.cpp index a762346..3bedbbc 100644 --- a/re/sniffer/sniffermodel.cpp +++ b/re/sniffer/sniffermodel.cpp @@ -11,7 +11,9 @@ SnifferModel::SnifferModel(QObject *parent) SnifferModel::~SnifferModel() { - clear(); + qDeleteAll(mMap); + mMap.clear(); + mFilters.clear(); } @@ -33,58 +35,53 @@ QVariant SnifferModel::data(const QModelIndex &index, int role) const if (!index.isValid()) return QVariant(); - const QMap& map = mFilter ? mFilters : mMap; + SnifferItem *item = static_cast(index.internalPointer()); + if(!item) QVariant(); - if(index.row()<=map.size()) + int col = index.column(); + + switch(role) { - quint64 key = map.keys()[index.row()]; - SnifferItem* item = map[key]; - - int col = index.column(); - - switch(role) + case Qt::DisplayRole: { - case Qt::DisplayRole: + switch(col) { - switch(col) + case tc::DELTA: + return QString::number(item->getDelta(), 'f'); + case tc::ID: + return QString("%1").arg(item->getId(), 5, 16, QLatin1Char(' ')).toUpper(); + default: + break; + } + if(tc::DATA_0<=col && col <=tc::DATA_7) + { + int data = item->getData(col-tc::DATA_0); + if(data>=0) + return QString("%1").arg(data, 2, 16, QLatin1Char('0')).toUpper(); + } + break; + } + case Qt::BackgroundRole: + { + if(tc::ID==col) + { + if(item->elapsed()>4000) + return QBrush(Qt::red); + } + else if(tc::DATA_0<=col && col<=tc::DATA_7) + { + dc change = item->dataChange(col-tc::DATA_0); + switch(change) { - case tc::DELTA: - return QString::number(item->getDelta(), 'f'); - case tc::ID: - return QString("%1").arg(item->getId(), 5, 16, QLatin1Char(' ')).toUpper(); + case dc::INC: + return QBrush(Qt::green); + case dc::DEC: + return QBrush(Qt::red); default: break; } - if(tc::DATA_0<=col && col <=tc::DATA_7) - { - int data = item->getData(col-tc::DATA_0); - if(data>=0) - return QString("%1").arg(data, 2, 16, QLatin1Char('0')).toUpper(); - } - break; - } - case Qt::BackgroundRole: - { - if(tc::ID==col) - { - if(item->elapsed()>4000) - return QBrush(Qt::red); - } - else if(tc::DATA_0<=col && col<=tc::DATA_7) - { - dc change = item->dataChange(col-tc::DATA_0); - switch(change) - { - case dc::INC: - return QBrush(Qt::green); - case dc::DEC: - return QBrush(Qt::red); - default: - break; - } - } - break; } + break; } } @@ -122,8 +119,7 @@ QVariant SnifferModel::headerData(int section, Qt::Orientation orientation, int } -QModelIndex SnifferModel::index(int row, int column, const QModelIndex &parent) - const +QModelIndex SnifferModel::index(int row, int column, const QModelIndex &parent) const { if (parent.isValid()) return QModelIndex(); @@ -133,7 +129,12 @@ QModelIndex SnifferModel::index(int row, int column, const QModelIndex &parent) if(column>tc::LAST || row>=map.size()) return QModelIndex(); - return createIndex(row, column); + /* ugly but I can't find best without creating a list to keep indexes */ + QMap::const_iterator iter; + int i; + for(iter = map.begin(), i=0 ; i