Files
BloomPatched/src/Targets/TargetDescriptor.hpp

60 lines
1.8 KiB
C++
Raw Normal View History

2021-04-04 21:04:12 +01:00
#pragma once
#include <string>
#include <cstdint>
#include <vector>
#include <map>
#include <algorithm>
#include <QMetaType>
2021-04-04 21:04:12 +01:00
2021-10-09 19:17:58 +01:00
#include "TargetMemory.hpp"
#include "TargetRegister.hpp"
2021-04-04 21:04:12 +01:00
#include "TargetVariant.hpp"
namespace Bloom::Targets
{
struct TargetDescriptor
{
std::string name;
std::string id;
2022-08-30 02:51:10 +01:00
std::string vendorName;
2021-10-09 19:17:58 +01:00
std::map<TargetMemoryType, TargetMemoryDescriptor> memoryDescriptorsByType;
std::map<TargetRegisterDescriptorId, TargetRegisterDescriptor> registerDescriptorsById;
2021-04-04 21:04:12 +01:00
std::vector<TargetVariant> variants;
TargetMemoryType programMemoryType;
TargetDescriptor(
std::string id,
std::string name,
std::string vendorName,
std::map<TargetMemoryType, TargetMemoryDescriptor> memoryDescriptorsByType,
std::map<TargetRegisterDescriptorId, TargetRegisterDescriptor> registerDescriptorsById,
std::vector<TargetVariant> variants,
TargetMemoryType programMemoryType
)
: name(name)
, id(id)
, vendorName(vendorName)
, memoryDescriptorsByType(memoryDescriptorsByType)
, registerDescriptorsById(registerDescriptorsById)
, variants(variants)
, programMemoryType(programMemoryType)
{}
TargetRegisterDescriptorIds registerDescriptorIdsForType(TargetRegisterType type) {
auto output = TargetRegisterDescriptorIds();
for (const auto& [descriptorId, descriptor] : this->registerDescriptorsById) {
if (descriptor.type == type) {
output.insert(descriptorId);
}
}
return output;
}
2021-04-04 21:04:12 +01:00
};
}
2021-05-30 16:52:32 +01:00
Q_DECLARE_METATYPE(Bloom::Targets::TargetDescriptor)