Deprecate MediaAccess::downloads (accidentally deleted)
[platform/upstream/libzypp.git] / zypp / TmpPath.h
1 /*---------------------------------------------------------------------\
2 |                          ____ _   __ __ ___                          |
3 |                         |__  / \ / / . \ . \                         |
4 |                           / / \ V /|  _/  _/                         |
5 |                          / /__ | | | | | |                           |
6 |                         /_____||_| |_| |_|                           |
7 |                                                                      |
8 \---------------------------------------------------------------------*/
9 /** \file zypp/TmpPath.h
10  *
11 */
12 #ifndef ZYPP_TMPPATH_H
13 #define ZYPP_TMPPATH_H
14
15 #include <iosfwd>
16
17 #include "zypp/Pathname.h"
18 #include "zypp/base/PtrTypes.h"
19
20 namespace zypp {
21   namespace filesystem {
22
23     ///////////////////////////////////////////////////////////////////
24     //
25     //  CLASS NAME : TmpPath
26     /**
27      * @short Automaticaly deletes files or directories when no longer needed.
28      *
29      * TmpPath is constructed from a Pathname. Multiple TmpPath instances
30      * created by copy and assign, share the same reference counted internal
31      * repesentation.
32      *
33      * When the last reference drops any file or directory located at the path
34      * passed to the ctor is deleted (recursivly in case of directories).
35      *
36      * Principally serves as base class, but standalone usable.
37      **/
38     class TmpPath
39     {
40       public:
41         /**
42          * Default Ctor. An empty Pathname.
43          **/
44         TmpPath();
45
46         /**
47          * Ctor. Takes a Pathname.
48          **/
49         explicit
50         TmpPath( const Pathname & tmpPath_r );
51
52         /**
53          * Dtor.
54          **/
55         virtual
56         ~TmpPath();
57
58         /**
59          * Test whether the Pathname is valid (i.e. not empty. NOT whether
60          * it really denotes an existing file or directory).
61          **/
62         operator const void * () const;
63
64         /**
65          * @return The Pathname.
66          **/
67         Pathname
68         path() const;
69
70         /**
71          * Type conversion to Pathname.
72          **/
73         operator Pathname() const
74         { return path(); }
75
76       public:
77         /**
78          * @return The default directory where temporary
79          * files should be are created (/var/tmp).
80          **/
81         static const Pathname &
82         defaultLocation();
83
84       protected:
85         class Impl;
86         RW_pointer<Impl> _impl;
87
88     };
89     ///////////////////////////////////////////////////////////////////
90
91     /**
92      * Stream output as pathname.
93      **/
94     inline std::ostream &
95     operator<<( std::ostream & str, const TmpPath & obj )
96     { return str << static_cast<Pathname>(obj); }
97
98     ///////////////////////////////////////////////////////////////////
99
100     ///////////////////////////////////////////////////////////////////
101     //
102     //  CLASS NAME : TmpFile
103     /**
104      * @short Provide a new empty temporary file and delete it when no
105      * longer needed.
106      *
107      * The temporary file is per default created in '/var/tmp' and named
108      * 'TmpFile.XXXXXX', with XXXXXX replaced by a string which makes the
109      * name unique. Different location and file prefix may be passed to
110      * the ctor. TmpFile is created with mode 0600.
111      *
112      * TmpFile provides the Pathname of the temporary file, or an empty
113      * path in case of any error.
114      **/
115     class TmpFile : public TmpPath
116     {
117       public:
118         /**
119          * Ctor. Takes a Pathname.
120          **/
121         explicit
122         TmpFile( const Pathname & inParentDir_r = defaultLocation(),
123                  const std::string & prefix_r = defaultPrefix() );
124
125         /** Provide a new empty temporary directory as sibling.
126          * \code
127          *   TmpFile s = makeSibling( "/var/lib/myfile" );
128          *   // returns: /var/lib/myfile.XXXXXX
129          * \endcode
130          * If \c sibling_r exists, sibling is created using the same mode.
131          */
132         static TmpFile makeSibling( const Pathname & sibling_r );
133
134       public:
135         /**
136          * @return The default prefix for temporary files (TmpFile.)
137          **/
138         static const std::string &
139         defaultPrefix();
140
141     };
142     ///////////////////////////////////////////////////////////////////
143
144     ///////////////////////////////////////////////////////////////////
145     //
146     //  CLASS NAME : TmpDir
147     /**
148      * @short Provide a new empty temporary directory and recursively
149      * delete it when no longer needed.
150      *
151      * The temporary directory is per default created in '/var/tmp' and
152      * named 'TmpDir.XXXXXX', with XXXXXX replaced by a string which makes
153      * the  name unique. Different location and file prefix may be passed
154      * to the ctor. TmpDir is created with mode 0700.
155      *
156      * TmpDir provides the Pathname of the temporary directory , or an empty
157      * path in case of any error.
158      **/
159     class TmpDir : public TmpPath
160     {
161       public:
162         /**
163          * Ctor. Takes a Pathname.
164          **/
165         explicit
166         TmpDir( const Pathname & inParentDir_r = defaultLocation(),
167                 const std::string & prefix_r = defaultPrefix() );
168
169         /** Provide a new empty temporary directory as sibling.
170          * \code
171          *   TmpDir s = makeSibling( "/var/lib/mydir" );
172          *   // returns: /var/lib/mydir.XXXXXX
173          * \endcode
174          * If \c sibling_r exists, sibling is created using the same mode.
175          */
176         static TmpDir makeSibling( const Pathname & sibling_r );
177
178       public:
179         /**
180          * @return The default prefix for temporary directories (TmpDir.)
181          **/
182         static const std::string &
183         defaultPrefix();
184     };
185     ///////////////////////////////////////////////////////////////////
186
187   } // namespace filesystem
188 } // namespace zypp
189
190 #endif // ZYPP_TMPPATH_H