1 /*---------------------------------------------------------------------\
3 | |__ / \ / / . \ . \ |
8 \---------------------------------------------------------------------*/
9 /** \file zypp/sat/Pool.cc
16 #include <satsolver/repo_solv.h>
17 #include <satsolver/pool.h>
23 #include "zypp/base/Logger.h"
24 #include "zypp/base/Gettext.h"
25 #include "zypp/base/Exception.h"
27 #include "zypp/sat/Pool.h"
28 #include "zypp/sat/Repo.h"
30 ///////////////////////////////////////////////////////////////////
32 { /////////////////////////////////////////////////////////////////
33 ///////////////////////////////////////////////////////////////////
35 { /////////////////////////////////////////////////////////////////
37 ///////////////////////////////////////////////////////////////////
41 ///////////////////////////////////////////////////////////////////
43 ///////////////////////////////////////////////////////////////////
45 // METHOD NAME : Pool::Pool
49 : _raii( ::pool_create(), ::pool_free )
50 , _pool( *_raii.value() )
54 _raii.resetDispose(); // no call to ::pool_free
55 ZYPP_THROW( Exception( _("Can not create sat-pool.") ) );
59 ///////////////////////////////////////////////////////////////////
61 // METHOD NAME : Pool::~Pool
67 unsigned Pool::reposSize() const
68 { return _pool.nrepos; }
70 RepoIterator Pool::reposBegin() const
71 { return make_transform_iterator( _pool.repos, detail::mkRepo() ); }
73 RepoIterator Pool::reposEnd() const
74 { return make_transform_iterator( _pool.repos+_pool.nrepos, detail::mkRepo() ); }
77 unsigned Pool::solvablesSize() const
78 { return _pool.nsolvables;}
80 SolvableIterator Pool::solvablesBegin() const
81 { return SolvableIterator( _pool.solvables ); }
83 SolvableIterator Pool::solvablesEnd() const
84 { return SolvableIterator( _pool.solvables+_pool.nsolvables ); }
91 SEC << (void*)(*_pool.repos)<< Repo( *_pool.repos ) << " " << (*_pool.repos)->name << std::endl;
95 SEC << "NOREPO" << std::endl;
100 Repo Pool::addRepoSolv( const Pathname & file_r )
102 AutoDispose<FILE*> file( ::fopen( file_r.c_str(), "r" ), ::fclose );
109 #warning Workaround sat-repo not doing strdup on name.
110 // simply spend a static array of reponames
111 static std::set<std::string> _reponames;
112 return ::pool_addrepo_solv( &_pool, file, _reponames.insert( file_r.asString() ).first->c_str() );
115 /******************************************************************
117 ** FUNCTION NAME : operator<<
118 ** FUNCTION TYPE : std::ostream &
120 std::ostream & operator<<( std::ostream & str, const Pool & obj )
122 return str << "sat::pool(){"
123 << obj.reposSize() << "repos|"
124 << obj.solvablesSize() << "slov}";
128 /////////////////////////////////////////////////////////////////
130 ///////////////////////////////////////////////////////////////////
131 /////////////////////////////////////////////////////////////////
133 ///////////////////////////////////////////////////////////////////