libzypp  15.19.5
ResPoolProxy.h
Go to the documentation of this file.
1 /*---------------------------------------------------------------------\
2 | ____ _ __ __ ___ |
3 | |__ / \ / / . \ . \ |
4 | / / \ V /| _/ _/ |
5 | / /__ | | | | | | |
6 | /_____||_| |_| |_| |
7 | |
8 \---------------------------------------------------------------------*/
12 #ifndef ZYPP_RESPOOLPROXY_H
13 #define ZYPP_RESPOOLPROXY_H
14 
15 #include <iosfwd>
16 
17 #include "zypp/base/PtrTypes.h"
18 
19 #include "zypp/ResPool.h"
20 #include "zypp/ui/Selectable.h"
21 #include "zypp/ui/SelFilters.h"
22 
24 namespace zypp
25 {
26 
28  //
29  // CLASS NAME : ResPoolProxy
30  //
35  {
36  friend std::ostream & operator<<( std::ostream & str, const ResPoolProxy & obj );
37  friend std::ostream & dumpOn( std::ostream & str, const ResPoolProxy & obj );
38  typedef std::multimap<ResKind,ui::Selectable::Ptr> SelectablePool;
39 
40  public:
42  class Impl;
43 
46 
48 
49  public:
50 
58  ResPoolProxy();
59 
61  ~ResPoolProxy();
62 
63  public:
66  ui::Selectable::Ptr lookup( const pool::ByIdent & ident_r ) const;
67 
69  { return lookup( pool::ByIdent( ident_r ) ); }
70 
71  ui::Selectable::Ptr lookup( ResKind kind_r, const std::string & name_r ) const
72  { return lookup( pool::ByIdent( kind_r, name_r ) ); }
73 
74  ui::Selectable::Ptr lookup( const sat::Solvable & solv_r ) const
75  { return lookup( pool::ByIdent( solv_r ) ); }
76 
77  ui::Selectable::Ptr lookup( const ResObject::constPtr & resolvable_r ) const
78  { return resolvable_r ? lookup( resolvable_r->satSolvable() ) : ui::Selectable::Ptr(); }
79 
80  ui::Selectable::Ptr lookup( const PoolItem & pi_r ) const
81  { return lookup( pi_r.satSolvable() ); }
83 
84  public:
87  bool empty() const;
88  size_type size() const;
89  const_iterator begin() const;
90  const_iterator end() const;
92 
96  bool empty( const ResKind & kind_r ) const;
97 
98  template<class TRes>
99  bool empty() const
100  { return empty( ResTraits<TRes>::kind ); }
101 
103  size_type size( const ResKind & kind_r ) const;
104 
105  template<class TRes>
106  size_type size() const
107  { return size( ResTraits<TRes>::kind ); }
108 
109  const_iterator byKindBegin( const ResKind & kind_r ) const;
110 
111  template<class TRes>
113  { return byKindBegin( ResTraits<TRes>::kind ); }
114 
115 
116  const_iterator byKindEnd( const ResKind & kind_r ) const;
117 
118  template<class TRes>
120  { return byKindEnd( ResTraits<TRes>::kind ); }
122 
123  public:
128 
130 
133 
134  public:
138  bool hasInstalledObj( const ResKind & kind_r ) const
139  {
140  return( make_begin<ui::selfilter::ByHasInstalledObj>( kind_r )
141  != make_end<ui::selfilter::ByHasInstalledObj>( kind_r ) );
142  }
143 
144  template<class TRes>
145  bool hasInstalledObj() const
147 
148  public:
159  void saveState() const;
160 
161  void saveState( const ResKind & kind_r ) const;
162 
163  template<class TRes>
164  void saveState() const
165  { return saveState( ResTraits<TRes>::kind ); }
166 
167  void restoreState() const;
168 
169  void restoreState( const ResKind & kind_r ) const;
170 
171  template<class TRes>
172  void restoreState() const
173  { return restoreState( ResTraits<TRes>::kind ); }
174 
175  bool diffState() const;
176 
177  bool diffState( const ResKind & kind_r ) const;
178 
179  template<class TRes>
180  bool diffState() const
181  { return diffState( ResTraits<TRes>::kind ); }
182 
190  struct ScopedSaveState;
191 
192  ScopedSaveState scopedSaveState() const;
193 
194  ScopedSaveState scopedSaveState( const ResKind & kind_r ) const;
195 
196  template<class TRes>
199 
201 
202  private:
203  template<class TFilter>
204  filter_iterator<TFilter,const_iterator>
205  make_begin( TFilter filter_r, const ResKind & kind_r ) const
206  {
207  return make_filter_iterator( filter_r,
208  byKindBegin(kind_r),
209  byKindEnd(kind_r) );
210  }
211  template<class TFilter>
212  filter_iterator<TFilter,const_iterator>
213  make_begin( const ResKind & kind_r ) const
214  {
215  return make_begin( TFilter(), kind_r );
216  }
217 
218 
219  template<class TFilter>
220  filter_iterator<TFilter,const_iterator>
221  make_end( TFilter filter_r, const ResKind & kind_r ) const
222  {
223  return make_filter_iterator( filter_r,
224  byKindEnd(kind_r),
225  byKindEnd(kind_r) );
226  }
227  template<class TFilter>
228  filter_iterator<TFilter,const_iterator>
229  make_end( const ResKind & kind_r ) const
230  {
231  return make_end( TFilter(), kind_r );
232  }
233 
234  private:
235  friend class pool::PoolImpl;
237  ResPoolProxy( ResPool pool_r, const pool::PoolImpl & poolImpl_r );
240  };
242 
244  std::ostream & operator<<( std::ostream & str, const ResPoolProxy & obj );
245 
247  std::ostream & dumpOn( std::ostream & str, const ResPoolProxy & obj );
248 
250 
252  {
254 
255  ScopedSaveState( const ResPoolProxy & pool_r )
256  : _pimpl( new Impl( pool_r ) )
257  { _pimpl->saveState(); }
258 
259  ScopedSaveState( const ResPoolProxy & pool_r, const ResKind & kind_r )
260  : _pimpl( new Impl( pool_r, kind_r ) )
261  { _pimpl->saveState(); }
262 
264  { if ( _pimpl ) _pimpl->restoreState(); }
265 
266  void acceptState()
267  { _pimpl.reset(); }
268 
269  private:
270  struct Impl
271  {
272  Impl( const ResPoolProxy & pool_r )
273  : _pool( pool_r )
274  {}
275  Impl( const ResPoolProxy & pool_r, const ResKind & kind_r )
276  : _pool( pool_r ), _kind( new ResKind( kind_r ) )
277  {}
278  void saveState()
279  { if ( _kind ) _pool.saveState( *_kind ); else _pool.saveState(); }
281  { if ( _kind ) _pool.restoreState( *_kind ); else _pool.restoreState(); }
283  scoped_ptr<ResKind> _kind;
284 
285  };
286  std::unique_ptr<Impl> _pimpl;
287  };
288 
290  { return ScopedSaveState( *this ); }
291 
293  { return ScopedSaveState( *this, kind_r ); }
294 
296 } // namespace zypp
298 #endif // ZYPP_RESPOOLPROXY_H
ScopedSaveState && scopedSaveState() const
Definition: ResPoolProxy.h:197
void restoreState() const
Definition: ResPoolProxy.h:172
size_type size() const
ui::Selectable::Ptr lookup(const pool::ByIdent &ident_r) const
A Solvable object within the sat Pool.
Definition: Solvable.h:53
size_type size() const
Definition: ResPoolProxy.h:106
ui::Selectable::Ptr lookup(IdString ident_r) const
Definition: ResPoolProxy.h:68
void restoreState() const
intrusive_ptr< Selectable > Ptr
Definition: Selectable.h:57
size_type knownRepositoriesSize() const
ui::Selectable::Ptr lookup(const PoolItem &pi_r) const
Definition: ResPoolProxy.h:80
transform_iterator< GetPairSecond< typename MapType::value_type >, typename MapType::const_iterator > Value_const_iterator
The value iterator type.
Definition: Iterator.h:223
Access to the sat-pools string space.
Definition: IdString.h:41
filter_iterator< TFilter, const_iterator > make_end(const ResKind &kind_r) const
Definition: ResPoolProxy.h:229
ResTraits.
Definition: ResTraits.h:79
TraitsType::constPtrType constPtr
Definition: ResObject.h:44
bool empty() const
ResPool::instance().proxy();.
Definition: ResPoolProxy.h:34
const_iterator end() const
ResPoolProxy implementation.
Definition: ResPoolProxy.cc:91
bool diffState() const
Definition: ResPoolProxy.h:180
Exception safe scoped save/restore state.
Definition: ResPoolProxy.h:251
filter_iterator< TFilter, const_iterator > make_begin(TFilter filter_r, const ResKind &kind_r) const
Definition: ResPoolProxy.h:205
std::ostream & operator<<(std::ostream &str, const Exception &obj)
Definition: Exception.cc:120
friend std::ostream & operator<<(std::ostream &str, const ResPoolProxy &obj)
ScopedSaveState scopedSaveState() const
Definition: ResPoolProxy.h:289
repository_iterator knownRepositoriesEnd() const
ResPool::repository_iterator repository_iterator
Definition: ResPoolProxy.h:47
Impl(const ResPoolProxy &pool_r, const ResKind &kind_r)
Definition: ResPoolProxy.h:275
bool hasInstalledObj(const ResKind &kind_r) const
Test whether there is at least one ui::Selectable with an installed object.
Definition: ResPoolProxy.h:138
bool diffState() const
RW_pointer< Impl > _pimpl
Pointer to implementation.
Definition: ResPoolProxy.h:239
void saveState() const
Definition: ResPoolProxy.h:164
std::ostream & dumpOn(std::ostream &str, const Capability &obj)
Definition: Capability.cc:444
friend std::ostream & dumpOn(std::ostream &str, const ResPoolProxy &obj)
const_iterator byKindEnd() const
Definition: ResPoolProxy.h:119
SolvableIdType size_type
Definition: PoolMember.h:126
std::unique_ptr< Impl > _pimpl
Definition: ResPoolProxy.h:286
bool empty() const
Definition: ResPoolProxy.h:99
filter_iterator< TFilter, const_iterator > make_begin(const ResKind &kind_r) const
Definition: ResPoolProxy.h:213
repository_iterator knownRepositoriesBegin() const
Global ResObject pool.
Definition: ResPool.h:60
SelectablePool::size_type size_type
Definition: ResPoolProxy.h:45
filter_iterator< TFilter, const_iterator > make_end(TFilter filter_r, const ResKind &kind_r) const
Definition: ResPoolProxy.h:221
Solvable satSolvable() const
Return the corresponding sat::Solvable.
Definition: SolvableType.h:57
std::multimap< ResKind, ui::Selectable::Ptr > SelectablePool
Definition: ResPoolProxy.h:38
ui::Selectable::Ptr lookup(const sat::Solvable &solv_r) const
Definition: ResPoolProxy.h:74
ResPoolProxy()
Default ctor: no pool Nonempty proxies are provided by ResPool.
bool hasInstalledObj() const
Definition: ResPoolProxy.h:145
Combining sat::Solvable and ResStatus.
Definition: PoolItem.h:50
void saveState() const
const_iterator byKindBegin() const
Definition: ResPoolProxy.h:112
const_iterator begin() const
MapKVIteratorTraits< SelectablePool >::Value_const_iterator const_iterator
Definition: ResPoolProxy.h:42
ui::Selectable::Ptr lookup(ResKind kind_r, const std::string &name_r) const
Definition: ResPoolProxy.h:71
ScopedSaveState(const ResPoolProxy &pool_r, const ResKind &kind_r)
Definition: ResPoolProxy.h:259
ScopedSaveState(const ResPoolProxy &pool_r)
Definition: ResPoolProxy.h:255
Resolvable kinds.
Definition: ResKind.h:32
Impl(const ResPoolProxy &pool_r)
Definition: ResPoolProxy.h:272
Main filter selecting PoolItems by name and kind.
Definition: ByIdent.h:26
ui::Selectable::Ptr lookup(const ResObject::constPtr &resolvable_r) const
Definition: ResPoolProxy.h:77