15#if __cplusplus >= 201103L
16#include <forward_list>
17#include <initializer_list>
18#include <unordered_set>
29#include <apt-pkg/error.h>
30#include <apt-pkg/macros.h>
38class PackageContainerInterface;
39class VersionContainerInterface;
55 enum PkgSelector { UNKNOWN, REGEX, TASK, FNMATCH, PACKAGENAME, STRING, PATTERN };
62 enum Position { NONE, PREFIX, POSTFIX };
64 const char *
const Alias;
66 PkgModifier (
unsigned short const &
id,
const char *
const alias, Position
const &pos) : ID(
id), Alias(alias), Pos(pos) {}
70 std::list<PkgModifier>
const &mods);
81 virtual void showPackageSelection(pkgCache::PkgIterator
const &pkg, PkgSelector
const select, std::string
const &pattern);
127 virtual void showVersionSelection(pkgCache::PkgIterator
const &Pkg, pkgCache::VerIterator
const &Ver,
128 enum VerSelector
const select, std::string
const &pattern);
143 virtual pkgCache::VerIterator canNotGetVersion(
enum VerSelector
const select,
pkgCacheFile &Cache, pkgCache::PkgIterator
const &Pkg);
145 virtual pkgCache::PkgIterator canNotFindPkgName(
pkgCacheFile &Cache, std::string
const &str);
147 bool showErrors()
const {
return ShowError; }
148 bool showErrors(
bool const newValue) {
if (ShowError == newValue)
return ShowError;
else return ((ShowError = newValue) ==
false); }
152 if (ErrorType == newValue)
return ErrorType;
155 ErrorType = newValue;
160 std::string getLastVersionMatcher()
const;
161 void setLastVersionMatcher(std::string
const &matcher);
167 pkgCache::VerIterator canNotGetInstCandVer(
pkgCacheFile &Cache,
168 pkgCache::PkgIterator
const &Pkg);
169 pkgCache::VerIterator canNotGetCandInstVer(
pkgCacheFile &Cache,
170 pkgCache::PkgIterator
const &Pkg);
172 pkgCache::VerIterator canNotGetVerFromRelease(
pkgCacheFile &Cache,
173 pkgCache::PkgIterator
const &Pkg, std::string
const &release);
174 pkgCache::VerIterator canNotGetVerFromVersionNumber(
pkgCacheFile &Cache,
175 pkgCache::PkgIterator
const &Pkg, std::string
const &verstr);
177 bool PackageFromTask(PackageContainerInterface *
const pci,
pkgCacheFile &Cache, std::string pattern);
178 bool PackageFromRegEx(PackageContainerInterface *
const pci,
pkgCacheFile &Cache, std::string pattern);
179 bool PackageFromFnmatch(PackageContainerInterface *
const pci,
pkgCacheFile &Cache, std::string pattern);
180 bool PackageFromPackageName(PackageContainerInterface *
const pci,
pkgCacheFile &Cache, std::string pattern);
181 bool PackageFromString(PackageContainerInterface *
const pci,
pkgCacheFile &Cache, std::string
const &pattern);
182 bool PackageFromPattern(PackageContainerInterface *
const pci,
pkgCacheFile &Cache, std::string
const &pattern);
184 void showTaskSelection(pkgCache::PkgIterator
const &pkg, std::string
const &pattern);
185 void showRegExSelection(pkgCache::PkgIterator
const &pkg, std::string
const &pattern);
186 void showFnmatchSelection(pkgCache::PkgIterator
const &pkg, std::string
const &pattern);
187 void showPatternSelection(pkgCache::PkgIterator
const &pkg, std::string
const &pattern);
188 void canNotFindTask(PackageContainerInterface *
const pci,
pkgCacheFile &Cache, std::string pattern);
189 void canNotFindRegEx(PackageContainerInterface *
const pci,
pkgCacheFile &Cache, std::string pattern);
190 void canNotFindFnmatch(PackageContainerInterface *
const pci,
pkgCacheFile &Cache, std::string pattern);
191 void canNotFindPackage(PackageContainerInterface *
const pci,
pkgCacheFile &Cache, std::string
const &str);
192 void showSelectedVersion(pkgCache::PkgIterator
const &Pkg, pkgCache::VerIterator
const Ver,
193 std::string
const &ver,
bool const verIsRel);
194 void canNotFindAllVer(VersionContainerInterface *
const vci,
pkgCacheFile &Cache, pkgCache::PkgIterator
const &Pkg);
195 void canNotFindInstCandVer(VersionContainerInterface *
const vci,
pkgCacheFile &Cache, pkgCache::PkgIterator
const &Pkg);
196 void canNotFindCandInstVer(VersionContainerInterface *
const vci,
pkgCacheFile &Cache, pkgCache::PkgIterator
const &Pkg);
197 pkgCache::VerIterator canNotFindNewestVer(
pkgCacheFile &Cache, pkgCache::PkgIterator
const &Pkg);
198 pkgCache::VerIterator canNotFindCandidateVer(
pkgCacheFile &Cache, pkgCache::PkgIterator
const &Pkg);
199 pkgCache::VerIterator canNotFindInstalledVer(
pkgCacheFile &Cache, pkgCache::PkgIterator
const &Pkg);
205template<
typename Interface,
typename Master,
typename iterator_type,
typename container_iterator,
typename container_value>
class Container_iterator_base :
206 public Interface::template iterator_base<iterator_type>
209 container_iterator _iter;
211 using iterator_category =
typename std::iterator_traits<container_iterator>::iterator_category;
212 using value_type = container_value;
213 using difference_type = std::ptrdiff_t;
214 using pointer = container_value*;
215 using reference = container_value&;
217 inline container_value operator*(
void)
const {
return static_cast<iterator_type const*
>(
this)->getType(); };
218 operator container_iterator(
void)
const {
return _iter; }
219 inline iterator_type& operator++() { ++_iter;
return static_cast<iterator_type&
>(*this); }
220 inline iterator_type operator++(
int) { iterator_type tmp(*
this); operator++();
return tmp; }
221 inline iterator_type operator+(
typename container_iterator::difference_type
const &n)
const {
return iterator_type(_iter + n); }
222 inline iterator_type operator+=(
typename container_iterator::difference_type
const &n) { _iter += n;
return static_cast<iterator_type&
>(*this); }
223 inline iterator_type& operator--() { --_iter;;
return static_cast<iterator_type&
>(*this); }
224 inline iterator_type operator--(
int) { iterator_type tmp(*
this); operator--();
return tmp; }
225 inline iterator_type operator-(
typename container_iterator::difference_type
const &n)
const {
return iterator_type(_iter - n); }
226 inline typename container_iterator::difference_type operator-(iterator_type
const &b) {
return (_iter - b._iter); }
227 inline iterator_type operator-=(
typename container_iterator::difference_type
const &n) { _iter -= n;
return static_cast<iterator_type&
>(*this); }
228 inline bool operator!=(iterator_type
const &i)
const {
return _iter != i._iter; }
229 inline bool operator==(iterator_type
const &i)
const {
return _iter == i._iter; }
230 inline bool operator<(iterator_type
const &i)
const {
return _iter < i._iter; }
231 inline bool operator>(iterator_type
const &i)
const {
return _iter > i._iter; }
232 inline bool operator<=(iterator_type
const &i)
const {
return _iter <= i._iter; }
233 inline bool operator>=(iterator_type
const &i)
const {
return _iter >= i._iter; }
234 inline typename container_iterator::reference operator[](
typename container_iterator::difference_type
const &n)
const {
return _iter[n]; }
236 friend std::ostream& operator<<(std::ostream& out, iterator_type i) {
return operator<<(out, *i); }
240 public Container_iterator_base<Interface, Master, Container_const_iterator<Interface, Container, Master>, typename Container::const_iterator, typename Container::value_type>
243 typedef typename Container::const_iterator container_iterator;
248 inline typename Container::value_type getType(
void)
const {
return *this->_iter; }
251 public Container_iterator_base<Interface, Master, Container_iterator<Interface, Container, Master>, typename Container::iterator, typename Container::value_type>
254 typedef typename Container::iterator container_iterator;
259 operator typename Master::const_iterator() {
return typename Master::const_iterator(this->_iter); }
260 inline typename Container::iterator::reference operator*(
void)
const {
return *this->_iter; }
262 inline typename Container::value_type getType(
void)
const {
return *this->_iter; }
265 public Container_iterator_base<Interface, Master, Container_const_reverse_iterator<Interface, Container, Master>, typename Container::const_reverse_iterator, typename Container::value_type>
268 typedef typename Container::const_reverse_iterator container_iterator;
273 inline typename Container::value_type getType(
void)
const {
return *this->_iter; }
276 public Container_iterator_base<Interface, Master, Container_reverse_iterator<Interface, Container, Master>, typename Container::reverse_iterator, typename Container::value_type>
279 typedef typename Container::reverse_iterator container_iterator;
284 operator typename Master::const_iterator() {
return typename Master::const_iterator(this->_iter); }
287 inline typename Container::reverse_iterator::reference operator*(
void)
const {
return *this->_iter; }
289 inline typename Container::value_type getType(
void)
const {
return *this->_iter; }
304 pkgCache::PkgIterator getType()
const {
return static_cast<Itr const*
>(
this)->getType(); };
306 operator pkgCache::PkgIterator(
void)
const {
return getType(); }
308 inline const char *Name()
const {
return getType().Name(); }
309 inline std::string FullName(
bool const Pretty)
const {
return getType().FullName(Pretty); }
310 inline std::string FullName()
const {
return getType().FullName(); }
311 inline bool Purge()
const {
return getType().Purge(); }
312 inline const char *Arch()
const {
return getType().Arch(); }
313 inline pkgCache::GrpIterator Group()
const {
return getType().Group(); }
314 inline pkgCache::VerIterator
VersionList()
const {
return getType().VersionList(); }
315 inline pkgCache::VerIterator CurrentVer()
const {
return getType().CurrentVer(); }
316 inline pkgCache::DepIterator RevDependsList()
const {
return getType().RevDependsList(); }
317 inline pkgCache::PrvIterator ProvidesList()
const {
return getType().ProvidesList(); }
318 inline pkgCache::PkgIterator::OkState State()
const {
return getType().State(); }
319 inline const char *CurVersion()
const {
return getType().CurVersion(); }
320 inline pkgCache *Cache()
const {
return getType().Cache(); }
321 inline unsigned long Index()
const {
return getType().Index();}
323 inline bool end()
const {
return false; }
329 virtual bool insert(pkgCache::PkgIterator
const &P) = 0;
330 virtual bool empty()
const = 0;
331 virtual void clear() = 0;
332 virtual size_t size()
const = 0;
334 void setConstructor(CacheSetHelper::PkgSelector
const by) { ConstructedBy = by; }
335 CacheSetHelper::PkgSelector getConstructor()
const {
return ConstructedBy; }
336 PackageContainerInterface();
337 explicit PackageContainerInterface(CacheSetHelper::PkgSelector
const by);
338 PackageContainerInterface(PackageContainerInterface
const &by);
339 PackageContainerInterface& operator=(PackageContainerInterface
const &other);
340 virtual ~PackageContainerInterface();
343 CacheSetHelper::PkgSelector ConstructedBy;
360 typedef typename Container::value_type value_type;
361 typedef typename Container::pointer pointer;
362 typedef typename Container::const_pointer const_pointer;
363 typedef typename Container::reference reference;
364 typedef typename Container::const_reference const_reference;
365 typedef typename Container::difference_type difference_type;
366 typedef typename Container::size_type size_type;
367 typedef typename Container::allocator_type allocator_type;
369 bool insert(pkgCache::PkgIterator
const &P)
override {
if (P.end() ==
true)
return false; _cont.insert(P);
return true; }
370 template<
class Cont>
void insert(
PackageContainer<Cont> const &pkgcont) { _cont.insert((
typename Cont::const_iterator)pkgcont.begin(), (
typename Cont::const_iterator)pkgcont.end()); }
373 [[nodiscard]]
bool empty()
const override {
return _cont.empty(); }
374 void clear()
override {
return _cont.clear(); }
375 [[nodiscard]]
size_t size()
const override {
return _cont.size(); }
376#if __GNUC__ >= 5 || (__GNUC_MINOR__ >= 9 && __GNUC__ >= 4)
377 iterator erase(
const_iterator pos ) {
return iterator(_cont.erase(pos._iter)); }
380 iterator erase( iterator pos ) {
return iterator(_cont.erase(pos._iter)); }
381 iterator erase( iterator first, iterator last ) {
return iterator(_cont.erase(first._iter, last._iter)); }
385 const_reverse_iterator rbegin()
const {
return const_reverse_iterator(_cont.rbegin()); }
386 const_reverse_iterator rend()
const {
return const_reverse_iterator(_cont.rend()); }
387#if __cplusplus >= 201103L
390 const_reverse_iterator crbegin()
const {
return const_reverse_iterator(_cont.crbegin()); }
391 const_reverse_iterator crend()
const {
return const_reverse_iterator(_cont.crend()); }
393 iterator begin() {
return iterator(_cont.begin()); }
394 iterator end() {
return iterator(_cont.end()); }
395 reverse_iterator rbegin() {
return reverse_iterator(_cont.rbegin()); }
396 reverse_iterator rend() {
return reverse_iterator(_cont.rend()); }
399 PackageContainer() : PackageContainerInterface(CacheSetHelper::UNKNOWN) {}
400 explicit PackageContainer(CacheSetHelper::PkgSelector
const &by) : PackageContainerInterface(by) {}
401 template<
typename Itr> PackageContainer(Itr first, Itr last) : PackageContainerInterface(CacheSetHelper::UNKNOWN), _cont(first, last) {}
402#if __cplusplus >= 201103L
403 PackageContainer(std::initializer_list<value_type> list) : PackageContainerInterface(CacheSetHelper::UNKNOWN), _cont(list) {}
404 void push_back(value_type&& P) { _cont.emplace_back(std::move(P)); }
405 template<
typename... Args>
void emplace_back(Args&&... args) { _cont.emplace_back(std::forward<Args>(args)...); }
407 void push_back(
const value_type& P) { _cont.push_back(P); }
419 template<
class Compare>
bool sort(Compare ) {
return false; }
431 helper.PackageFrom(CacheSetHelper::TASK, &cont, Cache, pattern);
436 return FromTask(Cache, pattern, helper);
449 helper.PackageFrom(CacheSetHelper::REGEX, &cont, Cache, pattern);
455 return FromRegEx(Cache, pattern, helper);
458 static PackageContainer FromFnmatch(
pkgCacheFile &Cache, std::string
const &pattern, CacheSetHelper &helper) {
459 PackageContainer cont(CacheSetHelper::FNMATCH);
460 helper.PackageFrom(CacheSetHelper::FNMATCH, &cont, Cache, pattern);
463 static PackageContainer FromFnMatch(
pkgCacheFile &Cache, std::string
const &pattern) {
464 CacheSetHelper helper;
465 return FromFnmatch(Cache, pattern, helper);
475 helper.PackageFrom(CacheSetHelper::PACKAGENAME, &cont, Cache, pattern);
492 helper.PackageFromCommandLine(&cont, Cache, cmdline);
513 const char **cmdline,
514 std::list<CacheSetHelper::PkgModifier>
const &mods,
515 unsigned short const &fallback,
517 std::map<unsigned short, PackageContainer> pkgsets;
518 for (
const char **I = cmdline; *I != 0; ++I) {
519 unsigned short modID = fallback;
521 helper.PackageFromModifierCommandLine(modID, &pkgset, Cache, *I, mods);
522 pkgsets[modID].insert(pkgset);
528 const char **cmdline,
529 std::list<CacheSetHelper::PkgModifier>
const &mods,
530 unsigned short const &fallback) {
533 mods, fallback, helper);
538template<>
template<
class Cont>
void PackageContainer<std::list<pkgCache::PkgIterator> >::insert(PackageContainer<Cont>
const &pkgcont) {
542#if __cplusplus >= 201103L
543template<>
template<
class Cont>
void PackageContainer<std::forward_list<pkgCache::PkgIterator> >::insert(PackageContainer<Cont>
const &pkgcont) {
545 _cont.push_front(*p);
548template<>
template<
class Cont>
void PackageContainer<std::deque<pkgCache::PkgIterator> >::insert(PackageContainer<Cont>
const &pkgcont) {
552template<>
template<
class Cont>
void PackageContainer<std::vector<pkgCache::PkgIterator> >::insert(PackageContainer<Cont>
const &pkgcont) {
558template<>
inline bool PackageContainer<std::list<pkgCache::PkgIterator> >::insert(pkgCache::PkgIterator
const &P) {
564#if __cplusplus >= 201103L
565template<>
inline bool PackageContainer<std::forward_list<pkgCache::PkgIterator> >::insert(pkgCache::PkgIterator
const &P) {
572template<>
inline bool PackageContainer<std::deque<pkgCache::PkgIterator> >::insert(pkgCache::PkgIterator
const &P) {
578template<>
inline bool PackageContainer<std::vector<pkgCache::PkgIterator> >::insert(pkgCache::PkgIterator
const &P) {
584template<>
inline void PackageContainer<std::list<pkgCache::PkgIterator> >::insert(const_iterator begin, const_iterator end) {
585 for (const_iterator p = begin; p != end; ++p)
588#if __cplusplus >= 201103L
589template<>
inline void PackageContainer<std::forward_list<pkgCache::PkgIterator> >::insert(const_iterator begin, const_iterator end) {
590 for (const_iterator p = begin; p != end; ++p)
591 _cont.push_front(*p);
594template<>
inline void PackageContainer<std::deque<pkgCache::PkgIterator> >::insert(const_iterator begin, const_iterator end) {
595 for (const_iterator p = begin; p != end; ++p)
598template<>
inline void PackageContainer<std::vector<pkgCache::PkgIterator> >::insert(const_iterator begin, const_iterator end) {
599 for (const_iterator p = begin; p != end; ++p)
602#if APT_GCC_VERSION < 0x409
603template<>
inline PackageContainer<std::set<pkgCache::PkgIterator> >::iterator PackageContainer<std::set<pkgCache::PkgIterator> >::erase(iterator i) {
604 _cont.erase(i._iter);
607template<>
inline PackageContainer<std::set<pkgCache::PkgIterator> >::iterator PackageContainer<std::set<pkgCache::PkgIterator> >::erase(iterator first, iterator last) {
608 _cont.erase(first, last);
612template<>
template<
class Compare>
inline bool PackageContainer<std::vector<pkgCache::PkgIterator> >::sort(Compare Comp) {
613 std::sort(_cont.begin(), _cont.end(), Comp);
616template<>
template<
class Compare>
inline bool PackageContainer<std::list<pkgCache::PkgIterator> >::sort(Compare Comp) {
620#if __cplusplus >= 201103L
621template<>
template<
class Compare>
inline bool PackageContainer<std::forward_list<pkgCache::PkgIterator> >::sort(Compare Comp) {
626template<>
template<
class Compare>
inline bool PackageContainer<std::deque<pkgCache::PkgIterator> >::sort(Compare Comp) {
627 std::sort(_cont.begin(), _cont.end(), Comp);
650 inline pkgCache::PkgIterator getType(
void)
const {
return _iter; }
653 typedef pkgCache::PkgIterator value_type;
654 typedef typename pkgCache::PkgIterator* pointer;
655 typedef typename pkgCache::PkgIterator
const* const_pointer;
656 typedef const pkgCache::PkgIterator& const_reference;
657 typedef const_reference reference;
658 typedef const_iterator::difference_type difference_type;
659 typedef std::make_unsigned<const_iterator::difference_type>::type size_type;
661 [[nodiscard]]
bool empty()
const override {
return false; }
662 [[nodiscard]]
size_t size()
const override {
return _cont->Head().PackageCount; }
664 const_iterator begin()
const {
return const_iterator(_cont->PkgBegin()); }
665 const_iterator end()
const {
return const_iterator(_cont->PkgEnd()); }
666 const_iterator cbegin()
const {
return const_iterator(_cont->PkgBegin()); }
667 const_iterator cend()
const {
return const_iterator(_cont->PkgEnd()); }
668 iterator begin() {
return iterator(_cont->PkgBegin()); }
669 iterator end() {
return iterator(_cont->PkgEnd()); }
671 pkgCache * data()
const {
return _cont; }
673 explicit PackageUniverse(
pkgCache *
const Owner);
675 virtual ~PackageUniverse();
678 APT_HIDDEN
bool insert(pkgCache::PkgIterator
const &)
override {
return true; }
679 template<
class Cont> APT_HIDDEN
void insert(PackageContainer<Cont>
const &) { }
680 APT_HIDDEN
void insert(const_iterator, const_iterator) { }
682 APT_HIDDEN
void clear()
override { }
683 APT_HIDDEN iterator erase( const_iterator pos );
684 APT_HIDDEN iterator erase( const_iterator first, const_iterator last );
687typedef PackageContainer<std::set<pkgCache::PkgIterator> > PackageSet;
688#if __cplusplus >= 201103L
689typedef PackageContainer<std::unordered_set<pkgCache::PkgIterator> > PackageUnorderedSet;
690typedef PackageContainer<std::forward_list<pkgCache::PkgIterator> > PackageForwardList;
692typedef PackageContainer<std::list<pkgCache::PkgIterator> > PackageList;
693typedef PackageContainer<std::deque<pkgCache::PkgIterator> > PackageDeque;
694typedef PackageContainer<std::vector<pkgCache::PkgIterator> > PackageVector;
703 pkgCache::VerIterator getType()
const {
return static_cast<Itr const*
>(
this)->getType(); };
705 operator pkgCache::VerIterator(
void) {
return getType(); }
707 inline pkgCache *Cache()
const {
return getType().Cache(); }
708 inline unsigned long Index()
const {
return getType().Index();}
709 inline int CompareVer(
const pkgCache::VerIterator &B)
const {
return getType().CompareVer(B); }
710 inline const char *VerStr()
const {
return getType().VerStr(); }
711 inline const char *Section()
const {
return getType().Section(); }
712 inline const char *Arch()
const {
return getType().Arch(); }
713 inline pkgCache::PkgIterator ParentPkg()
const {
return getType().ParentPkg(); }
714 inline pkgCache::DescIterator DescriptionList()
const {
return getType().DescriptionList(); }
715 inline pkgCache::DescIterator TranslatedDescription()
const {
return getType().TranslatedDescription(); }
716 inline pkgCache::DepIterator DependsList()
const {
return getType().DependsList(); }
717 inline pkgCache::PrvIterator ProvidesList()
const {
return getType().ProvidesList(); }
718 inline pkgCache::VerFileIterator FileList()
const {
return getType().FileList(); }
719 inline bool Downloadable()
const {
return getType().Downloadable(); }
720 inline const char *PriorityType()
const {
return getType().PriorityType(); }
721 inline std::string RelStr()
const {
return getType().RelStr(); }
722 inline bool Automatic()
const {
return getType().Automatic(); }
723 inline pkgCache::VerFileIterator NewestFile()
const {
return getType().NewestFile(); }
725 inline bool end()
const {
return false; }
731 virtual bool insert(pkgCache::VerIterator
const &V) = 0;
732 virtual bool empty()
const = 0;
733 virtual void clear() = 0;
734 virtual size_t size()
const = 0;
737 unsigned short const ID;
738 const char *
const Alias;
739 enum Position { NONE, PREFIX, POSTFIX }
const Pos;
741 Modifier (
unsigned short const &
id,
const char *
const alias, Position
const &pos,
743 SelectVersion(select) {}
752 bool const onlyFromName =
false);
761 static bool FromModifierCommandLine(
unsigned short &modID,
764 std::list<Modifier>
const &mods,
770 pkgCache::DepIterator
const &D,
788 static pkgCache::VerIterator getCandidateVer(
pkgCacheFile &Cache,
796 static pkgCache::VerIterator getInstalledVer(
pkgCacheFile &Cache,
814 typedef typename Container::value_type value_type;
815 typedef typename Container::pointer pointer;
816 typedef typename Container::const_pointer const_pointer;
817 typedef typename Container::reference reference;
818 typedef typename Container::const_reference const_reference;
819 typedef typename Container::difference_type difference_type;
820 typedef typename Container::size_type size_type;
821 typedef typename Container::allocator_type allocator_type;
823 bool insert(pkgCache::VerIterator
const &V)
override {
if (V.end() ==
true)
return false; _cont.insert(V);
return true; }
824 template<
class Cont>
void insert(
VersionContainer<Cont> const &vercont) { _cont.insert((
typename Cont::const_iterator)vercont.begin(), (
typename Cont::const_iterator)vercont.end()); }
826 [[nodiscard]]
bool empty()
const override {
return _cont.empty(); }
827 void clear()
override {
return _cont.clear(); }
828 [[nodiscard]]
size_t size()
const override {
return _cont.size(); }
829#if APT_GCC_VERSION >= 0x409
840#if __cplusplus >= 201103L
854#if __cplusplus >= 201103L
856 void push_back(value_type&& P) { _cont.emplace_back(std::move(P)); }
857 template<
typename... Args>
void emplace_back(Args&&... args) { _cont.emplace_back(std::forward<Args>(args)...); }
859 void push_back(
const value_type& P) { _cont.push_back(P); }
871 template<
class Compare>
bool sort(Compare ) {
return false; }
884 VersionContainerInterface::FromCommandLine(&vercon, Cache, cmdline, fallback, helper);
895 static VersionContainer FromString(
pkgCacheFile &Cache, std::string
const &pkg,
898 VersionContainer vercon;
899 VersionContainerInterface::FromString(&vercon, Cache, pkg, fallback, helper);
902 static VersionContainer FromString(
pkgCacheFile &Cache, std::string pkg,
904 CacheSetHelper helper;
905 return FromString(Cache, pkg, fallback, helper);
907 static VersionContainer FromString(
pkgCacheFile &Cache, std::string pkg) {
921 VersionContainerInterface::FromPackage(&vercon, Cache, P, fallback, helper);
933 static std::map<unsigned short, VersionContainer> GroupedFromCommandLine(
935 const char **cmdline,
936 std::list<Modifier>
const &mods,
937 unsigned short const fallback,
938 CacheSetHelper &helper) {
939 std::map<unsigned short, VersionContainer> versets;
940 for (
const char **I = cmdline; *I != 0; ++I) {
941 unsigned short modID = fallback;
942 VersionContainer verset;
943 VersionContainerInterface::FromModifierCommandLine(modID, &verset, Cache, *I, mods, helper);
944 versets[modID].insert(verset);
949 static std::map<unsigned short, VersionContainer> GroupedFromCommandLine(
951 std::list<Modifier>
const &mods,
952 unsigned short const fallback) {
953 CacheSetHelper helper;
954 return GroupedFromCommandLine(Cache, cmdline,
955 mods, fallback, helper);
958 static VersionContainer FromDependency(
pkgCacheFile &Cache, pkgCache::DepIterator
const &D,
960 VersionContainer vercon;
961 VersionContainerInterface::FromDependency(&vercon, Cache, D, selector, helper);
964 static VersionContainer FromDependency(
pkgCacheFile &Cache, pkgCache::DepIterator
const &D,
966 CacheSetHelper helper;
967 return FromDependency(Cache, D, selector, helper);
969 static VersionContainer FromDependency(
pkgCacheFile &Cache, pkgCache::DepIterator
const &D) {
975template<>
template<
class Cont>
void VersionContainer<std::list<pkgCache::VerIterator> >::insert(VersionContainer<Cont>
const &vercont) {
976 for (
typename VersionContainer<Cont>::const_iterator v = vercont.begin(); v != vercont.end(); ++v)
979#if __cplusplus >= 201103L
980template<>
template<
class Cont>
void VersionContainer<std::forward_list<pkgCache::VerIterator> >::insert(VersionContainer<Cont>
const &vercont) {
981 for (
typename VersionContainer<Cont>::const_iterator v = vercont.begin(); v != vercont.end(); ++v)
982 _cont.push_front(*v);
985template<>
template<
class Cont>
void VersionContainer<std::deque<pkgCache::VerIterator> >::insert(VersionContainer<Cont>
const &vercont) {
986 for (
typename VersionContainer<Cont>::const_iterator v = vercont.begin(); v != vercont.end(); ++v)
989template<>
template<
class Cont>
void VersionContainer<std::vector<pkgCache::VerIterator> >::insert(VersionContainer<Cont>
const &vercont) {
990 for (
typename VersionContainer<Cont>::const_iterator v = vercont.begin(); v != vercont.end(); ++v)
995template<>
inline bool VersionContainer<std::list<pkgCache::VerIterator> >::insert(pkgCache::VerIterator
const &V) {
1001#if __cplusplus >= 201103L
1002template<>
inline bool VersionContainer<std::forward_list<pkgCache::VerIterator> >::insert(pkgCache::VerIterator
const &V) {
1003 if (V.end() ==
true)
1005 _cont.push_front(V);
1009template<>
inline bool VersionContainer<std::deque<pkgCache::VerIterator> >::insert(pkgCache::VerIterator
const &V) {
1010 if (V.end() ==
true)
1015template<>
inline bool VersionContainer<std::vector<pkgCache::VerIterator> >::insert(pkgCache::VerIterator
const &V) {
1016 if (V.end() ==
true)
1021template<>
inline void VersionContainer<std::list<pkgCache::VerIterator> >::insert(const_iterator begin, const_iterator end) {
1022 for (const_iterator v = begin; v != end; ++v)
1023 _cont.push_back(*v);
1025#if __cplusplus >= 201103L
1026template<>
inline void VersionContainer<std::forward_list<pkgCache::VerIterator> >::insert(const_iterator begin, const_iterator end) {
1027 for (const_iterator v = begin; v != end; ++v)
1028 _cont.push_front(*v);
1031template<>
inline void VersionContainer<std::deque<pkgCache::VerIterator> >::insert(const_iterator begin, const_iterator end) {
1032 for (const_iterator v = begin; v != end; ++v)
1033 _cont.push_back(*v);
1035template<>
inline void VersionContainer<std::vector<pkgCache::VerIterator> >::insert(const_iterator begin, const_iterator end) {
1036 for (const_iterator v = begin; v != end; ++v)
1037 _cont.push_back(*v);
1039#if APT_GCC_VERSION < 0x409
1040template<>
inline VersionContainer<std::set<pkgCache::VerIterator> >::iterator VersionContainer<std::set<pkgCache::VerIterator> >::erase(iterator i) {
1041 _cont.erase(i._iter);
1044template<>
inline VersionContainer<std::set<pkgCache::VerIterator> >::iterator VersionContainer<std::set<pkgCache::VerIterator> >::erase(iterator first, iterator last) {
1045 _cont.erase(first, last);
1049template<>
template<
class Compare>
inline bool VersionContainer<std::vector<pkgCache::VerIterator> >::sort(Compare Comp) {
1050 std::sort(_cont.begin(), _cont.end(), Comp);
1053template<>
template<
class Compare>
inline bool VersionContainer<std::list<pkgCache::VerIterator> >::sort(Compare Comp) {
1057#if __cplusplus >= 201103L
1058template<>
template<
class Compare>
inline bool VersionContainer<std::forward_list<pkgCache::VerIterator> >::sort(Compare Comp) {
1063template<>
template<
class Compare>
inline bool VersionContainer<std::deque<pkgCache::VerIterator> >::sort(Compare Comp) {
1064 std::sort(_cont.begin(), _cont.end(), Comp);
1069typedef VersionContainer<std::set<pkgCache::VerIterator> > VersionSet;
1070#if __cplusplus >= 201103L
1071typedef VersionContainer<std::unordered_set<pkgCache::VerIterator> > VersionUnorderedSet;
1072typedef VersionContainer<std::forward_list<pkgCache::VerIterator> > VersionForwardList;
1074typedef VersionContainer<std::list<pkgCache::VerIterator> > VersionList;
1075typedef VersionContainer<std::deque<pkgCache::VerIterator> > VersionDeque;
1076typedef VersionContainer<std::vector<pkgCache::VerIterator> > VersionVector;
VerSelector
specifies which version(s) we want to refer to
Definition cacheset.h:95
@ CANDIDATE
Definition cacheset.h:105
@ INSTALLED
Definition cacheset.h:107
@ CANDANDINST
Definition cacheset.h:103
@ INSTCAND
Definition cacheset.h:111
@ CANDINST
Definition cacheset.h:109
@ ALL
Definition cacheset.h:101
@ RELEASE
Definition cacheset.h:97
@ VERSIONNUMBER
Definition cacheset.h:99
Definition cacheset.h:241
Definition cacheset.h:266
Definition cacheset.h:207
Definition cacheset.h:252
Definition cacheset.h:277
Definition cacheset.h:303
Definition cacheset.h:292
Definition cacheset.h:347
static PackageContainer FromString(pkgCacheFile &Cache, std::string const &pattern, CacheSetHelper &helper)
returns all packages specified by a string
Definition cacheset.h:473
bool sort(Compare)
sort all included versions with given comparer
Definition cacheset.h:419
static PackageContainer FromCommandLine(pkgCacheFile &Cache, const char **cmdline, CacheSetHelper &helper)
returns all packages specified on the commandline
Definition cacheset.h:490
static std::map< unsigned short, PackageContainer > GroupedFromCommandLine(pkgCacheFile &Cache, const char **cmdline, std::list< CacheSetHelper::PkgModifier > const &mods, unsigned short const &fallback, CacheSetHelper &helper)
group packages by a action modifiers
Definition cacheset.h:511
static PackageContainer FromTask(pkgCacheFile &Cache, std::string const &pattern, CacheSetHelper &helper)
returns all packages in the cache who belong to the given task
Definition cacheset.h:429
Container_const_iterator< PackageContainerInterface, Container, PackageContainer > const_iterator
smell like a pkgCache::PkgIterator
Definition cacheset.h:356
static PackageContainer FromRegEx(pkgCacheFile &Cache, std::string const &pattern, CacheSetHelper &helper)
returns all packages in the cache whose name matches a given pattern
Definition cacheset.h:447
Definition cacheset.h:645
Definition cacheset.h:640
smell like a pkgCache::VerIterator
Definition cacheset.h:702
Definition cacheset.h:696
Definition cacheset.h:801
static VersionContainer FromPackage(pkgCacheFile &Cache, pkgCache::PkgIterator const &P, CacheSetHelper::VerSelector const fallback, CacheSetHelper &helper)
returns all versions specified for the package
Definition cacheset.h:918
bool sort(Compare)
sort all included versions with given comparer
Definition cacheset.h:871
static VersionContainer FromCommandLine(pkgCacheFile &Cache, const char **cmdline, CacheSetHelper::VerSelector const fallback, CacheSetHelper &helper)
returns all versions specified on the commandline
Definition cacheset.h:881
MsgType
a message can have one of following severity
Definition error.h:59
@ ERROR
An error does hinder the correct execution and should be corrected.
Definition error.h:64
Definition cachefile.h:33
Definition cacheiterators.h:47
pkgCache - Structure definitions for the cache file
Definition cacheset.h:736
contains information for a single unique package
Definition pkgcache.h:460
information for a single version of a package
Definition pkgcache.h:652