2#include <ossia/network/domain/domain.hpp>
7struct 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)
52struct domain_conversion<domain_base<impulse>>
55 OSSIA_INLINE domain operator()(
const T&)
57 return domain_base<impulse>{};
62struct domain_conversion<domain_base<bool>>
65 OSSIA_INLINE domain operator()(
const T&)
67 return domain_base<bool>{};
71struct 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();
82template <std::
size_t N>
83struct 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#if !defined(OSSIA_FREESTANDING)
90 const std::size_t min_size = std::min(N, t.min.size());
91 for(std::size_t i = 0; i < min_size; i++)
93 dom.min[i] = ossia::convert<float>(t.min[i]);
96 const std::size_t max_size = std::min(N, t.max.size());
97 for(std::size_t i = 0; i < max_size; i++)
99 dom.max[i] = ossia::convert<float>(t.max[i]);
102 const std::size_t vals_size = std::min(N, t.values.size());
103 for(std::size_t i = 0; i < vals_size; i++)
105 dom.values[i].clear();
106 for(
auto& val : t.values[i])
107 dom.values[i].insert(
ossia::convert<float>(val));
113 OSSIA_INLINE domain operator()(
const vector_domain& t) {
return list_func(t); }
115 OSSIA_INLINE domain operator()(
const domain_base<int32_t>& d)
117 domain_base<float> res;
122 for(
auto& val : d.values)
123 res.values.push_back(val);
127 OSSIA_INLINE domain operator()(
const domain_base<bool>& d)
129 domain_base<float> res;
135 OSSIA_INLINE domain operator()(
const domain_base<float>& d) {
return d; }
137 template <
typename T>
138 OSSIA_INLINE domain operator()(
const T&)
140 return vecf_domain<N>();
145struct domain_conversion<domain_base<std::string>>
147 OSSIA_INLINE domain operator()(
const domain_base<std::string>& src) {
return src; }
149 template <
typename T>
150 OSSIA_INLINE domain operator()(
const T&)
152 return domain_base<std::string>();
158inline domain convert_domain(
const domain& dom,
ossia::val_type newtype)
163 return ossia::apply_nonnull(domain_conversion<domain_base<impulse>>{}, dom);
165 return ossia::apply_nonnull(domain_conversion<domain_base<int32_t>>{}, dom);
166 case val_type::FLOAT:
167 return ossia::apply_nonnull(domain_conversion<domain_base<float>>{}, dom);
169 return ossia::apply_nonnull(domain_conversion<domain_base<bool>>{}, dom);
171 return ossia::apply_nonnull(domain_conversion<domain_base<std::string>>{}, dom);
173 return ossia::apply_nonnull(domain_conversion<vector_domain>{}, dom);
175 return ossia::apply_nonnull(domain_conversion<vecf_domain<2>>{}, dom);
177 return ossia::apply_nonnull(domain_conversion<vecf_domain<3>>{}, dom);
179 return ossia::apply_nonnull(domain_conversion<vecf_domain<4>>{}, dom);
187 constexpr const auto list_index = 6;
194 if(dom.which() < list_index)
196 dom = convert_domain(dom, newtype);
198 else if(dom.which() == list_index)
205 dom = convert_domain(dom, newtype);
val_type
Enum to represent the types that a value can take.
Definition parameter_properties.hpp:16
void convert_compatible_domain(domain &dom, ossia::val_type newtype)
Definition domain_conversion.hpp:185
domain A domain of values
Definition domain_base.hpp:23