2 #include <ossia/network/domain/domain.hpp>
7 struct domain_conversion
11 OSSIA_INLINE domain operator()(
const T&)
16 domain operator()(
const domain_base<int32_t>& t)
24 for(
auto val : t.values)
25 f.values.push_back(val);
29 domain operator()(
const domain_base<float>& t)
37 for(
auto val : t.values)
38 f.values.push_back(val);
42 domain operator()(
const domain_base<bool>& t)
52 struct domain_conversion<domain_base<impulse>>
55 OSSIA_INLINE domain operator()(
const T&)
57 return domain_base<impulse>{};
62 struct domain_conversion<domain_base<bool>>
65 OSSIA_INLINE domain operator()(
const T&)
67 return domain_base<bool>{};
71 struct domain_conversion<vector_domain>
73 OSSIA_INLINE domain operator()(
const vector_domain& src) {
return src; }
76 OSSIA_INLINE domain operator()(
const T&)
78 return vector_domain();
82 template <std::
size_t N>
83 struct domain_conversion<vecf_domain<N>>
85 OSSIA_INLINE domain operator()(
const vecf_domain<N>& src) {
return src; }
86 vecf_domain<N> list_func(
const vector_domain& t)
89 const std::size_t min_size =
std::min(N, t.min.size());
90 for(std::size_t i = 0; i < min_size; i++)
92 dom.min[i] = ossia::convert<float>(t.min[i]);
95 const std::size_t max_size =
std::min(N, t.max.size());
96 for(std::size_t i = 0; i < max_size; i++)
98 dom.max[i] = ossia::convert<float>(t.max[i]);
101 const std::size_t vals_size =
std::min(N, t.values.size());
102 for(std::size_t i = 0; i < vals_size; i++)
104 dom.values[i].clear();
105 for(
auto& val : t.values[i])
106 dom.values[i].insert(ossia::convert<float>(val));
112 OSSIA_INLINE domain operator()(
const vector_domain& t) {
return list_func(t); }
114 OSSIA_INLINE domain operator()(
const domain_base<int32_t>& d)
116 domain_base<float> res;
121 for(
auto& val : d.values)
122 res.values.push_back(val);
126 OSSIA_INLINE domain operator()(
const domain_base<bool>& d)
128 domain_base<float> res;
134 OSSIA_INLINE domain operator()(
const domain_base<float>& d) {
return d; }
136 template <
typename T>
137 OSSIA_INLINE domain operator()(
const T&)
139 return vecf_domain<N>();
144 struct domain_conversion<domain_base<std::string>>
146 OSSIA_INLINE domain operator()(
const domain_base<std::string>& src) {
return src; }
148 template <
typename T>
149 OSSIA_INLINE domain operator()(
const T&)
151 return domain_base<std::string>();
157 inline domain convert_domain(
const domain& dom,
ossia::val_type newtype)
162 return ossia::apply_nonnull(domain_conversion<domain_base<impulse>>{}, dom);
164 return ossia::apply_nonnull(domain_conversion<domain_base<int32_t>>{}, dom);
165 case val_type::FLOAT:
166 return ossia::apply_nonnull(domain_conversion<domain_base<float>>{}, dom);
168 return ossia::apply_nonnull(domain_conversion<domain_base<bool>>{}, dom);
170 return ossia::apply_nonnull(domain_conversion<domain_base<std::string>>{}, dom);
172 return ossia::apply_nonnull(domain_conversion<vector_domain>{}, dom);
174 return ossia::apply_nonnull(domain_conversion<vecf_domain<2>>{}, dom);
176 return ossia::apply_nonnull(domain_conversion<vecf_domain<3>>{}, dom);
178 return ossia::apply_nonnull(domain_conversion<vecf_domain<4>>{}, dom);
186 constexpr
const auto list_index = 6;
193 if(dom.which() < list_index)
195 dom = convert_domain(dom, newtype);
197 else if(dom.which() == list_index)
204 dom = convert_domain(dom, newtype);
val_type
Enum to represent the types that a value can take.
Definition: parameter_properties.hpp:16
constexpr OSSIA_INLINE auto min(const T a, const U b) noexcept -> typename std::conditional<(sizeof(T) > sizeof(U)), T, U >::type
min function tailored for values
Definition: math.hpp:125
void convert_compatible_domain(domain &dom, ossia::val_type newtype)
Definition: domain_conversion.hpp:184
domain A domain of values
Definition: domain_base.hpp:23