libzypp 17.31.0
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
23namespace zypp
24{
26 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 typedef std::set<PoolItem,AVOrder> AvailableItemSet;
119 typedef AvailableItemSet::iterator available_iterator;
120 typedef AvailableItemSet::const_iterator available_const_iterator;
122
123 typedef std::set<PoolItem,IOrder> InstalledItemSet;
124 typedef AvailableItemSet::iterator installed_iterator;
125 typedef AvailableItemSet::const_iterator installed_const_iterator;
127
128 typedef std::vector<PoolItem> PickList;
129 typedef PickList::const_iterator picklist_iterator;
131 };
133
135 } // namespace ui
138} // namespace zypp
140#endif // ZYPP_UI_SELECTABLETRAITS_H
int compare(const Arch &rhs) const
Arch comparison.
Definition: Arch.cc:550
Store and operate on date (time_t).
Definition: Date.h:33
static int compare(const Derived &lhs, const Derived &rhs)
Definition: IdStringType.h:127
Combining sat::Solvable and ResStatus.
Definition: PoolItem.h:51
int satInternalSubPriority() const
Definition: Repository.cc:79
int satInternalPriority() const
libsolv internal priorities.
Definition: Repository.cc:73
IdType id() const
Expert backdoor.
Definition: Solvable.h:428
Repository repository() const
The Repository this Solvable belongs to.
Definition: Solvable.cc:363
SolvableIdType size_type
Definition: PoolMember.h:126
Easy-to use interface to the ZYPP dependency resolver.
Definition: CodePitfalls.doc:2
bool isBlacklisted() const
Definition: SolvableType.h:85
Solvable satSolvable() const
Return the corresponding sat::Solvable.
Definition: SolvableType.h:57
Edition edition() const
Definition: SolvableType.h:71
Date installtime() const
Definition: SolvableType.h:92
Date buildtime() const
Definition: SolvableType.h:91
bool operator()(const PoolItem &lhs, const PoolItem &rhs) const
Oder on InstalledItemSet.
bool operator()(const PoolItem &lhs, const PoolItem &rhs) const
AvailableItemSet::const_iterator installed_const_iterator
std::vector< PoolItem > PickList
AvailableItemSet::size_type available_size_type
AvailableItemSet::iterator installed_iterator
AvailableItemSet::const_iterator available_const_iterator
PickList::size_type picklist_size_type
std::set< PoolItem, AVOrder > AvailableItemSet
std::set< PoolItem, IOrder > InstalledItemSet
AvailableItemSet::size_type installed_size_type
PickList::const_iterator picklist_iterator
AvailableItemSet::iterator available_iterator