From 7188776583403d7b159b679efc59060c119943c9 Mon Sep 17 00:00:00 2001 From: Evgueni Driouk Date: Wed, 27 Sep 2023 17:16:31 +0200 Subject: [PATCH] Bugfix: repair collecting effective debug sequences (#694) Co-authored-by: Evgueni Driouk --- libs/rtemodel/include/RteDevice.h | 42 +------------------------------ libs/rtemodel/src/RteDevice.cpp | 33 ++++++++---------------- 2 files changed, 12 insertions(+), 63 deletions(-) diff --git a/libs/rtemodel/include/RteDevice.h b/libs/rtemodel/include/RteDevice.h index 4108e8ad7..8295891a6 100644 --- a/libs/rtemodel/include/RteDevice.h +++ b/libs/rtemodel/include/RteDevice.h @@ -431,39 +431,6 @@ class RteSequence : public RteDevicePropertyGroup RteDeviceProperty* CreateProperty(const std::string& tag) override; }; -/** - * @brief class to support device property -*/ -class RteSequences : public RteDevicePropertyGroup -{ -public: - /** - * @brief constructor - * @param parent pointer to parent RteItem - */ - RteSequences(RteItem* parent) : RteDevicePropertyGroup(parent) {}; -public: - /** - * @brief indicate the property is unique, a sequence with the same name can be listed only once per device - * @return true - */ - bool IsUnique() const override { return true; } - - /** - * @brief indicate that this property type provides effective content to collect - * @return true - */ - bool IsCollectEffectiveContent() const override { return true; } - -protected: - /** - * @brief create an RteDeviceProperty for given tag - * @param tag XML tag - * @return pointer to RteDeviceProperty-derived class, never null - */ - RteDeviceProperty* CreateProperty(const std::string& tag) override; -}; - /** * @brief class to support device property */ @@ -924,7 +891,7 @@ struct RteEffectiveProperties /** * @brief full property collection: map of tag to list of RteDeviceProperty pointers */ - RteDevicePropertyMap m_properties; + RteDevicePropertyMap m_propertyMap; }; @@ -1114,13 +1081,6 @@ class RteDeviceItem : public RteDeviceElement */ void CreateEffectiveXmlTreeElements(XMLTreeElement* parent, const std::list& properties); - /** - * @brief create an RteDeviceProperty for given tag - * @param tag XML tag - * @return pointer to RteDeviceProperty-derived class, never null - */ - RteDeviceProperty* CreateProperty(const std::string& tag) override; - /** * @brief create a device item derived from RteDeviceItem class for given tag * @param tag device item tag diff --git a/libs/rtemodel/src/RteDevice.cpp b/libs/rtemodel/src/RteDevice.cpp index 7a0a469a0..abaa7b4e1 100644 --- a/libs/rtemodel/src/RteDevice.cpp +++ b/libs/rtemodel/src/RteDevice.cpp @@ -108,6 +108,8 @@ RteDeviceProperty* RteDeviceElement::CreateProperty(const string& tag) return new RteAccessPortV1(this); } else if (tag == "accessportV2") { return new RteAccessPortV2(this); + } else if (tag == "sequence") { + return new RteSequence(this); } return new RteDeviceProperty(this); } @@ -274,15 +276,6 @@ RteDeviceProperty* RteSequence::CreateProperty(const string& tag) return new RteDeviceProperty(this); } -RteDeviceProperty* RteSequences::CreateProperty(const string& tag) -{ - if (tag == "sequence") { - return new RteSequence(this); - } - return new RteDeviceProperty(this); -} - - string RteDatapatch::ConstructID() { const string& ap = GetEffectiveAttribute("__ap"); @@ -547,6 +540,11 @@ bool RteDeviceItem::Validate() RteItem* RteDeviceItem::CreateItem(const std::string& tag) { + if (tag == "sequences") { + // ignore sequences element because effective properties work on directly on "sequence" properties + return this; + } + if (tag == "subFamily" || tag == "device" || tag == "variant") { RteDeviceItem* di = CreateDeviceItem(tag); if (di) { @@ -566,15 +564,6 @@ RteItem* RteDeviceItem::CreateItem(const std::string& tag) return deviceProperty; } -RteDeviceProperty* RteDeviceItem::CreateProperty(const string& tag) -{ - if (tag == "sequences") { - return new RteSequences(this); - } - return RteDeviceElement::CreateProperty(tag); -} - - RteDeviceItem* RteDeviceItem::CreateDeviceItem(const string& tag) { // since our tags differ already by first item, use simple switch @@ -763,7 +752,7 @@ void RteDeviceItem::CollectEffectiveProperties(const string& pName) { m_effectiveProperties[pName] = RteEffectiveProperties(); auto it = m_effectiveProperties.find(pName); - RteDevicePropertyMap& pmap = it->second.m_properties; + RteDevicePropertyMap& pmap = it->second.m_propertyMap; CollectEffectiveProperties(pmap, pName); for (auto itp = pmap.begin(); itp != pmap.end(); itp++) { auto l = itp->second; @@ -776,8 +765,8 @@ void RteDeviceItem::CollectEffectiveProperties(const string& pName) const list& RteEffectiveProperties::GetProperties(const string& tag) const { - auto it = m_properties.find(tag); - if (it != m_properties.end()) { + auto it = m_propertyMap.find(tag); + if (it != m_propertyMap.end()) { return it->second; } return EMPTY_PROPERTY_LIST; @@ -795,7 +784,7 @@ const RteDevicePropertyMap& RteDeviceItem::GetEffectiveProperties(const string& auto itp = m_effectiveProperties.find(pName); if (itp != m_effectiveProperties.end()) { - return itp->second.m_properties; + return itp->second.m_propertyMap; } static const RteDevicePropertyMap EMPTY_PROPERTY_MAP;