diff options
author | David Kalnischkies <david@kalnischkies.de> | 2015-09-17 13:13:41 +0200 |
---|---|---|
committer | David Kalnischkies <david@kalnischkies.de> | 2015-11-04 18:04:00 +0100 |
commit | 2fc9d1ebca203b4a159dba5e817081155099f6ab (patch) | |
tree | 3847340b1e577da59703dcdd3bf3960a2a4d587a /cmdline | |
parent | b2a893dda28aea05128394cd61c7ce38cfa0624b (diff) |
add cacheset push_back wrapping for std::back_inserter
As usual by now, not all containers wrapped by the cacheset containers
support all methods, like push_back now, but they fail on use of these
unusable methods only.
Would be nice to not expose these methods for unsupporting containers at
all, but that means either a lot of classes or a lot of std::enable_if
magic, which seems like too big work for this small wrapper for now.
Git-Dch: Ignore
Diffstat (limited to 'cmdline')
-rw-r--r-- | cmdline/apt-mark.cc | 18 |
1 files changed, 7 insertions, 11 deletions
diff --git a/cmdline/apt-mark.cc b/cmdline/apt-mark.cc index 9b51345a3..d9a93fa05 100644 --- a/cmdline/apt-mark.cc +++ b/cmdline/apt-mark.cc @@ -180,13 +180,13 @@ static bool DoHold(CommandLine &CmdL) bool const MarkHold = strcasecmp(CmdL.FileList[0],"hold") == 0; - auto part = std::stable_partition(pkgset.begin(), pkgset.end(), + auto const part = std::stable_partition(pkgset.begin(), pkgset.end(), [](pkgCache::PkgIterator const &P) { return P->SelectedState == pkgCache::State::Hold; }); - auto doneBegin = MarkHold ? pkgset.begin() : part; - auto doneEnd = MarkHold ? part : pkgset.end(); - auto changeBegin = MarkHold ? part : pkgset.begin(); - auto changeEnd = MarkHold ? pkgset.end() : part; + auto const doneBegin = MarkHold ? pkgset.begin() : part; + auto const doneEnd = MarkHold ? part : pkgset.end(); + auto const changeBegin = MarkHold ? part : pkgset.begin(); + auto const changeEnd = MarkHold ? pkgset.end() : part; std::for_each(doneBegin, doneEnd, [&MarkHold](pkgCache::PkgIterator const &P) { if (MarkHold == true) @@ -238,12 +238,8 @@ static bool DoHold(CommandLine &CmdL) } APT::PackageList keepoffset; - for (APT::PackageList::iterator Pkg = pkgset.begin(); Pkg != pkgset.end(); ++Pkg) - { - if (Pkg->CurrentVer != 0) - continue; - keepoffset.insert(*Pkg); - } + std::copy_if(changeBegin, changeEnd, std::back_inserter(keepoffset), + [](pkgCache::PkgIterator const &P) { return P->CurrentVer == 0; }); if (keepoffset.empty() == false) { |