added solver calls
[platform/upstream/libzypp.git] / zypp / solver / detail / SolverQueueItemInstallOneOf.cc
1 /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 4 -*- */
2 /* SolverQueueItem.cc
3  *
4  * Copyright (C) 2008 SUSE Linux Products GmbH
5  *
6  * This program is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU General Public License,
8  * version 2, as published by the Free Software Foundation.
9  *
10  * This program is distributed in the hope that it will be useful, but
11  * WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13  * General Public License for more details.
14  *
15  * You should have received a copy of the GNU General Public License
16  * along with this program; if not, write to the Free Software
17  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
18  * 02111-1307, USA.
19  */
20
21 #include "zypp/base/Logger.h"
22 #include "zypp/solver/detail/SolverQueueItemInstallOneOf.h"
23
24 /////////////////////////////////////////////////////////////////////////
25 namespace zypp 
26 { ///////////////////////////////////////////////////////////////////////
27   ///////////////////////////////////////////////////////////////////////
28   namespace solver
29   { /////////////////////////////////////////////////////////////////////
30     /////////////////////////////////////////////////////////////////////
31     namespace detail
32     { ///////////////////////////////////////////////////////////////////
33
34 using namespace std;
35
36 IMPL_PTR_TYPE(SolverQueueItemInstallOneOf);
37
38 //---------------------------------------------------------------------------
39
40 std::ostream &
41 SolverQueueItemInstallOneOf::dumpOn( std::ostream & os ) const
42 {
43     os << "[" << "InstallOneOf: ";
44     for (PoolItemList::const_iterator iter = _oneOfList.begin();
45          iter != _oneOfList.end();
46          iter++)
47         os << *iter;
48     os << "]";
49     
50     return os;
51 }
52
53 //---------------------------------------------------------------------------
54
55 SolverQueueItemInstallOneOf::SolverQueueItemInstallOneOf (const ResPool & pool, const PoolItemList & itemList)
56     : SolverQueueItem (QUEUE_ITEM_TYPE_INSTALL_ONE_OF, pool)
57     , _oneOfList (itemList)
58 {
59 }
60
61
62 SolverQueueItemInstallOneOf::~SolverQueueItemInstallOneOf()
63 {
64 }
65
66 //---------------------------------------------------------------------------
67
68 bool SolverQueueItemInstallOneOf::addRule (Queue & q, Pool *SATPool)
69 {
70     bool ret = true;
71     MIL << "Install one of: " << endl;
72     queue_push( &(q), SOLVER_INSTALL_SOLVABLE_ONE_OF );
73     for (PoolItemList::const_iterator iter = _oneOfList.begin(); iter != _oneOfList.end(); iter++) {
74         Id id = (*iter)->satSolvable().id();
75         if (id == ID_NULL) {
76             ERR << *iter << " not found" << endl;
77             ret = false;
78         } else {
79             MIL << "    candidate:" << *iter << " with the SAT-Pool ID: " << id << endl;
80             queue_push( &(q), id );                 
81         }
82     }
83     queue_push( &(q), 0 ); // finish candidate
84     
85     return ret;
86 }
87
88 SolverQueueItem_Ptr
89 SolverQueueItemInstallOneOf::copy (void) const
90 {
91     SolverQueueItemInstallOneOf_Ptr new_installOneOf = new SolverQueueItemInstallOneOf (pool(), _oneOfList);
92     new_installOneOf->SolverQueueItem::copy(this);
93     
94     return new_installOneOf;
95 }
96
97 int
98 SolverQueueItemInstallOneOf::cmp (SolverQueueItem_constPtr item) const
99 {
100     int cmp = this->compare (item);
101     if (cmp != 0)
102         return cmp;
103     SolverQueueItemInstallOneOf_constPtr install = dynamic_pointer_cast<const SolverQueueItemInstallOneOf>(item);
104
105     return (_oneOfList == install->_oneOfList) ? 0 : -1; // more evaluation would be not useful
106 }
107
108
109 //---------------------------------------------------------------------------
110
111
112 ///////////////////////////////////////////////////////////////////
113     };// namespace detail
114     /////////////////////////////////////////////////////////////////////
115     /////////////////////////////////////////////////////////////////////
116   };// namespace solver
117   ///////////////////////////////////////////////////////////////////////
118   ///////////////////////////////////////////////////////////////////////
119 };// namespace zypp
120 /////////////////////////////////////////////////////////////////////////