annotate C++/modules/Directory/Directory.h @ 378:92457ea8f7e2

Socket: switch to more OO
author David Demelier <markand@malikania.fr>
date Fri, 19 Jun 2015 10:52:54 +0200
parents 412c3e26bb40
children d5ec1174b707
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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 *
299
24085fae3162 Update licenses
David Demelier <markand@malikania.fr>
parents: 204
diff changeset
4 * Copyright (c) 2013, 2014 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
412c3e26bb40 - Add doxygen
David Demelier <markand@malikania.fr>
parents: 355
diff changeset
27 * @class DirectoryEntry
412c3e26bb40 - Add doxygen
David Demelier <markand@malikania.fr>
parents: 355
diff changeset
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
9f1e9c69c223 Directory:
David Demelier <markand@malikania.fr>
parents: 341
diff changeset
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
9f1e9c69c223 Directory:
David Demelier <markand@malikania.fr>
parents: 341
diff changeset
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
9f1e9c69c223 Directory:
David Demelier <markand@malikania.fr>
parents: 341
diff changeset
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_