1414#include " log/log.h"
1515#include " log/message.h"
1616
17+ #include " curve/concept.h"
1718#include " curve/keyframe_container.h"
1819#include " event/evententity.h"
1920#include " time/time.h"
@@ -27,7 +28,7 @@ class EventLoop;
2728
2829namespace curve {
2930
30- template <typename T>
31+ template <KeyframeValueLike T>
3132class BaseCurve : public event ::EventEntity {
3233public:
3334 BaseCurve (const std::shared_ptr<event::EventLoop> &loop,
@@ -170,7 +171,7 @@ class BaseCurve : public event::EventEntity {
170171 * Redundant keyframes are keyframes that don't change the value
171172 * calculaton of the curve at any given time, e.g. duplicate keyframes.
172173 */
173- template <typename O>
174+ template <KeyframeValueLike O>
174175 void sync (const BaseCurve<O> &other,
175176 const std::function<T(const O &)> &converter,
176177 const time::time_t &start = time::TIME_MIN,
@@ -239,7 +240,7 @@ class BaseCurve : public event::EventEntity {
239240};
240241
241242
242- template <typename T>
243+ template <KeyframeValueLike T>
243244void BaseCurve<T>::set_last(const time::time_t &at,
244245 const T &value,
245246 bool compress) {
@@ -266,7 +267,7 @@ void BaseCurve<T>::set_last(const time::time_t &at,
266267}
267268
268269
269- template <typename T>
270+ template <KeyframeValueLike T>
270271void BaseCurve<T>::set_insert(const time::time_t &at,
271272 const T &value,
272273 bool compress) {
@@ -286,38 +287,38 @@ void BaseCurve<T>::set_insert(const time::time_t &at,
286287}
287288
288289
289- template <typename T>
290+ template <KeyframeValueLike T>
290291void BaseCurve<T>::set_replace(const time::time_t &at,
291292 const T &value) {
292293 this ->container .insert_overwrite (at, value, this ->last_element );
293294 this ->changes (at);
294295}
295296
296297
297- template <typename T>
298+ template <KeyframeValueLike T>
298299void BaseCurve<T>::erase(const time::time_t &at) {
299300 this ->last_element = this ->container .erase (at, this ->last_element );
300301 this ->changes (at);
301302}
302303
303304
304- template <typename T>
305+ template <KeyframeValueLike T>
305306std::pair<time::time_t , const T> BaseCurve<T>::frame(const time::time_t &time) const {
306307 auto e = this ->container .last (time, this ->container .size ());
307308 auto elem = this ->container .get (e);
308309 return std::make_pair (elem.time (), elem.val ());
309310}
310311
311312
312- template <typename T>
313+ template <KeyframeValueLike T>
313314std::pair<time::time_t , const T> BaseCurve<T>::next_frame(const time::time_t &time) const {
314315 auto e = this ->container .last (time, this ->container .size ());
315316 e++;
316317 auto elem = this ->container .get (e);
317318 return std::make_pair (elem.time (), elem.val ());
318319}
319320
320- template <typename T>
321+ template <KeyframeValueLike T>
321322std::string BaseCurve<T>::str() const {
322323 std::stringstream ss;
323324 ss << " Curve[" << this ->idstr () << " ]{" << std::endl;
@@ -329,7 +330,7 @@ std::string BaseCurve<T>::str() const {
329330 return ss.str ();
330331}
331332
332- template <typename T>
333+ template <KeyframeValueLike T>
333334void BaseCurve<T>::check_integrity() const {
334335 time::time_t last_time = time::TIME_MIN;
335336 for (const auto &keyframe : this ->container ) {
@@ -340,7 +341,7 @@ void BaseCurve<T>::check_integrity() const {
340341 }
341342}
342343
343- template <typename T>
344+ template <KeyframeValueLike T>
344345void BaseCurve<T>::sync(const BaseCurve<T> &other,
345346 const time::time_t &start,
346347 bool compress) {
@@ -362,8 +363,8 @@ void BaseCurve<T>::sync(const BaseCurve<T> &other,
362363}
363364
364365
365- template <typename T>
366- template <typename O>
366+ template <KeyframeValueLike T>
367+ template <KeyframeValueLike O>
367368void BaseCurve<T>::sync(const BaseCurve<O> &other,
368369 const std::function<T(const O &)> &converter,
369370 const time::time_t &start,
0 commit comments