]> git.saurik.com Git - apt.git/commitdiff
AvailableDescriptionLanguages: Use one string for all iterations
authorJulian Andres Klode <jak@debian.org>
Fri, 8 Jan 2016 11:37:58 +0000 (12:37 +0100)
committerJulian Andres Klode <jak@debian.org>
Fri, 8 Jan 2016 11:37:58 +0000 (12:37 +0100)
Do not create strings within the loop, that creates one string
per language and does more work than needed. Instead, reserve
enough space at the beginning and assign the prefix, and then
resize and append inside the loop.

Also call exists with the string itself instead of the c_str(),
this means that the lookup uses the size information in the
string now and does not have to call strlen() on it.

apt-pkg/deb/deblistparser.cc

index bcfbcccc2a9fb336ca63fec90305f6543a4530a8..baa1e46ecb0c6c3fbcd9e945e38c24ec3072f3bd 100644 (file)
@@ -258,12 +258,19 @@ std::vector<std::string> debListParser::AvailableDescriptionLanguages()
 {
    std::vector<std::string> const understood = APT::Configuration::getLanguages();
    std::vector<std::string> avail;
+   static constexpr int prefixLen = 12;
+   static constexpr int avgLanguageLen = 5;
+   std::string tagname;
+
+   tagname.reserve(prefixLen + avgLanguageLen);
+   tagname.assign("Description-");
    if (Section.Exists("Description") == true)
       avail.push_back("");
    for (std::vector<std::string>::const_iterator lang = understood.begin(); lang != understood.end(); ++lang)
    {
-      std::string const tagname = "Description-" + *lang;
-      if (Section.Exists(tagname.c_str()) == true)
+      tagname.resize(prefixLen);
+      tagname.append(*lang);
+      if (Section.Exists(tagname) == true)
         avail.push_back(*lang);
    }
    return avail;