Change Spline to a std::vector

This commit is contained in:
Thomas Goyne 2014-05-25 08:19:49 -07:00
parent 8ec9280ecc
commit c0d3ecb6c2
2 changed files with 33 additions and 41 deletions

View File

@ -106,7 +106,7 @@ void Spline::DecodeFromAss(std::string const& str) {
// Prepare
char command = 'm';
Vector2D pt(0, 0);
Vector2D pt{0, 0};
// Tokenize the string
boost::char_separator<char> sep(" ");
@ -125,6 +125,8 @@ void Spline::DecodeFromAss(std::string const& str) {
// Line
if (stack.size() == 2 && command == 'l') {
if (empty()) push_back(pt);
SplineCurve curve(pt, FromScript(Vector2D(stack[0], stack[1])));
push_back(curve);
@ -134,6 +136,8 @@ void Spline::DecodeFromAss(std::string const& str) {
// Bicubic
else if (stack.size() == 6 && command == 'b') {
if (empty()) push_back(pt);
SplineCurve curve(pt,
FromScript(Vector2D(stack[0], stack[1])),
FromScript(Vector2D(stack[2], stack[3])),
@ -150,9 +154,6 @@ void Spline::DecodeFromAss(std::string const& str) {
stack.clear();
}
}
if (!empty() && front().type != SplineCurve::POINT)
push_front(pt);
}
void Spline::MovePoint(iterator curve,int point,Vector2D pos) {

View File

@ -27,19 +27,14 @@
//
// Aegisub Project http://www.aegisub.org/
/// @file spline.h
/// @see spline.cpp
/// @ingroup visual_ts
///
#include <list>
#include <string>
#include "spline_curve.h"
#include <string>
#include <vector>
class VisualToolBase;
class Spline final : private std::list<SplineCurve> {
class Spline final : private std::vector<SplineCurve> {
/// Visual tool to do the conversion between script and video pixels
const VisualToolBase &coord_translator;
/// Spline scale
@ -86,33 +81,29 @@ public:
Vector2D GetClosestPoint(Vector2D reference);
Vector2D GetClosestControlPoint(Vector2D reference);
// This list intentionally excludes things specific to std::list
using std::list<SplineCurve>::value_type;
using std::list<SplineCurve>::pointer;
using std::list<SplineCurve>::reference;
using std::list<SplineCurve>::const_reference;
using std::list<SplineCurve>::size_type;
using std::list<SplineCurve>::difference_type;
using std::list<SplineCurve>::iterator;
using std::list<SplineCurve>::const_iterator;
using std::list<SplineCurve>::reverse_iterator;
using std::list<SplineCurve>::const_reverse_iterator;
using std::vector<SplineCurve>::value_type;
using std::vector<SplineCurve>::pointer;
using std::vector<SplineCurve>::reference;
using std::vector<SplineCurve>::const_reference;
using std::vector<SplineCurve>::size_type;
using std::vector<SplineCurve>::difference_type;
using std::vector<SplineCurve>::iterator;
using std::vector<SplineCurve>::const_iterator;
using std::vector<SplineCurve>::reverse_iterator;
using std::vector<SplineCurve>::const_reverse_iterator;
using std::list<SplineCurve>::begin;
using std::list<SplineCurve>::end;
using std::list<SplineCurve>::rbegin;
using std::list<SplineCurve>::rend;
using std::list<SplineCurve>::size;
using std::list<SplineCurve>::empty;
using std::list<SplineCurve>::front;
using std::list<SplineCurve>::back;
using std::list<SplineCurve>::push_front;
using std::list<SplineCurve>::push_back;
using std::list<SplineCurve>::pop_front;
using std::list<SplineCurve>::pop_back;
using std::list<SplineCurve>::emplace_front;
using std::list<SplineCurve>::emplace_back;
using std::list<SplineCurve>::insert;
using std::list<SplineCurve>::erase;
using std::list<SplineCurve>::clear;
using std::vector<SplineCurve>::begin;
using std::vector<SplineCurve>::end;
using std::vector<SplineCurve>::rbegin;
using std::vector<SplineCurve>::rend;
using std::vector<SplineCurve>::size;
using std::vector<SplineCurve>::empty;
using std::vector<SplineCurve>::front;
using std::vector<SplineCurve>::back;
using std::vector<SplineCurve>::push_back;
using std::vector<SplineCurve>::pop_back;
using std::vector<SplineCurve>::emplace_back;
using std::vector<SplineCurve>::insert;
using std::vector<SplineCurve>::erase;
using std::vector<SplineCurve>::clear;
};