#pragma once
#include <iostream>
#include "Vector3.h"

class Vector4
{
public:
	float data[4];
	Vector4();
	Vector4(Vector3 other);
	Vector4(float x, float y, float z);
	Vector4(float x, float y, float z, float w);
	~Vector4(void);

	float* getData();

	void print() const;

	bool operator==(Vector4 other) const;

	float& operator[](int ind);
	
	Vector4 operator*(float scale) const;
	Vector4& operator*=(float scale);

	Vector4 operator*(Vector4 other) const;
	Vector4& operator*=(Vector4 other);

	Vector4 operator/(float scale) const;
	Vector4& operator/=(float scale);

	Vector4 operator/(Vector4 other) const;
	Vector4& operator/=(Vector4 other);

	Vector4 operator+(Vector4 add) const;
	Vector4& operator+=(Vector4 add);

	Vector4 operator-(Vector4 sub) const;
	Vector4& operator-=(Vector4 sub);

	Vector4 operator-() const;

	Vector3 toVector3();
	
};

namespace boost
{
	namespace serialization
	{
		// Vector4
		template<class Archive>
		void serialize(Archive & ar, Vector4 & vector, const unsigned int version)
		{
			ar & vector.data;
		}
	}
}