00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef PALUDIS_GUARD_PALUDIS_UNUSED_LIST_HH
00021 #define PALUDIS_GUARD_PALUDIS_UNUSED_LIST_HH 1
00022
00023 #include <paludis/util/instantiation_policy.hh>
00024 #include <paludis/util/private_implementation_pattern.hh>
00025 #include <paludis/util/wrapped_forward_iterator-fwd.hh>
00026 #include <paludis/util/named_value.hh>
00027 #include <paludis/package_id-fwd.hh>
00028 #include <paludis/dep_tag-fwd.hh>
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040 namespace paludis
00041 {
00042 #include <paludis/uninstall_list-se.hh>
00043
00044 namespace n
00045 {
00046 struct kind;
00047 struct package_id;
00048 struct tags;
00049 struct with_dependencies_as_errors;
00050 struct with_dependencies_included;
00051 struct with_unused_dependencies;
00052 }
00053
00054
00055
00056
00057
00058
00059
00060
00061 struct UninstallListOptions
00062 {
00063 NamedValue<n::with_dependencies_as_errors, bool> with_dependencies_as_errors;
00064 NamedValue<n::with_dependencies_included, bool> with_dependencies_included;
00065 NamedValue<n::with_unused_dependencies, bool> with_unused_dependencies;
00066 };
00067
00068
00069
00070
00071
00072
00073
00074
00075 struct UninstallListEntry
00076 {
00077 NamedValue<n::kind, UninstallListEntryKind> kind;
00078 NamedValue<n::package_id, std::tr1::shared_ptr<const PackageID> > package_id;
00079 NamedValue<n::tags, std::tr1::shared_ptr<Set<std::tr1::shared_ptr<DepTag> > > > tags;
00080 };
00081
00082 class Environment;
00083
00084
00085
00086
00087
00088
00089
00090 class PALUDIS_VISIBLE UninstallList :
00091 private PrivateImplementationPattern<UninstallList>,
00092 public InstantiationPolicy<UninstallList, instantiation_method::NonCopyableTag>
00093 {
00094 private:
00095 void add_package(const std::tr1::shared_ptr<const PackageID> &, const std::tr1::shared_ptr<DepTag> &,
00096 const UninstallListEntryKind k);
00097 void real_add(const std::tr1::shared_ptr<const PackageID> &,
00098 const std::tr1::shared_ptr<DepTag> &, const bool);
00099 void move_package_to_end(const std::tr1::shared_ptr<const PackageID> &);
00100 void add_unused_dependencies();
00101 void add_dependencies(const PackageID &, const bool);
00102
00103 std::tr1::shared_ptr<const PackageIDSet> collect_depped_upon(
00104 const std::tr1::shared_ptr<const PackageIDSet> targets) const;
00105
00106 std::tr1::shared_ptr<const PackageIDSet> collect_all_installed() const;
00107
00108 std::tr1::shared_ptr<const PackageIDSet> collect_world() const;
00109
00110 public:
00111
00112
00113
00114 UninstallList(const Environment * const, const UninstallListOptions &);
00115 virtual ~UninstallList();
00116
00117
00118
00119
00120
00121
00122 UninstallListOptions & options;
00123
00124
00125
00126
00127 void add(const std::tr1::shared_ptr<const PackageID> &,
00128 const std::tr1::shared_ptr<DepTag> & = std::tr1::shared_ptr<DepTag>());
00129
00130
00131
00132
00133 void add_errors_for_system();
00134
00135
00136
00137
00138 void add_unused();
00139
00140
00141
00142
00143 bool has_errors() const;
00144
00145
00146
00147
00148 struct UninstallListTag;
00149 typedef WrappedForwardIterator<UninstallListTag, const UninstallListEntry> ConstIterator;
00150 ConstIterator begin() const;
00151 ConstIterator end() const;
00152
00153
00154 };
00155 }
00156
00157 #endif