#include "LogViewXdrStruct.hpp" #include "LogViewXdrValue.hpp" #include "LogViewXdrType.hpp" namespace N_LogView { LogViewXdrStruct::LogViewXdrStruct(const QString& a_name, const LogViewXdrElement::E_ElementKind a_kind, uint16_t enumSize) : LogViewXdrElement(a_name, a_kind, "LogViewXdrStruct") , m_EnumSize(enumSize) { } LogViewXdrStruct::~LogViewXdrStruct() { for (auto ptr : m_ChildList) delete ptr; } void LogViewXdrStruct::addElement(const QString& a_name, const QString& a_type, const uint16_t a_arraySize, const uint16_t a_dynArrayOffset, const E_ElementKind a_kind, const int16_t a_firstBit, const int16_t a_lastBit, const bool a_isLast) { m_ChildList.push_back(new LogViewXdrType(a_name, a_type, a_arraySize, a_dynArrayOffset, a_kind, a_firstBit, a_lastBit, a_isLast)); } void LogViewXdrStruct::addElement(const QString& a_name, const uint32_t a_value, const E_ElementKind a_kind) { m_ChildList.push_back(new LogViewXdrValue(a_name, a_value, a_kind)); } LogViewXdrElement* LogViewXdrStruct::getChild(const uint32_t a_childIndex) const { if (m_ChildList.size() > a_childIndex) return m_ChildList[a_childIndex]; return nullptr; } LogViewXdrType* LogViewXdrStruct::getChildAsType(const uint32_t a_childIndex) const { return static_cast(getChild(a_childIndex)); } LogViewXdrValue* LogViewXdrStruct::getChildAsValue(const uint32_t a_childIndex) const { return static_cast(getChild(a_childIndex)); } void LogViewXdrStruct::dump() const { INFO_LOG(m_logger) << "Element[" << getName().toStdString() << "]: kind=" << getKindName().toStdString() << " enumSize=" << getEnumSize(); INFO_LOG(m_logger) << "-------------- childs start -----------------"; std::vector::const_iterator iter = m_ChildList.begin(); while (iter != m_ChildList.end()) { (*iter)->dump(); ++iter; } INFO_LOG(m_logger) << "-------------- childs end -----------------"; } uint32_t LogViewXdrStruct::getChildValue(const QString& a_name, bool* a_error) const { if (a_error) *a_error = false; std::vector::const_iterator iter = m_ChildList.begin(); while (iter != m_ChildList.end()) { if ((*iter)->getName() == a_name) return static_cast(*iter)->getValue(); ++iter; } if (a_error) *a_error = true; return 0; } }