refactor: implement base x64 fastfile loading for iw4

This commit is contained in:
Jan
2025-05-03 17:31:17 +01:00
parent 78d8fba6f8
commit 03ccede91c
43 changed files with 1025 additions and 331 deletions

View File

@ -2,6 +2,7 @@
#include "Domain/Definition/ArrayDeclarationModifier.h"
#include "Domain/Definition/PointerDeclarationModifier.h"
#include "Domain/Definition/TypedefDefinition.h"
#include "MemberComputations.h"
#include <algorithm>
@ -71,7 +72,7 @@ std::vector<DeclarationModifier*> DeclarationModifierComputations::GetFollowingD
return following;
}
std::vector<int> DeclarationModifierComputations::GetArrayIndices() const
const std::vector<int>& DeclarationModifierComputations::GetArrayIndices() const
{
return m_modifier_indices;
}
@ -241,6 +242,15 @@ const IEvaluation* DeclarationModifierComputations::GetDynamicArraySizeEvaluatio
return dynamic_cast<ArrayDeclarationModifier*>(declarationModifier)->m_dynamic_size_evaluation.get();
}
bool DeclarationModifierComputations::HasPointerModifier() const
{
return std::ranges::any_of(m_information->m_member->m_type_declaration->m_declaration_modifiers,
[](const std::unique_ptr<DeclarationModifier>& modifier)
{
return modifier->GetType() == DeclarationModifierType::POINTER;
});
}
unsigned DeclarationModifierComputations::GetAlignment() const
{
const auto following = GetFollowingDeclarationModifiers();

View File

@ -13,7 +13,7 @@ public:
[[nodiscard]] DeclarationModifier* GetDeclarationModifier() const;
[[nodiscard]] DeclarationModifier* GetNextDeclarationModifier() const;
[[nodiscard]] std::vector<DeclarationModifier*> GetFollowingDeclarationModifiers() const;
[[nodiscard]] std::vector<int> GetArrayIndices() const;
[[nodiscard]] const std::vector<int>& GetArrayIndices() const;
[[nodiscard]] bool IsArray() const;
[[nodiscard]] int GetArraySize() const;
[[nodiscard]] bool HasDynamicArrayCount() const;
@ -26,6 +26,7 @@ public:
[[nodiscard]] const IEvaluation* GetPointerArrayCountEvaluation() const;
[[nodiscard]] bool IsDynamicArray() const;
[[nodiscard]] const IEvaluation* GetDynamicArraySizeEvaluation() const;
[[nodiscard]] bool HasPointerModifier() const;
[[nodiscard]] unsigned GetAlignment() const;
private:

View File

@ -1,8 +1,8 @@
#pragma once
#include "Utils/ClassUtils.h"
#include <cstdint>
enum class DeclarationModifierType
enum class DeclarationModifierType : std::uint8_t
{
POINTER,
ARRAY

View File

@ -5,13 +5,13 @@
#include <cassert>
TypeDeclaration::TypeDeclaration(const DataDefinition* type)
: m_flags(0),
m_size(0),
m_alignment(0),
m_is_const(false),
: m_is_const(false),
m_has_custom_bit_size(false),
m_type(type),
m_custom_bit_size(0)
m_custom_bit_size(0),
m_flags(0),
m_size(0),
m_alignment(0)
{
assert(m_type != nullptr);
}

View File

@ -0,0 +1,19 @@
#include "Architecture.h"
#include <cassert>
unsigned GetPointerSizeForArchitecture(const Architecture architecture)
{
switch (architecture)
{
case Architecture::X86:
return sizeof(uint32_t);
case Architecture::X64:
return sizeof(uint64_t);
default:
assert(false);
return sizeof(uint32_t);
}
}

View File

@ -1,6 +1,8 @@
#pragma once
enum class Architecture
#include <cstdint>
enum class Architecture : std::uint8_t
{
UNKNOWN,
X86,
@ -14,3 +16,5 @@ static constexpr Architecture OWN_ARCHITECTURE =
Architecture::X64
#endif
;
extern unsigned GetPointerSizeForArchitecture(Architecture architecture);