- Create the cache directly from the schema (installed) file.
[platform/upstream/libzypp.git] / zypp / Dep.cc
1 /*---------------------------------------------------------------------\
2 |                          ____ _   __ __ ___                          |
3 |                         |__  / \ / / . \ . \                         |
4 |                           / / \ V /|  _/  _/                         |
5 |                          / /__ | | | | | |                           |
6 |                         /_____||_| |_| |_|                           |
7 |                                                                      |
8 \---------------------------------------------------------------------*/
9 /** \file       zypp/Dep.cc
10  *
11 */
12 #include <map>
13
14 #include "zypp/base/Exception.h"
15 #include "zypp/base/String.h"
16
17 #include "zypp/Dep.h"
18
19 ///////////////////////////////////////////////////////////////////
20 namespace zypp
21 { /////////////////////////////////////////////////////////////////
22
23   namespace
24   {
25
26     std::map<std::string,Dep::for_use_in_switch> _table;
27
28     Dep::for_use_in_switch parse( const std::string & strval_r )
29     {
30       if ( _table.empty() )
31         {
32           // initialize it
33           _table["provides"]    = Dep::PROVIDES_e;
34           _table["prerequires"] = Dep::PREREQUIRES_e;
35           _table["requires"]    = Dep::REQUIRES_e;
36           _table["conflicts"]   = Dep::CONFLICTS_e;
37           _table["obsoletes"]   = Dep::OBSOLETES_e;
38           _table["recommends"]  = Dep::RECOMMENDS_e;
39           _table["suggests"]    = Dep::SUGGESTS_e;
40           _table["freshens"]    = Dep::FRESHENS_e;
41           _table["enhances"]    = Dep::ENHANCES_e;
42           _table["supplements"] = Dep::SUPPLEMENTS_e;
43         }
44
45       std::map<std::string,Dep::for_use_in_switch>::const_iterator it
46       = _table.find( str::toLower( strval_r ) );
47       if ( it == _table.end() )
48         {
49           ZYPP_THROW( Exception("Dep parse: illegal string value '"+strval_r+"'") );
50         }
51       return it->second;
52     }
53   }
54
55   ///////////////////////////////////////////////////////////////////
56
57   const Dep Dep::PROVIDES   ( Dep::PROVIDES_e );
58   const Dep Dep::PREREQUIRES( Dep::PREREQUIRES_e );
59   const Dep Dep::REQUIRES   ( Dep::REQUIRES_e );
60   const Dep Dep::CONFLICTS  ( Dep::CONFLICTS_e );
61   const Dep Dep::OBSOLETES  ( Dep::OBSOLETES_e );
62   const Dep Dep::RECOMMENDS ( Dep::RECOMMENDS_e );
63   const Dep Dep::SUGGESTS   ( Dep::SUGGESTS_e );
64   const Dep Dep::FRESHENS   ( Dep::FRESHENS_e );
65   const Dep Dep::ENHANCES   ( Dep::ENHANCES_e );
66   const Dep Dep::SUPPLEMENTS( Dep::SUPPLEMENTS_e );
67
68   ///////////////////////////////////////////////////////////////////
69   //
70   //    METHOD NAME : Dep::Dep
71   //    METHOD TYPE : Ctor
72   //
73   Dep::Dep( const std::string & strval_r )
74   : _type( parse( strval_r ) )
75   {}
76
77   ///////////////////////////////////////////////////////////////////
78   //
79   //    METHOD NAME : Dep::asString
80   //    METHOD TYPE : const std::string &
81   //
82   const std::string & Dep::asString() const
83   {
84     static std::map<for_use_in_switch,std::string> _table;
85     if ( _table.empty() )
86       {
87         // initialize it
88         _table[PROVIDES_e]    = "provides";
89         _table[PREREQUIRES_e] = "prerequires";
90         _table[REQUIRES_e]    = "requires";
91         _table[CONFLICTS_e]   = "conflicts";
92         _table[OBSOLETES_e]   = "obsoletes";
93         _table[RECOMMENDS_e]  = "recommends";
94         _table[SUGGESTS_e]    = "suggests";
95         _table[FRESHENS_e]    = "freshens";
96         _table[ENHANCES_e]    = "enhances";
97         _table[SUPPLEMENTS_e] = "supplements";
98       }
99     return _table[_type];
100   }
101
102   /////////////////////////////////////////////////////////////////
103 } // namespace zypp
104 ///////////////////////////////////////////////////////////////////