X-Git-Url: https://git.saurik.com/apt.git/blobdiff_plain/443f5e8a3205162ec6933529c5ca0c95ad3f6941..4adc750a2a8d0c6b2c03353b5538bc7446020f68:/apt-pkg/pkgsystem.cc diff --git a/apt-pkg/pkgsystem.cc b/apt-pkg/pkgsystem.cc index 05ba6e0e6..b1c6cc1ea 100644 --- a/apt-pkg/pkgsystem.cc +++ b/apt-pkg/pkgsystem.cc @@ -12,8 +12,11 @@ // Include Files /*{{{*/ #include +#include #include -#include +#include + +#include #include #include /*}}}*/ @@ -23,10 +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 idmap; + pkgSystemPrivate() {} +}; + /*}}}*/ // System::pkgSystem - Constructor /*{{{*/ // --------------------------------------------------------------------- /* Add it to the global list.. */ -pkgSystem::pkgSystem() : Label(NULL), VS(NULL) +pkgSystem::pkgSystem(char const * const label, pkgVersioningSystem * const vs) : + Label(label), VS(vs), d(new pkgSystemPrivate()) { assert(GlobalListLen < sizeof(SysList)/sizeof(*SysList)); SysList[GlobalListLen] = this; @@ -36,7 +48,7 @@ pkgSystem::pkgSystem() : Label(NULL), VS(NULL) // System::GetSystem - Get the named system /*{{{*/ // --------------------------------------------------------------------- /* */ -pkgSystem *pkgSystem::GetSystem(const char *Label) +APT_PURE pkgSystem *pkgSystem::GetSystem(const char *Label) { for (unsigned I = 0; I != GlobalListLen; I++) if (strcmp(SysList[I]->Label,Label) == 0) @@ -44,3 +56,34 @@ pkgSystem *pkgSystem::GetSystem(const char *Label) return 0; } /*}}}*/ +bool pkgSystem::MultiArchSupported() const /*{{{*/ +{ + debSystem const * const deb = dynamic_cast(this); + if (deb != NULL) + return deb->SupportsMultiArch(); + return true; +} + /*}}}*/ +std::vector pkgSystem::ArchitecturesSupported() const /*{{{*/ +{ + debSystem const * const deb = dynamic_cast(this); + if (deb != NULL) + return deb->SupportedArchitectures(); + 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() {}