瀏覽代碼

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

James Chen 2 月之前
父節點
當前提交
b57acb040c
共有 1 個文件被更改,包括 18 次插入3 次删除
  1. 18 3
      spine-cpp/spine-cpp/include/spine/Vector.h

+ 18 - 3
spine-cpp/spine-cpp/include/spine/Vector.h

@@ -39,6 +39,9 @@ namespace spine {
 	template<typename T>
 	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<T> &inValue) {
+		inline void addAll(const Vector<T> &inValue) {
 			ensureCapacity(this->size() + inValue.size());
 			for (size_t i = 0; i < inValue.size(); i++) {
 				add(inValue[i]);
 			}
 		}
 
-		inline void clearAndAddAll(Vector<T> &inValue) {
+		inline void clearAndAddAll(const Vector<T> &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<T> &lhs, Vector<T> &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) {};
 	};
 }