Author: mlandres Date: Wed Jul 4 16:14:35 2007 New Revision: 5881 URL: http://svn.opensuse.org/viewcvs/zypp?rev=5881&view=rev Log: Added: ResPool::knownRepositoriesBegin() ResPool::knownRepositoriesEnd() ResPool::knownRepositoriesSize() Allows to Iterate all Repositories that contribute Resolvables to the Pool. Modified: branches/REFACTORING-10_3/libzypp/zypp/Repository.cc branches/REFACTORING-10_3/libzypp/zypp/Repository.h branches/REFACTORING-10_3/libzypp/zypp/ResPool.cc branches/REFACTORING-10_3/libzypp/zypp/ResPool.h branches/REFACTORING-10_3/libzypp/zypp/pool/PoolImpl.h branches/REFACTORING-10_3/libzypp/zypp/pool/PoolTraits.h Modified: branches/REFACTORING-10_3/libzypp/zypp/Repository.cc URL: http://svn.opensuse.org/viewcvs/zypp/branches/REFACTORING-10_3/libzypp/zypp/Repository.cc?rev=5881&r1=5880&r2=5881&view=diff ============================================================================== --- branches/REFACTORING-10_3/libzypp/zypp/Repository.cc (original) +++ branches/REFACTORING-10_3/libzypp/zypp/Repository.cc Wed Jul 4 16:14:35 2007 @@ -65,7 +65,7 @@ std::ostream & operator<<( std::ostream & str, const Repository & obj ) { - return str << "[" << obj.info().alias() << "]" << endl; + return str << "[" << obj.info().alias() << "]"; } bool operator==( const Repository & lhs, const Repository & rhs ) Modified: branches/REFACTORING-10_3/libzypp/zypp/Repository.h URL: http://svn.opensuse.org/viewcvs/zypp/branches/REFACTORING-10_3/libzypp/zypp/Repository.h?rev=5881&r1=5880&r2=5881&view=diff ============================================================================== --- branches/REFACTORING-10_3/libzypp/zypp/Repository.h (original) +++ branches/REFACTORING-10_3/libzypp/zypp/Repository.h Wed Jul 4 16:14:35 2007 @@ -97,6 +97,9 @@ /** \relates Repository */ bool operator==( const Repository & lhs, const Repository & rhs ); /** \relates Repository */ + inline bool operator!=( const Repository & lhs, const Repository & rhs ) + { return !( lhs == rhs ); } + /** \relates Repository */ bool operator<( const Repository & lhs, const Repository & rhs ); } Modified: branches/REFACTORING-10_3/libzypp/zypp/ResPool.cc URL: http://svn.opensuse.org/viewcvs/zypp/branches/REFACTORING-10_3/libzypp/zypp/ResPool.cc?rev=5881&r1=5880&r2=5881&view=diff ============================================================================== --- branches/REFACTORING-10_3/libzypp/zypp/ResPool.cc (original) +++ branches/REFACTORING-10_3/libzypp/zypp/ResPool.cc Wed Jul 4 16:14:35 2007 @@ -87,21 +87,30 @@ ResPool::byCapabilityIndex_iterator ResPool::byCapabilityIndexEnd( const std::string & index_r, Dep depType_r ) const { return _pimpl->_caphash.end( index_r, depType_r ); } + ResPool::size_type ResPool::knownRepositoriesSize() const + { return _pimpl->knownRepositories().size(); } + + ResPool::repository_iterator ResPool::knownRepositoriesBegin() const + { return _pimpl->knownRepositories().begin(); } + + ResPool::repository_iterator ResPool::knownRepositoriesEnd() const + { return _pimpl->knownRepositories().end(); } + void ResPool::setAdditionalRequire( const AdditionalCapSet & capset ) const { _pimpl->setAdditionalRequire( capset ); } ResPool::AdditionalCapSet & ResPool::additionalRequire() const { return _pimpl->additionalRequire(); } - + void ResPool::setAdditionalConflict( const AdditionalCapSet & capset ) const { _pimpl->setAdditionalConflict( capset ); } ResPool::AdditionalCapSet & ResPool::additionaConflict() const { return _pimpl->additionaConflict(); } - + void ResPool::setAdditionalProvide( const AdditionalCapSet & capset ) const { _pimpl->setAdditionalProvide( capset ); } ResPool::AdditionalCapSet & ResPool::additionaProvide() const { return _pimpl->additionaProvide(); } - + /****************************************************************** ** Modified: branches/REFACTORING-10_3/libzypp/zypp/ResPool.h URL: http://svn.opensuse.org/viewcvs/zypp/branches/REFACTORING-10_3/libzypp/zypp/ResPool.h?rev=5881&r1=5880&r2=5881&view=diff ============================================================================== --- branches/REFACTORING-10_3/libzypp/zypp/ResPool.h (original) +++ branches/REFACTORING-10_3/libzypp/zypp/ResPool.h Wed Jul 4 16:14:35 2007 @@ -46,6 +46,7 @@ typedef pool::PoolTraits::byName_iterator byName_iterator; typedef pool::PoolTraits::byCapabilityIndex_iterator byCapabilityIndex_iterator; typedef pool::PoolTraits::AdditionalCapSet AdditionalCapSet; + typedef pool::PoolTraits::repository_iterator repository_iterator; public: /** Default ctor: empty pool */ @@ -110,6 +111,17 @@ //@} public: + /** \name Iterate through all Repositories that contribute ResObjects. + */ + //@{ + size_type knownRepositoriesSize() const; + + repository_iterator knownRepositoriesBegin() const; + + repository_iterator knownRepositoriesEnd() const; + //@} + + public: /** \name Handling addition capabilities in the pool in order for solving it in * a solver run. This is used for tasks like needing a package with the name "foo". * The solver has to evaluate a proper package by his own. @@ -119,12 +131,12 @@ */ /** - * Handling additional requirement. E.G. need package "foo" and package + * Handling additional requirement. E.G. need package "foo" and package * "foo1" which has a greater version than 1.0: * * \code * CapSet capset; - * capset.insert (CapFactory().parse( ResTraits<Package>::kind, "foo")); + * capset.insert (CapFactory().parse( ResTraits<Package>::kind, "foo")); * capset.insert (CapFactory().parse( ResTraits<Package>::kind, "foo1 > 1.0")); * * // The user is setting this capablility @@ -141,36 +153,36 @@ * Handling additional conflicts. E.G. do not install anything which provides "foo": * * \code75 - * CapSet capset; + * CapSet capset; * capset.insert (CapFactory().parse( ResTraits<Package>::kind, "foo")); * * // The user is setting this capablility * ResPool::AdditionalCapSet aCapSet; * aCapSet[ResStatus::USER] = capset; * - * setAdditionalConflict( aCapSet ); + * setAdditionalConflict( aCapSet ); * \endcode - */ + */ void setAdditionalConflict( const AdditionalCapSet & capset ) const; AdditionalCapSet & additionaConflict() const; - + /** * Handling additional provides. This is used for ignoring a requirement. * e.G. Do ignore the requirement "foo": * * \code - * CapSet capset; + * CapSet capset; * capset.insert (CapFactory().parse( ResTraits<Package>::kind, "foo")); * * // The user is setting this capablility * ResPool::AdditionalCapSet aCapSet; * aCapSet[ResStatus::USER] = capset; * - * setAdditionalProvide( aCapSet ); + * setAdditionalProvide( aCapSet ); * \endcode - */ + */ void setAdditionalProvide( const AdditionalCapSet & capset ) const; - AdditionalCapSet & additionaProvide() const; + AdditionalCapSet & additionaProvide() const; private: /** */ Modified: branches/REFACTORING-10_3/libzypp/zypp/pool/PoolImpl.h URL: http://svn.opensuse.org/viewcvs/zypp/branches/REFACTORING-10_3/libzypp/zypp/pool/PoolImpl.h?rev=5881&r1=5880&r2=5881&view=diff ============================================================================== --- branches/REFACTORING-10_3/libzypp/zypp/pool/PoolImpl.h (original) +++ branches/REFACTORING-10_3/libzypp/zypp/pool/PoolImpl.h Wed Jul 4 16:14:35 2007 @@ -15,6 +15,7 @@ #include <iosfwd> #include <map> +#include "zypp/base/Easy.h" #include "zypp/pool/PoolTraits.h" #include "zypp/ResPoolProxy.h" #include "zypp/ZYppFactory.h" @@ -26,7 +27,6 @@ namespace pool { ///////////////////////////////////////////////////////////////// - /////////////////////////////////////////////////////////////////// // // CLASS NAME : NameHash @@ -191,7 +191,8 @@ typedef PoolTraits::size_type size_type; typedef PoolTraits::Inserter Inserter; typedef PoolTraits::Deleter Deleter; - typedef PoolTraits::AdditionalCapSet AdditionalCapSet; + typedef PoolTraits::AdditionalCapSet AdditionalCapSet; + typedef PoolTraits::RepoContainerT KnownRepositories; public: /** Default ctor */ @@ -233,11 +234,11 @@ { return _store.end(); } /** - * Handling additional requirement. E.G. need package "foo" and package + * Handling additional requirement. E.G. need package "foo" and package * "foo1" which has a greater version than 1.0: * * Capset capset; - * capset.insert (CapFactory().parse( ResTraits<Package>::kind, "foo")); + * capset.insert (CapFactory().parse( ResTraits<Package>::kind, "foo")); * capset.insert (CapFactory().parse( ResTraits<Package>::kind, "foo1 > 1.0")); * * setAdditionalRequire( capset ); @@ -250,25 +251,25 @@ /** * Handling additional conflicts. E.G. do not install anything which provides "foo": * - * Capset capset; + * Capset capset; * capset.insert (CapFactory().parse( ResTraits<Package>::kind, "foo")); * - * setAdditionalConflict( capset ); - */ + * setAdditionalConflict( capset ); + */ void setAdditionalConflict( const AdditionalCapSet & capset ) const - { _additionaConflict = capset; } + { _additionaConflict = capset; } AdditionalCapSet & additionaConflict() const { return _additionaConflict; } - + /** * Handling additional provides. This is used for ignoring a requirement. * e.G. Do ignore the requirement "foo": * - * Capset capset; + * Capset capset; * capset.insert (CapFactory().parse( ResTraits<Package>::kind, "foo")); * - * setAdditionalProvide( cap ); - */ + * setAdditionalProvide( cap ); + */ void setAdditionalProvide( const AdditionalCapSet & capset ) const { _additionaProvide = capset; } AdditionalCapSet & additionaProvide() const @@ -282,7 +283,8 @@ _additionalRequire.clear(); _additionaConflict.clear(); _additionaProvide.clear(); - + // don't miss to invalidate ResPoolProxy + invalidateProxy(); return; } @@ -290,6 +292,27 @@ void eraseInstalled() const; public: + /** Access list of Repositories that contribute ResObjects. + * Built on demand. + */ + const KnownRepositories & knownRepositories() const + { + if ( ! _knownRepositoriesPtr ) + { + _knownRepositoriesPtr.reset( new KnownRepositories ); + for_( it, _store.begin(), _store.end() ) + { + if ( (*it)->repository() != Repository::noRepository ) + { + _knownRepositoriesPtr->insert( (*it)->repository() ); + } + } + } + + return *_knownRepositoriesPtr; + } + + public: /** \name Save and restore state. */ //@{ void SaveState( const ResObject::Kind & kind_r ); @@ -314,9 +337,18 @@ return *_poolProxy; } void invalidateProxy() - { _poolProxy.reset(); } + { + _poolProxy.reset(); + _knownRepositoriesPtr.reset(); + } mutable shared_ptr<ResPoolProxy> _poolProxy; + + private: + /** Set of known repositories built on demand. + * Invalidated on any Pool content change. Rebuilt on next access. + */ + mutable scoped_ptr<KnownRepositories> _knownRepositoriesPtr; }; /////////////////////////////////////////////////////////////////// Modified: branches/REFACTORING-10_3/libzypp/zypp/pool/PoolTraits.h URL: http://svn.opensuse.org/viewcvs/zypp/branches/REFACTORING-10_3/libzypp/zypp/pool/PoolTraits.h?rev=5881&r1=5880&r2=5881&view=diff ============================================================================== --- branches/REFACTORING-10_3/libzypp/zypp/pool/PoolTraits.h (original) +++ branches/REFACTORING-10_3/libzypp/zypp/pool/PoolTraits.h Wed Jul 4 16:14:35 2007 @@ -23,9 +23,10 @@ /////////////////////////////////////////////////////////////////// namespace zypp { ///////////////////////////////////////////////////////////////// - + class CapAndItem; - + class Repository; + /////////////////////////////////////////////////////////////////// namespace pool { ///////////////////////////////////////////////////////////////// @@ -89,6 +90,10 @@ /** hashed by capability index */ typedef const_capitemiterator byCapabilityIndex_iterator; + /* list of known Repositories */ + typedef std::set<Repository> RepoContainerT; + typedef RepoContainerT::const_iterator repository_iterator; + typedef PoolImpl Impl; typedef shared_ptr<PoolImpl> Impl_Ptr; typedef shared_ptr<const PoolImpl> Impl_constPtr; @@ -97,7 +102,7 @@ /** Map of CapSet and "who" has set it*/ typedef std::mapResStatus::TransactByValue,CapSet AdditionalCapSet; - + }; /////////////////////////////////////////////////////////////////// -- To unsubscribe, e-mail: zypp-commit+unsubscribe@opensuse.org For additional commands, e-mail: zypp-commit+help@opensuse.org