libzypp  11.13.5
InstallOrder.h
Go to the documentation of this file.
1 /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 /* InstallOrder.h
3  *
4  * Copyright (C) 2005 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 // stolen from yast2-packagemanager
22 /*
23  File: InstallOrder.h
24  Purpose: Determine order for installing packages
25  Author: Ludwig Nussel <lnussel@suse.de>
26  Maintainer: Ludwig Nussel <lnussel@suse.de>
27 
28 /-*/
29 
30 #ifndef ZYPP_SOLVER_DETAIL_INSTALLORDER_H
31 #define ZYPP_SOLVER_DETAIL_INSTALLORDER_H
32 
33 #include <string>
34 #include <list>
35 #include <map>
36 #include <set>
37 
38 #include "zypp/PoolItem.h"
39 #include "zypp/ResPool.h"
40 #include "zypp/Capabilities.h"
41 
43 
45 namespace zypp
46 {
47 
48  namespace solver
49  {
50 
51  namespace detail
52  {
53 
63 {
64  private:
65  const ResPool & _pool;
68 
70  typedef std::map<PoolItem, PoolItemList> Graph;
71 
74 
77 
78  struct NodeInfo
79  {
80  unsigned begintime;
81  unsigned endtime;
82  bool visited;
83  int order; // number of incoming edges in reverse graph
84 
86 
87  NodeInfo() : begintime(0), endtime(0), visited(false), order(0) {}
88  NodeInfo(PoolItem item) : begintime(0), endtime(0), visited(false), order(0), item(item) {}
89  };
90 
91  typedef std::map<PoolItem, NodeInfo> Nodes;
92 
94 
95  unsigned _rdfstime;
96 
98 
99  bool _dirty;
100 
101  unsigned _numrun;
102 
103  std::set<std::string> _logset;
104 
105  private:
106  void rdfsvisit (PoolItem item);
107 
108  PoolItem findProviderInSet( const Capability requirement, const PoolItemSet & candidates ) const;
109  bool doesProvide( const Capability requirement, PoolItem item ) const;
110 
111  public:
112 
119  InstallOrder( const ResPool & pool, const PoolItemSet & toinstall, const PoolItemSet & installed);
120 
126 
131  void setInstalled( PoolItem item );
132 
136  void setInstalled( const PoolItemList & list );
137 
141  void startrdfs();
142 
147  void init() { startrdfs(); }
148 
154  const PoolItemList getTopSorted() const;
155 
156  void printAdj (std::ostream & os, bool reversed = false) const;
157 };
158 
160  };// namespace detail
163  };// namespace solver
166 };// namespace zypp
168 
169 #endif // ZYPP_SOLVER_DETAIL_INSTALLORDER_H