Fix spine::Vector copy assignment. (#2828)

This commit is contained in:
James Chen 2025-05-05 19:24:21 +08:00 committed by GitHub
parent 7fd1e5340c
commit b57acb040c
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -39,6 +39,9 @@ namespace spine {
template<typename T> template<typename T>
class SP_API Vector : public SpineObject { class SP_API Vector : public SpineObject {
public: public:
using size_type = size_t;
using value_type = T;
Vector() : _size(0), _capacity(0), _buffer(NULL) { Vector() : _size(0), _capacity(0), _buffer(NULL) {
} }
@ -118,14 +121,14 @@ namespace spine {
} }
} }
inline void addAll(Vector<T> &inValue) { inline void addAll(const Vector<T> &inValue) {
ensureCapacity(this->size() + inValue.size()); ensureCapacity(this->size() + inValue.size());
for (size_t i = 0; i < inValue.size(); i++) { for (size_t i = 0; i < inValue.size(); i++) {
add(inValue[i]); add(inValue[i]);
} }
} }
inline void clearAndAddAll(Vector<T> &inValue) { inline void clearAndAddAll(const Vector<T> &inValue) {
this->clear(); this->clear();
this->addAll(inValue); this->addAll(inValue);
} }
@ -172,6 +175,12 @@ namespace spine {
return _buffer[inIndex]; return _buffer[inIndex];
} }
inline const T &operator[](size_t inIndex) const {
assert(inIndex < _size);
return _buffer[inIndex];
}
inline friend bool operator==(Vector<T> &lhs, Vector<T> &rhs) { inline friend bool operator==(Vector<T> &lhs, Vector<T> &rhs) {
if (lhs.size() != rhs.size()) { if (lhs.size() != rhs.size()) {
return false; return false;
@ -190,6 +199,13 @@ namespace spine {
return !(lhs == rhs); return !(lhs == rhs);
} }
Vector &operator=(const Vector &inVector) {
if (this != &inVector) {
clearAndAddAll(inVector);
}
return *this;
}
inline T *buffer() { inline T *buffer() {
return _buffer; return _buffer;
} }
@ -223,7 +239,6 @@ namespace spine {
buffer->~T(); buffer->~T();
} }
// Vector &operator=(const Vector &inVector) {};
}; };
} }