libzypp  17.36.1
SelectableTraits.h
Go to the documentation of this file.
1 /*---------------------------------------------------------------------\
2 | ____ _ __ __ ___ |
3 | |__ / \ / / . \ . \ |
4 | / / \ V /| _/ _/ |
5 | / /__ | | | | | | |
6 | /_____||_| |_| |_| |
7 | |
8 \---------------------------------------------------------------------*/
12 #ifndef ZYPP_UI_SELECTABLETRAITS_H
13 #define ZYPP_UI_SELECTABLETRAITS_H
14 
15 #include <set>
16 #include <vector>
17 
18 #include <zypp/base/Iterator.h>
19 #include <zypp/PoolItem.h>
20 #include <zypp/pool/ByIdent.h>
21 
23 namespace zypp
24 {
25  namespace ui
27  {
28 
30  //
31  // CLASS NAME : SelectableTraits
32  //
35  {
44  struct AVOrder
45  {
46  // NOTE: operator() provides LESS semantics to order the set.
47  // So LESS means 'prior in set'. We want 'better' archs and
48  // 'better' editions at the beginning of the set. So we return
49  // TRUE if (lhs > rhs)!
50  //
51  bool operator()( const PoolItem & lhs, const PoolItem & rhs ) const
52  {
53  if ( lhs.isBlacklisted() != rhs.isBlacklisted() )
54  return rhs.isBlacklisted();
55 
56  int lprio = lhs->satSolvable().repository().satInternalPriority();
57  int rprio = rhs->satSolvable().repository().satInternalPriority();
58  if ( lprio != rprio )
59  return( lprio > rprio );
60 
61  // arch/noarch changes are ok.
62  if ( lhs->arch() != Arch_noarch && rhs->arch() != Arch_noarch )
63  {
64  int res = lhs->arch().compare( rhs->arch() );
65  if ( res )
66  return res > 0;
67  }
68 
69  int res = lhs->edition().compare( rhs->edition() );
70  if ( res )
71  return res > 0;
72 
73  lprio = lhs->buildtime();
74  rprio = rhs->buildtime();
75  if ( lprio != rprio )
76  return( lprio > rprio );
77 
80  if ( lprio != rprio )
81  return( lprio > rprio );
82 
83  // no more criteria, still equal: sort by id
84  return lhs.satSolvable().id() < rhs.satSolvable().id();
85  }
86  };
87 
94  struct IOrder
95  {
96  // NOTE: operator() provides LESS semantics to order the set.
97  // So LESS means 'prior in set'. We want 'newer' install time
98  // at the beginning of the set.
99  //
100  bool operator()( const PoolItem & lhs, const PoolItem & rhs ) const
101  {
102  int res = lhs->arch().compare( rhs->arch() );
103  if ( res )
104  return res > 0;
105  res = lhs->edition().compare( rhs->edition() );
106  if ( res )
107  return res > 0;
108  Date ldate = lhs->installtime();
109  Date rdate = rhs->installtime();
110  if ( ldate != rdate )
111  return( ldate > rdate );
112 
113  // no more criteria, still equal: sort by id
114  return lhs.satSolvable().id() < rhs.satSolvable().id();
115  }
116  };
117 
118  using AvailableItemSet = std::set<PoolItem, AVOrder>;
119  using available_iterator = AvailableItemSet::iterator;
120  using available_const_iterator = AvailableItemSet::const_iterator;
122 
123  using InstalledItemSet = std::set<PoolItem, IOrder>;
124  using installed_iterator = AvailableItemSet::iterator;
125  using installed_const_iterator = AvailableItemSet::const_iterator;
127 
128  using PickList = std::vector<PoolItem>;
129  using picklist_iterator = PickList::const_iterator;
131  };
133 
135  } // namespace ui
138 } // namespace zypp
140 #endif // ZYPP_UI_SELECTABLETRAITS_H
int satInternalSubPriority() const
Definition: Repository.cc:80
Date installtime() const
Definition: SolvableType.h:92
AvailableItemSet::const_iterator available_const_iterator
IdType id() const
Expert backdoor.
Definition: Solvable.h:444
std::vector< PoolItem > PickList
Oder on InstalledItemSet.
AvailableItemSet::size_type available_size_type
AvailableItemSet::iterator installed_iterator
Edition edition() const
Definition: SolvableType.h:71
AvailableItemSet::size_type installed_size_type
int compare(const Arch &rhs) const
Arch comparison.
Definition: Arch.cc:560
std::set< PoolItem, IOrder > InstalledItemSet
bool operator()(const PoolItem &lhs, const PoolItem &rhs) const
static int compare(const Derived &lhs, const Derived &rhs)
Definition: IdStringType.h:134
Repository repository() const
The Repository this Solvable belongs to.
Definition: Solvable.cc:364
Store and operate on date (time_t).
Definition: Date.h:32
std::set< PoolItem, AVOrder > AvailableItemSet
PickList::size_type picklist_size_type
AvailableItemSet::const_iterator installed_const_iterator
PickList::const_iterator picklist_iterator
int satInternalPriority() const
libsolv internal priorities.
Definition: Repository.cc:74
bool operator()(const PoolItem &lhs, const PoolItem &rhs) const
bool isBlacklisted() const
Definition: SolvableType.h:85
Combining sat::Solvable and ResStatus.
Definition: PoolItem.h:50
AvailableItemSet::iterator available_iterator
Easy-to use interface to the ZYPP dependency resolver.
Definition: Application.cc:19
SolvableIdType size_type
Definition: PoolMember.h:126
Solvable satSolvable() const
Return the corresponding sat::Solvable.
Definition: SolvableType.h:57
Date buildtime() const
Definition: SolvableType.h:91
Oder on AvailableItemSet.