mirror of
https://github.com/Laupetin/OpenAssetTools.git
synced 2025-06-06 08:27:43 +00:00
Sort StructuredDataDef members and entries alphabetically after parsing
This commit is contained in:
parent
1b6f2ab9fa
commit
ab5a998903
@ -47,7 +47,7 @@ uint32_t CommonStructuredDataEnum::CalculateChecksum(const uint32_t initialValue
|
|||||||
const auto littleEndianElementCount = endianness::ToLittleEndian(ElementCount());
|
const auto littleEndianElementCount = endianness::ToLittleEndian(ElementCount());
|
||||||
checksum = crc32(checksum, reinterpret_cast<const Bytef*>(&littleEndianElementCount), sizeof(littleEndianElementCount));
|
checksum = crc32(checksum, reinterpret_cast<const Bytef*>(&littleEndianElementCount), sizeof(littleEndianElementCount));
|
||||||
|
|
||||||
for(const auto& entry : m_entries)
|
for (const auto& entry : m_entries)
|
||||||
{
|
{
|
||||||
checksum = crc32(checksum, reinterpret_cast<const Bytef*>(entry.m_name.c_str()), entry.m_name.size() + 1);
|
checksum = crc32(checksum, reinterpret_cast<const Bytef*>(entry.m_name.c_str()), entry.m_name.size() + 1);
|
||||||
|
|
||||||
@ -58,10 +58,18 @@ uint32_t CommonStructuredDataEnum::CalculateChecksum(const uint32_t initialValue
|
|||||||
return checksum;
|
return checksum;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CommonStructuredDataEnum::SortEntries()
|
void CommonStructuredDataEnum::SortEntriesByOffset()
|
||||||
{
|
{
|
||||||
std::sort(m_entries.begin(), m_entries.end(), [](const CommonStructuredDataEnumEntry& e1, const CommonStructuredDataEnumEntry& e2)
|
std::sort(m_entries.begin(), m_entries.end(), [](const CommonStructuredDataEnumEntry& e1, const CommonStructuredDataEnumEntry& e2)
|
||||||
{
|
{
|
||||||
return e1.m_value < e2.m_value;
|
return e1.m_value < e2.m_value;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CommonStructuredDataEnum::SortEntriesByName()
|
||||||
|
{
|
||||||
|
std::sort(m_entries.begin(), m_entries.end(), [](const CommonStructuredDataEnumEntry& e1, const CommonStructuredDataEnumEntry& e2)
|
||||||
|
{
|
||||||
|
return e1.m_name < e2.m_name;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
@ -27,5 +27,6 @@ struct CommonStructuredDataEnum
|
|||||||
_NODISCARD size_t ElementCount() const;
|
_NODISCARD size_t ElementCount() const;
|
||||||
_NODISCARD uint32_t CalculateChecksum(uint32_t initialValue) const;
|
_NODISCARD uint32_t CalculateChecksum(uint32_t initialValue) const;
|
||||||
|
|
||||||
void SortEntries();
|
void SortEntriesByOffset();
|
||||||
|
void SortEntriesByName();
|
||||||
};
|
};
|
||||||
|
@ -53,7 +53,7 @@ StructuredDataType AssetLoaderStructuredDataDefSet::ConvertType(CommonStructured
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void AssetLoaderStructuredDataDefSet::ConvertEnum(StructuredDataEnum* outputEnum, const CommonStructuredDataEnum* inputEnum, MemoryManager* memory)
|
void AssetLoaderStructuredDataDefSet::ConvertEnum(StructuredDataEnum* outputEnum, CommonStructuredDataEnum* inputEnum, MemoryManager* memory)
|
||||||
{
|
{
|
||||||
outputEnum->entryCount = static_cast<int>(inputEnum->m_entries.size());
|
outputEnum->entryCount = static_cast<int>(inputEnum->m_entries.size());
|
||||||
if (inputEnum->m_reserved_entry_count <= 0)
|
if (inputEnum->m_reserved_entry_count <= 0)
|
||||||
@ -61,6 +61,7 @@ void AssetLoaderStructuredDataDefSet::ConvertEnum(StructuredDataEnum* outputEnum
|
|||||||
else
|
else
|
||||||
outputEnum->reservedEntryCount = inputEnum->m_reserved_entry_count;
|
outputEnum->reservedEntryCount = inputEnum->m_reserved_entry_count;
|
||||||
|
|
||||||
|
inputEnum->SortEntriesByName();
|
||||||
if (!inputEnum->m_entries.empty())
|
if (!inputEnum->m_entries.empty())
|
||||||
{
|
{
|
||||||
outputEnum->entries = static_cast<StructuredDataEnumEntry*>(memory->Alloc(sizeof(StructuredDataEnumEntry) * inputEnum->m_entries.size()));
|
outputEnum->entries = static_cast<StructuredDataEnumEntry*>(memory->Alloc(sizeof(StructuredDataEnumEntry) * inputEnum->m_entries.size()));
|
||||||
@ -77,12 +78,13 @@ void AssetLoaderStructuredDataDefSet::ConvertEnum(StructuredDataEnum* outputEnum
|
|||||||
outputEnum->entries = nullptr;
|
outputEnum->entries = nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
void AssetLoaderStructuredDataDefSet::ConvertStruct(StructuredDataStruct* outputStruct, const CommonStructuredDataStruct* inputStruct, MemoryManager* memory)
|
void AssetLoaderStructuredDataDefSet::ConvertStruct(StructuredDataStruct* outputStruct, CommonStructuredDataStruct* inputStruct, MemoryManager* memory)
|
||||||
{
|
{
|
||||||
outputStruct->size = static_cast<int>(inputStruct->m_size_in_byte);
|
outputStruct->size = static_cast<int>(inputStruct->m_size_in_byte);
|
||||||
outputStruct->bitOffset = inputStruct->m_bit_offset;
|
outputStruct->bitOffset = inputStruct->m_bit_offset;
|
||||||
|
|
||||||
outputStruct->propertyCount = static_cast<int>(inputStruct->m_properties.size());
|
outputStruct->propertyCount = static_cast<int>(inputStruct->m_properties.size());
|
||||||
|
inputStruct->SortPropertiesByName();
|
||||||
if (!inputStruct->m_properties.empty())
|
if (!inputStruct->m_properties.empty())
|
||||||
{
|
{
|
||||||
outputStruct->properties = static_cast<StructuredDataStructProperty*>(memory->Alloc(sizeof(StructuredDataStructProperty) * inputStruct->m_properties.size()));
|
outputStruct->properties = static_cast<StructuredDataStructProperty*>(memory->Alloc(sizeof(StructuredDataStructProperty) * inputStruct->m_properties.size()));
|
||||||
|
@ -13,8 +13,8 @@ namespace IW4
|
|||||||
_NODISCARD void* CreateEmptyAsset(const std::string& assetName, MemoryManager* memory) override;
|
_NODISCARD void* CreateEmptyAsset(const std::string& assetName, MemoryManager* memory) override;
|
||||||
_NODISCARD bool CanLoadFromRaw() const override;
|
_NODISCARD bool CanLoadFromRaw() const override;
|
||||||
static StructuredDataType ConvertType(CommonStructuredDataType inputType);
|
static StructuredDataType ConvertType(CommonStructuredDataType inputType);
|
||||||
static void ConvertEnum(StructuredDataEnum* outputEnum, const CommonStructuredDataEnum* inputEnum, MemoryManager* memory);
|
static void ConvertEnum(StructuredDataEnum* outputEnum, CommonStructuredDataEnum* inputEnum, MemoryManager* memory);
|
||||||
static void ConvertStruct(StructuredDataStruct* outputStruct, const CommonStructuredDataStruct* inputStruct, MemoryManager* memory);
|
static void ConvertStruct(StructuredDataStruct* outputStruct, CommonStructuredDataStruct* inputStruct, MemoryManager* memory);
|
||||||
static void ConvertIndexedArray(StructuredDataIndexedArray* outputIndexedArray, const CommonStructuredDataIndexedArray* inputIndexedArray, MemoryManager* memory);
|
static void ConvertIndexedArray(StructuredDataIndexedArray* outputIndexedArray, const CommonStructuredDataIndexedArray* inputIndexedArray, MemoryManager* memory);
|
||||||
static void ConvertEnumedArray(StructuredDataEnumedArray* outputEnumedArray, const CommonStructuredDataEnumedArray* inputEnumedArray, MemoryManager* memory);
|
static void ConvertEnumedArray(StructuredDataEnumedArray* outputEnumedArray, const CommonStructuredDataEnumedArray* inputEnumedArray, MemoryManager* memory);
|
||||||
static void ConvertDef(StructuredDataDef* outputDef, const CommonStructuredDataDef* inputDef, MemoryManager* memory);
|
static void ConvertDef(StructuredDataDef* outputDef, const CommonStructuredDataDef* inputDef, MemoryManager* memory);
|
||||||
|
@ -54,12 +54,6 @@ namespace sdd::enum_scope_sequences
|
|||||||
void ProcessMatch(StructuredDataDefParserState* state, SequenceResult<SimpleParserValue>& result) const override
|
void ProcessMatch(StructuredDataDefParserState* state, SequenceResult<SimpleParserValue>& result) const override
|
||||||
{
|
{
|
||||||
assert(state->m_current_enum != nullptr);
|
assert(state->m_current_enum != nullptr);
|
||||||
|
|
||||||
std::sort(state->m_current_enum->m_entries.begin(), state->m_current_enum->m_entries.end(), [](const CommonStructuredDataEnumEntry& e1, const CommonStructuredDataEnumEntry& e2)
|
|
||||||
{
|
|
||||||
return e1.m_name < e2.m_name;
|
|
||||||
});
|
|
||||||
|
|
||||||
state->m_current_enum = nullptr;
|
state->m_current_enum = nullptr;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -234,9 +234,6 @@ namespace sdd::struct_scope_sequences
|
|||||||
|
|
||||||
state->m_current_struct->m_size_in_byte = utils::Align(state->m_current_struct_padding_offset, 8u) / 8;
|
state->m_current_struct->m_size_in_byte = utils::Align(state->m_current_struct_padding_offset, 8u) / 8;
|
||||||
state->m_current_struct_padding_offset = 0u;
|
state->m_current_struct_padding_offset = 0u;
|
||||||
|
|
||||||
// Sort the entries of the struct alphabetically
|
|
||||||
state->m_current_struct->SortPropertiesByName();
|
|
||||||
state->m_current_struct = nullptr;
|
state->m_current_struct = nullptr;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -82,7 +82,7 @@ void AssetDumperStructuredDataDefSet::ConvertEnum(CommonStructuredDataEnum* out,
|
|||||||
outEntry.m_value = inEntry.index;
|
outEntry.m_value = inEntry.index;
|
||||||
}
|
}
|
||||||
|
|
||||||
out->SortEntries();
|
out->SortEntriesByOffset();
|
||||||
}
|
}
|
||||||
|
|
||||||
void AssetDumperStructuredDataDefSet::ConvertStruct(const CommonStructuredDataDef* def, const StructuredDataDef* gameDef, CommonStructuredDataStruct* out, const StructuredDataStruct* in, const size_t structIndex)
|
void AssetDumperStructuredDataDefSet::ConvertStruct(const CommonStructuredDataDef* def, const StructuredDataDef* gameDef, CommonStructuredDataStruct* out, const StructuredDataStruct* in, const size_t structIndex)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user