Mercurial > code
annotate C++/modules/Directory/Directory.h @ 403:d5ec1174b707
Massive cleanup
author | David Demelier <markand@malikania.fr> |
---|---|
date | Mon, 05 Oct 2015 14:27:19 +0200 |
parents | 412c3e26bb40 |
children | 30e4a93f86c7 |
rev | line source |
---|---|
198
01294ed877f6
Directory: support of Windows complete
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
1 /* |
01294ed877f6
Directory: support of Windows complete
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
2 * Directory.h -- open and read directories |
01294ed877f6
Directory: support of Windows complete
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
3 * |
403 | 4 * Copyright (c) 2013-2015 David Demelier <markand@malikania.fr> |
198
01294ed877f6
Directory: support of Windows complete
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
5 * |
01294ed877f6
Directory: support of Windows complete
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
6 * Permission to use, copy, modify, and/or distribute this software for any |
01294ed877f6
Directory: support of Windows complete
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
7 * purpose with or without fee is hereby granted, provided that the above |
01294ed877f6
Directory: support of Windows complete
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
8 * copyright notice and this permission notice appear in all copies. |
01294ed877f6
Directory: support of Windows complete
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
9 * |
01294ed877f6
Directory: support of Windows complete
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES |
01294ed877f6
Directory: support of Windows complete
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF |
01294ed877f6
Directory: support of Windows complete
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR |
01294ed877f6
Directory: support of Windows complete
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES |
01294ed877f6
Directory: support of Windows complete
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN |
01294ed877f6
Directory: support of Windows complete
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF |
01294ed877f6
Directory: support of Windows complete
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. |
199
08eb7b00b950
Directory: support for Linux and BSD complete
David Demelier <markand@malikania.fr>
parents:
198
diff
changeset
|
17 */ |
08eb7b00b950
Directory: support for Linux and BSD complete
David Demelier <markand@malikania.fr>
parents:
198
diff
changeset
|
18 |
08eb7b00b950
Directory: support for Linux and BSD complete
David Demelier <markand@malikania.fr>
parents:
198
diff
changeset
|
19 #ifndef _DIRECTORY_H_ |
08eb7b00b950
Directory: support for Linux and BSD complete
David Demelier <markand@malikania.fr>
parents:
198
diff
changeset
|
20 #define _DIRECTORY_H_ |
08eb7b00b950
Directory: support for Linux and BSD complete
David Demelier <markand@malikania.fr>
parents:
198
diff
changeset
|
21 |
08eb7b00b950
Directory: support for Linux and BSD complete
David Demelier <markand@malikania.fr>
parents:
198
diff
changeset
|
22 #include <cstddef> |
08eb7b00b950
Directory: support for Linux and BSD complete
David Demelier <markand@malikania.fr>
parents:
198
diff
changeset
|
23 #include <string> |
08eb7b00b950
Directory: support for Linux and BSD complete
David Demelier <markand@malikania.fr>
parents:
198
diff
changeset
|
24 #include <vector> |
08eb7b00b950
Directory: support for Linux and BSD complete
David Demelier <markand@malikania.fr>
parents:
198
diff
changeset
|
25 |
08eb7b00b950
Directory: support for Linux and BSD complete
David Demelier <markand@malikania.fr>
parents:
198
diff
changeset
|
26 /** |
361 | 27 * @class DirectoryEntry |
28 * @brief Entry in the directory list | |
341
83ef77841ff1
Directory: dots are not listed by default
David Demelier <markand@malikania.fr>
parents:
334
diff
changeset
|
29 */ |
83ef77841ff1
Directory: dots are not listed by default
David Demelier <markand@malikania.fr>
parents:
334
diff
changeset
|
30 class DirectoryEntry { |
83ef77841ff1
Directory: dots are not listed by default
David Demelier <markand@malikania.fr>
parents:
334
diff
changeset
|
31 public: |
83ef77841ff1
Directory: dots are not listed by default
David Demelier <markand@malikania.fr>
parents:
334
diff
changeset
|
32 /** |
83ef77841ff1
Directory: dots are not listed by default
David Demelier <markand@malikania.fr>
parents:
334
diff
changeset
|
33 * @enum Type |
83ef77841ff1
Directory: dots are not listed by default
David Demelier <markand@malikania.fr>
parents:
334
diff
changeset
|
34 * @brief Describe the type of an entry |
83ef77841ff1
Directory: dots are not listed by default
David Demelier <markand@malikania.fr>
parents:
334
diff
changeset
|
35 */ |
355 | 36 enum { |
341
83ef77841ff1
Directory: dots are not listed by default
David Demelier <markand@malikania.fr>
parents:
334
diff
changeset
|
37 Unknown = 0, |
83ef77841ff1
Directory: dots are not listed by default
David Demelier <markand@malikania.fr>
parents:
334
diff
changeset
|
38 File, |
83ef77841ff1
Directory: dots are not listed by default
David Demelier <markand@malikania.fr>
parents:
334
diff
changeset
|
39 Dir, |
83ef77841ff1
Directory: dots are not listed by default
David Demelier <markand@malikania.fr>
parents:
334
diff
changeset
|
40 Link |
83ef77841ff1
Directory: dots are not listed by default
David Demelier <markand@malikania.fr>
parents:
334
diff
changeset
|
41 }; |
83ef77841ff1
Directory: dots are not listed by default
David Demelier <markand@malikania.fr>
parents:
334
diff
changeset
|
42 |
83ef77841ff1
Directory: dots are not listed by default
David Demelier <markand@malikania.fr>
parents:
334
diff
changeset
|
43 std::string name; //! name of entry (base name) |
355 | 44 int type{Unknown}; //! type of file |
341
83ef77841ff1
Directory: dots are not listed by default
David Demelier <markand@malikania.fr>
parents:
334
diff
changeset
|
45 |
83ef77841ff1
Directory: dots are not listed by default
David Demelier <markand@malikania.fr>
parents:
334
diff
changeset
|
46 friend bool operator==(const DirectoryEntry &e1, const DirectoryEntry &e2); |
83ef77841ff1
Directory: dots are not listed by default
David Demelier <markand@malikania.fr>
parents:
334
diff
changeset
|
47 }; |
83ef77841ff1
Directory: dots are not listed by default
David Demelier <markand@malikania.fr>
parents:
334
diff
changeset
|
48 |
83ef77841ff1
Directory: dots are not listed by default
David Demelier <markand@malikania.fr>
parents:
334
diff
changeset
|
49 /** |
199
08eb7b00b950
Directory: support for Linux and BSD complete
David Demelier <markand@malikania.fr>
parents:
198
diff
changeset
|
50 * @class Directory |
08eb7b00b950
Directory: support for Linux and BSD complete
David Demelier <markand@malikania.fr>
parents:
198
diff
changeset
|
51 * @brief class to manipulate directories |
08eb7b00b950
Directory: support for Linux and BSD complete
David Demelier <markand@malikania.fr>
parents:
198
diff
changeset
|
52 * |
08eb7b00b950
Directory: support for Linux and BSD complete
David Demelier <markand@malikania.fr>
parents:
198
diff
changeset
|
53 * This class allow the user to iterate directories in a for range based |
08eb7b00b950
Directory: support for Linux and BSD complete
David Demelier <markand@malikania.fr>
parents:
198
diff
changeset
|
54 * loop using iterators. |
08eb7b00b950
Directory: support for Linux and BSD complete
David Demelier <markand@malikania.fr>
parents:
198
diff
changeset
|
55 */ |
355 | 56 class Directory : public std::vector<DirectoryEntry> { |
199
08eb7b00b950
Directory: support for Linux and BSD complete
David Demelier <markand@malikania.fr>
parents:
198
diff
changeset
|
57 public: |
08eb7b00b950
Directory: support for Linux and BSD complete
David Demelier <markand@malikania.fr>
parents:
198
diff
changeset
|
58 /** |
08eb7b00b950
Directory: support for Linux and BSD complete
David Demelier <markand@malikania.fr>
parents:
198
diff
changeset
|
59 * @enum Flags |
08eb7b00b950
Directory: support for Linux and BSD complete
David Demelier <markand@malikania.fr>
parents:
198
diff
changeset
|
60 * @brief optional flags to read directories |
08eb7b00b950
Directory: support for Linux and BSD complete
David Demelier <markand@malikania.fr>
parents:
198
diff
changeset
|
61 */ |
08eb7b00b950
Directory: support for Linux and BSD complete
David Demelier <markand@malikania.fr>
parents:
198
diff
changeset
|
62 enum Flags { |
341
83ef77841ff1
Directory: dots are not listed by default
David Demelier <markand@malikania.fr>
parents:
334
diff
changeset
|
63 Dot = (1 << 0), //!< If set, lists "." too |
83ef77841ff1
Directory: dots are not listed by default
David Demelier <markand@malikania.fr>
parents:
334
diff
changeset
|
64 DotDot = (1 << 1) //!< If set, lists ".." too |
199
08eb7b00b950
Directory: support for Linux and BSD complete
David Demelier <markand@malikania.fr>
parents:
198
diff
changeset
|
65 }; |
08eb7b00b950
Directory: support for Linux and BSD complete
David Demelier <markand@malikania.fr>
parents:
198
diff
changeset
|
66 |
08eb7b00b950
Directory: support for Linux and BSD complete
David Demelier <markand@malikania.fr>
parents:
198
diff
changeset
|
67 private: |
08eb7b00b950
Directory: support for Linux and BSD complete
David Demelier <markand@malikania.fr>
parents:
198
diff
changeset
|
68 void systemLoad(const std::string &path, int flags); |
08eb7b00b950
Directory: support for Linux and BSD complete
David Demelier <markand@malikania.fr>
parents:
198
diff
changeset
|
69 |
08eb7b00b950
Directory: support for Linux and BSD complete
David Demelier <markand@malikania.fr>
parents:
198
diff
changeset
|
70 public: |
08eb7b00b950
Directory: support for Linux and BSD complete
David Demelier <markand@malikania.fr>
parents:
198
diff
changeset
|
71 /** |
08eb7b00b950
Directory: support for Linux and BSD complete
David Demelier <markand@malikania.fr>
parents:
198
diff
changeset
|
72 * Default constructor, does nothing. |
08eb7b00b950
Directory: support for Linux and BSD complete
David Demelier <markand@malikania.fr>
parents:
198
diff
changeset
|
73 */ |
08eb7b00b950
Directory: support for Linux and BSD complete
David Demelier <markand@malikania.fr>
parents:
198
diff
changeset
|
74 Directory(); |
08eb7b00b950
Directory: support for Linux and BSD complete
David Demelier <markand@malikania.fr>
parents:
198
diff
changeset
|
75 |
08eb7b00b950
Directory: support for Linux and BSD complete
David Demelier <markand@malikania.fr>
parents:
198
diff
changeset
|
76 /** |
08eb7b00b950
Directory: support for Linux and BSD complete
David Demelier <markand@malikania.fr>
parents:
198
diff
changeset
|
77 * Open a directory and read all its content. |
08eb7b00b950
Directory: support for Linux and BSD complete
David Demelier <markand@malikania.fr>
parents:
198
diff
changeset
|
78 * @param path the path |
08eb7b00b950
Directory: support for Linux and BSD complete
David Demelier <markand@malikania.fr>
parents:
198
diff
changeset
|
79 * @param flags the optional flags |
08eb7b00b950
Directory: support for Linux and BSD complete
David Demelier <markand@malikania.fr>
parents:
198
diff
changeset
|
80 */ |
08eb7b00b950
Directory: support for Linux and BSD complete
David Demelier <markand@malikania.fr>
parents:
198
diff
changeset
|
81 Directory(const std::string &path, int flags = 0); |
08eb7b00b950
Directory: support for Linux and BSD complete
David Demelier <markand@malikania.fr>
parents:
198
diff
changeset
|
82 |
08eb7b00b950
Directory: support for Linux and BSD complete
David Demelier <markand@malikania.fr>
parents:
198
diff
changeset
|
83 /** |
204
7086e93bc4ea
Directory: add count() operator== and STL compat
David Demelier <markand@malikania.fr>
parents:
199
diff
changeset
|
84 * Get the number of entries in the directory. |
7086e93bc4ea
Directory: add count() operator== and STL compat
David Demelier <markand@malikania.fr>
parents:
199
diff
changeset
|
85 * |
7086e93bc4ea
Directory: add count() operator== and STL compat
David Demelier <markand@malikania.fr>
parents:
199
diff
changeset
|
86 * @return the number |
7086e93bc4ea
Directory: add count() operator== and STL compat
David Demelier <markand@malikania.fr>
parents:
199
diff
changeset
|
87 */ |
7086e93bc4ea
Directory: add count() operator== and STL compat
David Demelier <markand@malikania.fr>
parents:
199
diff
changeset
|
88 int count() const; |
199
08eb7b00b950
Directory: support for Linux and BSD complete
David Demelier <markand@malikania.fr>
parents:
198
diff
changeset
|
89 }; |
08eb7b00b950
Directory: support for Linux and BSD complete
David Demelier <markand@malikania.fr>
parents:
198
diff
changeset
|
90 |
08eb7b00b950
Directory: support for Linux and BSD complete
David Demelier <markand@malikania.fr>
parents:
198
diff
changeset
|
91 #endif // !_DIRECTORY_H_ |