mirror of https://github.com/libAthena/athena.git
YAMLDocReader sequence fix
This commit is contained in:
parent
821e9c505e
commit
ae14d51607
|
@ -549,6 +549,8 @@ public:
|
||||||
{
|
{
|
||||||
int& seqIdx = m_seqTrackerStack.back();
|
int& seqIdx = m_seqTrackerStack.back();
|
||||||
m_subStack.push_back(curSub->m_seqChildren[seqIdx++].get());
|
m_subStack.push_back(curSub->m_seqChildren[seqIdx++].get());
|
||||||
|
if (m_subStack.back()->m_type == YAML_SEQUENCE_NODE)
|
||||||
|
m_seqTrackerStack.push_back(0);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
for (const auto& item : curSub->m_mapChildren)
|
for (const auto& item : curSub->m_mapChildren)
|
||||||
|
@ -556,6 +558,8 @@ public:
|
||||||
if (!item.first.compare(name))
|
if (!item.first.compare(name))
|
||||||
{
|
{
|
||||||
m_subStack.push_back(item.second.get());
|
m_subStack.push_back(item.second.get());
|
||||||
|
if (m_subStack.back()->m_type == YAML_SEQUENCE_NODE)
|
||||||
|
m_seqTrackerStack.push_back(0);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -565,7 +569,11 @@ public:
|
||||||
void leaveSubRecord()
|
void leaveSubRecord()
|
||||||
{
|
{
|
||||||
if (m_subStack.size() > 1)
|
if (m_subStack.size() > 1)
|
||||||
|
{
|
||||||
|
if (m_subStack.back()->m_type == YAML_SEQUENCE_NODE)
|
||||||
|
m_seqTrackerStack.pop_back();
|
||||||
m_subStack.pop_back();
|
m_subStack.pop_back();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
template <class T>
|
template <class T>
|
||||||
|
@ -579,23 +587,33 @@ public:
|
||||||
bool enterSubVector(const char* name, size_t& countOut)
|
bool enterSubVector(const char* name, size_t& countOut)
|
||||||
{
|
{
|
||||||
YAMLNode* curSub = m_subStack.back();
|
YAMLNode* curSub = m_subStack.back();
|
||||||
for (const auto& item : curSub->m_mapChildren)
|
if (!name && curSub->m_type == YAML_SEQUENCE_NODE)
|
||||||
{
|
{
|
||||||
if (!item.first.compare(name))
|
m_subStack.push_back(curSub);
|
||||||
|
m_seqTrackerStack.push_back(0);
|
||||||
|
countOut = curSub->m_seqChildren.size();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
for (const auto& item : curSub->m_mapChildren)
|
||||||
{
|
{
|
||||||
YAMLNode* nextSub = item.second.get();
|
if (!item.first.compare(name))
|
||||||
if (nextSub->m_type == YAML_SEQUENCE_NODE)
|
|
||||||
{
|
{
|
||||||
countOut = nextSub->m_seqChildren.size();
|
YAMLNode* nextSub = item.second.get();
|
||||||
|
if (nextSub->m_type == YAML_SEQUENCE_NODE)
|
||||||
|
{
|
||||||
|
countOut = nextSub->m_seqChildren.size();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
atError("'%s' is not a vector field", name);
|
||||||
|
countOut = 0;
|
||||||
|
}
|
||||||
|
m_subStack.push_back(nextSub);
|
||||||
|
m_seqTrackerStack.push_back(0);
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
atError("'%s' is not a vector field", name);
|
|
||||||
countOut = 0;
|
|
||||||
}
|
|
||||||
m_subStack.push_back(nextSub);
|
|
||||||
m_seqTrackerStack.push_back(0);
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
countOut = 0;
|
countOut = 0;
|
||||||
|
|
Loading…
Reference in New Issue