12 #ifndef ZYPP_POOL_POOLIMPL_H
13 #define ZYPP_POOL_POOLIMPL_H
67 return userLock ? 1 : -1;
75 inline PoolQuery makeTrivialQuery( IdString ident_r )
77 sat::Solvable::SplitIdent ident( ident_r );
81 q.addKind( ident.kind() );
83 q.setCaseSensitive(
true);
89 unsigned s( activeLocks_r.size() );
90 activeLocks_r.remove( makeTrivialQuery( ident_r ) );
91 return( activeLocks_r.size() != s );
96 PoolQuery q( makeTrivialQuery( ident_r ) );
97 for_( it, activeLocks_r.begin(), activeLocks_r.end() )
102 activeLocks_r.push_back( q );
173 return( slv_r.
id() < mystore.size() ? mystore[slv_r.
id()] :
PoolItem() );
237 MIL <<
"HardLockQueries match " << locked.
size() <<
" Solvables." << endl;
246 MIL <<
"Apply " << newLocks_r.size() <<
" HardLockQueries" << endl;
254 MIL <<
"HardLockQueries match " << locked.
size() <<
" Solvables." << endl;
267 typedef std::tr1::unordered_set<IdString> IdentSet;
269 IdentSet removedLocks;
277 addedLocks.insert( it->satSolvable().ident() );
280 removedLocks.insert( it->satSolvable().ident() );
285 bool setChanged =
false;
286 for_( it, removedLocks.begin(), removedLocks.end() )
288 if ( addedLocks.find( *it ) != addedLocks.end() )
290 if ( hardLockQueriesRemove( activeLocks_r, *it ) && ! setChanged )
293 for_( it, addedLocks.begin(), addedLocks.end() )
295 if ( hardLockQueriesAdd( activeLocks_r, *it ) && ! setChanged )
313 MIL <<
"Apply " << newLocks_r.size() <<
" AutoSoftLocks: " << newLocks_r << endl;
318 if ( ! it->status().isKept() )
337 if ( ! ( status.isByUser() || status.isByApplLow() ) )
341 switch ( status.getTransactValue() )
345 if ( status.isRecommended() )
346 activeLocks_r.insert( it->satSolvable().ident() );
352 (status.isInstalled() ? todel : toins).insert( it->satSolvable().ident() );
356 for_( it, todel.begin(), todel.end() )
358 activeLocks_r.insert( *it );
360 for_( it, toins.begin(), toins.end() )
362 activeLocks_r.erase( *it );
373 bool addedItems =
false;
374 std::list<PoolItem> addedProducts;
389 else if ( s && ! pi )
395 addedProducts.push_back( pi );
411 if ( ! addedProducts.empty() )
413 for_( it, addedProducts.begin(), addedProducts.end() )
415 it->setBuddy( asKind<Product>(*it)->referencePackage() );
441 _id2item.insert( std::make_pair(
id, *it ) );
493 #endif // ZYPP_POOL_POOLIMPL_H