diff options
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() {} |