diff --git a/apps/esmtool/esmtool.cpp b/apps/esmtool/esmtool.cpp index 579f5f67d..60483f981 100644 --- a/apps/esmtool/esmtool.cpp +++ b/apps/esmtool/esmtool.cpp @@ -2,6 +2,7 @@ #include #include #include +#include #include #include #include @@ -322,7 +323,7 @@ int load(Arguments& info) std::string filename = info.filename; std::cout << "Loading file: " << filename << std::endl; - std::list skipped; + std::unordered_set skipped; try { @@ -364,17 +365,17 @@ int load(Arguments& info) // Loop through all records while(esm.hasMoreRecs()) { - ESM::NAME n = esm.getRecName(); + const ESM::NAME n = esm.getRecName(); uint32_t flags; esm.getRecHeader(flags); EsmTool::RecordBase *record = EsmTool::RecordBase::create(n); if (record == nullptr) { - if (std::find(skipped.begin(), skipped.end(), n.intval) == skipped.end()) + if (skipped.count(n.intval) == 0) { std::cout << "Skipping " << n.toString() << " records." << std::endl; - skipped.push_back(n.intval); + skipped.emplace(n.intval); } esm.skipRecord(); diff --git a/apps/esmtool/record.cpp b/apps/esmtool/record.cpp index 3679184a6..55170e232 100644 --- a/apps/esmtool/record.cpp +++ b/apps/esmtool/record.cpp @@ -172,7 +172,7 @@ void printTransport(const std::vector& transport) namespace EsmTool { RecordBase * -RecordBase::create(ESM::NAME type) +RecordBase::create(const ESM::NAME type) { RecordBase *record = nullptr; diff --git a/components/esm/esmcommon.hpp b/components/esm/esmcommon.hpp index 232a24fcf..bb4069d26 100644 --- a/components/esm/esmcommon.hpp +++ b/components/esm/esmcommon.hpp @@ -110,15 +110,8 @@ struct FIXED_STRING<4> : public FIXED_STRING_BASE void assign(const std::string& value) { intval = 0; - size_t length = value.size(); - if (length == 0) return; - data[0] = value[0]; - if (length == 1) return; - data[1] = value[1]; - if (length == 2) return; - data[2] = value[2]; - if (length == 3) return; - data[3] = value[3]; + std::memcpy(data, value.data(), (value.size() < 4)? value.size(): 4); + } char const* ro_data() const { return data; } diff --git a/components/esm/esmreader.cpp b/components/esm/esmreader.cpp index 7aa8add48..30c38d739 100644 --- a/components/esm/esmreader.cpp +++ b/components/esm/esmreader.cpp @@ -354,7 +354,7 @@ void ESMReader::setEncoder(ToUTF8::Utf8Encoder* encoder) mEncoder = encoder; } -size_t ESMReader::getFileOffset() +size_t ESMReader::getFileOffset() const { return mEsm->tellg(); } diff --git a/components/esm/esmreader.hpp b/components/esm/esmreader.hpp index ba24c79f8..503bb637d 100644 --- a/components/esm/esmreader.hpp +++ b/components/esm/esmreader.hpp @@ -73,7 +73,7 @@ public: void openRaw(const std::string &filename); /// Get the current position in the file. Make sure that the file has been opened! - size_t getFileOffset(); + size_t getFileOffset() const; // This is a quick hack for multiple esm/esp files. Each plugin introduces its own // terrain palette, but ESMReader does not pass a reference to the correct plugin