@@ -142,11 +142,14 @@ ReaderMapping::get(const char* key, std::string& value, const boost::optional<co
142
142
#define GET_VALUES_MACRO (type, checker, getter ) \
143
143
auto const sx = get_item(key); \
144
144
if (!sx) { \
145
+ if (default_value) { \
146
+ value = *default_value; \
147
+ } \
145
148
return false ; \
146
149
} else { \
147
150
assert_is_array (m_doc, *sx); \
148
151
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) \
150
153
{ \
151
154
assert_##checker (m_doc, item[i]); \
152
155
value.emplace_back (item[i].getter ()); \
@@ -155,36 +158,41 @@ ReaderMapping::get(const char* key, std::string& value, const boost::optional<co
155
158
}
156
159
157
160
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
159
163
{
160
164
value.clear ();
161
165
GET_VALUES_MACRO (" bool" , is_boolean, as_bool)
162
166
}
163
167
164
168
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
166
171
{
167
172
value.clear ();
168
173
GET_VALUES_MACRO (" int" , is_integer, as_int)
169
174
}
170
175
171
176
172
177
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
174
180
{
175
181
value.clear ();
176
182
GET_VALUES_MACRO (" float" , is_real, as_float)
177
183
}
178
184
179
185
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
181
188
{
182
189
value.clear ();
183
190
GET_VALUES_MACRO (" string" , is_string, as_string)
184
191
}
185
192
186
193
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
188
196
{
189
197
value.clear ();
190
198
GET_VALUES_MACRO (" unsigned int" , is_integer, as_int)
0 commit comments