mirror of
https://github.com/Laupetin/OpenAssetTools.git
synced 2026-05-25 02:51:43 +00:00
fix: not adding offset of reusable type when type is not structure
This commit is contained in:
@@ -24,6 +24,7 @@ public:
|
||||
virtual void Add(std::unique_ptr<StructDefinition> structDefinition) = 0;
|
||||
virtual void Add(std::unique_ptr<UnionDefinition> unionDefinition) = 0;
|
||||
virtual void Add(std::unique_ptr<TypedefDefinition> typedefDefinition) = 0;
|
||||
virtual void Add(std::unique_ptr<TypeInformation> typeInformation) = 0;
|
||||
virtual void Add(std::unique_ptr<StructureInformation> structureInformation) = 0;
|
||||
virtual void Add(std::unique_ptr<FastFileBlock> fastFileBlock) = 0;
|
||||
|
||||
@@ -41,6 +42,7 @@ public:
|
||||
|
||||
[[nodiscard]] virtual DataDefinition* GetDataDefinitionByName(const std::string& name) const = 0;
|
||||
[[nodiscard]] virtual StructureInformation* GetInformationFor(const DefinitionWithMembers* definitionWithMembers) const = 0;
|
||||
[[nodiscard]] virtual TypeInformation* GetTypeInformationFor(const DataDefinition* definition) const = 0;
|
||||
[[nodiscard]] virtual EnumMember* GetEnumMemberByName(const std::string& name) const = 0;
|
||||
[[nodiscard]] virtual const FastFileBlock* GetFastFileBlockByName(const std::string& name) const = 0;
|
||||
};
|
||||
|
||||
@@ -24,7 +24,7 @@ InMemoryRepository::~InMemoryRepository()
|
||||
void InMemoryRepository::Add(std::unique_ptr<EnumDefinition> enumsDefinition)
|
||||
{
|
||||
auto* raw = enumsDefinition.release();
|
||||
m_enums.push_back(raw);
|
||||
m_enums.emplace_back(raw);
|
||||
m_data_definitions_by_name[raw->m_name] = raw;
|
||||
|
||||
for (const auto& enumMember : raw->m_members)
|
||||
@@ -34,35 +34,42 @@ void InMemoryRepository::Add(std::unique_ptr<EnumDefinition> enumsDefinition)
|
||||
void InMemoryRepository::Add(std::unique_ptr<StructDefinition> structDefinition)
|
||||
{
|
||||
auto* raw = structDefinition.release();
|
||||
m_structs.push_back(raw);
|
||||
m_structs.emplace_back(raw);
|
||||
m_data_definitions_by_name[raw->m_name] = raw;
|
||||
}
|
||||
|
||||
void InMemoryRepository::Add(std::unique_ptr<UnionDefinition> unionDefinition)
|
||||
{
|
||||
auto* raw = unionDefinition.release();
|
||||
m_unions.push_back(raw);
|
||||
m_unions.emplace_back(raw);
|
||||
m_data_definitions_by_name[raw->m_name] = raw;
|
||||
}
|
||||
|
||||
void InMemoryRepository::Add(std::unique_ptr<TypedefDefinition> typedefDefinition)
|
||||
{
|
||||
auto* raw = typedefDefinition.release();
|
||||
m_typedefs.push_back(raw);
|
||||
m_typedefs.emplace_back(raw);
|
||||
m_data_definitions_by_name[raw->m_name] = raw;
|
||||
}
|
||||
|
||||
void InMemoryRepository::Add(std::unique_ptr<StructureInformation> structureInformation)
|
||||
{
|
||||
auto* raw = structureInformation.release();
|
||||
m_structures_information.push_back(raw);
|
||||
m_structures_information.emplace_back(raw);
|
||||
m_structure_information_by_definition[raw->m_definition] = raw;
|
||||
}
|
||||
|
||||
void InMemoryRepository::Add(std::unique_ptr<TypeInformation> typeInformation)
|
||||
{
|
||||
auto* raw = typeInformation.release();
|
||||
m_types_information.emplace_back(raw);
|
||||
m_type_information_by_definition[raw->m_definition] = raw;
|
||||
}
|
||||
|
||||
void InMemoryRepository::Add(std::unique_ptr<FastFileBlock> fastFileBlock)
|
||||
{
|
||||
auto* raw = fastFileBlock.release();
|
||||
m_fast_file_blocks.push_back(raw);
|
||||
m_fast_file_blocks.emplace_back(raw);
|
||||
m_fast_file_blocks_by_name[raw->m_name] = raw;
|
||||
}
|
||||
|
||||
@@ -136,6 +143,16 @@ StructureInformation* InMemoryRepository::GetInformationFor(const DefinitionWith
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
TypeInformation* InMemoryRepository::GetTypeInformationFor(const DataDefinition* definition) const
|
||||
{
|
||||
const auto foundEntry = m_type_information_by_definition.find(definition);
|
||||
|
||||
if (foundEntry != m_type_information_by_definition.end())
|
||||
return foundEntry->second;
|
||||
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
EnumMember* InMemoryRepository::GetEnumMemberByName(const std::string& name) const
|
||||
{
|
||||
const auto foundEntry = m_enum_members_by_name.find(name);
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
#include "Persistence/IDataRepository.h"
|
||||
|
||||
#include <map>
|
||||
#include <unordered_map>
|
||||
|
||||
class InMemoryRepository final : public IDataRepository
|
||||
{
|
||||
@@ -19,6 +19,7 @@ public:
|
||||
void Add(std::unique_ptr<UnionDefinition> unionDefinition) override;
|
||||
void Add(std::unique_ptr<TypedefDefinition> typedefDefinition) override;
|
||||
void Add(std::unique_ptr<StructureInformation> structureInformation) override;
|
||||
void Add(std::unique_ptr<TypeInformation> typeInformation) override;
|
||||
void Add(std::unique_ptr<FastFileBlock> fastFileBlock) override;
|
||||
|
||||
[[nodiscard]] const std::string& GetGameName() const override;
|
||||
@@ -35,6 +36,7 @@ public:
|
||||
|
||||
[[nodiscard]] DataDefinition* GetDataDefinitionByName(const std::string& name) const override;
|
||||
[[nodiscard]] StructureInformation* GetInformationFor(const DefinitionWithMembers* definitionWithMembers) const override;
|
||||
[[nodiscard]] TypeInformation* GetTypeInformationFor(const DataDefinition* definition) const override;
|
||||
[[nodiscard]] EnumMember* GetEnumMemberByName(const std::string& name) const override;
|
||||
[[nodiscard]] const FastFileBlock* GetFastFileBlockByName(const std::string& name) const override;
|
||||
|
||||
@@ -44,11 +46,13 @@ private:
|
||||
std::vector<UnionDefinition*> m_unions;
|
||||
std::vector<TypedefDefinition*> m_typedefs;
|
||||
std::vector<StructureInformation*> m_structures_information;
|
||||
std::vector<TypeInformation*> m_types_information;
|
||||
std::vector<const FastFileBlock*> m_fast_file_blocks;
|
||||
std::map<std::string, DataDefinition*> m_data_definitions_by_name;
|
||||
std::map<std::string, EnumMember*> m_enum_members_by_name;
|
||||
std::map<std::string, const FastFileBlock*> m_fast_file_blocks_by_name;
|
||||
std::map<const DefinitionWithMembers*, StructureInformation*> m_structure_information_by_definition;
|
||||
std::unordered_map<std::string, DataDefinition*> m_data_definitions_by_name;
|
||||
std::unordered_map<std::string, EnumMember*> m_enum_members_by_name;
|
||||
std::unordered_map<std::string, const FastFileBlock*> m_fast_file_blocks_by_name;
|
||||
std::unordered_map<const DefinitionWithMembers*, StructureInformation*> m_structure_information_by_definition;
|
||||
std::unordered_map<const DataDefinition*, TypeInformation*> m_type_information_by_definition;
|
||||
std::string m_game_name;
|
||||
Architecture m_architecture;
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user