1 /*---------------------------------------------------------------------\
3 | |__ / \ / / . \ . \ |
8 \---------------------------------------------------------------------*/
9 /** \file zypp/pool/PoolImpl.cc
13 //#include "zypp/base/Logger.h"
15 #include "zypp/pool/PoolImpl.h"
16 #include "zypp/CapSet.h"
20 ///////////////////////////////////////////////////////////////////
22 { /////////////////////////////////////////////////////////////////
24 std::ostream & operator<<( std::ostream & str, const CapAndItem & obj )
26 return str << "{" << obj.cap << ", " << obj.item << "}";
29 ///////////////////////////////////////////////////////////////////
31 { /////////////////////////////////////////////////////////////////
33 ///////////////////////////////////////////////////////////////////
35 // METHOD NAME : NameHash::NameHash
41 ///////////////////////////////////////////////////////////////////
43 // METHOD NAME : NameHash::~NameHash
50 NameHash::insert( const PoolItem & item_r )
52 _store[item_r->name()].insert( item_r );
56 NameHash::erase( const PoolItem & item_r )
58 PoolTraits::ItemContainerT items = _store[item_r->name()];
59 for (PoolTraits::iterator nit = items.begin();
60 nit != items.end(); ++nit)
67 NameHash::ItemContainerT & NameHash::getItemContainer( const std::string & tag_r )
68 { ContainerT::iterator it = _store.find( tag_r );
69 if (it == _store.end()) {
70 XXX << "item container for " << tag_r << " not found" << endl;
73 XXX << "item container for " << tag_r << " contains " << it->second.size() << " items" << endl;
77 const NameHash::ItemContainerT & NameHash::getConstItemContainer( const std::string & tag_r ) const
78 { ContainerT::const_iterator it = _store.find( tag_r );
79 if (it == _store.end()) {
80 XXX << "const item container for " << tag_r << " not found" << endl;
83 XXX << "const item container for " << tag_r << " contains " << it->second.size() << " items" << endl;
87 ///////////////////////////////////////////////////////////////////
89 // METHOD NAME : CapHash::CapHash
95 ///////////////////////////////////////////////////////////////////
97 // METHOD NAME : CapHash::~CapHash
104 storeInsert( CapHash::ContainerT & store_r, const PoolItem & item_r, Dep cap_r )
106 CapSet caps = item_r->dep( cap_r );
107 for (CapSet::iterator ic = caps.begin(); ic != caps.end(); ++ic) {
108 store_r[cap_r][ic->index()].push_back( CapAndItem( *ic, item_r ) );
112 void CapHash::insert( const PoolItem & item_r )
114 storeInsert( _store, item_r, Dep::PROVIDES );
115 storeInsert( _store, item_r, Dep::REQUIRES );
116 storeInsert( _store, item_r, Dep::CONFLICTS );
117 storeInsert( _store, item_r, Dep::OBSOLETES );
118 storeInsert( _store, item_r, Dep::FRESHENS );
119 storeInsert( _store, item_r, Dep::SUPPLEMENTS );
123 storeDelete( PoolTraits::DepCapItemContainerT & store_r, const PoolItem & item_r, Dep cap_r )
125 CapSet caps = item_r->dep( cap_r );
126 for (CapSet::iterator ic = caps.begin(); ic != caps.end(); ++ic) {
127 PoolTraits::CapItemContainerT capitems = store_r[cap_r][ic->index()];
128 for (PoolTraits::CapItemContainerT::iterator pos = capitems.begin();
129 pos != capitems.end(); ++pos)
131 if (pos->item == item_r)
132 capitems.erase( pos );
137 void CapHash::erase( const PoolItem & item_r )
139 storeDelete( _store, item_r, Dep::PROVIDES );
140 storeDelete( _store, item_r, Dep::REQUIRES );
141 storeDelete( _store, item_r, Dep::CONFLICTS );
142 storeDelete( _store, item_r, Dep::OBSOLETES );
143 storeDelete( _store, item_r, Dep::FRESHENS );
144 storeDelete( _store, item_r, Dep::SUPPLEMENTS );
147 const CapHash::CapItemStoreT & CapHash::capItemStore ( Dep cap_r ) const
148 { static CapItemStoreT capitemstore;
149 ContainerT::const_iterator it = store().find( cap_r );
150 if (it == store().end()) {
151 XXX << "CapItemStoreT for " << cap_r << " not found" << endl;
154 XXX << "CapItemStoreT for " << cap_r << " contains " << it->second.size() << " items" << endl;
158 // CapItemStoreT, index -> CapItemContainerT
159 const CapHash::CapItemContainerT & CapHash::capItemContainer( const CapItemStoreT & cis, const std::string & tag_r ) const
160 { static CapItemContainerT captemcontainer;
161 CapItemStoreT::const_iterator it = cis.find( tag_r );
162 if (it == cis.end()) {
163 XXX << "CapItemContainerT for " << tag_r << " not found" << endl;
164 return captemcontainer;
166 XXX << "CapItemContainerT for " << tag_r << " contains " << it->second.size() << " items" << endl;
167 for (CapItemContainerT::const_iterator cai = it->second.begin(); cai != it->second.end(); ++cai) XXX << *cai << endl;
171 ///////////////////////////////////////////////////////////////////
173 // METHOD NAME : PoolImpl::PoolImpl
174 // METHOD TYPE : Ctor
179 ///////////////////////////////////////////////////////////////////
181 // METHOD NAME : PoolImpl::~PoolImpl
182 // METHOD TYPE : Dtor
184 PoolImpl::~PoolImpl()
187 /******************************************************************
189 ** FUNCTION NAME : operator<<
190 ** FUNCTION TYPE : std::ostream &
192 std::ostream & operator<<( std::ostream & str, const PoolImpl & obj )
194 return str << "PoolImpl " << obj.size();
197 void PoolImplInserter::operator()( ResObject::constPtr ptr_r )
199 PoolImpl::Item item ( ptr_r, ResStatus (_installed) );
200 _poolImpl._store.insert( item );
201 _poolImpl._namehash.insert( item );
202 _poolImpl._caphash.insert( item );
204 // don't miss to invalidate ResPoolProxy
205 _poolImpl.invalidateProxy();
208 void PoolImplDeleter::operator()( ResObject::constPtr ptr_r )
210 PoolImpl::Item item( ptr_r );
211 _poolImpl._store.erase( item );
212 _poolImpl._namehash.erase( item );
213 _poolImpl._caphash.erase( item );
215 // don't miss to invalidate ResPoolProxy
216 _poolImpl.invalidateProxy();
220 /////////////////////////////////////////////////////////////////
222 ///////////////////////////////////////////////////////////////////
223 /////////////////////////////////////////////////////////////////
225 ///////////////////////////////////////////////////////////////////