}
#include <iosfwd>
-#include "zypp/base/Tr1hash.h"
+#include "zypp/base/Hash.h"
#include "zypp/base/NonCopyable.h"
#include "zypp/base/SerialNumber.h"
+#include "zypp/base/SetTracker.h"
#include "zypp/sat/detail/PoolMember.h"
#include "zypp/sat/Queue.h"
#include "zypp/RepoInfo.h"
///////////////////////////////////////////////////////////////////
namespace sat
{ /////////////////////////////////////////////////////////////////
+ class SolvableSet;
///////////////////////////////////////////////////////////////////
namespace detail
{ /////////////////////////////////////////////////////////////////
* \todo actually requires a watcher.
*/
void prepare() const;
- /** \ref prepare plus some expensive checks done before solving only. */
- void prepareForSolving() const;
private:
/** Invalidate housekeeping data (e.g. whatprovides) if the
*/
void setDirty( const char * a1 = 0, const char * a2 = 0, const char * a3 = 0 );
+ /** Invalidate locale related housekeeping data.
+ */
+ void localeSetDirty( const char * a1 = 0, const char * a2 = 0, const char * a3 = 0 );
+
/** Invalidate housekeeping data (e.g. whatprovides) if dependencies changed.
*/
void depSetDirty( const char * a1 = 0, const char * a2 = 0, const char * a3 = 0 );
/** Creating a new repo named \a name_r. */
CRepo * _createRepo( const std::string & name_r );
- /** Creating a new repo named \a name_r. */
+ /** Delete repo \a repo_r from pool. */
void _deleteRepo( CRepo * repo_r );
/** Adding solv file to a repo.
{ prepare(); return ::pool_whatprovides( _pool, cap_r.id() ); }
public:
- /** \name Requested locales. */
+ /// \name Requested locales.
+ /// The requested LocaleSets managed in _requestedLocalesTracker
+ /// are unexpanded; i.e. they contain just the pure user selection.
+ /// The resolver however uses expanded sets ('de_DE' will also
+ /// include its fallback locales 'de', (en); here in the namespace:
+ /// callback and in the Resolver itself).
//@{
+ /** */
void setTextLocale( const Locale & locale_r );
- void setRequestedLocales( const LocaleSet & locales_r );
- bool addRequestedLocale( const Locale & locale_r );
- bool eraseRequestedLocale( const Locale & locale_r );
+
+ /** Start tracking changes based on this \a locales_r.
+ * Usually called on TargetInit.
+ */
+ void initRequestedLocales( const LocaleSet & locales_r );
+
+ /** Added since last initRequestedLocales. */
+ const LocaleSet & getAddedRequestedLocales() const
+ { return _requestedLocalesTracker.added(); }
+
+ /** Removed since last initRequestedLocales. */
+ const LocaleSet & getRemovedRequestedLocales() const
+ { return _requestedLocalesTracker.removed(); }
+
+ /** Current set of requested Locales. */
const LocaleSet & getRequestedLocales() const
- { return _requestedLocales; }
+ { return _requestedLocalesTracker.current(); }
bool isRequestedLocale( const Locale & locale_r ) const
- {
- LocaleSet::const_iterator it( _requestedLocales.find( locale_r ) );
- return it != _requestedLocales.end();
- }
+ { return _requestedLocalesTracker.contains( locale_r ); }
+ /** User change (tracked). */
+ void setRequestedLocales( const LocaleSet & locales_r );
+ /** User change (tracked). */
+ bool addRequestedLocale( const Locale & locale_r );
+ /** User change (tracked). */
+ bool eraseRequestedLocale( const Locale & locale_r );
+
+ /** All Locales occurring in any repo. */
const LocaleSet & getAvailableLocales() const;
bool isAvailableLocale( const Locale & locale_r ) const
LocaleSet::const_iterator it( avl.find( locale_r ) );
return it != avl.end();
}
+
+ typedef base::SetTracker<IdStringSet> TrackedLocaleIds;
+
+ /** Expanded _requestedLocalesTracker for solver.*/
+ const TrackedLocaleIds & trackedLocaleIds() const;
//@}
public:
/** \name Multiversion install. */
//@{
- typedef IdStringSet MultiversionList;
+ typedef SolvableSet MultiversionList;
- const MultiversionList & multiversionList() const
- {
- if ( ! _multiversionListPtr )
- multiversionListInit();
- return *_multiversionListPtr;
- }
+ const MultiversionList & multiversionList() const;
- bool isMultiversion( IdString ident_r ) const
- {
- const MultiversionList & l( multiversionList() );
- return l.find( ident_r ) != l.end();
- }
+ bool isMultiversion( const Solvable & solv_r ) const;
+
+ void multiversionSpecChanged();
//@}
public:
bool isOnSystemByUser( IdString ident_r ) const
{ return !_autoinstalled.contains( ident_r.id() ); }
+
+ bool isOnSystemByAuto( IdString ident_r ) const
+ { return _autoinstalled.contains( ident_r.id() ); }
//@}
public:
std::map<RepoIdType,RepoInfo> _repoinfos;
/** */
- LocaleSet _requestedLocales;
+ base::SetTracker<LocaleSet> _requestedLocalesTracker;
+ mutable scoped_ptr<TrackedLocaleIds> _trackedLocaleIdsPtr;
+
mutable scoped_ptr<LocaleSet> _availableLocalesPtr;
- mutable std::tr1::unordered_set<IdString> _locale2Solver;
/** */
void multiversionListInit() const;