- Create the cache directly from the schema (installed) file.
[platform/upstream/libzypp.git] / zypp / ResPoolManager.h
1 /*---------------------------------------------------------------------\
2 |                          ____ _   __ __ ___                          |
3 |                         |__  / \ / / . \ . \                         |
4 |                           / / \ V /|  _/  _/                         |
5 |                          / /__ | | | | | |                           |
6 |                         /_____||_| |_| |_|                           |
7 |                                                                      |
8 \---------------------------------------------------------------------*/
9 /** \file       zypp/ResPoolManager.h
10  *
11 */
12 #ifndef ZYPP_RESPOOLMANAGER_H
13 #define ZYPP_RESPOOLMANAGER_H
14
15 #include <iosfwd>
16
17 #include <zypp/ResPool.h>
18 #include <zypp/ResPoolProxy.h>
19
20 ///////////////////////////////////////////////////////////////////
21 namespace zypp
22 { /////////////////////////////////////////////////////////////////
23
24   ///////////////////////////////////////////////////////////////////
25   //
26   //    CLASS NAME : ResPoolManager
27   //
28   /** Manage a ResObject pool. */
29   class ResPoolManager
30   {
31     friend std::ostream & operator<<( std::ostream & str, const ResPoolManager & obj );
32
33   public:
34     /** */
35     typedef pool::PoolTraits::Item           Item;
36     typedef pool::PoolTraits::size_type      size_type;
37     typedef pool::PoolTraits::iterator       iterator;
38     typedef pool::PoolTraits::const_iterator const_iterator;
39
40   public:
41     /** Default ctor */
42     ResPoolManager();
43     /** Dtor */
44     ~ResPoolManager();
45
46     ResPool accessor() const
47     { return ResPool( _pimpl.getPtr() ); }
48
49     /** \todo Speedup by using a data mamaber invaidated only
50      * whenever the pool content changes */
51     ResPoolProxy proxy() const;
52
53   public:
54     /**  */
55     void insert( ResObject::constPtr ptr_r, bool installed = false )
56     { inserter(installed)( ptr_r ); }
57
58     /**  */
59     template <class _InputIterator>
60       void insert( _InputIterator first_r, _InputIterator last_r, bool installed = false )
61       { std::for_each( first_r, last_r, inserter(installed) ); }
62
63     /**  */
64     void erase( ResObject::constPtr ptr_r )
65     { deleter()( ptr_r ); }
66
67     /** unsafe
68     void erase( iterator first_r, iterator last_r )
69     { std::for_each( first_r, last_r, deleter() ); }
70     */
71
72     /**  */
73     void clear();
74
75   private:
76     /**  */
77     typedef pool::PoolTraits::ItemContainerT  ContainerT;
78     typedef pool::PoolTraits::Impl        Impl;
79     typedef pool::PoolTraits::Inserter    Inserter;
80     typedef pool::PoolTraits::Deleter     Deleter;
81
82   private:
83     /** Pointer to implementation */
84     RW_pointer<pool::PoolTraits::Impl> _pimpl;
85     /**  */
86     Inserter inserter( bool installed )
87     { return Inserter( *_pimpl, installed ); }
88     /**  */
89     Deleter deleter()
90     { return Deleter( *_pimpl ); }
91   };
92   ///////////////////////////////////////////////////////////////////
93
94   /** \relates ResPoolManager Stream output */
95   std::ostream & operator<<( std::ostream & str, const ResPoolManager & obj );
96
97   /////////////////////////////////////////////////////////////////
98 } // namespace zypp
99 ///////////////////////////////////////////////////////////////////
100 #endif // ZYPP_RESPOOLMANAGER_H