Imported Upstream version 15.21.0
[platform/upstream/libzypp.git] / zypp / ZYppFactory.h
1 /*---------------------------------------------------------------------\
2 |                          ____ _   __ __ ___                          |
3 |                         |__  / \ / / . \ . \                         |
4 |                           / / \ V /|  _/  _/                         |
5 |                          / /__ | | | | | |                           |
6 |                         /_____||_| |_| |_|                           |
7 |                                                                      |
8 \---------------------------------------------------------------------*/
9 /** \file       zypp/ZYppFactory.h
10  *
11 */
12 #ifndef ZYPP_ZYPPFACTORY_H
13 #define ZYPP_ZYPPFACTORY_H
14
15 #include <iosfwd>
16
17 #include "zypp/base/Exception.h"
18 #include "zypp/ZYpp.h"
19
20 ///////////////////////////////////////////////////////////////////
21 namespace zypp
22 { /////////////////////////////////////////////////////////////////
23
24   class ZYppFactoryException : public Exception
25   {
26   public:
27     ZYppFactoryException( const std::string & msg_r, pid_t lockerPid_r, const std::string & lockerName_r );
28     virtual ~ZYppFactoryException() throw ();
29   public:
30     pid_t lockerPid() const { return _lockerPid; }
31     const std::string & lockerName() const { return _lockerName; }
32   private:
33     pid_t _lockerPid;
34     std::string _lockerName;
35   };
36
37   ///////////////////////////////////////////////////////////////////
38   //
39   //    CLASS NAME : ZYppFactory
40   //
41   /** ZYpp factory class (Singleton)
42   */
43   class ZYppFactory
44   {
45     friend std::ostream & operator<<( std::ostream & str, const ZYppFactory & obj );
46
47   public:
48     /** Singleton ctor */
49     static ZYppFactory instance();
50     /** Dtor */
51     ~ZYppFactory();
52
53   public:
54     /** \return Pointer to the ZYpp instance.
55      * \throw EXCEPTION In case we can't acquire a lock.
56     */
57     ZYpp::Ptr getZYpp() const;
58
59     /** Whether the ZYpp instance is already created.*/
60     bool haveZYpp() const;
61
62   private:
63     /** Default ctor. */
64     ZYppFactory();
65   };
66   ///////////////////////////////////////////////////////////////////
67
68   /** \relates ZYppFactory Stream output */
69   std::ostream & operator<<( std::ostream & str, const ZYppFactory & obj );
70
71   /** \relates ZYppFactory Convenience to get the Pointer
72    * to the ZYpp instance.
73    * \see ZYppFactory::getZYpp
74   */
75   inline ZYpp::Ptr getZYpp()
76   { return ZYppFactory::instance().getZYpp(); }
77
78   /////////////////////////////////////////////////////////////////
79 } // namespace zypp
80 ///////////////////////////////////////////////////////////////////
81 #endif // ZYPP_ZYPPFACTORY_H