~thopiekar/zypper/libzypp-manual-import

« back to all changes in this revision

Viewing changes to zypp/sat/SolvableSet.h

  • Committer: Thomas-Karl Pietrowski
  • Date: 2014-01-29 22:44:28 UTC
  • Revision ID: thopiekar@googlemail.com-20140129224428-gpcqnsdakby362n8
firstĀ import

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*---------------------------------------------------------------------\
 
2
|                          ____ _   __ __ ___                          |
 
3
|                         |__  / \ / / . \ . \                         |
 
4
|                           / / \ V /|  _/  _/                         |
 
5
|                          / /__ | | | | | |                           |
 
6
|                         /_____||_| |_| |_|                           |
 
7
|                                                                      |
 
8
\---------------------------------------------------------------------*/
 
9
/** \file       zypp/sat/SolvableSet.h
 
10
 *
 
11
*/
 
12
#ifndef ZYPP_SAT_SOLVABLESET_H
 
13
#define ZYPP_SAT_SOLVABLESET_H
 
14
 
 
15
#include <iosfwd>
 
16
 
 
17
#include "zypp/base/PtrTypes.h"
 
18
#include "zypp/base/Tr1hash.h"
 
19
#include "zypp/sat/Solvable.h"
 
20
#include "zypp/sat/SolvIterMixin.h"
 
21
 
 
22
///////////////////////////////////////////////////////////////////
 
23
namespace zypp
 
24
{ /////////////////////////////////////////////////////////////////
 
25
  ///////////////////////////////////////////////////////////////////
 
26
  namespace sat
 
27
  { /////////////////////////////////////////////////////////////////
 
28
 
 
29
    ///////////////////////////////////////////////////////////////////
 
30
    //
 
31
    //  CLASS NAME : SolvableSet
 
32
    //
 
33
    /** Solvable set wrapper to allow adding additioanal convenience iterators.
 
34
     */
 
35
    class SolvableSet : public SolvIterMixin<SolvableSet,std::tr1::unordered_set<Solvable>::const_iterator>
 
36
    {
 
37
      friend std::ostream & operator<<( std::ostream & str, const SolvableSet & obj );
 
38
 
 
39
      public:
 
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
 
44
 
 
45
      public:
 
46
        /** Default ctor */
 
47
        SolvableSet()
 
48
        : _pimpl( new Container )
 
49
        {}
 
50
 
 
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 ) )
 
55
        {}
 
56
 
 
57
      public:
 
58
        /** Whether the set is epmty. */
 
59
        bool empty() const
 
60
        { return _pimpl->empty(); }
 
61
 
 
62
        /** Size of the set. */
 
63
        size_type size() const
 
64
        { return _pimpl->size(); }
 
65
 
 
66
        /** */
 
67
        template<class _Solv>
 
68
        bool contains( const _Solv & solv_r ) const
 
69
        { return( get().find( asSolvable()( solv_r ) ) != end() ); }
 
70
 
 
71
        /** Iterator pointing to the first \ref Solvable. */
 
72
        const_iterator begin() const
 
73
        { return _pimpl->begin(); }
 
74
 
 
75
        /** Iterator pointing behind the last \ref Solvable. */
 
76
        const_iterator end() const
 
77
        { return _pimpl->end(); }
 
78
 
 
79
      public:
 
80
 
 
81
        /** Insert a Solvable.
 
82
         * \return \c true if it was actually inserted, or \c false if already present.
 
83
        */
 
84
        template<class _Solv>
 
85
        bool insert( const _Solv & solv_r )
 
86
        { return get().insert( asSolvable()( solv_r ) ).second; }
 
87
 
 
88
      public:
 
89
        /** The set. */
 
90
        Container & get()
 
91
        { return *_pimpl; }
 
92
 
 
93
        /** The set. */
 
94
        const Container & get() const
 
95
        { return *_pimpl; }
 
96
 
 
97
      private:
 
98
        /** Pointer to implementation */
 
99
        RWCOW_pointer<Container> _pimpl;
 
100
    };
 
101
    ///////////////////////////////////////////////////////////////////
 
102
 
 
103
    /** \relates SolvableSet Stream output */
 
104
    std::ostream & operator<<( std::ostream & str, const SolvableSet & obj );
 
105
 
 
106
    /////////////////////////////////////////////////////////////////
 
107
  } // namespace sat
 
108
  ///////////////////////////////////////////////////////////////////
 
109
  /////////////////////////////////////////////////////////////////
 
110
} // namespace zypp
 
111
///////////////////////////////////////////////////////////////////
 
112
#endif // ZYPP_SAT_SOLVABLESET_H