]> git.mxchange.org Git - simgear.git/blob - simgear/misc/sg_dir.hxx
Ensure uniform are there before trying to use them
[simgear.git] / simgear / misc / sg_dir.hxx
1
2 // Written by James Turner, started July 2010.
3 //
4 // Copyright (C) 2010  Curtis L. Olson - http://www.flightgear.org/~curt
5 //
6 // This library is free software; you can redistribute it and/or
7 // modify it under the terms of the GNU Library General Public
8 // License as published by the Free Software Foundation; either
9 // version 2 of the License, or (at your option) any later version.
10 //
11 // This library is distributed in the hope that it will be useful,
12 // but WITHOUT ANY WARRANTY; without even the implied warranty of
13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14 // Library General Public License for more details.
15 //
16 // You should have received a copy of the GNU General Public License
17 // along with this program; if not, write to the Free Software
18 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
19 //
20 // $Id$
21
22
23 #ifndef _SG_DIR_HXX
24 #define _SG_DIR_HXX
25
26 #include <sys/types.h>
27
28 #include <simgear/compiler.h>
29 #include <string>
30
31 #include <simgear/math/sg_types.hxx>
32 #include <simgear/misc/sg_path.hxx>
33
34 #ifdef _MSC_VER
35   typedef int mode_t;
36 #endif
37
38 namespace simgear
39 {
40   typedef std::vector<SGPath> PathList;
41
42   class Dir
43   {
44   public:
45     Dir();
46     ~Dir();
47     
48     /**
49      * when this directory object is destroyed, remove the corresponding
50      * diretory (and its contents) from the disk. Often used with temporary
51      * directories to ensure they are cleaned up.
52      */
53     void setRemoveOnDestroy();
54     
55     static Dir current();
56     
57     /**
58      * create a temporary directory, using the supplied name
59      */
60     static Dir tempDir(const std::string& templ);
61       
62     Dir(const SGPath& path);
63     Dir(const Dir& rel, const SGPath& relPath);
64     
65     enum FileTypes
66     {
67       TYPE_FILE = 1,
68       TYPE_DIR = 2,
69       NO_DOT_OR_DOTDOT = 1 << 12,
70       INCLUDE_HIDDEN = 1 << 13
71     };
72     
73     PathList children(int types = 0, const std::string& nameGlob = "") const;
74     
75     SGPath file(const std::string& name) const;
76     
77     SGPath path() const
78         { return _path; }
79     
80     /**
81      * create the directory (and any parents as required) with the
82      * request mode, or return failure
83      */
84     bool create(mode_t mode);
85     
86     /**
87      * remove the directory. 
88      * If recursive is true, contained files and directories are
89      * recursively removed
90      */
91     bool remove(bool recursive = false);
92     
93     /**
94      * Check that the directory at the path exists (and is a directory!)
95      */
96     bool exists() const;
97     
98     /**
99      * parent directory, if one exists
100      */
101     Dir parent() const;
102   private:
103     mutable SGPath _path;
104     bool _removeOnDestroy;
105   };
106 } // of namespace simgear
107
108 #endif // _SG_DIR_HXX
109
110