diff --git a/tools/cabana/dbc/dbc.cc b/tools/cabana/dbc/dbc.cc index e404bde99c..ac91922e01 100644 --- a/tools/cabana/dbc/dbc.cc +++ b/tools/cabana/dbc/dbc.cc @@ -14,11 +14,7 @@ std::vector cabana::Msg::getSignals() const { } void cabana::Msg::updateMask() { - mask.clear(); - for (int i = 0; i < size; i++) { - mask.push_back(0x00); - } - + mask = QVector(size, 0x00).toList(); for (auto &sig : sigs) { int i = sig.msb / 8; int bits = sig.size; @@ -117,5 +113,3 @@ std::pair getSignalRange(const cabana::Signal *s) { int to = from + s->size - 1; return {from, to}; } - -std::vector allDBCNames() { return get_dbc_names(); } diff --git a/tools/cabana/dbc/dbc.h b/tools/cabana/dbc/dbc.h index 045eb3558d..7daa258ecd 100644 --- a/tools/cabana/dbc/dbc.h +++ b/tools/cabana/dbc/dbc.h @@ -1,9 +1,7 @@ #pragma once -#include #include #include -#include #include #include "opendbc/can/common_dbc.h" @@ -86,4 +84,4 @@ int bigEndianStartBitsIndex(int start_bit); int bigEndianBitIndex(int index); void updateSigSizeParamsFromRange(cabana::Signal &s, int start_bit, int size); std::pair getSignalRange(const cabana::Signal *s); -std::vector allDBCNames(); +inline std::vector allDBCNames() { return get_dbc_names(); } diff --git a/tools/cabana/dbc/dbcfile.cc b/tools/cabana/dbc/dbcfile.cc index f1a01c4079..fd20c0af19 100644 --- a/tools/cabana/dbc/dbcfile.cc +++ b/tools/cabana/dbc/dbcfile.cc @@ -1,26 +1,21 @@ #include "tools/cabana/dbc/dbcfile.h" -#include - #include #include #include #include -#include #include +#include #include - DBCFile::DBCFile(const QString &dbc_file_name, QObject *parent) : QObject(parent) { QFile file(dbc_file_name); if (file.open(QIODevice::ReadOnly)) { name_ = QFileInfo(dbc_file_name).baseName(); - + filename = dbc_file_name; // Remove auto save file extension if (dbc_file_name.endsWith(AUTO_SAVE_EXTENSION)) { - filename = dbc_file_name.left(dbc_file_name.length() - AUTO_SAVE_EXTENSION.length()); - } else { - filename = dbc_file_name; + filename.chop(AUTO_SAVE_EXTENSION.length()); } open(file.readAll()); } else { @@ -68,9 +63,8 @@ bool DBCFile::save() { if (writeContents(filename)) { cleanupAutoSaveFile(); return true; - } else { - return false; } + return false; } bool DBCFile::saveAs(const QString &new_filename) { @@ -79,11 +73,7 @@ bool DBCFile::saveAs(const QString &new_filename) { } bool DBCFile::autoSave() { - if (!filename.isEmpty()) { - return writeContents(filename + AUTO_SAVE_EXTENSION); - } else { - return false; - } + return !filename.isEmpty() && writeContents(filename + AUTO_SAVE_EXTENSION); } void DBCFile::cleanupAutoSaveFile() { @@ -97,9 +87,8 @@ bool DBCFile::writeContents(const QString &fn) { if (file.open(QIODevice::WriteOnly)) { file.write(generateDBC().toUtf8()); return true; - } else { - return false; } + return false; } cabana::Signal *DBCFile::addSignal(const MessageId &id, const cabana::Signal &sig) { @@ -108,7 +97,6 @@ cabana::Signal *DBCFile::addSignal(const MessageId &id, const cabana::Signal &si m->updateMask(); return &m->sigs.last(); } - return nullptr; } @@ -120,19 +108,13 @@ cabana::Signal *DBCFile::addSignal(const MessageId &id, const cabana::Signal &si return s; } } - return nullptr; } cabana::Signal *DBCFile::getSignal(const MessageId &id, const QString &sig_name) { - if (auto m = const_cast(msg(id))) { - auto it = std::find_if(m->sigs.begin(), m->sigs.end(), [&](auto &s) { return s.name == sig_name; }); - if (it != m->sigs.end()) { - return &(*it); - } - } - return nullptr; - } + auto m = msg(id); + return m ? (cabana::Signal *)m->sig(sig_name) : nullptr; +} void DBCFile::removeSignal(const MessageId &id, const QString &sig_name) { if (auto m = const_cast(msg(id))) { @@ -164,30 +146,16 @@ QString DBCFile::newSignalName(const MessageId &id) { assert(m != nullptr); QString name; - for (int i = 1; /**/; ++i) { name = QString("NEW_SIGNAL_%1").arg(i); if (m->sig(name) == nullptr) break; } - return name; } const QList& DBCFile::mask(const MessageId &id) const { - const cabana::Msg *m = msg(id); - if (m != nullptr) { - return m->mask; - } else { - return empty_mask; - } -} - -std::map DBCFile::getMessages() { - return msgs; -} - -const cabana::Msg *DBCFile::msg(const MessageId &id) const { - return msg(id.address); + auto m = msg(id); + return m ? m->mask : empty_mask; } const cabana::Msg *DBCFile::msg(uint32_t address) const { @@ -196,16 +164,10 @@ const cabana::Msg *DBCFile::msg(uint32_t address) const { } const cabana::Msg* DBCFile::msg(const QString &name) { - for (auto &[_, msg] : msgs) { - if (msg.name == name) { - return &msg; - } - } - - return nullptr; + auto it = std::find_if(msgs.cbegin(), msgs.cend(), [&name](auto &m) { return m.second.name == name; }); + return it != msgs.cend() ? &(it->second) : nullptr; } - QStringList DBCFile::signalNames() const { // Used for autocompletion QStringList ret; @@ -225,23 +187,7 @@ int DBCFile::signalCount(const MessageId &id) const { } int DBCFile::signalCount() const { - int total = 0; - for (auto const& [_, msg] : msgs) { - total += msg.sigs.size(); - } - return total; -} - -int DBCFile::msgCount() const { - return msgs.size(); -} - -QString DBCFile::name() const { - return name_.isEmpty() ? "untitled" : name_; -} - -bool DBCFile::isEmpty() const { - return (signalCount() == 0) && name_.isEmpty(); + return std::accumulate(msgs.cbegin(), msgs.cend(), 0, [](int &n, const auto &m) { return n + m.second.sigs.size(); }); } void DBCFile::parseExtraInfo(const QString &content) { diff --git a/tools/cabana/dbc/dbcfile.h b/tools/cabana/dbc/dbcfile.h index 8083704160..15ecdf89c6 100644 --- a/tools/cabana/dbc/dbcfile.h +++ b/tools/cabana/dbc/dbcfile.h @@ -2,17 +2,12 @@ #include #include -#include -#include #include -#include -#include #include "tools/cabana/dbc/dbc.h" const QString AUTO_SAVE_EXTENSION = ".tmp"; - class DBCFile : public QObject { Q_OBJECT @@ -43,16 +38,17 @@ public: const QList& mask(const MessageId &id) const; - std::map getMessages(); - const cabana::Msg *msg(const MessageId &id) const; + inline std::map getMessages() const { return msgs; } const cabana::Msg *msg(uint32_t address) const; const cabana::Msg* msg(const QString &name); + inline const cabana::Msg *msg(const MessageId &id) const { return msg(id.address); }; + QStringList signalNames() const; int signalCount(const MessageId &id) const; int signalCount() const; - int msgCount() const; - QString name() const; - bool isEmpty() const; + inline int msgCount() const { return msgs.size(); } + inline QString name() const { return name_.isEmpty() ? "untitled" : name_; } + inline bool isEmpty() const { return (signalCount() == 0) && name_.isEmpty(); } QString filename;