Target variant keys

This commit is contained in:
Nav
2024-08-19 19:43:02 +01:00
parent 12ff66aa8a
commit 4f9bb0ac3e
9 changed files with 58 additions and 16 deletions

View File

@@ -268,7 +268,7 @@ namespace Targets::Microchip::Avr8
this->targetDescriptionFile.targetPeripheralDescriptorsByKey(), this->targetDescriptionFile.targetPeripheralDescriptorsByKey(),
this->targetDescriptionFile.targetPadDescriptorsByKey(), this->targetDescriptionFile.targetPadDescriptorsByKey(),
this->targetDescriptionFile.targetPinoutDescriptorsByKey(), this->targetDescriptionFile.targetPinoutDescriptorsByKey(),
this->targetDescriptionFile.targetVariantDescriptors(), this->targetDescriptionFile.targetVariantDescriptorsByKey(),
this->getBreakpointResources() this->getBreakpointResources()
}; };

View File

@@ -91,7 +91,7 @@ namespace Targets::RiscV
this->targetDescriptionFile.targetPeripheralDescriptorsByKey(), this->targetDescriptionFile.targetPeripheralDescriptorsByKey(),
this->targetDescriptionFile.targetPadDescriptorsByKey(), this->targetDescriptionFile.targetPadDescriptorsByKey(),
this->targetDescriptionFile.targetPinoutDescriptorsByKey(), this->targetDescriptionFile.targetPinoutDescriptorsByKey(),
this->targetDescriptionFile.targetVariantDescriptors(), this->targetDescriptionFile.targetVariantDescriptorsByKey(),
{} // TODO: populate this {} // TODO: populate this
}; };

View File

@@ -348,11 +348,14 @@ namespace Targets::TargetDescription
return output; return output;
} }
std::vector<TargetVariantDescriptor> TargetDescriptionFile::targetVariantDescriptors() const { std::map<std::string, TargetVariantDescriptor> TargetDescriptionFile::targetVariantDescriptorsByKey() const {
auto output = std::vector<TargetVariantDescriptor>{}; auto output = std::map<std::string, TargetVariantDescriptor>{};
for (const auto& variant : this->variants) { for (const auto& [key, variant] : this->variantsByKey) {
output.emplace_back(TargetDescriptionFile::targetVariantDescriptorFromVariant(variant)); output.emplace(
key,
TargetDescriptionFile::targetVariantDescriptorFromVariant(variant)
);
} }
return output; return output;
@@ -474,7 +477,8 @@ namespace Targets::TargetDescription
!element.isNull(); !element.isNull();
element = element.nextSiblingElement("variant") element = element.nextSiblingElement("variant")
) { ) {
this->variants.emplace_back(TargetDescriptionFile::variantFromXml(element)); auto variant = TargetDescriptionFile::variantFromXml(element);
this->variantsByKey.emplace(variant.key, std::move(variant));
} }
} }
@@ -920,6 +924,7 @@ namespace Targets::TargetDescription
Variant TargetDescriptionFile::variantFromXml(const QDomElement& xmlElement) { Variant TargetDescriptionFile::variantFromXml(const QDomElement& xmlElement) {
return { return {
TargetDescriptionFile::getAttribute(xmlElement, "key"),
TargetDescriptionFile::getAttribute(xmlElement, "name"), TargetDescriptionFile::getAttribute(xmlElement, "name"),
TargetDescriptionFile::getAttribute(xmlElement, "pinout-key") TargetDescriptionFile::getAttribute(xmlElement, "pinout-key")
}; };
@@ -1190,6 +1195,7 @@ namespace Targets::TargetDescription
TargetVariantDescriptor TargetDescriptionFile::targetVariantDescriptorFromVariant(const Variant& variant) { TargetVariantDescriptor TargetDescriptionFile::targetVariantDescriptorFromVariant(const Variant& variant) {
return { return {
variant.key,
variant.name, variant.name,
variant.pinoutKey variant.pinoutKey
}; };

View File

@@ -153,7 +153,7 @@ namespace Targets::TargetDescription
[[nodiscard]] std::map<std::string, TargetPeripheralDescriptor> targetPeripheralDescriptorsByKey() const; [[nodiscard]] std::map<std::string, TargetPeripheralDescriptor> targetPeripheralDescriptorsByKey() const;
[[nodiscard]] std::map<std::string, TargetPadDescriptor> targetPadDescriptorsByKey() const; [[nodiscard]] std::map<std::string, TargetPadDescriptor> targetPadDescriptorsByKey() const;
[[nodiscard]] std::map<std::string, TargetPinoutDescriptor> targetPinoutDescriptorsByKey() const; [[nodiscard]] std::map<std::string, TargetPinoutDescriptor> targetPinoutDescriptorsByKey() const;
[[nodiscard]] std::vector<TargetVariantDescriptor> targetVariantDescriptors() const; [[nodiscard]] std::map<std::string, TargetVariantDescriptor> targetVariantDescriptorsByKey() const;
[[nodiscard]] std::vector<TargetPeripheralDescriptor> gpioPortPeripheralDescriptors() const; [[nodiscard]] std::vector<TargetPeripheralDescriptor> gpioPortPeripheralDescriptors() const;
protected: protected:
@@ -165,7 +165,7 @@ namespace Targets::TargetDescription
std::map<std::string, Peripheral, std::less<void>> peripheralsByKey; std::map<std::string, Peripheral, std::less<void>> peripheralsByKey;
std::map<std::string, Pad, std::less<void>> padsByKey; std::map<std::string, Pad, std::less<void>> padsByKey;
std::map<std::string, Pinout, std::less<void>> pinoutsByKey; std::map<std::string, Pinout, std::less<void>> pinoutsByKey;
std::vector<Variant> variants; std::map<std::string, Variant, std::less<void>> variantsByKey;
TargetDescriptionFile() = default; TargetDescriptionFile() = default;
virtual ~TargetDescriptionFile() = default; virtual ~TargetDescriptionFile() = default;

View File

@@ -6,14 +6,17 @@ namespace Targets::TargetDescription
{ {
struct Variant struct Variant
{ {
std::string key;
std::string name; std::string name;
std::string pinoutKey; std::string pinoutKey;
Variant( Variant(
const std::string& key,
const std::string& name, const std::string& name,
const std::string& pinoutKey const std::string& pinoutKey
) )
: name(name) : key(key)
, name(name)
, pinoutKey(pinoutKey) , pinoutKey(pinoutKey)
{} {}
}; };

View File

@@ -15,7 +15,7 @@ namespace Targets
std::map<std::string, TargetPeripheralDescriptor>&& peripheralDescriptorsByKey, std::map<std::string, TargetPeripheralDescriptor>&& peripheralDescriptorsByKey,
std::map<std::string, TargetPadDescriptor>&& padDescriptorsByKey, std::map<std::string, TargetPadDescriptor>&& padDescriptorsByKey,
std::map<std::string, TargetPinoutDescriptor>&& pinoutDescriptorsByKey, std::map<std::string, TargetPinoutDescriptor>&& pinoutDescriptorsByKey,
std::vector<TargetVariantDescriptor>&& variantDescriptors, std::map<std::string, TargetVariantDescriptor>&& variantDescriptorsByKey,
const BreakpointResources& breakpointResources const BreakpointResources& breakpointResources
) )
: name(name) : name(name)
@@ -26,7 +26,7 @@ namespace Targets
, peripheralDescriptorsByKey(std::move(peripheralDescriptorsByKey)) , peripheralDescriptorsByKey(std::move(peripheralDescriptorsByKey))
, padDescriptorsByKey(std::move(padDescriptorsByKey)) , padDescriptorsByKey(std::move(padDescriptorsByKey))
, pinoutDescriptorsByKey(std::move(pinoutDescriptorsByKey)) , pinoutDescriptorsByKey(std::move(pinoutDescriptorsByKey))
, variantDescriptors(std::move(variantDescriptors)) , variantDescriptorsByKey(std::move(variantDescriptorsByKey))
, breakpointResources(breakpointResources) , breakpointResources(breakpointResources)
{} {}
@@ -141,4 +141,28 @@ namespace Targets
return descriptor->get(); return descriptor->get();
} }
std::optional<
std::reference_wrapper<const TargetVariantDescriptor>
> TargetDescriptor::tryGetVariantDescriptor(const std::string& key) const {
const auto descriptorIt = this->variantDescriptorsByKey.find(key);
if (descriptorIt == this->variantDescriptorsByKey.end()) {
return std::nullopt;
}
return std::cref(descriptorIt->second);
}
const TargetVariantDescriptor& TargetDescriptor::getVariantDescriptor(const std::string& key) const {
const auto descriptor = this->tryGetVariantDescriptor(key);
if (!descriptor.has_value()) {
throw Exceptions::InternalFatalErrorException{
"Failed to get pinout descriptor \"" + std::string{key}
+ "\" from target descriptor - descriptor not found"
};
}
return descriptor->get();
}
} }

View File

@@ -28,7 +28,7 @@ namespace Targets
std::map<std::string, TargetPeripheralDescriptor> peripheralDescriptorsByKey; std::map<std::string, TargetPeripheralDescriptor> peripheralDescriptorsByKey;
std::map<std::string, TargetPadDescriptor> padDescriptorsByKey; std::map<std::string, TargetPadDescriptor> padDescriptorsByKey;
std::map<std::string, TargetPinoutDescriptor> pinoutDescriptorsByKey; std::map<std::string, TargetPinoutDescriptor> pinoutDescriptorsByKey;
std::vector<TargetVariantDescriptor> variantDescriptors; std::map<std::string, TargetVariantDescriptor> variantDescriptorsByKey;
BreakpointResources breakpointResources; BreakpointResources breakpointResources;
TargetDescriptor( TargetDescriptor(
@@ -40,7 +40,7 @@ namespace Targets
std::map<std::string, TargetPeripheralDescriptor>&& peripheralDescriptorsByKey, std::map<std::string, TargetPeripheralDescriptor>&& peripheralDescriptorsByKey,
std::map<std::string, TargetPadDescriptor>&& padDescriptorsByKey, std::map<std::string, TargetPadDescriptor>&& padDescriptorsByKey,
std::map<std::string, TargetPinoutDescriptor>&& pinoutDescriptorsByKey, std::map<std::string, TargetPinoutDescriptor>&& pinoutDescriptorsByKey,
std::vector<TargetVariantDescriptor>&& variantDescriptors, std::map<std::string, TargetVariantDescriptor>&& variantDescriptorsByKey,
const BreakpointResources& breakpointResources const BreakpointResources& breakpointResources
); );
@@ -85,5 +85,11 @@ namespace Targets
) const; ) const;
const TargetPinoutDescriptor& getPinoutDescriptor(const std::string& key) const; const TargetPinoutDescriptor& getPinoutDescriptor(const std::string& key) const;
std::optional<std::reference_wrapper<const TargetVariantDescriptor>> tryGetVariantDescriptor(
const std::string& key
) const;
const TargetVariantDescriptor& getVariantDescriptor(const std::string& key) const;
}; };
} }

View File

@@ -5,10 +5,12 @@
namespace Targets namespace Targets
{ {
TargetVariantDescriptor::TargetVariantDescriptor( TargetVariantDescriptor::TargetVariantDescriptor(
const std::string& key,
const std::string& name, const std::string& name,
const std::string& pinoutKey const std::string& pinoutKey
) )
: name(name) : key(key)
, name(name)
, pinoutKey(pinoutKey) , pinoutKey(pinoutKey)
{} {}
} }

View File

@@ -7,10 +7,12 @@ namespace Targets
struct TargetVariantDescriptor struct TargetVariantDescriptor
{ {
public: public:
const std::string key;
std::string name; std::string name;
std::string pinoutKey; std::string pinoutKey;
TargetVariantDescriptor( TargetVariantDescriptor(
const std::string& key,
const std::string& name, const std::string& name,
const std::string& pinoutKey const std::string& pinoutKey
); );
@@ -19,6 +21,5 @@ namespace Targets
TargetVariantDescriptor& operator = (const TargetVariantDescriptor& other) = delete; TargetVariantDescriptor& operator = (const TargetVariantDescriptor& other) = delete;
TargetVariantDescriptor(TargetVariantDescriptor&& other) noexcept = default; TargetVariantDescriptor(TargetVariantDescriptor&& other) noexcept = default;
TargetVariantDescriptor& operator = (TargetVariantDescriptor&& other) noexcept = default;
}; };
} }