annotate C++/Directory.h @ 242:a9883eeb9757

Add tests for Base64
author David Demelier <markand@malikania.fr>
date Thu, 11 Sep 2014 21:09:58 +0200
parents 7086e93bc4ea
children 24085fae3162
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 *
01294ed877f6 Directory: support of Windows complete
David Demelier <markand@malikania.fr>
parents:
diff changeset
4 * Copyright (c) 2013 David Demelier <markand@malikania.fr>
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 /**
08eb7b00b950 Directory: support for Linux and BSD complete
David Demelier <markand@malikania.fr>
parents: 198
diff changeset
27 * @class Directory
08eb7b00b950 Directory: support for Linux and BSD complete
David Demelier <markand@malikania.fr>
parents: 198
diff changeset
28 * @brief class to manipulate directories
08eb7b00b950 Directory: support for Linux and BSD complete
David Demelier <markand@malikania.fr>
parents: 198
diff changeset
29 *
08eb7b00b950 Directory: support for Linux and BSD complete
David Demelier <markand@malikania.fr>
parents: 198
diff changeset
30 * 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
31 * loop using iterators.
08eb7b00b950 Directory: support for Linux and BSD complete
David Demelier <markand@malikania.fr>
parents: 198
diff changeset
32 */
08eb7b00b950 Directory: support for Linux and BSD complete
David Demelier <markand@malikania.fr>
parents: 198
diff changeset
33 class Directory {
08eb7b00b950 Directory: support for Linux and BSD complete
David Demelier <markand@malikania.fr>
parents: 198
diff changeset
34 public:
08eb7b00b950 Directory: support for Linux and BSD complete
David Demelier <markand@malikania.fr>
parents: 198
diff changeset
35 /**
08eb7b00b950 Directory: support for Linux and BSD complete
David Demelier <markand@malikania.fr>
parents: 198
diff changeset
36 * @enum Flags
08eb7b00b950 Directory: support for Linux and BSD complete
David Demelier <markand@malikania.fr>
parents: 198
diff changeset
37 * @brief optional flags to read directories
08eb7b00b950 Directory: support for Linux and BSD complete
David Demelier <markand@malikania.fr>
parents: 198
diff changeset
38 */
08eb7b00b950 Directory: support for Linux and BSD complete
David Demelier <markand@malikania.fr>
parents: 198
diff changeset
39 enum Flags {
08eb7b00b950 Directory: support for Linux and BSD complete
David Demelier <markand@malikania.fr>
parents: 198
diff changeset
40 NotDot = (1 << 0),
08eb7b00b950 Directory: support for Linux and BSD complete
David Demelier <markand@malikania.fr>
parents: 198
diff changeset
41 NotDotDot = (1 << 1)
08eb7b00b950 Directory: support for Linux and BSD complete
David Demelier <markand@malikania.fr>
parents: 198
diff changeset
42 };
08eb7b00b950 Directory: support for Linux and BSD complete
David Demelier <markand@malikania.fr>
parents: 198
diff changeset
43
08eb7b00b950 Directory: support for Linux and BSD complete
David Demelier <markand@malikania.fr>
parents: 198
diff changeset
44 /**
08eb7b00b950 Directory: support for Linux and BSD complete
David Demelier <markand@malikania.fr>
parents: 198
diff changeset
45 * @enum Type
08eb7b00b950 Directory: support for Linux and BSD complete
David Demelier <markand@malikania.fr>
parents: 198
diff changeset
46 * @brief Describe the type of an entry
08eb7b00b950 Directory: support for Linux and BSD complete
David Demelier <markand@malikania.fr>
parents: 198
diff changeset
47 */
08eb7b00b950 Directory: support for Linux and BSD complete
David Demelier <markand@malikania.fr>
parents: 198
diff changeset
48 enum Type {
08eb7b00b950 Directory: support for Linux and BSD complete
David Demelier <markand@malikania.fr>
parents: 198
diff changeset
49 Unknown = 0,
08eb7b00b950 Directory: support for Linux and BSD complete
David Demelier <markand@malikania.fr>
parents: 198
diff changeset
50 File,
08eb7b00b950 Directory: support for Linux and BSD complete
David Demelier <markand@malikania.fr>
parents: 198
diff changeset
51 Dir,
08eb7b00b950 Directory: support for Linux and BSD complete
David Demelier <markand@malikania.fr>
parents: 198
diff changeset
52 Link
08eb7b00b950 Directory: support for Linux and BSD complete
David Demelier <markand@malikania.fr>
parents: 198
diff changeset
53 };
08eb7b00b950 Directory: support for Linux and BSD complete
David Demelier <markand@malikania.fr>
parents: 198
diff changeset
54
08eb7b00b950 Directory: support for Linux and BSD complete
David Demelier <markand@malikania.fr>
parents: 198
diff changeset
55 /**
08eb7b00b950 Directory: support for Linux and BSD complete
David Demelier <markand@malikania.fr>
parents: 198
diff changeset
56 * @struct Entry
08eb7b00b950 Directory: support for Linux and BSD complete
David Demelier <markand@malikania.fr>
parents: 198
diff changeset
57 * @brief entry in the directory list
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 struct Entry {
08eb7b00b950 Directory: support for Linux and BSD complete
David Demelier <markand@malikania.fr>
parents: 198
diff changeset
60 std::string name; //! name of entry (base name)
08eb7b00b950 Directory: support for Linux and BSD complete
David Demelier <markand@malikania.fr>
parents: 198
diff changeset
61 Type type; //! type of file
08eb7b00b950 Directory: support for Linux and BSD complete
David Demelier <markand@malikania.fr>
parents: 198
diff changeset
62
08eb7b00b950 Directory: support for Linux and BSD complete
David Demelier <markand@malikania.fr>
parents: 198
diff changeset
63 Entry();
204
7086e93bc4ea Directory: add count() operator== and STL compat
David Demelier <markand@malikania.fr>
parents: 199
diff changeset
64
7086e93bc4ea Directory: add count() operator== and STL compat
David Demelier <markand@malikania.fr>
parents: 199
diff changeset
65 friend bool operator==(const Entry &e1, const Entry &e2);
199
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
08eb7b00b950 Directory: support for Linux and BSD complete
David Demelier <markand@malikania.fr>
parents: 198
diff changeset
68 using List = std::vector<Entry>;
08eb7b00b950 Directory: support for Linux and BSD complete
David Demelier <markand@malikania.fr>
parents: 198
diff changeset
69
204
7086e93bc4ea Directory: add count() operator== and STL compat
David Demelier <markand@malikania.fr>
parents: 199
diff changeset
70 // C++ Container compatibility
7086e93bc4ea Directory: add count() operator== and STL compat
David Demelier <markand@malikania.fr>
parents: 199
diff changeset
71 using value_type = List::value_type;
7086e93bc4ea Directory: add count() operator== and STL compat
David Demelier <markand@malikania.fr>
parents: 199
diff changeset
72 using iterator = List::iterator;
7086e93bc4ea Directory: add count() operator== and STL compat
David Demelier <markand@malikania.fr>
parents: 199
diff changeset
73 using const_iterator = List::const_iterator;
7086e93bc4ea Directory: add count() operator== and STL compat
David Demelier <markand@malikania.fr>
parents: 199
diff changeset
74
199
08eb7b00b950 Directory: support for Linux and BSD complete
David Demelier <markand@malikania.fr>
parents: 198
diff changeset
75 private:
08eb7b00b950 Directory: support for Linux and BSD complete
David Demelier <markand@malikania.fr>
parents: 198
diff changeset
76 List m_list;
08eb7b00b950 Directory: support for Linux and BSD complete
David Demelier <markand@malikania.fr>
parents: 198
diff changeset
77
08eb7b00b950 Directory: support for Linux and BSD complete
David Demelier <markand@malikania.fr>
parents: 198
diff changeset
78 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
79
08eb7b00b950 Directory: support for Linux and BSD complete
David Demelier <markand@malikania.fr>
parents: 198
diff changeset
80 public:
08eb7b00b950 Directory: support for Linux and BSD complete
David Demelier <markand@malikania.fr>
parents: 198
diff changeset
81 /**
08eb7b00b950 Directory: support for Linux and BSD complete
David Demelier <markand@malikania.fr>
parents: 198
diff changeset
82 * Default constructor, does nothing.
08eb7b00b950 Directory: support for Linux and BSD complete
David Demelier <markand@malikania.fr>
parents: 198
diff changeset
83 */
08eb7b00b950 Directory: support for Linux and BSD complete
David Demelier <markand@malikania.fr>
parents: 198
diff changeset
84 Directory();
08eb7b00b950 Directory: support for Linux and BSD complete
David Demelier <markand@malikania.fr>
parents: 198
diff changeset
85
08eb7b00b950 Directory: support for Linux and BSD complete
David Demelier <markand@malikania.fr>
parents: 198
diff changeset
86 /**
08eb7b00b950 Directory: support for Linux and BSD complete
David Demelier <markand@malikania.fr>
parents: 198
diff changeset
87 * 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
88 * @param path the path
08eb7b00b950 Directory: support for Linux and BSD complete
David Demelier <markand@malikania.fr>
parents: 198
diff changeset
89 * @param flags the optional flags
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 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
92
08eb7b00b950 Directory: support for Linux and BSD complete
David Demelier <markand@malikania.fr>
parents: 198
diff changeset
93 /**
08eb7b00b950 Directory: support for Linux and BSD complete
David Demelier <markand@malikania.fr>
parents: 198
diff changeset
94 * Return an iterator the beginning.
08eb7b00b950 Directory: support for Linux and BSD complete
David Demelier <markand@malikania.fr>
parents: 198
diff changeset
95 *
08eb7b00b950 Directory: support for Linux and BSD complete
David Demelier <markand@malikania.fr>
parents: 198
diff changeset
96 * @return the iterator
08eb7b00b950 Directory: support for Linux and BSD complete
David Demelier <markand@malikania.fr>
parents: 198
diff changeset
97 */
08eb7b00b950 Directory: support for Linux and BSD complete
David Demelier <markand@malikania.fr>
parents: 198
diff changeset
98 List::iterator begin();
08eb7b00b950 Directory: support for Linux and BSD complete
David Demelier <markand@malikania.fr>
parents: 198
diff changeset
99
08eb7b00b950 Directory: support for Linux and BSD complete
David Demelier <markand@malikania.fr>
parents: 198
diff changeset
100 /**
08eb7b00b950 Directory: support for Linux and BSD complete
David Demelier <markand@malikania.fr>
parents: 198
diff changeset
101 * Return a const iterator the beginning.
08eb7b00b950 Directory: support for Linux and BSD complete
David Demelier <markand@malikania.fr>
parents: 198
diff changeset
102 *
08eb7b00b950 Directory: support for Linux and BSD complete
David Demelier <markand@malikania.fr>
parents: 198
diff changeset
103 * @return the iterator
08eb7b00b950 Directory: support for Linux and BSD complete
David Demelier <markand@malikania.fr>
parents: 198
diff changeset
104 */
08eb7b00b950 Directory: support for Linux and BSD complete
David Demelier <markand@malikania.fr>
parents: 198
diff changeset
105 List::const_iterator cbegin() const;
08eb7b00b950 Directory: support for Linux and BSD complete
David Demelier <markand@malikania.fr>
parents: 198
diff changeset
106
08eb7b00b950 Directory: support for Linux and BSD complete
David Demelier <markand@malikania.fr>
parents: 198
diff changeset
107 /**
08eb7b00b950 Directory: support for Linux and BSD complete
David Demelier <markand@malikania.fr>
parents: 198
diff changeset
108 * Return an iterator to past the end.
08eb7b00b950 Directory: support for Linux and BSD complete
David Demelier <markand@malikania.fr>
parents: 198
diff changeset
109 *
08eb7b00b950 Directory: support for Linux and BSD complete
David Demelier <markand@malikania.fr>
parents: 198
diff changeset
110 * @return the iterator
08eb7b00b950 Directory: support for Linux and BSD complete
David Demelier <markand@malikania.fr>
parents: 198
diff changeset
111 */
08eb7b00b950 Directory: support for Linux and BSD complete
David Demelier <markand@malikania.fr>
parents: 198
diff changeset
112 List::iterator end();
08eb7b00b950 Directory: support for Linux and BSD complete
David Demelier <markand@malikania.fr>
parents: 198
diff changeset
113
08eb7b00b950 Directory: support for Linux and BSD complete
David Demelier <markand@malikania.fr>
parents: 198
diff changeset
114 /**
08eb7b00b950 Directory: support for Linux and BSD complete
David Demelier <markand@malikania.fr>
parents: 198
diff changeset
115 * Return a const iterator to past the end.
08eb7b00b950 Directory: support for Linux and BSD complete
David Demelier <markand@malikania.fr>
parents: 198
diff changeset
116 *
08eb7b00b950 Directory: support for Linux and BSD complete
David Demelier <markand@malikania.fr>
parents: 198
diff changeset
117 * @return the iterator
08eb7b00b950 Directory: support for Linux and BSD complete
David Demelier <markand@malikania.fr>
parents: 198
diff changeset
118 */
08eb7b00b950 Directory: support for Linux and BSD complete
David Demelier <markand@malikania.fr>
parents: 198
diff changeset
119 List::const_iterator cend() const;
204
7086e93bc4ea Directory: add count() operator== and STL compat
David Demelier <markand@malikania.fr>
parents: 199
diff changeset
120
7086e93bc4ea Directory: add count() operator== and STL compat
David Demelier <markand@malikania.fr>
parents: 199
diff changeset
121 /**
7086e93bc4ea Directory: add count() operator== and STL compat
David Demelier <markand@malikania.fr>
parents: 199
diff changeset
122 * 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
123 *
7086e93bc4ea Directory: add count() operator== and STL compat
David Demelier <markand@malikania.fr>
parents: 199
diff changeset
124 * @return the number
7086e93bc4ea Directory: add count() operator== and STL compat
David Demelier <markand@malikania.fr>
parents: 199
diff changeset
125 */
7086e93bc4ea Directory: add count() operator== and STL compat
David Demelier <markand@malikania.fr>
parents: 199
diff changeset
126 int count() const;
7086e93bc4ea Directory: add count() operator== and STL compat
David Demelier <markand@malikania.fr>
parents: 199
diff changeset
127
7086e93bc4ea Directory: add count() operator== and STL compat
David Demelier <markand@malikania.fr>
parents: 199
diff changeset
128 friend bool operator==(const Directory &d1, const Directory &d2);
199
08eb7b00b950 Directory: support for Linux and BSD complete
David Demelier <markand@malikania.fr>
parents: 198
diff changeset
129 };
08eb7b00b950 Directory: support for Linux and BSD complete
David Demelier <markand@malikania.fr>
parents: 198
diff changeset
130
08eb7b00b950 Directory: support for Linux and BSD complete
David Demelier <markand@malikania.fr>
parents: 198
diff changeset
131 #endif // !_DIRECTORY_H_