diff --git a/apps/opencs/model/world/collection.hpp b/apps/opencs/model/world/collection.hpp index 89430f1c58..9d9c69a5da 100644 --- a/apps/opencs/model/world/collection.hpp +++ b/apps/opencs/model/world/collection.hpp @@ -543,20 +543,25 @@ namespace CSMWorld void Collection::insertRecord (std::unique_ptr record, int index, UniversalId::Type type) { - if (index<0 || index>static_cast (mRecords.size())) + int size = static_cast(mRecords.size()); + if (index < 0 || index > size) throw std::runtime_error ("index out of range"); std::unique_ptr > record2(static_cast*>(record.release())); std::string lowerId = Misc::StringUtils::lowerCase(IdAccessorT().getId(record2->get())); - mRecords.insert (mRecords.begin()+index, std::move(record2)); + if (index == size) + mRecords.push_back (std::move(record2)); + else + mRecords.insert (mRecords.begin()+index, std::move(record2)); - if (index (mRecords.size())-1) + if (index < size-1) { - for (std::map::iterator iter (mIndex.begin()); iter!=mIndex.end(); - ++iter) - if (iter->second>=index) - ++(iter->second); + for (std::map::iterator iter (mIndex.begin()); iter!=mIndex.end(); ++iter) + { + if (iter->second >= index) + ++(iter->second); + } } mIndex.insert (std::make_pair (lowerId, index));