libept  0.5.25
core/apt/version.h
Go to the documentation of this file.
1 // -*- C++ -*-
2 #ifndef EPT_CORE_APT_VERSION_H
3 #define EPT_CORE_APT_VERSION_H
4 
5 namespace ept {
6 namespace core {
7 namespace version {
8 
9 struct InternalList {
12 
13  typedef Internal Type;
14 
15  InternalList tail() const {
16  InternalList t = *this;
17  t.m_ver ++;
18  t.seek();
19  return t;
20  }
21 
22  const Internal head() const {
23  return m_ver;
24  }
25 
27  return m_ver;
28  }
29 
30  bool empty() const {
31  return m_pkg.end();
32  }
33 
34  void seek()
35  {
36  while ( m_ver.end() && !m_pkg.end() ) {
37  m_pkg ++;
38  m_ver = m_pkg.VersionList();
39  }
40  }
41 
43  : m_pkg( i )
44  {
45  m_ver = m_pkg.VersionList();
46  seek();
47  }
48 };
49 
50 struct Setup {
51  typedef ept::Token Token;
55 };
56 
57 struct Source : core::Source< Source, Setup, PropertyType >
58 {
60  Source( AptDatabase &db ) : m_db( db ) {}
61 
63  return InternalList( m_db.cache().PkgBegin() );
64  }
65 
67  Token t;
68  t._id = std::string( i.ParentPkg().Name() ) + "_" + i.VerStr();
69  return t;
70  }
71 
73  return m_db.lookupVersion( t );
74  }
75 
76  template< PropertyId p >
78 };
79 
80 template<> struct PropertyType< Package > { typedef Token T; };
81 
82 template<> inline Token Source::getInternal< Package >( Internal i ) {
83  assert( !i.end() );
84  Token t;
85  t._id = i.ParentPkg().Name();
86  return t;
87 }
88 
89 }
90 }
91 }
92 
93 #endif