Used TargetRegisterAccess object in place of a string for Register TDF struct

This commit is contained in:
Nav
2024-03-20 21:12:00 +00:00
parent af9a8304bd
commit 0ee769c872
2 changed files with 10 additions and 3 deletions

View File

@@ -7,6 +7,7 @@
#include <functional> #include <functional>
#include "BitField.hpp" #include "BitField.hpp"
#include "src/Targets/TargetRegisterDescriptor.hpp"
#include "Exceptions/InvalidTargetDescriptionDataException.hpp" #include "Exceptions/InvalidTargetDescriptionDataException.hpp"
@@ -20,7 +21,7 @@ namespace Targets::TargetDescription
std::uint32_t offset; std::uint32_t offset;
std::uint16_t size; std::uint16_t size;
std::optional<std::uint64_t> initialValue; std::optional<std::uint64_t> initialValue;
std::optional<std::string> access; std::optional<TargetRegisterAccess> access;
std::optional<bool> alternative; std::optional<bool> alternative;
std::map<std::string, BitField, std::less<void>> bitFieldsByKey; std::map<std::string, BitField, std::less<void>> bitFieldsByKey;
@@ -31,7 +32,7 @@ namespace Targets::TargetDescription
std::uint32_t offset, std::uint32_t offset,
std::uint16_t size, std::uint16_t size,
const std::optional<std::uint64_t>& initialValue, const std::optional<std::uint64_t>& initialValue,
const std::optional<std::string>& access, const std::optional<TargetRegisterAccess>& access,
const std::optional<bool>& alternative, const std::optional<bool>& alternative,
const std::map<std::string, BitField, std::less<void>>& bitFieldsByKey const std::map<std::string, BitField, std::less<void>>& bitFieldsByKey
) )

View File

@@ -544,6 +544,7 @@ namespace Targets::TargetDescription
Register TargetDescriptionFile::registerFromXml(const QDomElement& xmlElement) { Register TargetDescriptionFile::registerFromXml(const QDomElement& xmlElement) {
const auto initialValue = TargetDescriptionFile::tryGetAttribute(xmlElement, "initial-value"); const auto initialValue = TargetDescriptionFile::tryGetAttribute(xmlElement, "initial-value");
const auto alternative = TargetDescriptionFile::tryGetAttribute(xmlElement, "alternative"); const auto alternative = TargetDescriptionFile::tryGetAttribute(xmlElement, "alternative");
const auto accessString = TargetDescriptionFile::tryGetAttribute(xmlElement, "access");
auto output = Register( auto output = Register(
TargetDescriptionFile::getAttribute(xmlElement, "key"), TargetDescriptionFile::getAttribute(xmlElement, "key"),
@@ -552,7 +553,12 @@ namespace Targets::TargetDescription
StringService::toUint32(TargetDescriptionFile::getAttribute(xmlElement, "offset")), StringService::toUint32(TargetDescriptionFile::getAttribute(xmlElement, "offset")),
StringService::toUint16(TargetDescriptionFile::getAttribute(xmlElement, "size")), StringService::toUint16(TargetDescriptionFile::getAttribute(xmlElement, "size")),
initialValue.has_value() ? std::optional(StringService::toUint64(*initialValue)) : std::nullopt, initialValue.has_value() ? std::optional(StringService::toUint64(*initialValue)) : std::nullopt,
TargetDescriptionFile::tryGetAttribute(xmlElement, "access"), accessString.has_value()
? std::optional(TargetRegisterAccess(
accessString->find('R') != std::string::npos,
accessString->find('W') != std::string::npos
))
: std::nullopt,
alternative.has_value() ? std::optional(*alternative == "true") : std::nullopt, alternative.has_value() ? std::optional(*alternative == "true") : std::nullopt,
{} {}
); );