annotate C++/modules/Ini/Ini.h @ 395:b78d6d8f2872

Unicode: remove class, use namespace
author David Demelier <markand@malikania.fr>
date Mon, 28 Sep 2015 15:55:46 +0200
parents 0b576ee64d45
children d5ec1174b707
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
325
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
1 /*
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
2 * Ini.h -- .ini file parsing
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
3 *
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
4 * Copyright (c) 2013, 2014 David Demelier <markand@malikania.fr>
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
5 *
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
6 * Permission to use, copy, modify, and/or distribute this software for any
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
7 * purpose with or without fee is hereby granted, provided that the above
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
8 * copyright notice and this permission notice appear in all copies.
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
9 *
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
17 */
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
18
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
19 #ifndef _INI_H_
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
20 #define _INI_H_
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
21
327
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
22 /**
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
23 * @file Ini.h
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
24 * @brief Configuration file parser
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
25 */
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
26
325
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
27 #include <algorithm>
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
28 #include <deque>
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
29 #include <stdexcept>
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
30 #include <string>
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
31
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
32 /**
327
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
33 * @class IniError
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
34 * @brief Error in a file
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
35 */
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
36 class IniError : public std::exception {
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
37 private:
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
38 int m_line;
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
39 int m_position;
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
40 std::string m_error;
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
41
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
42 public:
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
43 /**
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
44 * Construct an error.
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
45 *
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
46 * @param line the line
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
47 * @param position the position
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
48 * @param error the error
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
49 */
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
50 inline IniError(int line, int position, std::string error)
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
51 : m_line(line)
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
52 , m_position(position)
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
53 , m_error(std::move(error))
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
54 {
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
55 }
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
56
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
57 /**
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
58 * Return the line number.
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
59 *
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
60 * @return the line
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
61 */
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
62 inline int line() const noexcept
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
63 {
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
64 return m_line;
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
65 }
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
66
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
67 /**
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
68 * Return the position in the current line.
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
69 *
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
70 * @return the position
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
71 */
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
72 inline int position() const noexcept
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
73 {
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
74 return m_position;
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
75 }
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
76
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
77 /**
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
78 * Get the error string.
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
79 *
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
80 * @return the string
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
81 */
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
82 inline const char *what() const noexcept
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
83 {
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
84 return m_error.c_str();
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
85 }
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
86 };
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
87
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
88 /**
325
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
89 * @class IniOption
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
90 * @brief Option definition
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
91 */
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
92 class IniOption {
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
93 private:
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
94 std::string m_key;
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
95 std::string m_value;
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
96
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
97 public:
327
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
98 /**
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
99 * Construct an option.
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
100 *
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
101 * @param key the key
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
102 * @param value the value
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
103 */
325
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
104 inline IniOption(std::string key, std::string value)
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
105 : m_key(std::move(key))
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
106 , m_value(std::move(value))
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
107 {
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
108 }
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
109
327
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
110 /**
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
111 * Get the option key.
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
112 *
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
113 * @return the key
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
114 */
325
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
115 inline const std::string &key() const noexcept
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
116 {
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
117 return m_key;
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
118 }
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
119
327
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
120 /**
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
121 * Get the option value.
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
122 *
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
123 * @return the value
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
124 */
325
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
125 inline const std::string &value() const noexcept
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
126 {
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
127 return m_value;
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
128 }
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
129 };
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
130
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
131 /**
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
132 * @class IniSection
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
133 * @brief Section that contains one or more options
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
134 */
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
135 class IniSection {
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
136 private:
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
137 std::string m_key;
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
138 std::deque<IniOption> m_options;
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
139
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
140 template <typename T>
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
141 T find(const std::string &key) const
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
142 {
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
143 auto it = std::find_if(m_options.begin(), m_options.end(), [&] (const IniOption &o) {
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
144 return o.key() == key;
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
145 });
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
146
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
147 if (it == m_options.end())
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
148 throw std::out_of_range("option " + key + " not found");
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
149
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
150 return const_cast<T>(*it);
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
151 }
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
152
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
153 public:
327
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
154 /**
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
155 * Default constructor has no sections and no values.
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
156 */
325
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
157 IniSection() = default;
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
158
327
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
159 /**
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
160 * Construct a section with a set of options.
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
161 *
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
162 * @param key the section name
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
163 * @param options the list of options
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
164 */
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
165 inline IniSection(std::string key, std::deque<IniOption> options = {}) noexcept
325
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
166 : m_key(std::move(key))
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
167 , m_options(std::move(options))
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
168 {
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
169 }
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
170
327
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
171 /**
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
172 * Get the section key.
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
173 *
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
174 * @return the key
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
175 */
325
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
176 inline const std::string &key() const noexcept
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
177 {
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
178 return m_key;
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
179 }
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
180
327
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
181 /**
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
182 * Get an iterator to the beginning.
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
183 *
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
184 * @return the iterator
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
185 */
325
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
186 inline auto begin() noexcept
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
187 {
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
188 return m_options.begin();
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
189 }
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
190
327
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
191 /**
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
192 * Overloaded function.
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
193 *
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
194 * @return the iterator
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
195 */
325
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
196 inline auto begin() const noexcept
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
197 {
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
198 return m_options.begin();
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
199 }
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
200
327
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
201 /**
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
202 * Overloaded function.
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
203 *
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
204 * @return the iterator
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
205 */
325
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
206 inline auto cbegin() const noexcept
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
207 {
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
208 return m_options.cbegin();
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
209 }
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
210
327
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
211 /**
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
212 * Get an iterator to the end.
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
213 *
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
214 * @return the iterator
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
215 */
325
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
216 inline auto end() noexcept
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
217 {
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
218 return m_options.end();
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
219 }
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
220
327
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
221 /**
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
222 * Overloaded function.
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
223 *
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
224 * @return the iterator
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
225 */
325
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
226 inline auto end() const noexcept
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
227 {
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
228 return m_options.end();
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
229 }
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
230
327
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
231 /**
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
232 * Overloaded function.
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
233 *
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
234 * @return the iterator
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
235 */
325
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
236 inline auto cend() const noexcept
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
237 {
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
238 return m_options.cend();
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
239 }
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
240
327
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
241 /**
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
242 * Append an option.
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
243 *
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
244 * @param option the option to add
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
245 */
325
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
246 inline void push_back(IniOption option)
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
247 {
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
248 m_options.push_back(std::move(option));
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
249 }
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
250
327
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
251 /**
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
252 * Push an option to the beginning.
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
253 *
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
254 * @param option the option to add
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
255 */
325
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
256 inline void push_front(IniOption option)
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
257 {
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
258 m_options.push_front(std::move(option));
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
259 }
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
260
327
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
261 /**
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
262 * Get the number of options in that section.
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
263 *
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
264 * @return the size
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
265 */
325
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
266 inline unsigned size() const noexcept
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
267 {
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
268 return m_options.size();
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
269 }
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
270
327
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
271 /**
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
272 * Access an option at the specified index.
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
273 *
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
274 * @param index the index
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
275 * @return the option
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
276 * @warning No bounds checking is performed
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
277 */
325
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
278 inline IniOption &operator[](int index) noexcept
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
279 {
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
280 return m_options[index];
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
281 }
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
282
327
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
283 /**
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
284 * Access an option at the specified index.
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
285 *
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
286 * @param index the index
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
287 * @return the option
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
288 * @warning No bounds checking is performed
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
289 */
325
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
290 inline const IniOption &operator[](int index) const noexcept
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
291 {
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
292 return m_options[index];
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
293 }
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
294
327
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
295 /**
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
296 * Access an option at the specified key.
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
297 *
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
298 * @param key the key
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
299 * @return the option
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
300 * @warning No bounds checking is performed
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
301 */
325
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
302 inline IniOption &operator[](const std::string &key)
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
303 {
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
304 return find<IniOption &>(key);
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
305 }
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
306
327
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
307 /**
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
308 * Access an option at the specified key.
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
309 *
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
310 * @param key the key
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
311 * @return the option
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
312 * @warning No bounds checking is performed
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
313 */
325
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
314 inline const IniOption &operator[](const std::string &key) const
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
315 {
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
316 return find<const IniOption &>(key);
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
317 }
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
318 };
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
319
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
320 /**
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
321 * @class Ini
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
322 * @brief Ini config file loader
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
323 */
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
324 class Ini {
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
325 private:
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
326 std::deque<IniSection> m_sections;
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
327
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
328 template <typename T>
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
329 T find(const std::string &key) const
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
330 {
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
331 auto it = std::find_if(m_sections.begin(), m_sections.end(), [&] (const IniSection &s) {
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
332 return s.key() == key;
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
333 });
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
334
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
335 if (it == m_sections.end())
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
336 throw std::out_of_range("section " + key + " not found");
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
337
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
338 return const_cast<T>(*it);
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
339 }
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
340
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
341 public:
327
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
342 /**
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
343 * Default constructor with an empty configuration.
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
344 */
325
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
345 Ini() = default;
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
346
327
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
347 /**
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
348 * Open the path as the configuration file.
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
349 *
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
350 * @param path the path
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
351 * @throw IniError on any error
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
352 */
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
353 Ini(const std::string &path);
325
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
354
327
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
355 /**
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
356 * Get an iterator to the beginning.
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
357 *
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
358 * @return the iterator
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
359 */
325
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
360 inline auto begin() noexcept
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
361 {
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
362 return m_sections.begin();
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
363 }
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
364
327
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
365 /**
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
366 * Overloaded function.
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
367 *
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
368 * @return the iterator
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
369 */
325
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
370 inline auto begin() const noexcept
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
371 {
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
372 return m_sections.begin();
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
373 }
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
374
327
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
375 /**
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
376 * Overloaded function.
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
377 *
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
378 * @return the iterator
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
379 */
325
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
380 inline auto cbegin() const noexcept
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
381 {
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
382 return m_sections.cbegin();
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
383 }
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
384
327
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
385 /**
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
386 * Get an iterator to the end.
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
387 *
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
388 * @return the iterator
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
389 */
325
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
390 inline auto end() noexcept
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
391 {
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
392 return m_sections.end();
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
393 }
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
394
327
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
395 /**
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
396 * Overloaded function.
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
397 *
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
398 * @return the iterator
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
399 */
325
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
400 inline auto end() const noexcept
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
401 {
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
402 return m_sections.end();
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
403 }
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
404
327
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
405 /**
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
406 * Overloaded function.
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
407 *
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
408 * @return the iterator
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
409 */
325
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
410 inline auto cend() const noexcept
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
411 {
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
412 return m_sections.cend();
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
413 }
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
414
327
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
415 /**
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
416 * Get the number of sections in the configuration.
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
417 *
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
418 * @return the size
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
419 */
325
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
420 inline unsigned size() const noexcept
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
421 {
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
422 return m_sections.size();
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
423 }
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
424
327
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
425 /**
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
426 * Append a section to the end.
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
427 *
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
428 * @param section the section to add
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
429 */
325
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
430 inline void push_back(IniSection section)
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
431 {
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
432 m_sections.push_back(std::move(section));
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
433 }
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
434
327
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
435 /**
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
436 * Add a section to the beginning.
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
437 *
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
438 * @param section the section to add
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
439 */
325
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
440 inline void push_front(IniSection section)
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
441 {
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
442 m_sections.push_front(std::move(section));
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
443 }
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
444
327
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
445 /**
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
446 * Access a section at the specified index.
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
447 *
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
448 * @param index the index
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
449 * @return the section
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
450 * @warning No bounds checking is performed
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
451 */
325
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
452 inline IniSection &operator[](int index) noexcept
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
453 {
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
454 return m_sections[index];
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
455 }
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
456
327
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
457 /**
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
458 * Access a section at the specified index.
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
459 *
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
460 * @param index the index
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
461 * @return the section
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
462 * @warning No bounds checking is performed
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
463 */
325
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
464 inline const IniSection &operator[](int index) const noexcept
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
465 {
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
466 return m_sections[index];
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
467 }
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
468
327
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
469 /**
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
470 * Access a section at the specified key.
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
471 *
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
472 * @param key the key
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
473 * @return the section
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
474 * @warning No bounds checking is performed
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
475 */
325
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
476 inline IniSection &operator[](const std::string &key)
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
477 {
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
478 return find<IniSection &>(key);
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
479 }
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
480
327
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
481 /**
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
482 * Access a section at the specified key.
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
483 *
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
484 * @param key the key
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
485 * @return the section
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
486 * @warning No bounds checking is performed
David Demelier <markand@malikania.fr>
parents: 325
diff changeset
487 */
325
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
488 inline const IniSection &operator[](const std::string &key) const
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
489 {
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
490 return find<IniSection &>(key);
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
491 }
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
492 };
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
493
d52a69f9f029 Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff changeset
494 #endif // !_INI_H_