From 8dd562a894c2472e3705fe13c212f665b55744a9 Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Sat, 29 Aug 2015 12:28:24 +0200 Subject: use c++11 algorithms to avoid strange compiler warnings Nobody knows what makes the 'unable to optimize loop' warning to appear in the sourceslist minus-options parsing, especially if we use a foreach loop, but we can replace it with some nice c++11 algorithm+lambda usage, which also helps in making even clearer what happens here. And as this would be a lonely change, lets do it for a few more loops as well where I might or might not have seen the warning at some point in time, too. Git-Dch: Ignore --- apt-pkg/aptconfiguration.cc | 16 +++++------- apt-pkg/cacheset.cc | 16 +++--------- apt-pkg/deb/debmetaindex.cc | 63 +++++++++++++++++++++------------------------ apt-pkg/sourcelist.cc | 51 ++++++++++++++++-------------------- 4 files changed, 61 insertions(+), 85 deletions(-) diff --git a/apt-pkg/aptconfiguration.cc b/apt-pkg/aptconfiguration.cc index f5bc18394..ed68244c6 100644 --- a/apt-pkg/aptconfiguration.cc +++ b/apt-pkg/aptconfiguration.cc @@ -94,11 +94,9 @@ const Configuration::getCompressionTypes(bool const &Cached) { continue; // ignore types we have no app ready to use std::string const app = _config->Find(method); - std::vector::const_iterator c = compressors.begin(); - for (; c != compressors.end(); ++c) - if (c->Name == app) - break; - if (c == compressors.end()) + if (std::find_if(compressors.begin(), compressors.end(), [&app](APT::Configuration::Compressor const &c) { + return c.Name == app; + }) == compressors.end()) continue; types.push_back(*o); } @@ -115,11 +113,9 @@ const Configuration::getCompressionTypes(bool const &Cached) { if (std::find(types.begin(),types.end(),Types->Tag) != types.end()) continue; // ignore types we have no app ready to use - std::vector::const_iterator c = compressors.begin(); - for (; c != compressors.end(); ++c) - if (c->Name == Types->Value) - break; - if (c == compressors.end()) + if (std::find_if(compressors.begin(), compressors.end(), [&Types](APT::Configuration::Compressor const &c) { + return c.Name == Types->Value; + }) == compressors.end()) continue; types.push_back(Types->Tag); } diff --git a/apt-pkg/cacheset.cc b/apt-pkg/cacheset.cc index 6a625184e..6b31a4fff 100644 --- a/apt-pkg/cacheset.cc +++ b/apt-pkg/cacheset.cc @@ -153,12 +153,8 @@ bool CacheSetHelper::PackageFromRegEx(PackageContainerInterface * const pci, pkg continue; pkgCache::PkgIterator Pkg = Grp.FindPkg(arch); if (Pkg.end() == true) { - if (archfound == std::string::npos) { - std::vector archs = APT::Configuration::getArchitectures(); - for (std::vector::const_iterator a = archs.begin(); - a != archs.end() && Pkg.end() != true; ++a) - Pkg = Grp.FindPkg(*a); - } + if (archfound == std::string::npos) + Pkg = Grp.FindPreferredPkg(true); if (Pkg.end() == true) continue; } @@ -213,12 +209,8 @@ bool CacheSetHelper::PackageFromFnmatch(PackageContainerInterface * const pci, continue; pkgCache::PkgIterator Pkg = Grp.FindPkg(arch); if (Pkg.end() == true) { - if (archfound == std::string::npos) { - std::vector archs = APT::Configuration::getArchitectures(); - for (std::vector::const_iterator a = archs.begin(); - a != archs.end() && Pkg.end() != true; ++a) - Pkg = Grp.FindPkg(*a); - } + if (archfound == std::string::npos) + Pkg = Grp.FindPreferredPkg(true); if (Pkg.end() == true) continue; } diff --git a/apt-pkg/deb/debmetaindex.cc b/apt-pkg/deb/debmetaindex.cc index 00dc1eeec..a26b94d82 100644 --- a/apt-pkg/deb/debmetaindex.cc +++ b/apt-pkg/deb/debmetaindex.cc @@ -446,10 +446,8 @@ bool debReleaseIndex::GetIndexes(pkgAcquire *Owner, bool const &GetAll)/*{{{*/ #undef APT_TARGET // special case for --print-uris if (GetAll) - { - for (std::vector::const_iterator Target = targets.begin(); Target != targets.end(); ++Target) - new pkgAcqIndex(Owner, TransactionManager, *Target); - } + for (auto const &Target: targets) + new pkgAcqIndex(Owner, TransactionManager, Target); return true; } @@ -537,17 +535,16 @@ std::vector *debReleaseIndex::GetIndexFiles() /*{{{*/ return Indexes; Indexes = new std::vector(); - std::vector const Targets = GetIndexTargets(); bool const istrusted = IsTrusted(); - for (std::vector::const_iterator T = Targets.begin(); T != Targets.end(); ++T) + for (auto const &T: GetIndexTargets()) { - std::string const TargetName = T->Option(IndexTarget::CREATED_BY); + std::string const TargetName = T.Option(IndexTarget::CREATED_BY); if (TargetName == "Packages") - Indexes->push_back(new debPackagesIndex(*T, istrusted)); + Indexes->push_back(new debPackagesIndex(T, istrusted)); else if (TargetName == "Sources") - Indexes->push_back(new debSourcesIndex(*T, istrusted)); + Indexes->push_back(new debSourcesIndex(T, istrusted)); else if (TargetName == "Translations") - Indexes->push_back(new debTranslationsIndex(*T)); + Indexes->push_back(new debTranslationsIndex(T)); } return Indexes; } @@ -673,20 +670,17 @@ static std::vector parsePlusMinusOptions(std::string const &Name, / if ((val = Options.find(Name + "+")) != Options.end()) { - std::vector const plusArch = VectorizeString(val->second, ','); - for (std::vector::const_iterator plus = plusArch.begin(); plus != plusArch.end(); ++plus) - if (std::find(Values.begin(), Values.end(), *plus) == Values.end()) - Values.push_back(*plus); + std::vector const plus = VectorizeString(val->second, ','); + std::copy_if(plus.begin(), plus.end(), std::back_inserter(Values), [&Values](std::string const &v) { + return std::find(Values.begin(), Values.end(), v) == Values.end(); + }); } if ((val = Options.find(Name + "-")) != Options.end()) { - std::vector const minusArch = VectorizeString(val->second, ','); - for (std::vector::const_iterator minus = minusArch.begin(); minus != minusArch.end(); ++minus) - { - std::vector::iterator kill = std::find(Values.begin(), Values.end(), *minus); - if (kill != Values.end()) - Values.erase(kill); - } + std::vector const minus = VectorizeString(val->second, ','); + Values.erase(std::remove_if(Values.begin(), Values.end(), [&minus](std::string const &v) { + return std::find(minus.begin(), minus.end(), v) != minus.end(); + }), Values.end()); } return Values; } @@ -743,25 +737,26 @@ class APT_HIDDEN debSLTypeDebian : public pkgSourceList::Type /*{{{*/ std::vector const alltargets = _config->FindVector(std::string("Acquire::IndexTargets::") + Name, "", true); std::vector mytargets = parsePlusMinusOptions("target", Options, alltargets); - if (mytargets.empty() == false) - for (auto const &target : alltargets) - { - std::map::const_iterator const opt = Options.find(target); - if (opt == Options.end()) - continue; - auto const tarItr = std::find(mytargets.begin(), mytargets.end(), target); - bool const optValue = StringToBool(opt->second); - if (optValue == true && tarItr == mytargets.end()) - mytargets.push_back(target); - else if (optValue == false && tarItr != mytargets.end()) - mytargets.erase(std::remove(mytargets.begin(), mytargets.end(), target), mytargets.end()); - } + for (auto const &target : alltargets) + { + std::map::const_iterator const opt = Options.find(target); + if (opt == Options.end()) + continue; + auto const tarItr = std::find(mytargets.begin(), mytargets.end(), target); + bool const optValue = StringToBool(opt->second); + if (optValue == true && tarItr == mytargets.end()) + mytargets.push_back(target); + else if (optValue == false && tarItr != mytargets.end()) + mytargets.erase(std::remove(mytargets.begin(), mytargets.end(), target), mytargets.end()); + } + bool UsePDiffs = _config->FindB("Acquire::PDiffs", true); { std::map::const_iterator const opt = Options.find("pdiffs"); if (opt != Options.end()) UsePDiffs = StringToBool(opt->second); } + Deb->AddComponent( IsSrc, Section, diff --git a/apt-pkg/sourcelist.cc b/apt-pkg/sourcelist.cc index c0b416820..b083da936 100644 --- a/apt-pkg/sourcelist.cc +++ b/apt-pkg/sourcelist.cc @@ -322,7 +322,7 @@ void pkgSourceList::Reset() { for (const_iterator I = SrcList.begin(); I != SrcList.end(); ++I) delete *I; - SrcList.erase(SrcList.begin(),SrcList.end()); + SrcList.clear(); } /*}}}*/ // SourceList::Read - Parse the sourcelist file /*{{{*/ @@ -441,34 +441,26 @@ bool pkgSourceList::ParseFileDeb822(string const &File) } /*}}}*/ // SourceList::FindIndex - Get the index associated with a file /*{{{*/ -// --------------------------------------------------------------------- -/* */ +static bool FindInIndexFileContainer(std::vector const &Cont, pkgCache::PkgFileIterator const &File, pkgIndexFile *&Found) +{ + auto const J = std::find_if(Cont.begin(), Cont.end(), [&File](pkgIndexFile const * const J) { + return J->FindInCache(*File.Cache()) == File; + }); + if (J != Cont.end()) + { + Found = (*J); + return true; + } + return false; +} bool pkgSourceList::FindIndex(pkgCache::PkgFileIterator File, pkgIndexFile *&Found) const { for (const_iterator I = SrcList.begin(); I != SrcList.end(); ++I) - { - vector *Indexes = (*I)->GetIndexFiles(); - for (vector::const_iterator J = Indexes->begin(); - J != Indexes->end(); ++J) - { - if ((*J)->FindInCache(*File.Cache()) == File) - { - Found = (*J); - return true; - } - } - } - for (vector::const_iterator J = VolatileFiles.begin(); - J != VolatileFiles.end(); ++J) - { - if ((*J)->FindInCache(*File.Cache()) == File) - { - Found = (*J); + if (FindInIndexFileContainer(*(*I)->GetIndexFiles(), File, Found)) return true; - } - } - return false; + + return FindInIndexFileContainer(VolatileFiles, File, Found); } /*}}}*/ // SourceList::GetIndexes - Load the index files into the downloader /*{{{*/ @@ -517,11 +509,12 @@ time_t pkgSourceList::GetLastModifiedTime() List = GetListOfFilesInDir(Parts, "list", true); // calculate the time - time_t mtime_sources = GetModificationTime(Main); - for (vector::const_iterator I = List.begin(); I != List.end(); ++I) - mtime_sources = std::max(mtime_sources, GetModificationTime(*I)); - - return mtime_sources; + std::vector modtimes; + modtimes.reserve(1 + List.size()); + modtimes.push_back(GetModificationTime(Main)); + std::transform(List.begin(), List.end(), std::back_inserter(modtimes), GetModificationTime); + auto const maxmtime = std::max_element(modtimes.begin(), modtimes.end()); + return *maxmtime; } /*}}}*/ std::vector pkgSourceList::GetVolatileFiles() const /*{{{*/ -- cgit v1.2.3