From d5fcfd82ec3f7b6e7f6c8774c276b8d3d1867545 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vladim=C3=ADr=20Vondru=C5=A1?= Date: Fri, 12 Oct 2018 16:58:01 +0200 Subject: [PATCH] Animation: pass Key to player callbacks by value, not as const&. It was passed by value everywhere else, but not here. Weird. This is a breaking change, you need to update all your callbacks from e.g. [](const Float&, const Vector2&, T&) { ... } to [](Float, const Vector2&, T&) { ... } Fortunately I caught this soon enough before the release, this would be annoying to change later. --- doc/snippets/MagnumAnimation.cpp | 10 ++++---- src/Magnum/Animation/Player.h | 32 ++++++++++++------------ src/Magnum/Animation/Test/Benchmark.cpp | 2 +- src/Magnum/Animation/Test/PlayerTest.cpp | 8 +++--- 4 files changed, 26 insertions(+), 26 deletions(-) diff --git a/doc/snippets/MagnumAnimation.cpp b/doc/snippets/MagnumAnimation.cpp index e50381d88..49a5ded2c 100644 --- a/doc/snippets/MagnumAnimation.cpp +++ b/doc/snippets/MagnumAnimation.cpp @@ -72,15 +72,15 @@ Object3D* object; Animation::Player player; player.addWithCallback(scaling, - [](const Float&, const Vector3& scaling, Object3D& object) { + [](Float, const Vector3& scaling, Object3D& object) { object.setScaling(scaling); }, *object); player.addWithCallback(rotation, - [](const Float&, const Quaternion& rotation, Object3D& object) { + [](Float, const Quaternion& rotation, Object3D& object) { object.setRotation(rotation); }, *object); player.addWithCallback(translation, - [](const Float&, const Vector3& translation, Object3D& object) { + [](Float, const Vector3& translation, Object3D& object) { object.setTranslation(translation); }, *object); /* [Player-usage-callback] */ @@ -134,7 +134,7 @@ Animation::State state; Animation::Player controller; controller.addWithCallbackOnChange(stateTrack, - [](const Float&, const Animation::State& state, Data& data) { + [](Float, const Animation::State& state, Data& data) { data.player.setState(state, data.timeline.previousFrameTime()); }, state, data); /* [Player-higher-order] */ @@ -155,7 +155,7 @@ Animation::Track timeTrack{{ Animation::Player timer; timer.addWithCallback(timeTrack, - [](const Float&, const Float& time, Animation::Player& player) { + [](Float, const Float& time, Animation::Player& player) { player.advance(time); }, player); diff --git a/src/Magnum/Animation/Player.h b/src/Magnum/Animation/Player.h index cd1f892df..5b96c16b7 100644 --- a/src/Magnum/Animation/Player.h +++ b/src/Magnum/Animation/Player.h @@ -414,7 +414,7 @@ template Player& addWithCallback(const TrackView& track, void(*callback)(const K&, const R&, void*), void* userData = nullptr); + template Player& addWithCallback(const TrackView& track, void(*callback)(K, const R&, void*), void* userData = nullptr); #else /* Otherwise the user would be forced to use the + operator to convert a lambda to a function pointer and (besides being weird and @@ -431,7 +431,7 @@ template Player& addWithCallback(const Track& track, void(*callback)(const K&, const R&, void*), void* userData = nullptr); + template Player& addWithCallback(const Track& track, void(*callback)(K, const R&, void*), void* userData = nullptr); #elif !defined(CORRADE_MSVC2017_COMPATIBILITY) /* See above why */ template Player& addWithCallback(const Track& track, Callback callback, void* userData = nullptr) { return addWithCallback(TrackView{track}, callback, userData); @@ -452,7 +452,7 @@ template Player& addWithCallback(const TrackView& track, void(*callback)(const K&, const R&, U&), U& userData); + template Player& addWithCallback(const TrackView& track, void(*callback)(K, const R&, U&), U& userData); #else /* See above why */ template Player& addWithCallback(const TrackView& track, Callback callback, U& userData); #endif @@ -464,7 +464,7 @@ template Player& addWithCallback(const Track& track, void(*callback)(const K&, const R&, U&), U& userData); + template Player& addWithCallback(const Track& track, void(*callback)(K, const R&, U&), U& userData); #elif !defined(CORRADE_MSVC2017_COMPATIBILITY) /* See above why */ template Player& addWithCallback(const Track& track, Callback callback, U& userData) { return addWithCallback(TrackView{track}, callback, userData); @@ -491,7 +491,7 @@ template Player& addWithCallbackOnChange(const TrackView& track, void(*callback)(const K&, const R&, void*), R& destination, void* userData = nullptr); + template Player& addWithCallbackOnChange(const TrackView& track, void(*callback)(K, const R&, void*), R& destination, void* userData = nullptr); #else /* See above why */ template Player& addWithCallbackOnChange(const TrackView& track, Callback callback, R& destination, void* userData = nullptr); #endif @@ -503,7 +503,7 @@ template Player& addWithCallbackOnChange(const Track& track, void(*callback)(const K&, const R&, void*), R& destination, void* userData = nullptr); + template Player& addWithCallbackOnChange(const Track& track, void(*callback)(K, const R&, void*), R& destination, void* userData = nullptr); #elif !defined(CORRADE_MSVC2017_COMPATIBILITY) /* See above why */ template Player& addWithCallbackOnChange(const Track& track, Callback callback, R& destination, void* userData = nullptr) { return addWithCallbackOnChange(TrackView{track}, callback, destination, userData); @@ -524,7 +524,7 @@ template Player& addWithCallbackOnChange(const TrackView& track, void(*callback)(const K&, const R&, void*), R& destination, U& userData); + template Player& addWithCallbackOnChange(const TrackView& track, void(*callback)(K, const R&, void*), R& destination, U& userData); #else /* See above why */ template Player& addWithCallbackOnChange(const TrackView& track, Callback callback, R& destination, U& userData); #endif @@ -536,7 +536,7 @@ template Player& addWithCallbackOnChange(const Track& track, void(*callback)(const K&, const R&, void*), R& destination, U& userData); + template Player& addWithCallbackOnChange(const Track& track, void(*callback)(K, const R&, void*), R& destination, U& userData); #elif !defined(CORRADE_MSVC2017_COMPATIBILITY) /* See above why */ template Player& addWithCallbackOnChange(const Track& track, Callback callback, R& destination, U& userData) { return addWithCallbackOnChange(TrackView{track}, callback, destination, userData); @@ -777,43 +777,43 @@ template template Player& Player #ifndef DOXYGEN_GENERATING_OUTPUT template template Player& Player::addWithCallback(const TrackView& track, Callback callback, void* userData) { - auto callbackPtr = static_cast(callback); + auto callbackPtr = static_cast(callback); return addInternal(track, [](const TrackViewStorage& track, K key, std::size_t& hint, void*, void(*callback)(), void* userData) { /** @todo try to use atStrict() if possible */ - reinterpret_cast(callback)(key, static_cast&>(track).at(key, hint), userData); + reinterpret_cast(callback)(key, static_cast&>(track).at(key, hint), userData); }, nullptr, reinterpret_cast(callbackPtr), userData); } template template Player& Player::addWithCallback(const TrackView& track, Callback callback, U& userData) { - auto callbackPtr = static_cast(callback); + auto callbackPtr = static_cast(callback); return addInternal(track, [](const TrackViewStorage& track, K key, std::size_t& hint, void*, void(*callback)(), void* userData) { /** @todo try to use atStrict() if possible */ - reinterpret_cast(callback)(key, static_cast&>(track).at(key, hint), *static_cast(userData)); + reinterpret_cast(callback)(key, static_cast&>(track).at(key, hint), *static_cast(userData)); }, nullptr, reinterpret_cast(callbackPtr), &userData); } template template Player& Player::addWithCallbackOnChange(const TrackView& track, Callback callback, R& destination, void* userData) { - auto callbackPtr = static_cast(callback); + auto callbackPtr = static_cast(callback); return addInternal(track, [](const TrackViewStorage& track, K key, std::size_t& hint, void* destination, void(*callback)(), void* userData) { /** @todo try to use atStrict() if possible */ R result = static_cast&>(track).at(key, hint); if(result == *static_cast(destination)) return; - reinterpret_cast(callback)(key, result, userData); + reinterpret_cast(callback)(key, result, userData); *static_cast(destination) = result; }, &destination, reinterpret_cast(callbackPtr), userData); } template template Player& Player::addWithCallbackOnChange(const TrackView& track, Callback callback, R& destination, U& userData) { - auto callbackPtr = static_cast(callback); + auto callbackPtr = static_cast(callback); return addInternal(track, [](const TrackViewStorage& track, K key, std::size_t& hint, void* destination, void(*callback)(), void* userData) { /** @todo try to use atStrict() if possible */ R result = static_cast&>(track).at(key, hint); if(result == *static_cast(destination)) return; - reinterpret_cast(callback)(key, result, *static_cast(userData)); + reinterpret_cast(callback)(key, result, *static_cast(userData)); *static_cast(destination) = result; }, &destination, reinterpret_cast(callbackPtr), &userData); } diff --git a/src/Magnum/Animation/Test/Benchmark.cpp b/src/Magnum/Animation/Test/Benchmark.cpp index 07dde5ab5..df04b6e8e 100644 --- a/src/Magnum/Animation/Test/Benchmark.cpp +++ b/src/Magnum/Animation/Test/Benchmark.cpp @@ -221,7 +221,7 @@ void Benchmark::playerAdvance() { void Benchmark::playerAdvanceCallback() { Int result{}; Player player; - player.addWithCallback(_track, [](const Float&, const Int& value, Int& result) { + player.addWithCallback(_track, [](Float, const Int& value, Int& result) { result += value; }, result) .play({}); diff --git a/src/Magnum/Animation/Test/PlayerTest.cpp b/src/Magnum/Animation/Test/PlayerTest.cpp index cc951f207..0c84640c6 100644 --- a/src/Magnum/Animation/Test/PlayerTest.cpp +++ b/src/Magnum/Animation/Test/PlayerTest.cpp @@ -1076,7 +1076,7 @@ void PlayerTest::addWithCallback() { Int called = 0; } data; Player player; - player.addWithCallback(Track, [](const Float&, const Float& value, void* userData) { + player.addWithCallback(Track, [](Float, const Float& value, void* userData) { static_cast(userData)->value = value; ++static_cast(userData)->called; }, &data) @@ -1100,7 +1100,7 @@ void PlayerTest::addWithCallbackTemplate() { Int called = 0; } data; Player player; - player.addWithCallback(Track, [](const Float&, const Float& value, Data& userData) { + player.addWithCallback(Track, [](Float, const Float& value, Data& userData) { userData.value = value; ++userData.called; }, data) @@ -1124,7 +1124,7 @@ void PlayerTest::addWithCallbackOnChange() { Int called = 0; } data; Player player; - player.addWithCallbackOnChange(Track, [](const Float&, const Float& value, void* userData) { + player.addWithCallbackOnChange(Track, [](Float, const Float& value, void* userData) { static_cast(userData)->value = value; ++static_cast(userData)->called; }, data.value, &data) @@ -1158,7 +1158,7 @@ void PlayerTest::addWithCallbackOnChangeTemplate() { Int called = 0; } data; Player player; - player.addWithCallbackOnChange(Track, [](const Float&, const Float& value, Data& userData) { + player.addWithCallbackOnChange(Track, [](Float, const Float& value, Data& userData) { userData.value = value; ++userData.called; }, data.value, data)