- Queue recommendations;
- Queue suggestions;
- Queue orphaned;
- Queue unneeded;
- queue_init(&recommendations);
- queue_init(&suggestions);
- queue_init(&orphaned);
- queue_init(&unneeded);
- solver_get_recommendations(_satSolver, &recommendations, &suggestions, 0);
- solver_get_orphaned(_satSolver, &orphaned);
- solver_get_unneeded(_satSolver, &unneeded, 1);
- /* solvables which are recommended */
- for ( int i = 0; i < recommendations.count; ++i )
- {
- PoolItem poolItem( getPoolItem( recommendations.elements[i] ) );
- poolItem.status().setRecommended( true );
- }
-
- /* solvables which are suggested */
- for ( int i = 0; i < suggestions.count; ++i )
- {
- PoolItem poolItem( getPoolItem( suggestions.elements[i] ) );
- poolItem.status().setSuggested( true );
- }
-
- _problem_items.clear();
- /* solvables which are orphaned */
- for ( int i = 0; i < orphaned.count; ++i )
- {
- PoolItem poolItem( getPoolItem( orphaned.elements[i] ) );
- poolItem.status().setOrphaned( true );
- _problem_items.push_back( poolItem );
- }
-
- /* solvables which are unneeded */
- for ( int i = 0; i < unneeded.count; ++i )
- {
- PoolItem poolItem( getPoolItem( unneeded.elements[i] ) );
- poolItem.status().setUnneeded( true );
- }
-
- queue_free(&recommendations);
- queue_free(&suggestions);
- queue_free(&orphaned);
- queue_free(&unneeded);
-
- /* Write validation state back to pool */
- Queue flags, solvableQueue;
-
- queue_init(&flags);
- queue_init(&solvableQueue);
-
- CollectPseudoInstalled collectPseudoInstalled(&solvableQueue);
- invokeOnEach( _pool.begin(),
- _pool.end(),
- functor::functorRef<bool,PoolItem> (collectPseudoInstalled) );
- solver_trivial_installable(_satSolver, &solvableQueue, &flags );
- for (int i = 0; i < solvableQueue.count; i++) {
- PoolItem item = _pool.find (sat::Solvable(solvableQueue.elements[i]));
- item.status().setUndetermined();
-
- if (flags.elements[i] == -1) {
- item.status().setNonRelevant();
- XDEBUG("SATSolutionToPool(" << item << " ) nonRelevant !");
- } else if (flags.elements[i] == 1) {
- item.status().setSatisfied();
- XDEBUG("SATSolutionToPool(" << item << " ) satisfied !");
- } else if (flags.elements[i] == 0) {
- item.status().setBroken();
- XDEBUG("SATSolutionToPool(" << item << " ) broken !");
- }
- }
- queue_free(&(solvableQueue));
- queue_free(&flags);
-