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