2#include <halp/static_string.hpp>
4#include <ossia/network/value/value.hpp>
17 using std::vector<std::string>::vector;
18 using std::vector<std::string>::operator=;
21inline const std::string* string_list_row_text(
const ossia::value& row)
noexcept
23 if(
auto str = row.target<std::string>())
25 if(
auto pair = row.target<std::vector<ossia::value>>(); pair && pair->size() == 2)
26 return (*pair)[1].target<std::string>();
30inline bool from_ossia_value(
const ossia::value& src, string_list_values& dst)
33 if(
auto str = src.target<std::string>())
38 if(
auto list = src.target<std::vector<ossia::value>>())
40 dst.reserve(list->size());
41 for(
const auto& row : *list)
42 if(auto text = string_list_row_text(row))
49inline ossia::value keyed_string_list(
const ossia::value& src)
51 std::vector<ossia::value> rows;
52 if(
auto str = src.target<std::string>())
54 rows.emplace_back(std::vector<ossia::value>{10000, *str});
58 auto list = src.target<std::vector<ossia::value>>();
63 for(
const auto& row : *list)
64 if(auto pair = row.target<
std::vector<ossia::value>>(); pair && pair->size() == 2)
65 if(
auto key = (*pair)[0].target<
int>(); key && *key < std::numeric_limits<int>::max())
66 next_key = std::max(next_key, *key + 1);
68 rows.reserve(list->size());
69 for(
const auto& row : *list)
71 if(
auto pair = row.target<std::vector<ossia::value>>();
72 pair && pair->size() == 2 && (*pair)[0].target<
int>()
73 && (*pair)[1].target<std::string>())
75 else if(
auto str = row.target<std::string>())
76 rows.emplace_back(std::vector<ossia::value>{next_key++, *str});
81template <halp::static_
string Name>
88 static constexpr auto name() {
return std::string_view{Name.value}; }
89 static ossia::value migrate_value(
const ossia::value& v)
91 return keyed_string_list(v);
Definition StringListControl.hpp:83
Definition StringListControl.hpp:16