mirror of
https://github.com/Laupetin/OpenAssetTools.git
synced 2025-06-10 23:08:05 -05:00
create enum definitions from headers
This commit is contained in:
@ -11,32 +11,16 @@ DataDefinitionType BaseTypeDefinition::GetType() const
|
||||
return DataDefinitionType::BASE_TYPE;
|
||||
}
|
||||
|
||||
unsigned BaseTypeDefinition::GetAlignment()
|
||||
{
|
||||
// Since this type has no members the alignment is always equal to the size.
|
||||
return m_size;
|
||||
}
|
||||
|
||||
unsigned BaseTypeDefinition::GetAlignment() const
|
||||
{
|
||||
return m_size;
|
||||
}
|
||||
|
||||
bool BaseTypeDefinition::GetForceAlignment()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
bool BaseTypeDefinition::GetForceAlignment() const
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
unsigned BaseTypeDefinition::GetSize()
|
||||
{
|
||||
return m_size;
|
||||
}
|
||||
|
||||
unsigned BaseTypeDefinition::GetSize() const
|
||||
{
|
||||
return m_size;
|
||||
@ -72,4 +56,5 @@ const BaseTypeDefinition* const BaseTypeDefinition::ALL_BASE_TYPES[]
|
||||
LONG_LONG,
|
||||
UNSIGNED_LONG_LONG,
|
||||
VOID
|
||||
};
|
||||
};
|
||||
const size_t BaseTypeDefinition::ALL_BASE_TYPES_COUNT = _countof(ALL_BASE_TYPES);
|
@ -11,12 +11,9 @@ private:
|
||||
|
||||
public:
|
||||
_NODISCARD DataDefinitionType GetType() const override;
|
||||
_NODISCARD unsigned GetAlignment() override;
|
||||
_NODISCARD unsigned GetAlignment() const;
|
||||
_NODISCARD bool GetForceAlignment() override;
|
||||
_NODISCARD bool GetForceAlignment() const;
|
||||
_NODISCARD unsigned GetSize() override;
|
||||
_NODISCARD unsigned GetSize() const;
|
||||
_NODISCARD unsigned GetAlignment() const override;
|
||||
_NODISCARD bool GetForceAlignment() const override;
|
||||
_NODISCARD unsigned GetSize() const override;
|
||||
|
||||
static const BaseTypeDefinition* const FLOAT;
|
||||
static const BaseTypeDefinition* const DOUBLE;
|
||||
@ -34,4 +31,5 @@ public:
|
||||
static const BaseTypeDefinition* const VOID;
|
||||
|
||||
static const BaseTypeDefinition* const ALL_BASE_TYPES[];
|
||||
static const size_t ALL_BASE_TYPES_COUNT;
|
||||
};
|
||||
|
@ -29,9 +29,9 @@ public:
|
||||
std::string m_name;
|
||||
|
||||
_NODISCARD virtual DataDefinitionType GetType() const = 0;
|
||||
_NODISCARD virtual unsigned GetAlignment() = 0;
|
||||
_NODISCARD virtual bool GetForceAlignment() = 0;
|
||||
_NODISCARD virtual unsigned GetSize() = 0;
|
||||
_NODISCARD virtual unsigned GetAlignment() const = 0;
|
||||
_NODISCARD virtual bool GetForceAlignment() const = 0;
|
||||
_NODISCARD virtual unsigned GetSize() const = 0;
|
||||
|
||||
_NODISCARD std::string GetFullName() const;
|
||||
};
|
||||
|
@ -1,5 +1,7 @@
|
||||
#include "DefinitionWithMembers.h"
|
||||
|
||||
#include <cassert>
|
||||
|
||||
DefinitionWithMembers::DefinitionWithMembers(std::string _namespace, std::string name, const unsigned pack)
|
||||
: DataDefinition(std::move(_namespace), std::move(name)),
|
||||
m_flags(0),
|
||||
@ -12,46 +14,49 @@ DefinitionWithMembers::DefinitionWithMembers(std::string _namespace, std::string
|
||||
{
|
||||
}
|
||||
|
||||
void DefinitionWithMembers::CalculateAlignment()
|
||||
{
|
||||
if (m_has_alignment_override)
|
||||
{
|
||||
m_flags |= FLAG_ALIGNMENT_FORCED;
|
||||
m_alignment = m_alignment_override;
|
||||
}
|
||||
else
|
||||
{
|
||||
m_alignment = 0;
|
||||
for (const auto& member : m_members)
|
||||
{
|
||||
const auto memberAlignment = member->GetAlignment();
|
||||
if (memberAlignment > m_alignment)
|
||||
m_alignment = memberAlignment;
|
||||
}
|
||||
}
|
||||
m_flags |= FLAG_ALIGNMENT_CALCULATED;
|
||||
}
|
||||
//void DefinitionWithMembers::CalculateAlignment()
|
||||
//{
|
||||
// if (m_has_alignment_override)
|
||||
// {
|
||||
// m_flags |= FLAG_ALIGNMENT_FORCED;
|
||||
// m_alignment = m_alignment_override;
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// m_alignment = 0;
|
||||
// for (const auto& member : m_members)
|
||||
// {
|
||||
// const auto memberAlignment = member->GetAlignment();
|
||||
// if (memberAlignment > m_alignment)
|
||||
// m_alignment = memberAlignment;
|
||||
// }
|
||||
// }
|
||||
// m_flags |= FLAG_ALIGNMENT_CALCULATED;
|
||||
//}
|
||||
|
||||
unsigned DefinitionWithMembers::GetAlignment()
|
||||
unsigned DefinitionWithMembers::GetAlignment() const
|
||||
{
|
||||
if ((m_flags & FLAG_ALIGNMENT_CALCULATED) == 0)
|
||||
CalculateAlignment();
|
||||
assert(m_flags & FLAG_ALIGNMENT_CALCULATED);
|
||||
/*if ((m_flags & FLAG_ALIGNMENT_CALCULATED) == 0)
|
||||
CalculateAlignment();*/
|
||||
|
||||
return m_alignment;
|
||||
}
|
||||
|
||||
bool DefinitionWithMembers::GetForceAlignment()
|
||||
bool DefinitionWithMembers::GetForceAlignment() const
|
||||
{
|
||||
if ((m_flags & FLAG_ALIGNMENT_CALCULATED) == 0)
|
||||
CalculateAlignment();
|
||||
assert(m_flags & FLAG_ALIGNMENT_CALCULATED);
|
||||
/*if ((m_flags & FLAG_ALIGNMENT_CALCULATED) == 0)
|
||||
CalculateAlignment();*/
|
||||
|
||||
return m_flags & FLAG_ALIGNMENT_FORCED;
|
||||
}
|
||||
|
||||
unsigned DefinitionWithMembers::GetSize()
|
||||
unsigned DefinitionWithMembers::GetSize() const
|
||||
{
|
||||
if ((m_flags & FLAG_SIZE_CALCULATED) == 0)
|
||||
CalculateSize();
|
||||
assert(m_flags & FLAG_SIZE_CALCULATED);
|
||||
/*if ((m_flags & FLAG_SIZE_CALCULATED) == 0)
|
||||
CalculateSize();*/
|
||||
|
||||
return m_size;
|
||||
}
|
||||
|
@ -8,7 +8,7 @@
|
||||
|
||||
class DefinitionWithMembers : public DataDefinition
|
||||
{
|
||||
protected:
|
||||
public:
|
||||
static constexpr int FLAG_SIZE_CALCULATED = 1 << 0;
|
||||
static constexpr int FLAG_ALIGNMENT_CALCULATED = 1 << 1;
|
||||
static constexpr int FLAG_ALIGNMENT_FORCED = 1 << 2;
|
||||
@ -17,10 +17,9 @@ protected:
|
||||
unsigned m_size;
|
||||
unsigned m_alignment;
|
||||
|
||||
virtual void CalculateSize() = 0;
|
||||
void CalculateAlignment();
|
||||
/*virtual void CalculateSize() = 0;
|
||||
void CalculateAlignment();*/
|
||||
|
||||
public:
|
||||
bool m_has_alignment_override;
|
||||
bool m_anonymous;
|
||||
|
||||
@ -31,7 +30,7 @@ public:
|
||||
|
||||
DefinitionWithMembers(std::string _namespace, std::string name, unsigned pack);
|
||||
|
||||
_NODISCARD unsigned GetAlignment() override;
|
||||
_NODISCARD bool GetForceAlignment() override;
|
||||
_NODISCARD unsigned GetSize() override;
|
||||
_NODISCARD unsigned GetAlignment() const override;
|
||||
_NODISCARD bool GetForceAlignment() const override;
|
||||
_NODISCARD unsigned GetSize() const override;
|
||||
};
|
@ -14,17 +14,17 @@ DataDefinitionType EnumDefinition::GetType() const
|
||||
return DataDefinitionType::ENUM;
|
||||
}
|
||||
|
||||
unsigned EnumDefinition::GetAlignment()
|
||||
unsigned EnumDefinition::GetAlignment() const
|
||||
{
|
||||
return m_parent_type->GetAlignment();
|
||||
}
|
||||
|
||||
bool EnumDefinition::GetForceAlignment()
|
||||
bool EnumDefinition::GetForceAlignment() const
|
||||
{
|
||||
return m_parent_type->GetForceAlignment();
|
||||
}
|
||||
|
||||
unsigned EnumDefinition::GetSize()
|
||||
unsigned EnumDefinition::GetSize() const
|
||||
{
|
||||
return m_parent_type->GetSize();
|
||||
}
|
||||
|
@ -16,9 +16,9 @@ public:
|
||||
EnumDefinition(std::string _namespace, std::string name, const BaseTypeDefinition* parentType);
|
||||
|
||||
_NODISCARD DataDefinitionType GetType() const override;
|
||||
_NODISCARD unsigned GetAlignment() override;
|
||||
_NODISCARD bool GetForceAlignment() override;
|
||||
_NODISCARD unsigned GetSize() override;
|
||||
_NODISCARD unsigned GetAlignment() const override;
|
||||
_NODISCARD bool GetForceAlignment() const override;
|
||||
_NODISCARD unsigned GetSize() const override;
|
||||
|
||||
void AddEnumMember(EnumMember enumMember);
|
||||
};
|
||||
|
@ -12,17 +12,17 @@ DataDefinitionType ForwardDeclaration::GetType() const
|
||||
return DataDefinitionType::FORWARD_DECLARATION;
|
||||
}
|
||||
|
||||
unsigned ForwardDeclaration::GetAlignment()
|
||||
unsigned ForwardDeclaration::GetAlignment() const
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
bool ForwardDeclaration::GetForceAlignment()
|
||||
bool ForwardDeclaration::GetForceAlignment() const
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
unsigned ForwardDeclaration::GetSize()
|
||||
unsigned ForwardDeclaration::GetSize() const
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
@ -11,7 +11,7 @@ public:
|
||||
ForwardDeclaration(std::string _namespace, std::string name, DataDefinitionType type);
|
||||
|
||||
_NODISCARD DataDefinitionType GetType() const override;
|
||||
_NODISCARD unsigned GetAlignment() override;
|
||||
_NODISCARD bool GetForceAlignment() override;
|
||||
_NODISCARD unsigned GetSize() override;
|
||||
_NODISCARD unsigned GetAlignment() const override;
|
||||
_NODISCARD bool GetForceAlignment() const override;
|
||||
_NODISCARD unsigned GetSize() const override;
|
||||
};
|
||||
|
@ -2,41 +2,41 @@
|
||||
|
||||
#include "Utils/AlignmentUtils.h"
|
||||
|
||||
void StructDefinition::CalculateSize()
|
||||
{
|
||||
m_size = 0;
|
||||
auto currentBitOffset = 0u;
|
||||
|
||||
for(const auto& member : m_members)
|
||||
{
|
||||
if(member->m_type_declaration->m_has_custom_bit_size)
|
||||
{
|
||||
currentBitOffset += member->m_type_declaration->m_custom_bit_size;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (currentBitOffset > 0)
|
||||
{
|
||||
currentBitOffset = AlignmentUtils::Align(currentBitOffset, 8u);
|
||||
m_size += currentBitOffset / 8;
|
||||
currentBitOffset = 0;
|
||||
}
|
||||
|
||||
m_size = AlignmentUtils::Align(m_size, member->GetForceAlignment() ? member->GetAlignment() : std::min(member->GetAlignment(), m_pack));
|
||||
m_size += member->m_type_declaration->GetSize();
|
||||
}
|
||||
}
|
||||
|
||||
if (currentBitOffset > 0)
|
||||
{
|
||||
currentBitOffset = AlignmentUtils::Align(currentBitOffset, 8u);
|
||||
m_size += currentBitOffset / 8;
|
||||
}
|
||||
|
||||
m_size = AlignmentUtils::Align(m_size, GetAlignment());
|
||||
|
||||
m_flags |= FLAG_SIZE_CALCULATED;
|
||||
}
|
||||
//void StructDefinition::CalculateSize()
|
||||
//{
|
||||
// m_size = 0;
|
||||
// auto currentBitOffset = 0u;
|
||||
//
|
||||
// for(const auto& member : m_members)
|
||||
// {
|
||||
// if(member->m_type_declaration->m_has_custom_bit_size)
|
||||
// {
|
||||
// currentBitOffset += member->m_type_declaration->m_custom_bit_size;
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// if (currentBitOffset > 0)
|
||||
// {
|
||||
// currentBitOffset = AlignmentUtils::Align(currentBitOffset, 8u);
|
||||
// m_size += currentBitOffset / 8;
|
||||
// currentBitOffset = 0;
|
||||
// }
|
||||
//
|
||||
// m_size = AlignmentUtils::Align(m_size, member->GetForceAlignment() ? member->GetAlignment() : std::min(member->GetAlignment(), m_pack));
|
||||
// m_size += member->m_type_declaration->GetSize();
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// if (currentBitOffset > 0)
|
||||
// {
|
||||
// currentBitOffset = AlignmentUtils::Align(currentBitOffset, 8u);
|
||||
// m_size += currentBitOffset / 8;
|
||||
// }
|
||||
//
|
||||
// m_size = AlignmentUtils::Align(m_size, GetAlignment());
|
||||
//
|
||||
// m_flags |= FLAG_SIZE_CALCULATED;
|
||||
//}
|
||||
|
||||
StructDefinition::StructDefinition(std::string _namespace, std::string name, const int pack)
|
||||
: DefinitionWithMembers(std::move(_namespace), std::move(name), pack)
|
||||
|
@ -4,8 +4,8 @@
|
||||
|
||||
class StructDefinition final : public DefinitionWithMembers
|
||||
{
|
||||
protected:
|
||||
void CalculateSize() override;
|
||||
//protected:
|
||||
// void CalculateSize() override;
|
||||
|
||||
public:
|
||||
StructDefinition(std::string _namespace, std::string name, int pack);
|
||||
|
@ -13,7 +13,7 @@ DataDefinitionType TypedefDefinition::GetType() const
|
||||
return DataDefinitionType::TYPEDEF;
|
||||
}
|
||||
|
||||
unsigned TypedefDefinition::GetAlignment()
|
||||
unsigned TypedefDefinition::GetAlignment() const
|
||||
{
|
||||
if (m_has_alignment_override)
|
||||
{
|
||||
@ -22,12 +22,12 @@ unsigned TypedefDefinition::GetAlignment()
|
||||
return m_type_declaration->GetAlignment();
|
||||
}
|
||||
|
||||
bool TypedefDefinition::GetForceAlignment()
|
||||
bool TypedefDefinition::GetForceAlignment() const
|
||||
{
|
||||
return m_has_alignment_override || m_type_declaration->GetForceAlignment();
|
||||
}
|
||||
|
||||
unsigned TypedefDefinition::GetSize()
|
||||
unsigned TypedefDefinition::GetSize() const
|
||||
{
|
||||
return m_type_declaration->GetSize();
|
||||
}
|
||||
|
@ -13,7 +13,7 @@ public:
|
||||
TypedefDefinition(std::string _namespace, std::string name, std::unique_ptr<TypeDeclaration> typeDeclaration);
|
||||
|
||||
_NODISCARD DataDefinitionType GetType() const override;
|
||||
_NODISCARD unsigned GetAlignment() override;
|
||||
_NODISCARD bool GetForceAlignment() override;
|
||||
_NODISCARD unsigned GetSize() override;
|
||||
_NODISCARD unsigned GetAlignment() const override;
|
||||
_NODISCARD bool GetForceAlignment() const override;
|
||||
_NODISCARD unsigned GetSize() const override;
|
||||
};
|
||||
|
@ -2,21 +2,21 @@
|
||||
|
||||
#include "Utils/AlignmentUtils.h"
|
||||
|
||||
void UnionDefinition::CalculateSize()
|
||||
{
|
||||
m_size = 0;
|
||||
|
||||
for(const auto& member : m_members)
|
||||
{
|
||||
const auto memberSize = member->m_type_declaration->GetSize();
|
||||
if (memberSize > m_size)
|
||||
m_size = memberSize;
|
||||
}
|
||||
|
||||
m_size = AlignmentUtils::Align(m_size, GetAlignment());
|
||||
|
||||
m_flags |= FLAG_SIZE_CALCULATED;
|
||||
}
|
||||
//void UnionDefinition::CalculateSize()
|
||||
//{
|
||||
// m_size = 0;
|
||||
//
|
||||
// for(const auto& member : m_members)
|
||||
// {
|
||||
// const auto memberSize = member->m_type_declaration->GetSize();
|
||||
// if (memberSize > m_size)
|
||||
// m_size = memberSize;
|
||||
// }
|
||||
//
|
||||
// m_size = AlignmentUtils::Align(m_size, GetAlignment());
|
||||
//
|
||||
// m_flags |= FLAG_SIZE_CALCULATED;
|
||||
//}
|
||||
|
||||
UnionDefinition::UnionDefinition(std::string _namespace, std::string name, const int pack)
|
||||
: DefinitionWithMembers(std::move(_namespace), std::move(name), pack)
|
||||
|
@ -4,8 +4,8 @@
|
||||
|
||||
class UnionDefinition final : public DefinitionWithMembers
|
||||
{
|
||||
protected:
|
||||
void CalculateSize() override;
|
||||
//protected:
|
||||
// void CalculateSize() override;
|
||||
|
||||
public:
|
||||
UnionDefinition(std::string _namespace, std::string name, int pack);
|
||||
|
Reference in New Issue
Block a user