mirror of
https://github.com/ToruNiina/toml11.git
synced 2024-11-14 00:30:06 +00:00
fix: check all the elements in an array
while checking if the array is array-of-tables or not (heterogeneous arrays are allowed, so there might be an array that has a table and an integer at the same time)
This commit is contained in:
parent
2e41a26785
commit
f7bfcdd7aa
@ -244,7 +244,17 @@ struct serializer
|
|||||||
|
|
||||||
std::string operator()(const array_type& v) const
|
std::string operator()(const array_type& v) const
|
||||||
{
|
{
|
||||||
if(!v.empty() && v.front().is_table())// v is an array of tables
|
if(v.empty())
|
||||||
|
{
|
||||||
|
return std::string("[]");
|
||||||
|
}
|
||||||
|
|
||||||
|
// Since TOML v0.5.0, heterogeneous arrays are allowed. So we need to
|
||||||
|
// check all the element in an array to check if the array is an array
|
||||||
|
// of tables.
|
||||||
|
const bool is_array_of_tables = std::all_of(v.begin(), v.end(),
|
||||||
|
[](const value_type& elem) {return elem.is_table();});
|
||||||
|
if(is_array_of_tables)
|
||||||
{
|
{
|
||||||
// if it's not inlined, we need to add `[[table.key]]`.
|
// if it's not inlined, we need to add `[[table.key]]`.
|
||||||
// but if it can be inlined,
|
// but if it can be inlined,
|
||||||
@ -322,10 +332,6 @@ struct serializer
|
|||||||
}
|
}
|
||||||
return token;
|
return token;
|
||||||
}
|
}
|
||||||
if(v.empty())
|
|
||||||
{
|
|
||||||
return std::string("[]");
|
|
||||||
}
|
|
||||||
|
|
||||||
// not an array of tables. normal array.
|
// not an array of tables. normal array.
|
||||||
// first, try to make it inline if none of the elements have a comment.
|
// first, try to make it inline if none of the elements have a comment.
|
||||||
|
Loading…
Reference in New Issue
Block a user