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 name_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 & name_r );
87 /** Find a \ref Repository named \c name_r.
88 * Returns \ref norepository if there is no such \ref Repository.
90 Repository reposFind( const std::string & name_r ) const;
92 /** Remove a \ref Repository named \c name_r.
93 * \see \ref Repository::eraseFromPool
95 void reposErase( const std::string & name_r )
96 { reposFind( name_r ).eraseFromPool(); }
99 /** Reserved system repository name \c @System. */
100 static const std::string & systemRepoName();
102 /** Return the system repository. */
103 Repository systemRepo()
104 { return reposInsert( systemRepoName() ); }
107 /** Load \ref Solvables from a solv-file into a \ref Repository named \c name_r.
108 * In case of an exception the \ref Repository is removed from the \ref Pool.
109 * \throws Exception if loading the solv-file fails.
110 * \see \ref Repository::EraseFromPool
112 Repository addRepoSolv( const Pathname & file_r, const std::string & name_r );
113 /** \overload Using the files basename as \ref Repository name. */
114 Repository addRepoSolv( const Pathname & file_r );
115 /** \overload Using the \ref RepoInfo::alias \ref Repo name.
116 * Additionally stores the \ref RepoInfo. \See \ref Prool::setInfo.
118 Repository addRepoSolv( const Pathname & file_r, const RepoInfo & info_r );
121 /** Whether \ref Pool contains solvables. */
122 bool solvablesEmpty() const;
124 /** Number of solvables in \ref Pool. */
125 size_type solvablesSize() const;
127 /** Iterator to the first \ref Solvable. */
128 SolvableIterator solvablesBegin() const;
130 /** Iterator behind the last \ref Solvable. */
131 SolvableIterator solvablesEnd() const;
134 /** \name Iterate all Solvables matching a \c _Filter. */
136 template<class _Filter>
137 filter_iterator<_Filter,SolvableIterator> filterBegin( const _Filter & filter_r ) const
138 { return make_filter_iterator( filter_r, solvablesBegin(), solvablesEnd() ); }
140 template<class _Filter>
141 filter_iterator<_Filter,SolvableIterator> filterEnd( const _Filter & filter_r ) const
142 { return make_filter_iterator( filter_r, solvablesEnd(), solvablesEnd() ); }
146 /** Conainer of all \ref Solvable providing \c cap_r. */
147 WhatProvides whatProvides( Capability cap_r ) const
148 { return WhatProvides( cap_r ); }
151 /** \name Requested locales. */
153 /** Set the requested locales.
154 * Languages to be supported by the system, e.g. language specific
155 * packages to be installed.
157 void setRequestedLocales( const LocaleSet & locales_r );
159 /** Add one \ref Locale to the set of requested locales.
160 * Return \c true if \c locale_r was newly added to the set.
162 bool addRequestedLocale( const Locale & locale_r );
164 /** Erase one \ref Locale from the set of requested locales.
165 * Return \c false if \c locale_r was not found in the set.
167 bool eraseRequestedLocale( const Locale & locale_r );
169 /** Return the requested locales.
170 * \see \ref setRequestedLocales
172 const LocaleSet & getRequestedLocales() const;
174 /** Wheter this \ref Locale is in the set of requested locales. */
175 bool isRequestedLocale( const Locale & locale_r ) const;
177 /** Get the set of available locales.
178 * This is computed from the package data so it actually
179 * represents all locales packages claim to support.
181 const LocaleSet & getAvailableLocales() const;
183 /** Wheter this \ref Locale is in the set of available locales. */
184 bool isAvailableLocale( const Locale & locale_r ) const;
188 /** Expert backdoor. */
189 ::_Pool * get() const;
194 ///////////////////////////////////////////////////////////////////
196 /** \relates Pool Stream output */
197 std::ostream & operator<<( std::ostream & str, const Pool & obj );
200 inline bool operator==( const Pool & lhs, const Pool & rhs )
201 { return lhs.get() == rhs.get(); }
204 inline bool operator!=( const Pool & lhs, const Pool & rhs )
205 { return lhs.get() != rhs.get(); }
207 /////////////////////////////////////////////////////////////////
209 ///////////////////////////////////////////////////////////////////
210 /////////////////////////////////////////////////////////////////
212 ///////////////////////////////////////////////////////////////////
213 #endif // ZYPP_SAT_POOL_H