mods.cpp/h: little performance improvement in getModsInPath (+ codestyle) (#7108)
authorLoïc Blot <nerzhul@users.noreply.github.com>
Thu, 8 Mar 2018 19:03:43 +0000 (20:03 +0100)
committerGitHub <noreply@github.com>
Thu, 8 Mar 2018 19:03:43 +0000 (20:03 +0100)
* mods.cpp/h: little performance improvement in getModsInPath

src/mods.cpp
src/mods.h

index dae49233978c29fa01fef5378486a92af6b6f59e..a71644d01cd92363bcbbbcf859301c0e37095df3 100644 (file)
@@ -85,24 +85,31 @@ void parseModContents(ModSpec &spec)
        }
 }
 
-std::map<std::string, ModSpec> getModsInPath(std::string path, bool part_of_modpack)
+std::map<std::string, ModSpec> getModsInPath(const std::string &path,
+       bool part_of_modpack)
 {
        // NOTE: this function works in mutual recursion with parseModContents
 
        std::map<std::string, ModSpec> result;
        std::vector<fs::DirListNode> dirlist = fs::GetDirListing(path);
+       std::string modpath;
+
        for (const fs::DirListNode &dln : dirlist) {
-               if(!dln.dir)
+               if (!dln.dir)
                        continue;
+
                const std::string &modname = dln.name;
                // Ignore all directories beginning with a ".", especially
                // VCS directories like ".git" or ".svn"
                if (modname[0] == '.')
                        continue;
-               std::string modpath = path + DIR_DELIM + modname;
 
-               ModSpec spec(modname, modpath);
-               spec.part_of_modpack = part_of_modpack;
+               modpath.clear();
+               modpath.append(path)
+                       .append(DIR_DELIM)
+                       .append(modname);
+
+               ModSpec spec(modname, modpath, part_of_modpack);
                parseModContents(spec);
                result.insert(std::make_pair(modname, spec));
        }
index 50ada328ebed6c38e45ecb19b978b417c6985a49..c16df30e68bc3bb49aac5506aaaaf75c795e2b4c 100644 (file)
@@ -45,16 +45,22 @@ struct ModSpec
        bool is_modpack = false;
        // if modpack:
        std::map<std::string,ModSpec> modpack_content;
-       ModSpec(const std::string &name_="", const std::string &path_=""):
+       ModSpec(const std::string &name_ = "", const std::string &path_ = ""):
                name(name_),
                path(path_)
        {}
+       ModSpec(const std::string &name_, const std::string &path_, bool part_of_modpack_):
+               name(name_),
+               path(path_),
+               part_of_modpack(part_of_modpack_)
+       {}
 };
 
 // Retrieves depends, optdepends, is_modpack and modpack_content
 void parseModContents(ModSpec &mod);
 
-std::map<std::string,ModSpec> getModsInPath(std::string path, bool part_of_modpack = false);
+std::map<std::string,ModSpec> getModsInPath(const std::string &path,
+       bool part_of_modpack = false);
 
 // replaces modpack Modspecs with their content
 std::vector<ModSpec> flattenMods(std::map<std::string,ModSpec> mods);