mirror of
https://github.com/Laupetin/OpenAssetTools.git
synced 2025-06-11 07:18:11 -05:00
Preserve zone definition meta data order
This commit is contained in:
@ -16,5 +16,5 @@ SequenceZoneDefinitionMetaData::SequenceZoneDefinitionMetaData()
|
||||
|
||||
void SequenceZoneDefinitionMetaData::ProcessMatch(ZoneDefinition* state, SequenceResult<ZoneDefinitionParserValue>& result) const
|
||||
{
|
||||
state->m_metadata.insert(std::make_pair(result.NextCapture(CAPTURE_KEY).FieldValue(), result.NextCapture(CAPTURE_VALUE).FieldValue()));
|
||||
state->AddMetaData(result.NextCapture(CAPTURE_KEY).FieldValue(), result.NextCapture(CAPTURE_VALUE).FieldValue());
|
||||
}
|
||||
|
@ -5,26 +5,43 @@ ZoneDefinitionEntry::ZoneDefinitionEntry()
|
||||
{
|
||||
}
|
||||
|
||||
ZoneDefinitionEntry::ZoneDefinitionEntry(std::string type, std::string name, bool isReference)
|
||||
ZoneDefinitionEntry::ZoneDefinitionEntry(std::string type, std::string name, const bool isReference)
|
||||
: m_asset_type(std::move(type)),
|
||||
m_asset_name(std::move(name)),
|
||||
m_is_reference(isReference)
|
||||
{
|
||||
}
|
||||
|
||||
ZoneMetaDataEntry::ZoneMetaDataEntry()
|
||||
= default;
|
||||
|
||||
ZoneMetaDataEntry::ZoneMetaDataEntry(std::string key, std::string value)
|
||||
: m_key(std::move(key)),
|
||||
m_value(std::move(value))
|
||||
{
|
||||
}
|
||||
|
||||
void ZoneDefinition::AddMetaData(std::string key, std::string value)
|
||||
{
|
||||
auto metaData = std::make_unique<ZoneMetaDataEntry>(std::move(key), std::move(value));
|
||||
auto* metaDataPtr = metaData.get();
|
||||
m_metadata.emplace_back(std::move(metaData));
|
||||
m_metadata_lookup.emplace(std::make_pair(metaDataPtr->m_key, metaDataPtr));
|
||||
}
|
||||
|
||||
void ZoneDefinition::Include(ZoneDefinition& definitionToInclude)
|
||||
{
|
||||
for(const auto& [key, value] : definitionToInclude.m_metadata)
|
||||
for (const auto& metaData : definitionToInclude.m_metadata)
|
||||
{
|
||||
m_metadata.emplace(std::make_pair(key, value));
|
||||
AddMetaData(metaData->m_key, metaData->m_value);
|
||||
}
|
||||
|
||||
for(const auto& ignore : definitionToInclude.m_ignores)
|
||||
for (const auto& ignore : definitionToInclude.m_ignores)
|
||||
{
|
||||
m_ignores.emplace_back(ignore);
|
||||
}
|
||||
|
||||
for(const auto& asset : definitionToInclude.m_assets)
|
||||
for (const auto& asset : definitionToInclude.m_assets)
|
||||
{
|
||||
m_assets.emplace_back(asset);
|
||||
}
|
||||
|
@ -1,5 +1,6 @@
|
||||
#pragma once
|
||||
|
||||
#include <memory>
|
||||
#include <unordered_map>
|
||||
#include <vector>
|
||||
|
||||
@ -14,13 +15,25 @@ public:
|
||||
ZoneDefinitionEntry(std::string type, std::string name, bool isReference);
|
||||
};
|
||||
|
||||
class ZoneMetaDataEntry
|
||||
{
|
||||
public:
|
||||
std::string m_key;
|
||||
std::string m_value;
|
||||
|
||||
ZoneMetaDataEntry();
|
||||
ZoneMetaDataEntry(std::string key, std::string value);
|
||||
};
|
||||
|
||||
class ZoneDefinition
|
||||
{
|
||||
public:
|
||||
std::unordered_multimap<std::string, std::string> m_metadata;
|
||||
std::vector<std::unique_ptr<ZoneMetaDataEntry>> m_metadata;
|
||||
std::unordered_multimap<std::string, ZoneMetaDataEntry*> m_metadata_lookup;
|
||||
std::vector<std::string> m_includes;
|
||||
std::vector<std::string> m_ignores;
|
||||
std::vector<ZoneDefinitionEntry> m_assets;
|
||||
|
||||
void AddMetaData(std::string key, std::string value);
|
||||
void Include(ZoneDefinition& definitionToInclude);
|
||||
};
|
Reference in New Issue
Block a user