Improve 'provides' lookup.
[platform/upstream/libzypp.git] / zypp / pool / PoolImpl.h
1 /*---------------------------------------------------------------------\
2 |                          ____ _   __ __ ___                          |
3 |                         |__  / \ / / . \ . \                         |
4 |                           / / \ V /|  _/  _/                         |
5 |                          / /__ | | | | | |                           |
6 |                         /_____||_| |_| |_|                           |
7 |                                                                      |
8 \---------------------------------------------------------------------*/
9 /** \file       zypp/pool/PoolImpl.h
10  *
11 */
12 #ifndef ZYPP_POOL_POOLIMPL_H
13 #define ZYPP_POOL_POOLIMPL_H
14
15 #include <iosfwd>
16
17 #include "zypp/pool/PoolTraits.h"
18
19 ///////////////////////////////////////////////////////////////////
20 namespace zypp
21 { /////////////////////////////////////////////////////////////////
22   ///////////////////////////////////////////////////////////////////
23   namespace pool
24   { /////////////////////////////////////////////////////////////////
25
26     ///////////////////////////////////////////////////////////////////
27     //
28     //  CLASS NAME : PoolImpl
29     //
30     /** */
31     class PoolImpl
32     {
33       friend std::ostream & operator<<( std::ostream & str, const PoolImpl & obj );
34
35     public:
36     /** */
37     typedef PoolTraits::Item           Item;
38     typedef PoolTraits::ContainerT     ContainerT;
39     typedef PoolTraits::IndexContainerT    IndexContainerT;
40     typedef PoolTraits::size_type      size_type;
41     typedef PoolTraits::iterator       iterator;
42     typedef PoolTraits::const_iterator const_iterator;
43     typedef PoolTraits::indexiterator       indexiterator;
44     typedef PoolTraits::const_indexiterator const_indexiterator;
45     typedef PoolTraits::Inserter       Inserter;
46     typedef PoolTraits::Deleter        Deleter;
47
48     public:
49       /** Default ctor */
50       PoolImpl();
51       /** Dtor */
52       ~PoolImpl();
53
54     public:
55       /**  */
56       ContainerT & store()
57       { return _store; }
58       /**  */
59       const ContainerT & store() const
60       { return _store; }
61
62       /**  */
63       IndexContainerT & providesstore()
64       { return _providesstore; }
65       /**  */
66       const IndexContainerT & providesstore() const
67       { return _providesstore; }
68
69       /**  */
70       bool empty() const
71       { return _store.empty(); }
72       /**  */
73       size_type size() const
74       { return _store.size(); }
75
76       /** */
77       iterator begin()
78       { return _store.begin(); }
79       /** */
80       const_iterator begin() const
81       { return _store.begin(); }
82
83       /** */
84       indexiterator providesbegin(const std::string & tag_r)
85       { return _providesstore.lower_bound (tag_r); }
86       /** */
87       const_indexiterator providesbegin(const std::string & tag_r) const
88       { return _providesstore.lower_bound (tag_r); }
89
90       /** */
91       iterator end()
92       { return _store.end(); }
93       /** */
94       const_iterator end() const
95       { return _store.end(); }
96
97       /** */
98       indexiterator providesend(const std::string & tag_r)
99       { return _providesstore.upper_bound (tag_r); }
100       /** */
101       const_indexiterator providesend(const std::string & tag_r) const
102       { return _providesstore.upper_bound (tag_r); }
103
104       /** */
105       void clear()
106       { _store.clear();
107         _providesstore.clear();
108         return;
109       }
110
111     public:
112       /** */
113       ContainerT _store;
114       IndexContainerT _providesstore;
115     };
116     ///////////////////////////////////////////////////////////////////
117
118     /** \relates PoolImpl Stream output */
119     std::ostream & operator<<( std::ostream & str, const PoolImpl & obj );
120
121     /////////////////////////////////////////////////////////////////
122   } // namespace pool
123   ///////////////////////////////////////////////////////////////////
124   /////////////////////////////////////////////////////////////////
125 } // namespace zypp
126 ///////////////////////////////////////////////////////////////////
127 #endif // ZYPP_POOL_POOLIMPL_H