From b57acb040cab68ca7a4b200d2afd0a58ffbdf66d Mon Sep 17 00:00:00 2001 From: James Chen Date: Mon, 5 May 2025 19:24:21 +0800 Subject: [PATCH] Fix spine::Vector copy assignment. (#2828) --- spine-cpp/spine-cpp/include/spine/Vector.h | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/spine-cpp/spine-cpp/include/spine/Vector.h b/spine-cpp/spine-cpp/include/spine/Vector.h index 20187e92a..0081537a6 100644 --- a/spine-cpp/spine-cpp/include/spine/Vector.h +++ b/spine-cpp/spine-cpp/include/spine/Vector.h @@ -39,6 +39,9 @@ namespace spine { template class SP_API Vector : public SpineObject { public: + using size_type = size_t; + using value_type = T; + Vector() : _size(0), _capacity(0), _buffer(NULL) { } @@ -118,14 +121,14 @@ namespace spine { } } - inline void addAll(Vector &inValue) { + inline void addAll(const Vector &inValue) { ensureCapacity(this->size() + inValue.size()); for (size_t i = 0; i < inValue.size(); i++) { add(inValue[i]); } } - inline void clearAndAddAll(Vector &inValue) { + inline void clearAndAddAll(const Vector &inValue) { this->clear(); this->addAll(inValue); } @@ -172,6 +175,12 @@ namespace spine { return _buffer[inIndex]; } + inline const T &operator[](size_t inIndex) const { + assert(inIndex < _size); + + return _buffer[inIndex]; + } + inline friend bool operator==(Vector &lhs, Vector &rhs) { if (lhs.size() != rhs.size()) { return false; @@ -190,6 +199,13 @@ namespace spine { return !(lhs == rhs); } + Vector &operator=(const Vector &inVector) { + if (this != &inVector) { + clearAndAddAll(inVector); + } + return *this; + } + inline T *buffer() { return _buffer; } @@ -223,7 +239,6 @@ namespace spine { buffer->~T(); } - // Vector &operator=(const Vector &inVector) {}; }; }