1 /*---------------------------------------------------------------------\
3 | |__ / \ / / . \ . \ |
8 \---------------------------------------------------------------------*/
9 /** \file zypp/sat/Pool.h
12 #ifndef ZYPP_SAT_POOL_H
13 #define ZYPP_SAT_POOL_H
17 #include "zypp/Pathname.h"
19 #include "zypp/sat/detail/PoolMember.h"
20 #include "zypp/Repository.h"
21 #include "zypp/sat/WhatProvides.h"
23 ///////////////////////////////////////////////////////////////////
25 { /////////////////////////////////////////////////////////////////
30 ///////////////////////////////////////////////////////////////////
32 { /////////////////////////////////////////////////////////////////
34 ///////////////////////////////////////////////////////////////////
40 * Explicitly shared singleton \ref Pool::instance.
42 class Pool : protected detail::PoolMember
45 typedef detail::SolvableIterator SolvableIterator;
46 typedef zypp::detail::RepositoryIterator RepositoryIterator;
47 typedef detail::size_type size_type;
50 /** Singleton ctor. */
51 static Pool instance()
54 /** Ctor from \ref PoolMember. */
55 Pool( const detail::PoolMember & )
59 /** Internal array size for stats only. */
60 size_type capacity() const;
62 /** Housekeeping data serial number. */
63 const SerialNumber & serial() const;
65 /** Update housekeeping data if necessary (e.g. whatprovides). */
69 /** Whether \ref Pool contains repos. */
70 bool reposEmpty() const;
72 /** Number of repos in \ref Pool. */
73 size_type reposSize() const;
75 /** Iterator to the first \ref Repository. */
76 RepositoryIterator reposBegin() const;
78 /** Iterator behind the last \ref Repository. */
79 RepositoryIterator reposEnd() const;
81 /** Return a \ref Repository named \c alias_r.
82 * It a such a \ref Repository does not already exist
83 * a new empty \ref Repository is created.
85 Repository reposInsert( const std::string & alias_r );
87 /** Find a \ref Repository named \c alias_r.
88 * Returns \ref norepository if there is no such \ref Repository.
90 Repository reposFind( const std::string & alias_r ) const;
92 /** Remove a \ref Repository named \c alias_r.
93 * \see \ref Repository::eraseFromPool
95 void reposErase( const std::string & alias_r )
96 { reposFind( alias_r ).eraseFromPool(); }
99 /** Reserved system repository alias \c @System. */
100 static const std::string & systemRepoAlias();
102 /** Return the system repository if it is on the pool. */
103 Repository findSystemRepo() const;
105 /** Return the system repository, create it if missing. */
106 Repository systemRepo();
109 /** Load \ref Solvables from a solv-file into a \ref Repository named \c name_r.
110 * In case of an exception the \ref Repository is removed from the \ref Pool.
111 * \throws Exception if loading the solv-file fails.
112 * \see \ref Repository::EraseFromPool
114 Repository addRepoSolv( const Pathname & file_r, const std::string & name_r );
115 /** \overload Using the files basename as \ref Repository name. */
116 Repository addRepoSolv( const Pathname & file_r );
117 /** \overload Using the \ref RepoInfo::alias \ref Repo name.
118 * Additionally stores the \ref RepoInfo. \See \ref Prool::setInfo.
120 Repository addRepoSolv( const Pathname & file_r, const RepoInfo & info_r );
123 /** Load \ref Solvables from a helix-file into a \ref Repository named \c name_r.
124 * Supports loading of gzip compressed files (.gz). In case of an exception
125 * the \ref Repository is removed from the \ref Pool.
126 * \throws Exception if loading the helix-file fails.
127 * \see \ref Repository::EraseFromPool
129 Repository addRepoHelix( const Pathname & file_r, const std::string & name_r );
130 /** \overload Using the files basename as \ref Repository name. */
131 Repository addRepoHelix( const Pathname & file_r );
132 /** \overload Using the \ref RepoInfo::alias \ref Repo name.
133 * Additionally stores the \ref RepoInfo. \See \ref Prool::setInfo.
135 Repository addRepoHelix( const Pathname & file_r, const RepoInfo & info_r );
138 /** Whether \ref Pool contains solvables. */
139 bool solvablesEmpty() const;
141 /** Number of solvables in \ref Pool. */
142 size_type solvablesSize() const;
144 /** Iterator to the first \ref Solvable. */
145 SolvableIterator solvablesBegin() const;
147 /** Iterator behind the last \ref Solvable. */
148 SolvableIterator solvablesEnd() const;
151 /** \name Iterate all Solvables matching a \c _Filter. */
153 template<class _Filter>
154 filter_iterator<_Filter,SolvableIterator> filterBegin( const _Filter & filter_r ) const
155 { return make_filter_iterator( filter_r, solvablesBegin(), solvablesEnd() ); }
157 template<class _Filter>
158 filter_iterator<_Filter,SolvableIterator> filterEnd( const _Filter & filter_r ) const
159 { return make_filter_iterator( filter_r, solvablesEnd(), solvablesEnd() ); }
163 /** Conainer of all \ref Solvable providing \c cap_r. */
164 WhatProvides whatProvides( Capability cap_r ) const
165 { return WhatProvides( cap_r ); }
168 /** \name Requested locales. */
170 /** Set the requested locales.
171 * Languages to be supported by the system, e.g. language specific
172 * packages to be installed.
174 void setRequestedLocales( const LocaleSet & locales_r );
176 /** Add one \ref Locale to the set of requested locales.
177 * Return \c true if \c locale_r was newly added to the set.
179 bool addRequestedLocale( const Locale & locale_r );
181 /** Erase one \ref Locale from the set of requested locales.
182 * Return \c false if \c locale_r was not found in the set.
184 bool eraseRequestedLocale( const Locale & locale_r );
186 /** Return the requested locales.
187 * \see \ref setRequestedLocales
189 const LocaleSet & getRequestedLocales() const;
191 /** Wheter this \ref Locale is in the set of requested locales. */
192 bool isRequestedLocale( const Locale & locale_r ) const;
194 /** Get the set of available locales.
195 * This is computed from the package data so it actually
196 * represents all locales packages claim to support.
198 const LocaleSet & getAvailableLocales() const;
200 /** Wheter this \ref Locale is in the set of available locales. */
201 bool isAvailableLocale( const Locale & locale_r ) const;
205 /** Expert backdoor. */
206 ::_Pool * get() const;
211 ///////////////////////////////////////////////////////////////////
213 /** \relates Pool Stream output */
214 std::ostream & operator<<( std::ostream & str, const Pool & obj );
217 inline bool operator==( const Pool & lhs, const Pool & rhs )
218 { return lhs.get() == rhs.get(); }
221 inline bool operator!=( const Pool & lhs, const Pool & rhs )
222 { return lhs.get() != rhs.get(); }
224 /////////////////////////////////////////////////////////////////
226 ///////////////////////////////////////////////////////////////////
227 /////////////////////////////////////////////////////////////////
229 ///////////////////////////////////////////////////////////////////
230 #endif // ZYPP_SAT_POOL_H