libept  0.5.25
package.h
Go to the documentation of this file.
1 // -*- C++ -*-
2 
3 #ifndef EPT_APT_PACKAGE_H
4 #define EPT_APT_PACKAGE_H
5 
6 namespace ept {
7 namespace core {
8 namespace package {
9 
10 struct Setup {
11  typedef ept::Token Token;
15 };
16 
17 template<> struct PropertyType< Name > { typedef std::string T; };
18 template<> struct PropertyType< Versions > { typedef VersionList T; };
19 template<> struct PropertyType< AnyVersion > { typedef Token T; };
20 template<> struct PropertyType< State > { typedef PackageState T; };
21 template<> struct PropertyType< CandidateVersion > { typedef Token T; };
22 template<> struct PropertyType< InstalledVersion > { typedef Token T; };
23 
24 struct Source : core::Source< Source, Setup, PropertyType >
25 {
27 
28  Source( AptDatabase &db ) : m_db( db ) {}
29 
31  return InternalList( m_db.cache().PkgBegin() );
32  }
33 
35  return m_db.lookupPackage( t );
36  }
37 
39  Token t;
40  t._id = i.Name();
41  return t;
42  }
43 
44  bool exists( Token t ) {
45  if ( t.hasVersion() )
46  return !m_db.lookupVersion( t ).end();
47  else
48  return !lookupToken( t ).end();
49  }
50 
51  Token versionToken( pkgCache::VerIterator vi ) {
52  if ( vi.end() )
53  return Token();
54  return Token( std::string( vi.ParentPkg().Name() ) + "_" + vi.VerStr() );
55  }
56 
57  template< PropertyId p >
59 
60  template< typename List >
61  void revertState( List l ) {
62  while ( !l.empty() ) {
63  PackageState s = getInternal< State >( l.head() );
64  if ( !s.keep() || s.purge() ) {
65  pkgDepCache::StateCache &S = db().state()[ l.head() ];
66  db().state().MarkKeep( l.head(), false, false );
67  S.iFlags &= ~pkgDepCache::Purge;
68  S.iFlags &= ~pkgDepCache::ReInstall;
69  }
70  l = l.tail();
71  }
72  }
73 
74  void revertStates() {
75  pkgDepCache::ActionGroup group( db().state() );
77  }
78 
79  typedef ComposedList< State > ChangeList;
80 
81  static bool isChanged( Token t, PackageState s );
82  static bool isUpgradable( Token t, PackageState s );
83 
84  PropertyFilter< State, __typeof( &isChanged ) >::T changedList() {
85  return propertyFilter< State >( isChanged );
86  }
87 
88  PropertyFilter< State, __typeof( &isUpgradable ) >::T upgradableList() {
89  return propertyFilter< State >( isUpgradable );
90  }
91 
92  AptDatabase &db() { return m_db; }
93 };
94 
95 template<> inline std::string Source::getInternal< Name >( Internal i ) {
96  return i.Name();
97 }
98 
99 template<> inline PackageState Source::getInternal< State >( Internal i ) {
100  return m_db.packageState( i );
101 }
102 
103 template<> inline Token Source::getInternal< CandidateVersion >( Internal i ) {
104  return versionToken( m_db.candidateVersion( i ) );
105 }
106 
107 template<> inline Token Source::getInternal< AnyVersion >( Internal i ) {
108  return versionToken( m_db.candidateVersion( i ) );
109 }
110 
111 template<> inline Token Source::getInternal< InstalledVersion >( Internal i ) {
112  return versionToken( m_db.installedVersion( i ) );
113 }
114 
116  return s.modify();
117 }
118 
120  return s.upgradable();
121 }
122 
123 }
124 }
125 }
126 
127 #endif
pkgCache::PkgIterator lookupPackage(Token t)
Definition: core/apt.h:252
package::Internal Internal
Definition: package.h:12
ComposedList< State > ChangeList
Definition: package.h:79
Definition: package.h:10
Token getToken(Internal i)
Definition: package.h:38
std::string T
Definition: package.h:17
Definition: core/apt.h:42
pkgDepCache & state()
Definition: core/apt.h:119
Setup::Token Token
Definition: source.h:15
bool exists(Token t)
Definition: package.h:44
Source(AptDatabase &db)
Definition: package.h:28
AptDatabase & m_db
Definition: package.h:26
PropertyFilter< State, __typeof(&isUpgradable) >::T upgradableList()
Definition: package.h:88
void revertStates()
Definition: package.h:74
Definition: core/apt.h:369
-*- C++ -*- (c) 2006, 2007 Petr Rockai me@mornfall.net
Definition: apt.cc:43
Definition: core/apt.h:374
static bool isUpgradable(Token t, PackageState s)
Definition: package.h:119
bool purge() const
Definition: core/apt.h:88
pkgCache::VerIterator lookupVersion(Token t)
Definition: core/apt.h:256
Definition: core/apt.h:369
Definition: core/apt.h:112
Definition: token.h:10
PropertyFilter< State, __typeof(&isChanged) >::T changedList()
Definition: package.h:84
Definition: core/apt.h:369
bool modify() const
Definition: core/apt.h:103
Definition: core/apt.h:342
bool keep() const
Definition: core/apt.h:89
PackageState T
Definition: package.h:20
ept::Token Token
Definition: package.h:11
Definition: core/apt.h:370
pkgCache::PkgIterator Internal
Definition: core/apt.h:371
Definition: package.h:24
AptInternalList< Internal > InternalList
Definition: core/apt.h:381
pkgCache & cache()
Definition: core/apt.h:113
PropertyId
Definition: core/apt.h:369
InternalList listInternal()
Definition: package.h:30
Definition: core/apt.h:372
Definition: source.h:13
Internal lookupToken(Token t)
Definition: package.h:34
Definition: core/apt.h:369
PropertyType< p >::T getInternal(Internal)
bool upgradable() const
Definition: core/apt.h:99
Definition: core/apt.h:369
static bool isChanged(Token t, PackageState s)
Definition: package.h:115
Token versionToken(pkgCache::VerIterator vi)
Definition: package.h:51
AptDatabase & db()
Definition: package.h:92
package::PropertyId PropertyId
Definition: package.h:13
void revertState(List l)
Definition: package.h:61
package::InternalList InternalList
Definition: package.h:14
VersionList T
Definition: package.h:18