|
- #include "dbcc/dbc_iterator.h"
-
- #include <limits>
- #include <fstream>
-
- namespace ad {
- namespace dbcc {
-
- DbcIterator::DbcIterator(const std::string &filePath)
- {
- std::ifstream file(filePath);
- if (file)
- {
- _parse(file);
- }
- file.close();
- }
-
- DbcIterator::DbcIterator(std::istream &stream)
- {
- _parse(stream);
- }
-
- std::ostream &operator<<(std::ostream &out, DbcIterator &dbc)
- {
- for (auto &msg : dbc)
- {
- out << msg.name() << " " << msg.id() << std::endl;
- for (auto &sig : msg)
- {
- out << "Signal: " << sig.name() << " [" << (sig.isFloat() ? "float" : "int") << "] ";
- out << "To: ";
- for (auto to : sig.to())
- {
- out << to << ", ";
- }
- out << sig.startBit() << "," << sig.length() << std::endl;
- out << "(" << sig.factor() << ", " << sig.offset() << ")" << std::endl;
- out << "[" << sig.minimum() << ", " << sig.maximum() << "]" << std::endl;
- if (sig.multiplexor() == Multiplexor::Multiplexed)
- {
- out << "#" << sig.multiplexedNumber() << "#" << std::endl;
- }
- else if (sig.multiplexor() == Multiplexor::Multiplexor)
- {
- out << "+Multiplexor+" << std::endl;
- }
- out << std::endl;
- }
- }
- return out;
- }
-
- void DbcIterator::_parse(std::istream &stream)
- {
- m_messages.clear();
- do {
- Message msg;
- stream >> msg;
- if (stream.fail())
- {
- stream.clear();
- stream.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
- }
- else
- {
- m_messages.emplace_back(msg);
- m_messageIndex[msg.id()] = static_cast<uint32_t>(m_messages.size() - 1);
- }
- } while (!stream.eof());
- }
-
- } // namespace dbcc
- } // namespace ad
|