Browse Source

Animation: there's no need to use STL in Player internals anymore.

Keeping std::vector only in one documentation snippet to not confuse
users too much -- growable arrays are rather new, after all.
pull/430/head
Vladimír Vondruš 6 years ago
parent
commit
b31d7b1f03
  1. 2
      doc/snippets/MagnumAnimation.cpp
  2. 4
      src/Magnum/Animation/Player.h
  3. 3
      src/Magnum/Animation/Player.hpp
  4. 19
      src/Magnum/Animation/Test/PlayerTest.cpp

2
doc/snippets/MagnumAnimation.cpp

@ -23,6 +23,8 @@
DEALINGS IN THE SOFTWARE. DEALINGS IN THE SOFTWARE.
*/ */
#include <vector>
#include "Magnum/Timeline.h" #include "Magnum/Timeline.h"
#include "Magnum/Math/Bezier.h" #include "Magnum/Math/Bezier.h"
#include "Magnum/Math/Matrix3.h" #include "Magnum/Math/Matrix3.h"

4
src/Magnum/Animation/Player.h

@ -30,7 +30,7 @@
*/ */
#include <chrono> #include <chrono>
#include <vector> #include <Corrade/Containers/Array.h>
#include "Magnum/Animation/Track.h" #include "Magnum/Animation/Track.h"
#include "Magnum/Math/Range.h" #include "Magnum/Math/Range.h"
@ -812,7 +812,7 @@ template<class T, class K
Containers::Optional<std::pair<UnsignedInt, K>> elapsedInternal(T time, T& updatedStartTime, T& updatedPauseTime, State& updatedState) const; Containers::Optional<std::pair<UnsignedInt, K>> elapsedInternal(T time, T& updatedStartTime, T& updatedPauseTime, State& updatedState) const;
std::vector<Track> _tracks; Containers::Array<Track> _tracks;
Math::Range1D<K> _duration; Math::Range1D<K> _duration;
UnsignedInt _playCount{1}; UnsignedInt _playCount{1};
State _state{State::Stopped}; State _state{State::Stopped};

3
src/Magnum/Animation/Player.hpp

@ -31,6 +31,7 @@
#include "Player.h" #include "Player.h"
#include <Corrade/Containers/GrowableArray.h>
#include <Corrade/Containers/Optional.h> #include <Corrade/Containers/Optional.h>
#include <Corrade/Containers/Reference.h> #include <Corrade/Containers/Reference.h>
@ -105,7 +106,7 @@ template<class T, class K> Player<T, K>& Player<T, K>::addInternal(const TrackVi
_duration = track.duration(); _duration = track.duration();
else else
_duration = Math::join(track.duration(), _duration); _duration = Math::join(track.duration(), _duration);
_tracks.emplace_back(track, advancer, destination, userCallback, userCallbackData, 0); arrayAppend(_tracks, Containers::InPlaceInit, track, advancer, destination, userCallback, userCallbackData, 0u);
return *this; return *this;
} }

19
src/Magnum/Animation/Test/PlayerTest.cpp

@ -24,8 +24,10 @@
*/ */
#include <sstream> #include <sstream>
#include <Corrade/Containers/GrowableArray.h>
#include <Corrade/Containers/Reference.h> #include <Corrade/Containers/Reference.h>
#include <Corrade/TestSuite/Tester.h> #include <Corrade/TestSuite/Tester.h>
#include <Corrade/TestSuite/Compare/Container.h>
#include <Corrade/TestSuite/Compare/Numeric.h> #include <Corrade/TestSuite/Compare/Numeric.h>
#include <Corrade/Utility/DebugStl.h> #include <Corrade/Utility/DebugStl.h>
@ -1287,8 +1289,8 @@ template<class T> void PlayerTest::addWithCallbackOnChangeTemplate() {
} }
/* Can't use raw lambdas because MSVC 2015 */ /* Can't use raw lambdas because MSVC 2015 */
void callback(std::vector<Int>& data, Int value) { void callback(Containers::Array<Int>& data, Int value) {
data.push_back(value); arrayAppend(data, value);
} }
template<class T> void PlayerTest::addRawCallback() { template<class T> void PlayerTest::addRawCallback() {
@ -1297,7 +1299,7 @@ template<class T> void PlayerTest::addRawCallback() {
T track; T track;
Int result = -1; Int result = -1;
std::vector<Int> data; Containers::Array<Int> data;
Animation::Player<Float> player; Animation::Player<Float> player;
player.addRawCallback(track, player.addRawCallback(track,
@ -1306,16 +1308,19 @@ template<class T> void PlayerTest::addRawCallback() {
Int value = static_cast<const Animation::TrackView<const Float, const Int>&>(track).at(key, hint); Int value = static_cast<const Animation::TrackView<const Float, const Int>&>(track).at(key, hint);
if(value == *static_cast<Int*>(destination)) return; if(value == *static_cast<Int*>(destination)) return;
*static_cast<Int*>(destination) = value; *static_cast<Int*>(destination) = value;
reinterpret_cast<void(*)(std::vector<Int>&, Int)>(callback)(*static_cast<std::vector<Int>*>(userData), value); reinterpret_cast<void(*)(Containers::Array<Int>&, Int)>(callback)(*static_cast<Containers::Array<Int>*>(userData), value);
}, &result, reinterpret_cast<void(*)()>(callback), &data) }, &result, reinterpret_cast<void(*)()>(callback), &data)
.play({}); .play({});
/* Should add the default-constructed value into the vector, but only once */ /* Should add the default-constructed value into the vector, but only once */
CORRADE_COMPARE(data, std::vector<Int>{}); CORRADE_COMPARE_AS(data, Containers::arrayView<Int>({}),
TestSuite::Compare::Container);
player.advance({}); player.advance({});
CORRADE_COMPARE(data, std::vector<Int>{0}); CORRADE_COMPARE_AS(data, Containers::arrayView<Int>({0}),
TestSuite::Compare::Container);
player.advance(1.0f); player.advance(1.0f);
CORRADE_COMPARE(data, std::vector<Int>{0}); CORRADE_COMPARE_AS(data, Containers::arrayView<Int>({0}),
TestSuite::Compare::Container);
} }
void PlayerTest::runFor100YearsFloat() { void PlayerTest::runFor100YearsFloat() {

Loading…
Cancel
Save