fixed bad alloc error when loading ASCII vector of references

This commit is contained in:
Anselme 2017-03-08 18:03:20 +01:00
parent 8e90829546
commit 128b88838c

View File

@ -317,11 +317,10 @@ std::istream& ObjectLoader::loadAscii(std::istream& is)
}
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); // [
while(ss.peek() != ']')
{
vecRef.push_back(nullptr);
if(ss.peek() == '{')
{
ss.ignore(1); // {
@ -332,7 +331,7 @@ std::istream& ObjectLoader::loadAscii(std::istream& is)
id.loadAscii(ss);
ss.ignore(1); // }
PendingReference ref;
ref.ptr = &(vecRef.back());
++nbRef;
ref.type = type.getValueRef();
ref.id = id.getValueRef();
m_references.push_back(ref);
@ -341,6 +340,12 @@ std::istream& ObjectLoader::loadAscii(std::istream& is)
ss.ignore(6); // "null"
if(ss.peek() == ',')
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); // ]
}