Skip to content

Commit f2fda26

Browse files
committed
ReaderMapping: Add default_value parameter for more reader methods
1 parent f543c67 commit f2fda26

File tree

2 files changed

+19
-11
lines changed

2 files changed

+19
-11
lines changed

src/util/reader_mapping.cpp

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -142,11 +142,14 @@ ReaderMapping::get(const char* key, std::string& value, const boost::optional<co
142142
#define GET_VALUES_MACRO(type, checker, getter) \
143143
auto const sx = get_item(key); \
144144
if (!sx) { \
145+
if (default_value) { \
146+
value = *default_value; \
147+
} \
145148
return false; \
146149
} else { \
147150
assert_is_array(m_doc, *sx); \
148151
auto const& item = sx->as_array(); \
149-
for (size_t i = 1; i < item.size(); ++i) \
152+
for (size_t i = 1; i < item.size(); ++i) \
150153
{ \
151154
assert_##checker(m_doc, item[i]); \
152155
value.emplace_back(item[i].getter()); \
@@ -155,36 +158,41 @@ ReaderMapping::get(const char* key, std::string& value, const boost::optional<co
155158
}
156159

157160
bool
158-
ReaderMapping::get(const char* key, std::vector<bool>& value) const
161+
ReaderMapping::get(const char* key, std::vector<bool>& value,
162+
const boost::optional<std::vector<bool>>& default_value) const
159163
{
160164
value.clear();
161165
GET_VALUES_MACRO("bool", is_boolean, as_bool)
162166
}
163167

164168
bool
165-
ReaderMapping::get(const char* key, std::vector<int>& value) const
169+
ReaderMapping::get(const char* key, std::vector<int>& value,
170+
const boost::optional<std::vector<int>>& default_value) const
166171
{
167172
value.clear();
168173
GET_VALUES_MACRO("int", is_integer, as_int)
169174
}
170175

171176

172177
bool
173-
ReaderMapping::get(const char* key, std::vector<float>& value) const
178+
ReaderMapping::get(const char* key, std::vector<float>& value,
179+
const boost::optional<std::vector<float>>& default_value) const
174180
{
175181
value.clear();
176182
GET_VALUES_MACRO("float", is_real, as_float)
177183
}
178184

179185
bool
180-
ReaderMapping::get(const char* key, std::vector<std::string>& value) const
186+
ReaderMapping::get(const char* key, std::vector<std::string>& value,
187+
const boost::optional<std::vector<std::string>>& default_value) const
181188
{
182189
value.clear();
183190
GET_VALUES_MACRO("string", is_string, as_string)
184191
}
185192

186193
bool
187-
ReaderMapping::get(const char* key, std::vector<unsigned int>& value) const
194+
ReaderMapping::get(const char* key, std::vector<unsigned int>& value,
195+
const boost::optional<std::vector<unsigned int>>& default_value) const
188196
{
189197
value.clear();
190198
GET_VALUES_MACRO("unsigned int", is_integer, as_int)

src/util/reader_mapping.hpp

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -45,11 +45,11 @@ class ReaderMapping final
4545
bool get(const char* key, float& value, const boost::optional<float>& default_value = boost::none) const;
4646
bool get(const char* key, std::string& value, const boost::optional<const char*>& default_value = boost::none) const;
4747

48-
bool get(const char* key, std::vector<bool>& value) const;
49-
bool get(const char* key, std::vector<int>& value) const;
50-
bool get(const char* key, std::vector<float>& value) const;
51-
bool get(const char* key, std::vector<std::string>& value) const;
52-
bool get(const char* key, std::vector<unsigned int>& value) const;
48+
bool get(const char* key, std::vector<bool>& value, const boost::optional<std::vector<bool>>& default_value = boost::none) const;
49+
bool get(const char* key, std::vector<int>& value, const boost::optional<std::vector<int>>& default_value = boost::none) const;
50+
bool get(const char* key, std::vector<float>& value, const boost::optional<std::vector<float>>& default_value = boost::none) const;
51+
bool get(const char* key, std::vector<std::string>& value, const boost::optional<std::vector<std::string>>& default_value = boost::none) const;
52+
bool get(const char* key, std::vector<unsigned int>& value, const boost::optional<std::vector<unsigned int>>& default_value = boost::none) const;
5353

5454
bool get(const char* key, boost::optional<ReaderMapping>&) const;
5555
bool get(const char* key, boost::optional<ReaderCollection>&) const;

0 commit comments

Comments
 (0)