Skip to content

Commit 8746953

Browse files
committed
curve: Fix compilation for oider clang versions.
1 parent 34c13d2 commit 8746953

File tree

1 file changed

+20
-5
lines changed

1 file changed

+20
-5
lines changed

libopenage/curve/interpolated.h

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -33,14 +33,25 @@ class Interpolated : public BaseCurve<T> {
3333
* example for a <= t <= b:
3434
* val([a:x, b:y], t) = x + (y - x)/(b - a) * (t - a)
3535
*/
36-
3736
T get(const time::time_t &) const override;
3837

3938
void compress(const time::time_t &start = time::TIME_MIN) override;
4039

4140
private:
42-
T interpolate(KeyframeContainer<T>::elem_ptr before,
43-
KeyframeContainer<T>::elem_ptr after,
41+
/**
42+
* Get an interpolated value between two keyframes.
43+
*
44+
* 'before' and 'after' must be ordered such that the index of 'before' is
45+
* less than the index of 'after'.
46+
*
47+
* @param before Index of the earlier keyframe.
48+
* @param after Index of the later keyframe.
49+
* @param elapsed Elapsed time after the earlier keyframe.
50+
*
51+
* @return Interpolated value.
52+
*/
53+
T interpolate(typename KeyframeContainer<T>::elem_ptr before,
54+
typename KeyframeContainer<T>::elem_ptr after,
4455
double elapsed) const;
4556
};
4657

@@ -119,9 +130,13 @@ void Interpolated<T>::compress(const time::time_t &start) {
119130
}
120131

121132
template <typename T>
122-
inline T Interpolated<T>::interpolate(KeyframeContainer<T>::elem_ptr before,
123-
KeyframeContainer<T>::elem_ptr after,
133+
inline T Interpolated<T>::interpolate(typename KeyframeContainer<T>::elem_ptr before,
134+
typename KeyframeContainer<T>::elem_ptr after,
124135
double elapsed) const {
136+
ENSURE(before <= after, "Index of 'before' must be before 'after'");
137+
ENSURE(elapsed <= (this->container.get(after).time().to_double()
138+
- this->container.get(before).time().to_double()),
139+
"Elapsed time must be less than or equal to the time between before and after");
125140
// TODO: after->value - before->value will produce wrong results if
126141
// after->value < before->value and curve element type is unsigned
127142
// Example: after = 2, before = 4; type = uint8_t ==> 2 - 4 = 254

0 commit comments

Comments
 (0)