void IdCollection<ESXRecordT>::load (ESM::ESMReader& reader, bool base) { std::string id = reader.getHNOString ("NAME"); if (reader.isNextSub ("DELE")) { int index = searchId (id); reader.skipRecord(); if (index==-1) { // deleting a record that does not exist // ignore it for now /// \todo report the problem to the user } else if (base) { removeRows (index, 1); } else { mRecords[index].mState = RecordBase::State_Deleted; } } else { ESXRecordT record; record.mId = id; record.load (reader); int index = searchId (record.mId); if (index==-1) { // new record Record<ESXRecordT> record2; record2.mState = base ? RecordBase::State_BaseOnly : RecordBase::State_ModifiedOnly; (base ? record2.mBase : record2.mModified) = record; appendRecord (record2); } else { // old record Record<ESXRecordT>& record2 = mRecords[index]; if (base) record2.mBase = record; else record2.setModified (record); } } }
void IdCollection<ESXRecordT, IdAccessorT>::load (ESM::ESMReader& reader, bool base) { std::string id = reader.getHNOString ("NAME"); if (reader.isNextSub ("DELE")) { int index = Collection<ESXRecordT, IdAccessorT>::searchId (id); reader.skipRecord(); if (index==-1) { // deleting a record that does not exist // ignore it for now /// \todo report the problem to the user } else if (base) { Collection<ESXRecordT, IdAccessorT>::removeRows (index, 1); } else { Record<ESXRecordT> record = Collection<ESXRecordT, IdAccessorT>::getRecord (index); record.mState = RecordBase::State_Deleted; this->setRecord (index, record); } } else { ESXRecordT record; int index = this->searchId (id); if (index==-1) IdAccessorT().getId (record) = id; else { record = this->getRecord (index).get(); } record.load (reader); load (record, base, index); } }