10 #define APT_CACHESET_H
20 #include <apt-pkg/error.h>
23 #ifndef APT_8_CLEANER_HEADERS
24 #include <apt-pkg/cachefile.h>
31 class PackageContainerInterface;
32 class VersionContainerInterface;
46 ShowError(ShowError), ErrorType(ErrorType) {};
52 std::string
const &ver,
bool const verIsRel);
73 bool showErrors()
const {
return ShowError; };
74 bool showErrors(
bool const newValue) {
if (ShowError == newValue)
return ShowError;
else return ((ShowError = newValue) ==
false); };
78 if (ErrorType == newValue)
return ErrorType;
107 inline const char *Name()
const {
return getPkg().Name(); }
108 inline std::string FullName(
bool const Pretty)
const {
return getPkg().FullName(Pretty); }
109 inline std::string FullName()
const {
return getPkg().FullName(); }
110 inline const char *Section()
const {
return getPkg().Section(); }
111 inline bool Purge()
const {
return getPkg().Purge(); }
112 inline const char *Arch()
const {
return getPkg().Arch(); }
118 inline pkgCache::PkgIterator::OkState State()
const {
return getPkg().State(); }
119 inline const char *CandVersion()
const {
return getPkg().CandVersion(); }
120 inline const char *CurVersion()
const {
return getPkg().CurVersion(); }
121 inline pkgCache *Cache()
const {
return getPkg().Cache(); };
122 inline unsigned long Index()
const {
return getPkg().Index();};
124 inline bool end()
const {
return false; };
131 virtual bool empty()
const = 0;
132 virtual void clear() = 0;
134 enum Constructor { UNKNOWN, REGEX, TASK, FNMATCH };
135 virtual void setConstructor(Constructor
const &con) = 0;
136 virtual Constructor getConstructor()
const = 0;
147 enum Position { NONE, PREFIX, POSTFIX };
149 const char *
const Alias;
151 Modifier (
unsigned short const &
id,
const char *
const alias, Position
const &pos) : ID(
id), Alias(alias), Pos(pos) {};
169 public std::iterator<std::forward_iterator_tag, typename Container::const_iterator> {
170 typename Container::const_iterator _iter;
172 const_iterator(
typename Container::const_iterator i) : _iter(i) {}
175 operator typename Container::const_iterator(
void)
const {
return _iter; }
178 inline bool operator!=(
const_iterator const &i)
const {
return _iter != i._iter; };
179 inline bool operator==(
const_iterator const &i)
const {
return _iter == i._iter; };
180 friend std::ostream& operator<<(std::ostream& out,
const_iterator i) {
return operator<<(out, *i); }
183 public std::iterator<std::forward_iterator_tag, typename Container::iterator> {
184 typename Container::iterator _iter;
186 iterator(
typename Container::iterator i) : _iter(i) {}
189 operator typename Container::iterator(
void)
const {
return _iter; }
191 inline iterator& operator++() { ++_iter;
return *
this; }
192 inline iterator operator++(
int) {
iterator tmp(*
this); operator++();
return tmp; }
193 inline bool operator!=(
iterator const &i)
const {
return _iter != i._iter; };
194 inline bool operator==(
iterator const &i)
const {
return _iter == i._iter; };
195 inline iterator& operator=(
iterator const &i) { _iter = i._iter;
return *
this; };
196 inline iterator& operator=(
typename Container::iterator
const &i) { _iter = i;
return *
this; };
197 friend std::ostream& operator<<(std::ostream& out,
iterator i) {
return operator<<(out, *i); }
201 bool insert(
pkgCache::PkgIterator const &P) {
if (P.end() ==
true)
return false; _cont.insert(P);
return true; };
202 template<
class Cont>
void insert(
PackageContainer<Cont> const &pkgcont) { _cont.insert((
typename Cont::const_iterator)pkgcont.begin(), (
typename Cont::const_iterator)pkgcont.end()); };
203 void insert(const_iterator begin, const_iterator end) { _cont.insert(begin, end); };
205 bool empty()
const {
return _cont.empty(); };
206 void clear() {
return _cont.clear(); };
208 void erase(iterator position) { _cont.erase((
typename Container::iterator)position); };
209 iterator& erase(iterator &position,
bool) {
return position = _cont.erase((
typename Container::iterator)position); };
211 void erase(iterator first, iterator last) { _cont.erase(first, last); };
212 size_t size()
const {
return _cont.size(); };
214 const_iterator begin()
const {
return const_iterator(_cont.begin()); };
215 const_iterator end()
const {
return const_iterator(_cont.end()); };
216 iterator begin() {
return iterator(_cont.begin()); };
217 iterator end() {
return iterator(_cont.end()); };
220 void setConstructor(Constructor
const &by) { ConstructedBy = by; };
221 Constructor getConstructor()
const {
return ConstructedBy; };
223 PackageContainer() : ConstructedBy(UNKNOWN) {};
224 PackageContainer(Constructor
const &by) : ConstructedBy(by) {};
236 PackageContainerInterface::FromTask(&cont, Cache, pattern, helper);
241 return FromTask(Cache, pattern, helper);
254 PackageContainerInterface::FromRegEx(&cont, Cache, pattern, helper);
260 return FromRegEx(Cache, pattern, helper);
263 static PackageContainer FromFnmatch(
pkgCacheFile &Cache, std::string pattern, CacheSetHelper &helper) {
264 PackageContainer cont(FNMATCH);
265 PackageContainerInterface::FromFnmatch(&cont, Cache, pattern, helper);
268 static PackageContainer FromFnMatch(
pkgCacheFile &Cache, std::string
const &pattern) {
269 CacheSetHelper helper;
270 return FromFnmatch(Cache, pattern, helper);
279 return PackageContainerInterface::FromName(Cache, pattern, helper);
283 return PackageContainerInterface::FromName(Cache, pattern, helper);
293 PackageContainerInterface::FromString(&cont, Cache, pattern, helper);
310 PackageContainerInterface::FromCommandLine(&cont, Cache, cmdline, helper);
331 const char **cmdline,
332 std::list<Modifier>
const &mods,
333 unsigned short const &fallback,
335 std::map<unsigned short, PackageContainer> pkgsets;
336 for (
const char **I = cmdline; *I != 0; ++I) {
337 unsigned short modID = fallback;
339 PackageContainerInterface::FromModifierCommandLine(modID, &pkgset, Cache, *I, mods, helper);
340 pkgsets[modID].insert(pkgset);
346 const char **cmdline,
347 std::list<Modifier>
const &mods,
348 unsigned short const &fallback) {
351 mods, fallback, helper);
355 Constructor ConstructedBy;
359 template<>
template<
class Cont>
void PackageContainer<std::list<pkgCache::PkgIterator> >::insert(PackageContainer<Cont>
const &pkgcont) {
360 for (
typename PackageContainer<Cont>::const_iterator p = pkgcont.begin(); p != pkgcont.end(); ++p)
365 template<>
inline bool PackageContainer<std::list<pkgCache::PkgIterator> >::insert(
pkgCache::PkgIterator const &P) {
371 template<>
inline void PackageContainer<std::list<pkgCache::PkgIterator> >::insert(const_iterator begin, const_iterator end) {
372 for (const_iterator p = begin; p != end; ++p)
375 typedef PackageContainer<std::set<pkgCache::PkgIterator> > PackageSet;
376 typedef PackageContainer<std::list<pkgCache::PkgIterator> > PackageList;
389 inline pkgCache *Cache()
const {
return getVer().Cache(); };
390 inline unsigned long Index()
const {
return getVer().Index();};
392 inline const char *VerStr()
const {
return getVer().VerStr(); };
393 inline const char *Section()
const {
return getVer().Section(); };
394 inline const char *Arch()
const {
return getVer().Arch(); };
401 inline bool Downloadable()
const {
return getVer().Downloadable(); };
402 inline const char *PriorityType()
const {
return getVer().PriorityType(); };
403 inline std::string RelStr()
const {
return getVer().RelStr(); };
404 inline bool Automatic()
const {
return getVer().Automatic(); };
407 inline bool end()
const {
return false; };
414 virtual bool empty()
const = 0;
415 virtual void clear() = 0;
436 enum Position { NONE, PREFIX, POSTFIX };
438 const char *
const Alias;
441 Modifier (
unsigned short const &
id,
const char *
const alias, Position
const &pos,
442 Version const &select) : ID(
id), Alias(alias), Pos(pos),
443 SelectVersion(select) {};
447 const char **cmdline,
Version const &fallback,
452 bool const onlyFromName =
false);
458 static bool FromModifierCommandLine(
unsigned short &modID,
461 std::list<Modifier>
const &mods,
499 public std::iterator<std::forward_iterator_tag, typename Container::const_iterator> {
500 typename Container::const_iterator _iter;
502 const_iterator(
typename Container::const_iterator i) : _iter(i) {}
505 operator typename Container::const_iterator(
void)
const {
return _iter; }
508 inline bool operator!=(
const_iterator const &i)
const {
return _iter != i._iter; };
509 inline bool operator==(
const_iterator const &i)
const {
return _iter == i._iter; };
510 friend std::ostream& operator<<(std::ostream& out,
const_iterator i) {
return operator<<(out, *i); }
513 public std::iterator<std::forward_iterator_tag, typename Container::iterator> {
514 typename Container::iterator _iter;
516 iterator(
typename Container::iterator i) : _iter(i) {}
519 operator typename Container::iterator(
void)
const {
return _iter; }
521 inline iterator& operator++() { ++_iter;
return *
this; }
522 inline iterator operator++(
int) {
iterator tmp(*
this); operator++();
return tmp; }
523 inline bool operator!=(
iterator const &i)
const {
return _iter != i._iter; };
524 inline bool operator==(
iterator const &i)
const {
return _iter == i._iter; };
525 inline iterator& operator=(
iterator const &i) { _iter = i._iter;
return *
this; };
526 inline iterator& operator=(
typename Container::iterator
const &i) { _iter = i;
return *
this; };
527 friend std::ostream& operator<<(std::ostream& out,
iterator i) {
return operator<<(out, *i); }
531 bool insert(
pkgCache::VerIterator const &V) {
if (V.end() ==
true)
return false; _cont.insert(V);
return true; };
532 template<
class Cont>
void insert(
VersionContainer<Cont> const &vercont) { _cont.insert((
typename Cont::const_iterator)vercont.begin(), (
typename Cont::const_iterator)vercont.end()); };
533 void insert(const_iterator begin, const_iterator end) { _cont.insert(begin, end); };
534 bool empty()
const {
return _cont.empty(); };
535 void clear() {
return _cont.clear(); };
537 void erase(iterator position) { _cont.erase((
typename Container::iterator)position); };
538 iterator& erase(iterator &position,
bool) {
return position = _cont.erase((
typename Container::iterator)position); };
540 void erase(iterator first, iterator last) { _cont.erase(first, last); };
541 size_t size()
const {
return _cont.size(); };
543 const_iterator begin()
const {
return const_iterator(_cont.begin()); };
544 const_iterator end()
const {
return const_iterator(_cont.end()); };
545 iterator begin() {
return iterator(_cont.begin()); };
546 iterator end() {
return iterator(_cont.end()); };
559 VersionContainerInterface::FromCommandLine(&vercon, Cache, cmdline, fallback, helper);
571 static VersionContainer FromString(
pkgCacheFile &Cache, std::string
const &pkg,
572 Version const &fallback, CacheSetHelper &helper,
573 bool const onlyFromName =
false) {
574 VersionContainer vercon;
575 VersionContainerInterface::FromString(&vercon, Cache, pkg, fallback, helper);
578 static VersionContainer FromString(
pkgCacheFile &Cache, std::string pkg,
580 CacheSetHelper helper;
581 return FromString(Cache, pkg, fallback, helper);
583 static VersionContainer FromString(
pkgCacheFile &Cache, std::string pkg) {
584 return FromString(Cache, pkg,
CANDINST);
596 VersionContainerInterface::FromPackage(&vercon, Cache, P, fallback, helper);
608 static std::map<unsigned short, VersionContainer> GroupedFromCommandLine(
610 const char **cmdline,
611 std::list<Modifier>
const &mods,
612 unsigned short const fallback,
613 CacheSetHelper &helper) {
614 std::map<unsigned short, VersionContainer> versets;
615 for (
const char **I = cmdline; *I != 0; ++I) {
616 unsigned short modID = fallback;
617 VersionContainer verset;
618 VersionContainerInterface::FromModifierCommandLine(modID, &verset, Cache, *I, mods, helper);
619 versets[modID].insert(verset);
624 static std::map<unsigned short, VersionContainer> GroupedFromCommandLine(
626 std::list<Modifier>
const &mods,
627 unsigned short const fallback) {
628 CacheSetHelper helper;
629 return GroupedFromCommandLine(Cache, cmdline,
630 mods, fallback, helper);
634 Version const &selector, CacheSetHelper &helper) {
635 VersionContainer vercon;
636 VersionContainerInterface::FromDependency(&vercon, Cache, D, selector, helper);
641 CacheSetHelper helper;
650 template<>
template<
class Cont>
void VersionContainer<std::list<pkgCache::VerIterator> >::insert(VersionContainer<Cont>
const &vercont) {
651 for (
typename VersionContainer<Cont>::const_iterator v = vercont.begin(); v != vercont.end(); ++v)
656 template<>
inline bool VersionContainer<std::list<pkgCache::VerIterator> >::insert(
pkgCache::VerIterator const &V) {
662 template<>
inline void VersionContainer<std::list<pkgCache::VerIterator> >::insert(const_iterator begin, const_iterator end) {
663 for (const_iterator v = begin; v != end; ++v)
666 typedef VersionContainer<std::set<pkgCache::VerIterator> > VersionSet;
667 typedef VersionContainer<std::list<pkgCache::VerIterator> > VersionList;
Definition: cacheiterators.h:136
Definition: cacheiterators.h:315
Version
specifies which version(s) will be returned if non is given
Definition: cacheset.h:418
information for a single version of a package
Definition: pkgcache.h:501
Definition: cacheset.h:512
smell like a pkgCache::VerIterator
Definition: cacheset.h:498
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:234
Definition: cacheiterators.h:95
pkgCache - Structure definitions for the cache file
static pkgCache::PkgIterator FromName(pkgCacheFile &Cache, std::string const &pattern, CacheSetHelper &helper)
returns a package specified by a string
Definition: cacheset.h:278
An error does hinder the correct execution and should be corrected.
Definition: error.h:60
Definition: cacheset.h:34
Definition: cacheset.h:420
static PackageContainer FromRegEx(pkgCacheFile &Cache, std::string pattern, CacheSetHelper &helper)
returns all packages in the cache whose name matchs a given pattern
Definition: cacheset.h:252
Definition: cachefile.h:33
Definition: pkgcache.h:86
contains information for a single unique package
Definition: pkgcache.h:361
static VersionContainer FromPackage(pkgCacheFile &Cache, pkgCache::PkgIterator const &P, Version const &fallback, CacheSetHelper &helper)
returns all versions specified for the package
Definition: cacheset.h:593
Definition: cacheset.h:426
static VersionContainer FromCommandLine(pkgCacheFile &Cache, const char **cmdline, Version const &fallback, CacheSetHelper &helper)
returns all versions specified on the commandline
Definition: cacheset.h:556
MsgType
a message can have one of following severity
Definition: error.h:55
smell like a pkgCache::PkgIterator
Definition: cacheset.h:168
static std::map< unsigned short, PackageContainer > GroupedFromCommandLine(pkgCacheFile &Cache, const char **cmdline, std::list< Modifier > const &mods, unsigned short const &fallback, CacheSetHelper &helper)
group packages by a action modifiers
Definition: cacheset.h:329
Definition: cacheiterators.h:264
Definition: cacheset.h:432
Definition: cacheset.h:102
static PackageContainer FromString(pkgCacheFile &Cache, std::string const &pattern, CacheSetHelper &helper)
returns all packages specified by a string
Definition: cacheset.h:291
Definition: cacheset.h:430
Definition: cacheset.h:146
Definition: cacheiterators.h:185
static pkgCache::VerIterator getCandidateVer(pkgCacheFile &Cache, pkgCache::PkgIterator const &Pkg, CacheSetHelper &helper)
returns the candidate version of the package
Definition: cacheset.cc:546
smell like a pkgCache::VerIterator
Definition: cacheset.h:384
Definition: cacheiterators.h:237
Definition: cacheset.h:159
Definition: cacheset.h:424
static PackageContainer FromCommandLine(pkgCacheFile &Cache, const char **cmdline, CacheSetHelper &helper)
returns all packages specified on the commandline
Definition: cacheset.h:308
Definition: cacheset.h:489
Definition: cacheset.h:435
Definition: cacheset.h:378
Definition: cacheset.h:428
static pkgCache::VerIterator getInstalledVer(pkgCacheFile &Cache, pkgCache::PkgIterator const &Pkg, CacheSetHelper &helper)
returns the installed version of the package
Definition: cacheset.cc:562
Definition: cacheiterators.h:385
Definition: cacheset.h:182
Definition: cacheset.h:91
Definition: cacheset.h:422