From a3ab27f7b9039ade9032b4355238e40a6be7e510 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vladim=C3=ADr=20Vondru=C5=A1?= Date: Mon, 11 Nov 2019 16:54:30 +0100 Subject: [PATCH] Trade: return TrackView with const types from AnimationData. Follows the change done in 954798a9ba32ae1110b50835a219c5887d6fd897. --- doc/changelog.dox | 2 ++ src/Magnum/Trade/AnimationData.cpp | 2 +- src/Magnum/Trade/AnimationData.h | 20 +++++++------- src/Magnum/Trade/Test/AnimationDataTest.cpp | 30 ++++++++++----------- 4 files changed, 28 insertions(+), 26 deletions(-) diff --git a/doc/changelog.dox b/doc/changelog.dox index fd39bece2..bcc9c3d08 100644 --- a/doc/changelog.dox +++ b/doc/changelog.dox @@ -390,6 +390,8 @@ See also: @ref Animation library was changed to allow mutable access to the keys & values it references. Existing code needs to be changed to say @cpp TrackView @ce instead of @cpp TrackView @ce. + Following this change, @ref Trade::AnimationData now also return instances + with @cpp const @ce types. - The 4-argument @ref GL::DynamicAttribute constructor was not marked as @cpp explicit @ce by mistake, it's done now to enforce readability in long expressions. diff --git a/src/Magnum/Trade/AnimationData.cpp b/src/Magnum/Trade/AnimationData.cpp index e63a1be59..612a3005f 100644 --- a/src/Magnum/Trade/AnimationData.cpp +++ b/src/Magnum/Trade/AnimationData.cpp @@ -70,7 +70,7 @@ UnsignedInt AnimationData::trackTarget(UnsignedInt id) const { return _tracks[id]._target; } -const Animation::TrackViewStorage& AnimationData::track(UnsignedInt id) const { +const Animation::TrackViewStorage& AnimationData::track(UnsignedInt id) const { CORRADE_ASSERT(id < _tracks.size(), "Trade::AnimationData::track(): index out of range", _tracks[id]._view); return _tracks[id]._view; } diff --git a/src/Magnum/Trade/AnimationData.h b/src/Magnum/Trade/AnimationData.h index 698c3439b..74ad5db9c 100644 --- a/src/Magnum/Trade/AnimationData.h +++ b/src/Magnum/Trade/AnimationData.h @@ -237,14 +237,14 @@ class AnimationTrackData { * @param target Track target * @param view Type-erased @ref Animation::TrackView instance */ - /*implicit*/ AnimationTrackData(AnimationTrackType type, AnimationTrackType resultType, AnimationTrackTargetType targetType, UnsignedInt target, Animation::TrackViewStorage view) noexcept: _type{type}, _resultType{resultType}, _targetType{targetType}, _target{target}, _view{view} {} + /*implicit*/ AnimationTrackData(AnimationTrackType type, AnimationTrackType resultType, AnimationTrackTargetType targetType, UnsignedInt target, Animation::TrackViewStorage view) noexcept: _type{type}, _resultType{resultType}, _targetType{targetType}, _target{target}, _view{view} {} /** @overload * * Equivalent to the above with @p type used as both value type and * result type. */ - /*implicit*/ AnimationTrackData(AnimationTrackType type, AnimationTrackTargetType targetType, UnsignedInt target, Animation::TrackViewStorage view) noexcept: _type{type}, _resultType{type}, _targetType{targetType}, _target{target}, _view{view} {} + /*implicit*/ AnimationTrackData(AnimationTrackType type, AnimationTrackTargetType targetType, UnsignedInt target, Animation::TrackViewStorage view) noexcept: _type{type}, _resultType{type}, _targetType{targetType}, _target{target}, _view{view} {} private: friend AnimationData; @@ -252,7 +252,7 @@ class AnimationTrackData { AnimationTrackType _type, _resultType; AnimationTrackTargetType _targetType; UnsignedInt _target; - Animation::TrackViewStorage _view; + Animation::TrackViewStorage _view; }; /** @@ -400,7 +400,7 @@ class MAGNUM_TRADE_EXPORT AnimationData { * checked version below to access a concrete @ref Animation::TrackView * type. */ - const Animation::TrackViewStorage& track(UnsignedInt id) const; + const Animation::TrackViewStorage& track(UnsignedInt id) const; /** * @brief Track data @@ -414,7 +414,7 @@ class MAGNUM_TRADE_EXPORT AnimationData { * use the view or you need to release the data array using * @ref release() and manage its lifetime yourself. */ - template> const Animation::TrackView& track(UnsignedInt id) const; + template> const Animation::TrackView& track(UnsignedInt id) const; /** * @brief Release data storage @@ -505,11 +505,11 @@ namespace Implementation { } #endif -template const Animation::TrackView& AnimationData::track(UnsignedInt id) const { - const Animation::TrackViewStorage& storage = track(id); - CORRADE_ASSERT(Implementation::animationTypeFor() == _tracks[id]._type, "Trade::AnimationData::track(): improper type requested for" << _tracks[id]._type, (static_cast&>(storage))); - CORRADE_ASSERT(Implementation::animationTypeFor() == _tracks[id]._resultType, "Trade::AnimationData::track(): improper result type requested for" << _tracks[id]._resultType, (static_cast&>(storage))); - return static_cast&>(storage); +template const Animation::TrackView& AnimationData::track(UnsignedInt id) const { + const Animation::TrackViewStorage& storage = track(id); + CORRADE_ASSERT(Implementation::animationTypeFor() == _tracks[id]._type, "Trade::AnimationData::track(): improper type requested for" << _tracks[id]._type, (static_cast&>(storage))); + CORRADE_ASSERT(Implementation::animationTypeFor() == _tracks[id]._resultType, "Trade::AnimationData::track(): improper result type requested for" << _tracks[id]._resultType, (static_cast&>(storage))); + return static_cast&>(storage); } }} diff --git a/src/Magnum/Trade/Test/AnimationDataTest.cpp b/src/Magnum/Trade/Test/AnimationDataTest.cpp index 11258c7fb..3215a0d17 100644 --- a/src/Magnum/Trade/Test/AnimationDataTest.cpp +++ b/src/Magnum/Trade/Test/AnimationDataTest.cpp @@ -92,14 +92,14 @@ void AnimationDataTest::construct() { AnimationData data{std::move(buffer), Containers::Array{Containers::InPlaceInit, { {AnimationTrackType::Vector3, AnimationTrackTargetType::Translation3D, 42, - Animation::TrackView{ + Animation::TrackView{ {view, &view[0].time, view.size(), sizeof(Data)}, {view, &view[0].position, view.size(), sizeof(Data)}, Animation::Interpolation::Constant, animationInterpolatorFor(Animation::Interpolation::Constant)}}, {AnimationTrackType::Quaternion, AnimationTrackTargetType::Rotation3D, 1337, - Animation::TrackView{ + Animation::TrackView{ {view, &view[0].time, view.size(), sizeof(Data)}, {view, &view[0].rotation, view.size(), sizeof(Data)}, Animation::Interpolation::Linear, @@ -117,7 +117,7 @@ void AnimationDataTest::construct() { CORRADE_COMPARE(data.trackTargetType(0), AnimationTrackTargetType::Translation3D); CORRADE_COMPARE(data.trackTarget(0), 42); - Animation::TrackView track = data.track(0); + Animation::TrackView track = data.track(0); CORRADE_COMPARE(track.keys().size(), 3); CORRADE_COMPARE(track.values().size(), 3); CORRADE_COMPARE(track.interpolation(), Animation::Interpolation::Constant); @@ -128,7 +128,7 @@ void AnimationDataTest::construct() { CORRADE_COMPARE(data.trackTargetType(1), AnimationTrackTargetType::Rotation3D); CORRADE_COMPARE(data.trackTarget(1), 1337); - Animation::TrackView track = data.track(1); + Animation::TrackView track = data.track(1); CORRADE_COMPARE(track.keys().size(), 3); CORRADE_COMPARE(track.values().size(), 3); CORRADE_COMPARE(track.interpolation(), Animation::Interpolation::Linear); @@ -154,13 +154,13 @@ void AnimationDataTest::constructImplicitDuration() { AnimationData data{std::move(buffer), Containers::Array{Containers::InPlaceInit, { {AnimationTrackType::Bool, AnimationTrackTargetType(129), 0, - Animation::TrackView{ + Animation::TrackView{ {view, &view[0].time, 2, sizeof(Data)}, {view, &view[0].value, 2, sizeof(Data)}, Animation::Interpolation::Constant}}, {AnimationTrackType::Bool, AnimationTrackTargetType(130), 1, - Animation::TrackView{ + Animation::TrackView{ {view, &view[2].time, 2, sizeof(Data)}, {view, &view[2].value, 2, sizeof(Data)}, Animation::Interpolation::Linear}} @@ -175,7 +175,7 @@ void AnimationDataTest::constructImplicitDuration() { CORRADE_COMPARE(data.trackTargetType(0), AnimationTrackTargetType(129)); CORRADE_COMPARE(data.trackTarget(0), 0); - Animation::TrackView track = data.track(0); + Animation::TrackView track = data.track(0); CORRADE_COMPARE(track.duration(), (Range1D{1.0f, 5.0f})); CORRADE_COMPARE(track.keys().size(), 2); CORRADE_COMPARE(track.values().size(), 2); @@ -187,7 +187,7 @@ void AnimationDataTest::constructImplicitDuration() { CORRADE_COMPARE(data.trackTargetType(1), AnimationTrackTargetType(130)); CORRADE_COMPARE(data.trackTarget(1), 1); - Animation::TrackView track = data.track(1); + Animation::TrackView track = data.track(1); CORRADE_COMPARE(track.duration(), (Range1D{3.0f, 7.0f})); CORRADE_COMPARE(track.keys().size(), 2); CORRADE_COMPARE(track.values().size(), 2); @@ -223,14 +223,14 @@ void AnimationDataTest::constructMove() { AnimationData a{std::move(buffer), Containers::Array{Containers::InPlaceInit, { {AnimationTrackType::Vector3, AnimationTrackTargetType::Translation3D, 42, - Animation::TrackView{ + Animation::TrackView{ {view, &view[0].time, view.size(), sizeof(Data)}, {view, &view[0].position, view.size(), sizeof(Data)}, Animation::Interpolation::Constant, animationInterpolatorFor(Animation::Interpolation::Constant)}}, {AnimationTrackType::Quaternion, AnimationTrackTargetType::Rotation3D, 1337, - Animation::TrackView{ + Animation::TrackView{ {view, &view[0].time, view.size(), sizeof(Data)}, {view, &view[0].rotation, view.size(), sizeof(Data)}, Animation::Interpolation::Linear, @@ -250,7 +250,7 @@ void AnimationDataTest::constructMove() { CORRADE_COMPARE(b.trackTargetType(0), AnimationTrackTargetType::Translation3D); CORRADE_COMPARE(b.trackTarget(0), 42); - Animation::TrackView track = b.track(0); + Animation::TrackView track = b.track(0); CORRADE_COMPARE(track.keys().size(), 3); CORRADE_COMPARE(track.values().size(), 3); CORRADE_COMPARE(track.interpolation(), Animation::Interpolation::Constant); @@ -261,7 +261,7 @@ void AnimationDataTest::constructMove() { CORRADE_COMPARE(b.trackTargetType(1), AnimationTrackTargetType::Rotation3D); CORRADE_COMPARE(b.trackTarget(1), 1337); - Animation::TrackView track = b.track(1); + Animation::TrackView track = b.track(1); CORRADE_COMPARE(track.keys().size(), 3); CORRADE_COMPARE(track.values().size(), 3); CORRADE_COMPARE(track.interpolation(), Animation::Interpolation::Linear); @@ -283,7 +283,7 @@ void AnimationDataTest::constructMove() { CORRADE_COMPARE(c.trackTargetType(0), AnimationTrackTargetType::Translation3D); CORRADE_COMPARE(c.trackTarget(0), 42); - Animation::TrackView track = c.track(0); + Animation::TrackView track = c.track(0); CORRADE_COMPARE(track.keys().size(), 3); CORRADE_COMPARE(track.values().size(), 3); CORRADE_COMPARE(track.interpolation(), Animation::Interpolation::Constant); @@ -294,7 +294,7 @@ void AnimationDataTest::constructMove() { CORRADE_COMPARE(c.trackTargetType(1), AnimationTrackTargetType::Rotation3D); CORRADE_COMPARE(c.trackTarget(1), 1337); - Animation::TrackView track = c.track(1); + Animation::TrackView track = c.track(1); CORRADE_COMPARE(track.keys().size(), 3); CORRADE_COMPARE(track.values().size(), 3); CORRADE_COMPARE(track.interpolation(), Animation::Interpolation::Linear); @@ -326,7 +326,7 @@ void AnimationDataTest::trackCustomResultType() { {AnimationTrackType::Vector3i, AnimationTrackType::Vector3, AnimationTrackTargetType::Scaling3D, 0, - Animation::TrackView{ + Animation::TrackView{ {view, &view[0].time, view.size(), sizeof(Data)}, {view, &view[0].position, view.size(), sizeof(Data)}, [](const Vector3i& a, const Vector3i& b, Float t) -> Vector3 {