mirror of
https://github.com/Laupetin/OpenAssetTools.git
synced 2026-11-08 17:51:58 +00:00
refactor: support multiple variants for games in zonecode
This commit is contained in:
61 files changed
+411
-288
No files matched your search
@@ -13,7 +13,7 @@ DataDefinitionType BaseTypeDefinition::GetType() const
|
||||
return DataDefinitionType::BASE_TYPE;
|
||||
}
|
||||
|
||||
unsigned BaseTypeDefinition::GetAlignment() const
|
||||
unsigned BaseTypeDefinition::GetAlignment(const WordSize wordSize) const
|
||||
{
|
||||
return m_size;
|
||||
}
|
||||
@@ -23,7 +23,7 @@ bool BaseTypeDefinition::GetForceAlignment() const
|
||||
return false;
|
||||
}
|
||||
|
||||
unsigned BaseTypeDefinition::GetSize() const
|
||||
unsigned BaseTypeDefinition::GetSize(const WordSize wordSize) const
|
||||
{
|
||||
return m_size;
|
||||
}
|
||||
|
||||
@@ -23,9 +23,9 @@ public:
|
||||
static const size_t ALL_BASE_TYPES_COUNT;
|
||||
|
||||
[[nodiscard]] DataDefinitionType GetType() const override;
|
||||
[[nodiscard]] unsigned GetAlignment() const override;
|
||||
[[nodiscard]] unsigned GetAlignment(WordSize wordSize) const override;
|
||||
[[nodiscard]] bool GetForceAlignment() const override;
|
||||
[[nodiscard]] unsigned GetSize() const override;
|
||||
[[nodiscard]] unsigned GetSize(WordSize wordSize) const override;
|
||||
|
||||
const unsigned m_size;
|
||||
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
#pragma once
|
||||
|
||||
#include "Domain/WordSize.h"
|
||||
|
||||
#include <string>
|
||||
|
||||
enum class DataDefinitionType
|
||||
@@ -25,9 +27,9 @@ public:
|
||||
DataDefinition& operator=(DataDefinition&& other) noexcept = default;
|
||||
|
||||
[[nodiscard]] virtual DataDefinitionType GetType() const = 0;
|
||||
[[nodiscard]] virtual unsigned GetAlignment() const = 0;
|
||||
[[nodiscard]] virtual unsigned GetAlignment(WordSize wordSize) const = 0;
|
||||
[[nodiscard]] virtual bool GetForceAlignment() const = 0;
|
||||
[[nodiscard]] virtual unsigned GetSize() const = 0;
|
||||
[[nodiscard]] virtual unsigned GetSize(WordSize wordSize) const = 0;
|
||||
|
||||
[[nodiscard]] std::string GetFullName() const;
|
||||
|
||||
|
||||
@@ -11,11 +11,11 @@ DefinitionWithMembers::DefinitionWithMembers(std::string _namespace, std::string
|
||||
{
|
||||
}
|
||||
|
||||
unsigned DefinitionWithMembers::GetAlignment() const
|
||||
unsigned DefinitionWithMembers::GetAlignment(const WordSize wordSize) const
|
||||
{
|
||||
assert(m_flags & FLAG_FIELDS_CALCULATED);
|
||||
|
||||
return m_alignment;
|
||||
return m_alignment[std::to_underlying(wordSize)];
|
||||
}
|
||||
|
||||
bool DefinitionWithMembers::GetForceAlignment() const
|
||||
@@ -23,11 +23,11 @@ bool DefinitionWithMembers::GetForceAlignment() const
|
||||
return m_flags & FLAG_ALIGNMENT_FORCED;
|
||||
}
|
||||
|
||||
unsigned DefinitionWithMembers::GetSize() const
|
||||
unsigned DefinitionWithMembers::GetSize(const WordSize wordSize) const
|
||||
{
|
||||
assert(m_flags & FLAG_FIELDS_CALCULATED);
|
||||
|
||||
return m_size;
|
||||
return m_size[std::to_underlying(wordSize)];
|
||||
}
|
||||
|
||||
bool DefinitionWithMembers::IsAnonymous() const
|
||||
|
||||
@@ -16,14 +16,14 @@ public:
|
||||
|
||||
DefinitionWithMembers(std::string _namespace, std::string name, unsigned pack);
|
||||
|
||||
[[nodiscard]] unsigned GetAlignment() const override;
|
||||
[[nodiscard]] unsigned GetAlignment(WordSize wordSize) const override;
|
||||
[[nodiscard]] bool GetForceAlignment() const override;
|
||||
[[nodiscard]] unsigned GetSize() const override;
|
||||
[[nodiscard]] unsigned GetSize(WordSize wordSize) const override;
|
||||
[[nodiscard]] bool IsAnonymous() const;
|
||||
|
||||
unsigned m_flags;
|
||||
unsigned m_size;
|
||||
unsigned m_alignment;
|
||||
unsigned m_size[WORD_SIZE_COUNT];
|
||||
unsigned m_alignment[WORD_SIZE_COUNT];
|
||||
unsigned m_pack;
|
||||
|
||||
std::vector<std::shared_ptr<Variable>> m_members;
|
||||
|
||||
@@ -14,9 +14,9 @@ DataDefinitionType EnumDefinition::GetType() const
|
||||
return DataDefinitionType::ENUM;
|
||||
}
|
||||
|
||||
unsigned EnumDefinition::GetAlignment() const
|
||||
unsigned EnumDefinition::GetAlignment(const WordSize wordSize) const
|
||||
{
|
||||
return m_parent_type->GetAlignment();
|
||||
return m_parent_type->GetAlignment(wordSize);
|
||||
}
|
||||
|
||||
bool EnumDefinition::GetForceAlignment() const
|
||||
@@ -24,9 +24,9 @@ bool EnumDefinition::GetForceAlignment() const
|
||||
return m_parent_type->GetForceAlignment();
|
||||
}
|
||||
|
||||
unsigned EnumDefinition::GetSize() const
|
||||
unsigned EnumDefinition::GetSize(const WordSize wordSize) const
|
||||
{
|
||||
return m_parent_type->GetSize();
|
||||
return m_parent_type->GetSize(wordSize);
|
||||
}
|
||||
|
||||
void EnumDefinition::AddEnumMember(EnumMember enumMember)
|
||||
|
||||
@@ -13,9 +13,9 @@ public:
|
||||
EnumDefinition(std::string _namespace, std::string name, const BaseTypeDefinition* parentType);
|
||||
|
||||
[[nodiscard]] DataDefinitionType GetType() const override;
|
||||
[[nodiscard]] unsigned GetAlignment() const override;
|
||||
[[nodiscard]] unsigned GetAlignment(WordSize wordSize) const override;
|
||||
[[nodiscard]] bool GetForceAlignment() const override;
|
||||
[[nodiscard]] unsigned GetSize() const override;
|
||||
[[nodiscard]] unsigned GetSize(WordSize wordSize) const override;
|
||||
|
||||
void AddEnumMember(EnumMember enumMember);
|
||||
|
||||
|
||||
@@ -12,7 +12,7 @@ DataDefinitionType ForwardDeclaration::GetType() const
|
||||
return DataDefinitionType::FORWARD_DECLARATION;
|
||||
}
|
||||
|
||||
unsigned ForwardDeclaration::GetAlignment() const
|
||||
unsigned ForwardDeclaration::GetAlignment(const WordSize wordSize) const
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
@@ -22,7 +22,7 @@ bool ForwardDeclaration::GetForceAlignment() const
|
||||
return false;
|
||||
}
|
||||
|
||||
unsigned ForwardDeclaration::GetSize() const
|
||||
unsigned ForwardDeclaration::GetSize(const WordSize wordSize) const
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
@@ -8,9 +8,9 @@ public:
|
||||
ForwardDeclaration(std::string _namespace, std::string name, DataDefinitionType type);
|
||||
|
||||
[[nodiscard]] DataDefinitionType GetType() const override;
|
||||
[[nodiscard]] unsigned GetAlignment() const override;
|
||||
[[nodiscard]] unsigned GetAlignment(WordSize wordSize) const override;
|
||||
[[nodiscard]] bool GetForceAlignment() const override;
|
||||
[[nodiscard]] unsigned GetSize() const override;
|
||||
[[nodiscard]] unsigned GetSize(WordSize wordSize) const override;
|
||||
|
||||
const DataDefinitionType m_forwarded_type;
|
||||
const DataDefinition* m_definition;
|
||||
|
||||
@@ -10,22 +10,22 @@ TypeDeclaration::TypeDeclaration(const DataDefinition* type)
|
||||
m_type(type),
|
||||
m_custom_bit_size(0),
|
||||
m_flags(0),
|
||||
m_size(0),
|
||||
m_alignment(0)
|
||||
m_size{},
|
||||
m_alignment{}
|
||||
{
|
||||
assert(m_type != nullptr);
|
||||
}
|
||||
|
||||
unsigned TypeDeclaration::GetSize() const
|
||||
unsigned TypeDeclaration::GetSize(const WordSize wordSize) const
|
||||
{
|
||||
assert(m_flags & FLAG_FIELDS_CALCULATED);
|
||||
return m_size;
|
||||
return m_size[std::to_underlying(wordSize)];
|
||||
}
|
||||
|
||||
unsigned TypeDeclaration::GetAlignment() const
|
||||
unsigned TypeDeclaration::GetAlignment(const WordSize wordSize) const
|
||||
{
|
||||
assert(m_flags & FLAG_FIELDS_CALCULATED);
|
||||
return m_alignment;
|
||||
return m_alignment[std::to_underlying(wordSize)];
|
||||
}
|
||||
|
||||
bool TypeDeclaration::GetForceAlignment() const
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
|
||||
#include "DataDefinition.h"
|
||||
#include "DeclarationModifier.h"
|
||||
#include "Domain/WordSize.h"
|
||||
|
||||
#include <memory>
|
||||
#include <vector>
|
||||
@@ -14,8 +15,8 @@ public:
|
||||
|
||||
explicit TypeDeclaration(const DataDefinition* type);
|
||||
|
||||
[[nodiscard]] unsigned GetSize() const;
|
||||
[[nodiscard]] unsigned GetAlignment() const;
|
||||
[[nodiscard]] unsigned GetSize(WordSize wordSize) const;
|
||||
[[nodiscard]] unsigned GetAlignment(WordSize wordSize) const;
|
||||
[[nodiscard]] bool GetForceAlignment() const;
|
||||
|
||||
std::vector<std::unique_ptr<DeclarationModifier>> m_declaration_modifiers;
|
||||
@@ -27,6 +28,6 @@ public:
|
||||
unsigned m_custom_bit_size;
|
||||
|
||||
unsigned m_flags;
|
||||
unsigned m_size;
|
||||
unsigned m_alignment;
|
||||
unsigned m_size[WORD_SIZE_COUNT];
|
||||
unsigned m_alignment[WORD_SIZE_COUNT];
|
||||
};
|
||||
@@ -13,13 +13,14 @@ DataDefinitionType TypedefDefinition::GetType() const
|
||||
return DataDefinitionType::TYPEDEF;
|
||||
}
|
||||
|
||||
unsigned TypedefDefinition::GetAlignment() const
|
||||
unsigned TypedefDefinition::GetAlignment(WordSize wordSize) const
|
||||
{
|
||||
if (m_has_alignment_override)
|
||||
{
|
||||
return m_alignment_override;
|
||||
}
|
||||
return m_type_declaration->GetAlignment();
|
||||
|
||||
return m_type_declaration->GetAlignment(wordSize);
|
||||
}
|
||||
|
||||
bool TypedefDefinition::GetForceAlignment() const
|
||||
@@ -27,7 +28,7 @@ bool TypedefDefinition::GetForceAlignment() const
|
||||
return m_has_alignment_override || m_type_declaration->GetForceAlignment();
|
||||
}
|
||||
|
||||
unsigned TypedefDefinition::GetSize() const
|
||||
unsigned TypedefDefinition::GetSize(const WordSize wordSize) const
|
||||
{
|
||||
return m_type_declaration->GetSize();
|
||||
return m_type_declaration->GetSize(wordSize);
|
||||
}
|
||||
@@ -9,9 +9,9 @@ public:
|
||||
TypedefDefinition(std::string _namespace, std::string name, std::unique_ptr<TypeDeclaration> typeDeclaration);
|
||||
|
||||
[[nodiscard]] DataDefinitionType GetType() const override;
|
||||
[[nodiscard]] unsigned GetAlignment() const override;
|
||||
[[nodiscard]] unsigned GetAlignment(WordSize wordSize) const override;
|
||||
[[nodiscard]] bool GetForceAlignment() const override;
|
||||
[[nodiscard]] unsigned GetSize() const override;
|
||||
[[nodiscard]] unsigned GetSize(WordSize wordSize) const override;
|
||||
|
||||
bool m_has_alignment_override;
|
||||
unsigned m_alignment_override;
|
||||
|
||||
@@ -9,12 +9,12 @@ Variable::Variable(std::string name, std::unique_ptr<TypeDeclaration> typeDeclar
|
||||
{
|
||||
}
|
||||
|
||||
unsigned Variable::GetAlignment() const
|
||||
unsigned Variable::GetAlignment(const WordSize wordSize) const
|
||||
{
|
||||
if (m_has_alignment_override)
|
||||
return m_alignment_override;
|
||||
|
||||
return m_type_declaration->GetAlignment();
|
||||
return m_type_declaration->GetAlignment(wordSize);
|
||||
}
|
||||
|
||||
bool Variable::GetForceAlignment() const
|
||||
|
||||
@@ -10,7 +10,7 @@ class Variable
|
||||
public:
|
||||
Variable(std::string name, std::unique_ptr<TypeDeclaration> typeDeclaration);
|
||||
|
||||
[[nodiscard]] unsigned GetAlignment() const;
|
||||
[[nodiscard]] unsigned GetAlignment(WordSize wordSize) const;
|
||||
[[nodiscard]] bool GetForceAlignment() const;
|
||||
|
||||
std::string m_name;
|
||||
|
||||
Reference in new issue
Block a user