mirror of
https://github.com/Laupetin/OpenAssetTools.git
synced 2025-04-20 08:05:45 +00:00
Add offset of members to assetstructtests
This commit is contained in:
parent
a10b3b7d3c
commit
29b962e949
@ -4,6 +4,7 @@ Variable::Variable(std::string name, std::unique_ptr<TypeDeclaration> typeDeclar
|
|||||||
: m_name(std::move(name)),
|
: m_name(std::move(name)),
|
||||||
m_has_alignment_override(false),
|
m_has_alignment_override(false),
|
||||||
m_alignment_override(0),
|
m_alignment_override(0),
|
||||||
|
m_offset(0),
|
||||||
m_type_declaration(std::move(typeDeclaration))
|
m_type_declaration(std::move(typeDeclaration))
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
@ -3,6 +3,7 @@
|
|||||||
#include <memory>
|
#include <memory>
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
|
#include "Utils/ClassUtils.h"
|
||||||
#include "TypeDeclaration.h"
|
#include "TypeDeclaration.h"
|
||||||
|
|
||||||
class Variable
|
class Variable
|
||||||
@ -11,10 +12,11 @@ public:
|
|||||||
std::string m_name;
|
std::string m_name;
|
||||||
bool m_has_alignment_override;
|
bool m_has_alignment_override;
|
||||||
unsigned m_alignment_override;
|
unsigned m_alignment_override;
|
||||||
|
unsigned m_offset;
|
||||||
std::unique_ptr<TypeDeclaration> m_type_declaration;
|
std::unique_ptr<TypeDeclaration> m_type_declaration;
|
||||||
|
|
||||||
Variable(std::string name, std::unique_ptr<TypeDeclaration> typeDeclaration);
|
Variable(std::string name, std::unique_ptr<TypeDeclaration> typeDeclaration);
|
||||||
|
|
||||||
unsigned GetAlignment() const;
|
_NODISCARD unsigned GetAlignment() const;
|
||||||
bool GetForceAlignment() const;
|
_NODISCARD bool GetForceAlignment() const;
|
||||||
};
|
};
|
||||||
|
@ -13,8 +13,19 @@ class AssetStructTestsTemplate::Internal final : BaseTemplate
|
|||||||
LINE("TEST_CASE(\""<<m_env.m_game<<"::"<<m_env.m_asset->m_definition->GetFullName()<<": Tests for "<<structure->m_definition->GetFullName()<<"\", \"[assetstruct]\")")
|
LINE("TEST_CASE(\""<<m_env.m_game<<"::"<<m_env.m_asset->m_definition->GetFullName()<<": Tests for "<<structure->m_definition->GetFullName()<<"\", \"[assetstruct]\")")
|
||||||
LINE("{")
|
LINE("{")
|
||||||
m_intendation++;
|
m_intendation++;
|
||||||
|
|
||||||
|
for(const auto& member : structure->m_ordered_members)
|
||||||
|
{
|
||||||
|
if(!member->m_member->m_name.empty() && !member->m_member->m_type_declaration->m_has_custom_bit_size)
|
||||||
|
{
|
||||||
|
LINE("REQUIRE(offsetof(" << structure->m_definition->GetFullName() << ", " << member->m_member->m_name << ") == " << member->m_member->m_offset << ");")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
LINE("")
|
||||||
|
|
||||||
LINE("REQUIRE("<<structure->m_definition->GetSize()<<"u == sizeof("<<structure->m_definition->GetFullName()<<"));")
|
LINE("REQUIRE("<<structure->m_definition->GetSize()<<"u == sizeof("<<structure->m_definition->GetFullName()<<"));")
|
||||||
LINE("// REQUIRE("<<structure->m_definition->GetAlignment()<<"u == alignof("<<structure->m_definition->GetFullName()<<"));")
|
LINE("REQUIRE("<<structure->m_definition->GetAlignment()<<"u == alignof("<<structure->m_definition->GetFullName()<<"));")
|
||||||
m_intendation--;
|
m_intendation--;
|
||||||
LINE("}")
|
LINE("}")
|
||||||
}
|
}
|
||||||
@ -34,6 +45,7 @@ public:
|
|||||||
LINE("// ====================================================================")
|
LINE("// ====================================================================")
|
||||||
LINE("")
|
LINE("")
|
||||||
LINE("#include <catch2/catch.hpp>")
|
LINE("#include <catch2/catch.hpp>")
|
||||||
|
LINE("#include <cstddef>")
|
||||||
LINE("#include \"Game/" << m_env.m_game << "/" << m_env.m_game << ".h\"")
|
LINE("#include \"Game/" << m_env.m_game << "/" << m_env.m_game << ".h\"")
|
||||||
LINE("")
|
LINE("")
|
||||||
LINE("using namespace " << m_env.m_game << ";")
|
LINE("using namespace " << m_env.m_game << ";")
|
||||||
|
@ -129,6 +129,7 @@ bool CalculateSizeAndAlignPostProcessor::CalculateSize(IDataRepository* reposito
|
|||||||
|
|
||||||
if (member->m_type_declaration->m_has_custom_bit_size)
|
if (member->m_type_declaration->m_has_custom_bit_size)
|
||||||
{
|
{
|
||||||
|
member->m_offset = definition->m_size + currentBitOffset / 8;
|
||||||
currentBitOffset += member->m_type_declaration->m_custom_bit_size;
|
currentBitOffset += member->m_type_declaration->m_custom_bit_size;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -141,6 +142,9 @@ bool CalculateSizeAndAlignPostProcessor::CalculateSize(IDataRepository* reposito
|
|||||||
}
|
}
|
||||||
|
|
||||||
definition->m_size = AlignmentUtils::Align(definition->m_size, member->GetForceAlignment() ? member->GetAlignment() : std::min(member->GetAlignment(), definition->m_pack));
|
definition->m_size = AlignmentUtils::Align(definition->m_size, member->GetForceAlignment() ? member->GetAlignment() : std::min(member->GetAlignment(), definition->m_pack));
|
||||||
|
|
||||||
|
member->m_offset = definition->m_size;
|
||||||
|
|
||||||
definition->m_size += member->m_type_declaration->GetSize();
|
definition->m_size += member->m_type_declaration->GetSize();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -165,6 +169,8 @@ bool CalculateSizeAndAlignPostProcessor::CalculateSize(IDataRepository* reposito
|
|||||||
if (!CalculateFields(repository, member->m_type_declaration.get()))
|
if (!CalculateFields(repository, member->m_type_declaration.get()))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
member->m_offset = 0;
|
||||||
|
|
||||||
const auto memberSize = member->m_type_declaration->GetSize();
|
const auto memberSize = member->m_type_declaration->GetSize();
|
||||||
if (memberSize > definition->m_size)
|
if (memberSize > definition->m_size)
|
||||||
definition->m_size = memberSize;
|
definition->m_size = memberSize;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user