diff options
author | David Kalnischkies <david@kalnischkies.de> | 2016-06-04 18:45:01 +0200 |
---|---|---|
committer | David Kalnischkies <david@kalnischkies.de> | 2016-06-04 18:45:01 +0200 |
commit | 307d9eb2d13ee59191b86ffec2f36ba3fffc5c20 (patch) | |
tree | 33c362f9f5326fce81ccf8bce3ad30950629ad68 /apt-pkg/pkgsystem.cc | |
parent | 0cfec3ab589c6309bf284438d2148c7742cdaf10 (diff) |
edsp: use an ID mapping for the internal solver
Currently an EDSP solver gets send basically all versions which means
the absolute count is the same, but that might not be true forever (and
with the skipping of rc-only versions it kinda is already) and even if
it were true, segfaulting on bad input seems wrong.
Diffstat (limited to 'apt-pkg/pkgsystem.cc')
-rw-r--r-- | apt-pkg/pkgsystem.cc | 24 |
1 files changed, 23 insertions, 1 deletions
diff --git a/apt-pkg/pkgsystem.cc b/apt-pkg/pkgsystem.cc index 530150221..b1c6cc1ea 100644 --- a/apt-pkg/pkgsystem.cc +++ b/apt-pkg/pkgsystem.cc @@ -16,6 +16,7 @@ #include <apt-pkg/pkgsystem.h> #include <apt-pkg/macros.h> +#include <map> #include <cassert> #include <cstring> /*}}}*/ @@ -25,11 +26,19 @@ static pkgSystem *SysList[10]; pkgSystem **pkgSystem::GlobalList = SysList; unsigned long pkgSystem::GlobalListLen = 0; +class APT_HIDDEN pkgSystemPrivate /*{{{*/ +{ +public: + typedef decltype(pkgCache::Version::ID) idtype; + std::map<idtype,idtype> idmap; + pkgSystemPrivate() {} +}; + /*}}}*/ // System::pkgSystem - Constructor /*{{{*/ // --------------------------------------------------------------------- /* Add it to the global list.. */ pkgSystem::pkgSystem(char const * const label, pkgVersioningSystem * const vs) : - Label(label), VS(vs), d(NULL) + Label(label), VS(vs), d(new pkgSystemPrivate()) { assert(GlobalListLen < sizeof(SysList)/sizeof(*SysList)); SysList[GlobalListLen] = this; @@ -63,5 +72,18 @@ std::vector<std::string> pkgSystem::ArchitecturesSupported() const /*{{{*/ return {}; } /*}}}*/ +// pkgSystem::Set/GetVersionMapping - for internal/external communcation/*{{{*/ +void pkgSystem::SetVersionMapping(map_id_t const in, map_id_t const out) +{ + if (in == out) + return; + d->idmap.emplace(in, out); +} +map_id_t pkgSystem::GetVersionMapping(map_id_t const in) const +{ + auto const o = d->idmap.find(in); + return (o == d->idmap.end()) ? in : o->second; +} + /*}}}*/ pkgSystem::~pkgSystem() {} |