1
/*---------------------------------------------------------------------\
3
| |__ / \ / / . \ . \ |
8
\---------------------------------------------------------------------*/
9
/** \file zypp/sat/SolvableSet.h
12
#ifndef ZYPP_SAT_SOLVABLESET_H
13
#define ZYPP_SAT_SOLVABLESET_H
17
#include "zypp/base/PtrTypes.h"
18
#include "zypp/base/Tr1hash.h"
19
#include "zypp/sat/Solvable.h"
20
#include "zypp/sat/SolvIterMixin.h"
22
///////////////////////////////////////////////////////////////////
24
{ /////////////////////////////////////////////////////////////////
25
///////////////////////////////////////////////////////////////////
27
{ /////////////////////////////////////////////////////////////////
29
///////////////////////////////////////////////////////////////////
31
// CLASS NAME : SolvableSet
33
/** Solvable set wrapper to allow adding additioanal convenience iterators.
35
class SolvableSet : public SolvIterMixin<SolvableSet,std::tr1::unordered_set<Solvable>::const_iterator>
37
friend std::ostream & operator<<( std::ostream & str, const SolvableSet & obj );
40
typedef std::tr1::unordered_set<Solvable> Container;
41
typedef Container::value_type value_type;
42
typedef Container::size_type size_type;
43
typedef Solvable_iterator const_iterator; // from SolvIterMixin
48
: _pimpl( new Container )
51
/** Ctor building a set from a range. */
52
template<class _InputIterator>
53
SolvableSet( _InputIterator begin_r, _InputIterator end_r )
54
: _pimpl( new Container( begin_r, end_r ) )
58
/** Whether the set is epmty. */
60
{ return _pimpl->empty(); }
62
/** Size of the set. */
63
size_type size() const
64
{ return _pimpl->size(); }
68
bool contains( const _Solv & solv_r ) const
69
{ return( get().find( asSolvable()( solv_r ) ) != end() ); }
71
/** Iterator pointing to the first \ref Solvable. */
72
const_iterator begin() const
73
{ return _pimpl->begin(); }
75
/** Iterator pointing behind the last \ref Solvable. */
76
const_iterator end() const
77
{ return _pimpl->end(); }
81
/** Insert a Solvable.
82
* \return \c true if it was actually inserted, or \c false if already present.
85
bool insert( const _Solv & solv_r )
86
{ return get().insert( asSolvable()( solv_r ) ).second; }
94
const Container & get() const
98
/** Pointer to implementation */
99
RWCOW_pointer<Container> _pimpl;
101
///////////////////////////////////////////////////////////////////
103
/** \relates SolvableSet Stream output */
104
std::ostream & operator<<( std::ostream & str, const SolvableSet & obj );
106
/////////////////////////////////////////////////////////////////
108
///////////////////////////////////////////////////////////////////
109
/////////////////////////////////////////////////////////////////
111
///////////////////////////////////////////////////////////////////
112
#endif // ZYPP_SAT_SOLVABLESET_H