fixed bad alloc error when loading ASCII vector of references
This commit is contained in:
parent
8e90829546
commit
128b88838c
@ -317,11 +317,10 @@ std::istream& ObjectLoader::loadAscii(std::istream& is)
|
|||||||
}
|
}
|
||||||
else if(p->getPropertyType() == AbstractProperty::ARRAY && ((AbstractArrayProperty*)p)->getDataType() == AbstractProperty::REFERENCE)
|
else if(p->getPropertyType() == AbstractProperty::ARRAY && ((AbstractArrayProperty*)p)->getDataType() == AbstractProperty::REFERENCE)
|
||||||
{
|
{
|
||||||
std::vector<Serializable*> &vecRef = ((ArrayProperty<Serializable*>*)p)->getValueRef();
|
int nbRef = 0;
|
||||||
ss.ignore(1); // [
|
ss.ignore(1); // [
|
||||||
while(ss.peek() != ']')
|
while(ss.peek() != ']')
|
||||||
{
|
{
|
||||||
vecRef.push_back(nullptr);
|
|
||||||
if(ss.peek() == '{')
|
if(ss.peek() == '{')
|
||||||
{
|
{
|
||||||
ss.ignore(1); // {
|
ss.ignore(1); // {
|
||||||
@ -332,7 +331,7 @@ std::istream& ObjectLoader::loadAscii(std::istream& is)
|
|||||||
id.loadAscii(ss);
|
id.loadAscii(ss);
|
||||||
ss.ignore(1); // }
|
ss.ignore(1); // }
|
||||||
PendingReference ref;
|
PendingReference ref;
|
||||||
ref.ptr = &(vecRef.back());
|
++nbRef;
|
||||||
ref.type = type.getValueRef();
|
ref.type = type.getValueRef();
|
||||||
ref.id = id.getValueRef();
|
ref.id = id.getValueRef();
|
||||||
m_references.push_back(ref);
|
m_references.push_back(ref);
|
||||||
@ -341,6 +340,12 @@ std::istream& ObjectLoader::loadAscii(std::istream& is)
|
|||||||
ss.ignore(6); // "null"
|
ss.ignore(6); // "null"
|
||||||
if(ss.peek() == ',')
|
if(ss.peek() == ',')
|
||||||
ss.ignore(1); // ,
|
ss.ignore(1); // ,
|
||||||
|
|
||||||
|
std::vector<Serializable*> &vecPtrs = ((ArrayProperty<Serializable*>*)p)->getValueRef();
|
||||||
|
vecPtrs = std::vector<Serializable*>(nbRef, nullptr);
|
||||||
|
int begin = m_references.size() - nbRef;
|
||||||
|
for(int i=0; i<nbRef; ++i)
|
||||||
|
m_references[begin + i].ptr = &(vecPtrs[i]);
|
||||||
}
|
}
|
||||||
ss.ignore(1); // ]
|
ss.ignore(1); // ]
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user