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.
*/
#include <vector>
#include "Magnum/Timeline.h"
#include "Magnum/Math/Bezier.h"
#include "Magnum/Math/Matrix3.h"

4
src/Magnum/Animation/Player.h

@ -30,7 +30,7 @@
*/
#include <chrono>
#include <vector>
#include <Corrade/Containers/Array.h>
#include "Magnum/Animation/Track.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;
std::vector<Track> _tracks;
Containers::Array<Track> _tracks;
Math::Range1D<K> _duration;
UnsignedInt _playCount{1};
State _state{State::Stopped};

3
src/Magnum/Animation/Player.hpp

@ -31,6 +31,7 @@
#include "Player.h"
#include <Corrade/Containers/GrowableArray.h>
#include <Corrade/Containers/Optional.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();
else
_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;
}

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

@ -24,8 +24,10 @@
*/
#include <sstream>
#include <Corrade/Containers/GrowableArray.h>
#include <Corrade/Containers/Reference.h>
#include <Corrade/TestSuite/Tester.h>
#include <Corrade/TestSuite/Compare/Container.h>
#include <Corrade/TestSuite/Compare/Numeric.h>
#include <Corrade/Utility/DebugStl.h>
@ -1287,8 +1289,8 @@ template<class T> void PlayerTest::addWithCallbackOnChangeTemplate() {
}
/* Can't use raw lambdas because MSVC 2015 */
void callback(std::vector<Int>& data, Int value) {
data.push_back(value);
void callback(Containers::Array<Int>& data, Int value) {
arrayAppend(data, value);
}
template<class T> void PlayerTest::addRawCallback() {
@ -1297,7 +1299,7 @@ template<class T> void PlayerTest::addRawCallback() {
T track;
Int result = -1;
std::vector<Int> data;
Containers::Array<Int> data;
Animation::Player<Float> player;
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);
if(value == *static_cast<Int*>(destination)) return;
*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)
.play({});
/* 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({});
CORRADE_COMPARE(data, std::vector<Int>{0});
CORRADE_COMPARE_AS(data, Containers::arrayView<Int>({0}),
TestSuite::Compare::Container);
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() {

Loading…
Cancel
Save