Imported Upstream version 14.45.0
[platform/upstream/libzypp.git] / zypp / sat / FileConflicts.h
1 /*---------------------------------------------------------------------\
2 |                          ____ _   __ __ ___                          |
3 |                         |__  / \ / / . \ . \                         |
4 |                           / / \ V /|  _/  _/                         |
5 |                          / /__ | | | | | |                           |
6 |                         /_____||_| |_| |_|                           |
7 |                                                                      |
8 \---------------------------------------------------------------------*/
9 /** \file       zypp/sat/FileConflicts.h
10  */
11 #ifndef ZYPP_SAT_FILECONFLICTS_H
12 #define ZYPP_SAT_FILECONFLICTS_H
13
14 #include <iosfwd>
15
16 #include "zypp/base/PtrTypes.h"
17 #include "zypp/sat/Queue.h"
18 #include "zypp/sat/Solvable.h"
19
20 ///////////////////////////////////////////////////////////////////
21 namespace zypp
22 {
23   ///////////////////////////////////////////////////////////////////
24   namespace sat
25   {
26     ///////////////////////////////////////////////////////////////////
27     /// \class FileConflicts
28     /// \brief Libsolv queue representing file conflicts.
29     ///////////////////////////////////////////////////////////////////
30     class FileConflicts : private Queue
31     {
32       friend bool operator==( const FileConflicts & lhs, const FileConflicts & rhs );
33       static constexpr size_type queueBlockSize = 6;
34
35     public:
36       /**
37        * \class Conflict
38        * \brief A file conflict.
39        */
40       struct Conflict
41       {
42         IdString lhsFilename() const    { return IdString( _data[0] ); }
43         Solvable lhsSolvable() const    { return Solvable( _data[1] ); }
44         IdString lhsFilemd5() const     { return IdString( _data[2] ); }
45
46         IdString rhsFilename() const    { return IdString( _data[3] ); }
47         Solvable rhsSolvable() const    { return Solvable( _data[4] ); }
48         IdString rhsFilemd5() const     { return IdString( _data[5] ); }
49
50         /** Ready to use (translated) string describing the Conflict */
51         std::string asUserString() const;
52
53       private:
54         detail::IdType _data[queueBlockSize];
55       };
56
57     public:
58       using Queue::size_type;
59       typedef Conflict value_type;
60       typedef const value_type* const_iterator;
61
62       using Queue::empty;
63       size_type size() const            { return Queue::size()/queueBlockSize; }
64       const_iterator begin() const      { return reinterpret_cast<const_iterator>(Queue::begin()); }
65       const_iterator end() const        { return reinterpret_cast<const_iterator>(Queue::end()); }
66
67     public:
68       using Queue::operator struct ::_Queue *;          ///< libsolv backdoor
69       using Queue::operator const struct ::_Queue *;    ///< libsolv backdoor
70     };
71
72     /** \relates FileConflicts Stream output */
73     std::ostream & operator<<( std::ostream & str, const FileConflicts & obj );
74
75     /** \relates FileConflicts::Conflict Stream output */
76     std::ostream & operator<<( std::ostream & str, const FileConflicts::Conflict & obj );
77
78     /** \relates FileConflicts XML output */
79     std::ostream & dumpAsXmlOn( std::ostream & str, const FileConflicts & obj );
80
81     /** \relates FileConflicts::Conflict XML output */
82     std::ostream & dumpAsXmlOn( std::ostream & str, const FileConflicts::Conflict & obj );
83
84     /** \relates FileConflicts */
85     inline bool operator==( const FileConflicts & lhs, const FileConflicts & rhs )
86     { return static_cast<const Queue &>(lhs) == static_cast<const Queue &>(rhs); }
87
88     /** \relates FileConflicts */
89     inline bool operator!=( const FileConflicts & lhs, const FileConflicts & rhs )
90     { return !( lhs == rhs ); }
91
92   } // namespace sat
93   ///////////////////////////////////////////////////////////////////
94 } // namespace zypp
95 ///////////////////////////////////////////////////////////////////
96 #endif // ZYPP_SAT_FILECONFLICTS_H