53 const ossia::destination_index& idx;
54 const ossia::domain& domain;
56 template <std::
size_t N>
58 operator()(
const std::array<float, N>& start,
const std::array<float, N>& end)
60 SCORE_ASSERT(!idx.empty());
61 const auto i = idx[0];
64 if(
auto dom = domain.v.target<ossia::vecf_domain<N>>())
66 if(
auto min_v = dom->min[i])
67 d.min = std::min(d.min, (
double)*min_v);
68 if(
auto max_v = dom->max[i])
69 d.max = std::max(d.max, (
double)*max_v);
76 const std::vector<ossia::value>& start,
const std::vector<ossia::value>& end)
78 SCORE_ASSERT(!idx.empty());
79 const auto i = (std::size_t)idx[0];
81 ossia::convert<double>(start[i]), ossia::convert<double>(end[i])};
83 if(
auto dom = domain.v.target<ossia::vector_domain>())
85 if(dom->min.size() > i)
86 d.min = std::min(d.min, ossia::convert<double>(dom->min[i]));
87 if(dom->max.size() > i)
88 d.max = std::max(d.max, ossia::convert<double>(dom->max[i]));
95 operator()(
const ossia::value_map_type& start,
const ossia::value_map_type& end)
100 template <
typename T>
109 Curve::CurveDomain operator()(ossia::impulse start, ossia::impulse end) {
return {}; }
116 template <
typename T,
typename U>
125 const ossia::destination_index& idx;
127 template <std::
size_t N>
128 std::pair<double, double>
129 operator()(
const std::array<float, N>& start,
const std::array<float, N>& end)
131 SCORE_ASSERT(!idx.empty());
132 const auto i = idx[0];
133 return {(double)start[i], (
double)end[i]};
136 std::pair<double, double> operator()(
137 const std::vector<ossia::value>& start,
const std::vector<ossia::value>& end)
139 SCORE_ASSERT(!idx.empty());
140 const auto i = idx[0];
141 return {ossia::convert<double>(start[i]), ossia::convert<double>(end[i])};
144 template <
typename T>
145 std::pair<double, double> operator()(
const T& start,
const T& end)
147 return {(double)start, (
double)end};
150 std::pair<double, double> operator()(ossia::impulse start, ossia::impulse end)
155 std::pair<double, double> operator()(
const std::string& start,
const std::string& end)
160 template <
typename T,
typename U>
161 std::pair<double, double> operator()(
const T& start,
const U& end)
Definition CurveModel.hpp:127
Automation range between two values, widened to the target address's domain.
Definition InterpolateStates.hpp:52