Skip to content

Commit

Permalink
Introduce EcuItem::find method to accelerate search
Browse files Browse the repository at this point in the history
Use new EcuItem::find method where possible

Signed-off-by: Viktor Kopp <vifactor@gmail.com>
  • Loading branch information
vifactor committed Nov 25, 2024
1 parent fccc90a commit 5081dc5
Show file tree
Hide file tree
Showing 3 changed files with 53 additions and 76 deletions.
116 changes: 40 additions & 76 deletions src/mainwindow.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -5499,89 +5499,56 @@ void MainWindow::on_action_menuDLT_Send_Injection_triggered()

void MainWindow::controlMessage_SetApplication(EcuItem *ecuitem, QString apid, QString appdescription)
{
/* Try to find App */
for(int numapp = 0; numapp < ecuitem->childCount(); numapp++)
{
ApplicationItem * appitem = (ApplicationItem *) ecuitem->child(numapp);

if(appitem->id == apid)
{
appitem->description = appdescription;
appitem->update();
return;
}
if (auto appitem = ecuitem->find(apid); appitem) {
appitem->description = appdescription;
appitem->update();
} else {
appitem = new ApplicationItem(ecuitem);
appitem->id = apid;
appitem->description = appdescription;
appitem->update();
ecuitem->addChild(appitem);
}

/* No app and no con found */
ApplicationItem* appitem = new ApplicationItem(ecuitem);
appitem->id = apid;
appitem->description = appdescription;
appitem->update();
ecuitem->addChild(appitem);

}

void MainWindow::controlMessage_SetContext(EcuItem *ecuitem, QString apid, QString ctid,QString ctdescription,int log_level,int trace_status)
{
/* First try to find existing context */
//qDebug() << "New CTX for" << apid << ctid << ctdescription;

for(int numapp = 0; numapp < ecuitem->childCount(); numapp++)
{
ApplicationItem * appitem = (ApplicationItem *) ecuitem->child(numapp);
if (auto appitem = ecuitem->find(apid); appitem) {

for(int numcontext = 0; numcontext < appitem->childCount(); numcontext++)
{
ContextItem * conitem = (ContextItem *) appitem->child(numcontext);

if(appitem->id == apid && conitem->id == ctid)
{
/* set new log level and trace status */
conitem->loglevel = log_level;
conitem->tracestatus = trace_status;
conitem->description = ctdescription;
conitem->status = ContextItem::valid;
conitem->update();
return;
ContextItem *conitem = nullptr;
for (int numcontext = 0; numcontext < appitem->childCount(); numcontext++) {
ContextItem *currconitem = (ContextItem *)appitem->child(numcontext);
if (currconitem->id == ctid) {
conitem = currconitem;
}
}
}

/* Try to find App */
for(int numapp = 0; numapp < ecuitem->childCount(); numapp++)
{
ApplicationItem * appitem = (ApplicationItem *) ecuitem->child(numapp);

if(appitem->id == apid)
{
/* Add new context */
ContextItem* conitem = new ContextItem(appitem);
conitem->id = ctid;
conitem->loglevel = log_level;
conitem->tracestatus = trace_status;
conitem->description = ctdescription;
conitem->status = ContextItem::valid;
conitem->update();
if (!conitem) {
conitem = new ContextItem(appitem);
appitem->addChild(conitem);

return;
}
conitem->id = ctid;
conitem->loglevel = log_level;
conitem->tracestatus = trace_status;
conitem->description = ctdescription;
conitem->status = ContextItem::valid;
conitem->update();
} else {
appitem = new ApplicationItem(ecuitem);
appitem->id = apid;
appitem->description = "";
appitem->update();
ecuitem->addChild(appitem);

ContextItem* conitem = new ContextItem(appitem);
conitem->id = ctid;
conitem->loglevel = log_level;
conitem->tracestatus = trace_status;
conitem->description = ctdescription;
conitem->status = ContextItem::valid;
conitem->update();
appitem->addChild(conitem);
}

/* No app and no con found */
ApplicationItem* appitem = new ApplicationItem(ecuitem);
appitem->id = apid;
appitem->description = QString("");
appitem->update();
ecuitem->addChild(appitem);
ContextItem* conitem = new ContextItem(appitem);
conitem->id = ctid;
conitem->loglevel = log_level;
conitem->tracestatus = trace_status;
conitem->description = ctdescription;
conitem->status = ContextItem::valid;
conitem->update();
appitem->addChild(conitem);
}

void MainWindow::controlMessage_Timezone(int timezone, unsigned char dst)
Expand Down Expand Up @@ -5614,15 +5581,12 @@ void MainWindow::controlMessage_UnregisterContext(QString ecuId,QString appId,QS
return;

/* First try to find existing context */
for(int numapp = 0; numapp < ecuitemFound->childCount(); numapp++)
if(auto appitem = ecuitemFound->find(appId); appitem)
{
ApplicationItem * appitem = (ApplicationItem *) ecuitemFound->child(numapp);

for(int numcontext = 0; numcontext < appitem->childCount(); numcontext++)
{
ContextItem * conitem = (ContextItem *) appitem->child(numcontext);

if(appitem->id == appId && conitem->id == ctId)
if(conitem->id == ctId)
{
/* remove context */
delete conitem->parent()->takeChild(conitem->parent()->indexOfChild(conitem));
Expand Down
9 changes: 9 additions & 0 deletions src/project.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -250,6 +250,15 @@ void EcuItem::updateAutoReconnectTimestamp()
//qDebug() << "updateAutoReconnectTimestamp" << autoReconnectTimestamp;
}

ApplicationItem *EcuItem::find(const QString &apid) const {
for (int numapp = 0; numapp < childCount(); numapp++) {
ApplicationItem *appitem = static_cast<ApplicationItem *>(child(numapp));
if (appitem->id == apid)
return appitem;
}
return nullptr;
}

ApplicationItem::ApplicationItem(QTreeWidgetItem *parent)
: QTreeWidgetItem(parent,application_type)
{
Expand Down
4 changes: 4 additions & 0 deletions src/project.h
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,8 @@

enum dlt_item_type { ecu_type = QTreeWidgetItem::UserType, application_type, context_type, filter_type, plugin_type };

class ApplicationItem;

class EcuItem : public QTreeWidgetItem
{
public:
Expand Down Expand Up @@ -99,6 +101,8 @@ class EcuItem : public QTreeWidgetItem
bool isAutoReconnectTimeoutPassed();
void updateAutoReconnectTimestamp();

ApplicationItem* find(const QString& apid) const;

private:
QDateTime autoReconnectTimestamp;
bool operator< ( const QTreeWidgetItem & other ) const;
Expand Down

0 comments on commit 5081dc5

Please sign in to comment.