Imported Upstream version 15.21.0
[platform/upstream/libzypp.git] / zypp / Dep.h
1 /*---------------------------------------------------------------------\
2 |                          ____ _   __ __ ___                          |
3 |                         |__  / \ / / . \ . \                         |
4 |                           / / \ V /|  _/  _/                         |
5 |                          / /__ | | | | | |                           |
6 |                         /_____||_| |_| |_|                           |
7 |                                                                      |
8 \---------------------------------------------------------------------*/
9 /** \file       zypp/Dep.h
10  *
11 */
12 #ifndef ZYPP_DEP_H
13 #define ZYPP_DEP_H
14
15 #include <iosfwd>
16 #include <string>
17
18 ///////////////////////////////////////////////////////////////////
19 namespace zypp
20 { /////////////////////////////////////////////////////////////////
21
22   ///////////////////////////////////////////////////////////////////
23   //
24   //    CLASS NAME : Dep
25   //
26   /** Enumeration class of dependency types.
27    * \ingroup g_EnumerationClass
28   */
29   struct Dep
30   {
31     friend bool operator==( const Dep & lhs, const Dep & rhs );
32     friend bool operator!=( const Dep & lhs, const Dep & rhs );
33     /** Arbitrary order to allow Dep as key in std::container. */
34     friend bool operator<( const Dep & lhs, const Dep & rhs );
35
36     /** \name Dependency types
37      * These are the \em real dependency type contants to
38      * use. Don't mind that it's not an enum.
39      * \see \ref zypp::Dep::inSwitch
40     */
41     //@{
42     static const Dep PROVIDES;
43     static const Dep PREREQUIRES;
44     static const Dep REQUIRES;
45     static const Dep CONFLICTS;
46     static const Dep OBSOLETES;
47     static const Dep RECOMMENDS;
48     static const Dep SUGGESTS;
49     static const Dep ENHANCES;
50     static const Dep SUPPLEMENTS;
51     //@}
52
53     /** Enumarators provided \b only for use \ref inSwitch statement.
54      * \see inSwitch
55     */
56     enum for_use_in_switch {
57       PROVIDES_e,
58       PREREQUIRES_e,
59       REQUIRES_e,
60       CONFLICTS_e,
61       OBSOLETES_e,
62       RECOMMENDS_e,
63       SUGGESTS_e,
64       ENHANCES_e,
65       SUPPLEMENTS_e,
66     };
67
68     /** Ctor from string.
69      * Legal values for \a strval_r are the constants names
70      * (case insignificant).
71      *
72      * \throw PARSE if \a strval_r is not legal.
73      * \todo refine exceptions and check throw.
74     */
75     explicit
76     Dep( const std::string & strval_r );
77
78     /** String representation of dependency type.
79      * \return The constants names lowercased.
80     */
81     const std::string & asString() const;
82
83     /** Translated dependency type (capitalized).
84      * \return The capitalized constants names translated.
85     */
86     std::string asUserString() const;
87
88     /** Enumarator provided for use in \c switch statement. */
89     for_use_in_switch inSwitch() const
90     { return _type; }
91
92   private:
93     /** Ctor to initialize the dependency type contants. */
94     Dep( for_use_in_switch type_r )
95     : _type( type_r )
96     {}
97     /** The operator. */
98     for_use_in_switch _type;
99   };
100   ///////////////////////////////////////////////////////////////////
101
102   /** \relates Dep Stream output */
103   inline std::ostream & operator<<( std::ostream & str, const Dep & obj )
104   { return str << obj.asString(); }
105
106   ///////////////////////////////////////////////////////////////////
107
108   /** \relates Dep */
109   inline bool operator==( const Dep & lhs, const Dep & rhs )
110   { return lhs._type == rhs._type; }
111
112   /** \relates Dep */
113   inline bool operator!=( const Dep & lhs, const Dep & rhs )
114   { return lhs._type != rhs._type; }
115
116   /** \relates Dep */
117   inline bool operator<( const Dep & lhs, const Dep & rhs )
118   { return lhs._type < rhs._type; }
119
120   /////////////////////////////////////////////////////////////////
121 } // namespace zypp
122 ///////////////////////////////////////////////////////////////////
123 #endif // ZYPP_DEP_H