//
// Created by Arthur Asatryan
// Company: BiaCode
// Date: 7/5/15
// Copyright (c) 2015 BiaCode. All rights reserved.
//

#ifndef BIAENGINE_VEC4_H
#define BIAENGINE_VEC4_H

#include <iostream>

namespace biaengine
{
    namespace math
    {
        struct vec4
        {
            float x, y, z, w;

            vec4() = default;

            vec4(const float &x, const float &y, const float &z, const float &w);

            vec4 &add(const vec4 &other);

            vec4 &subtract(const vec4 &other);

            vec4 &multiply(const vec4 &other);

            vec4 &divide(const vec4 &other);

            friend std::ostream &operator<<(std::ostream &stream, const vec4 &vector);

            friend vec4 operator+(vec4 left, const vec4 &right);

            friend vec4 operator-(vec4 left, const vec4 &right);

            friend vec4 operator*(vec4 left, const vec4 &right);

            friend vec4 operator/(vec4 left, const vec4 &right);

            bool operator==(const vec4 &other);

            bool operator!=(const vec4 &other);

            vec4 &operator+=(const vec4 &other);

            vec4 &operator-=(const vec4 &other);

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

            vec4 &operator/=(const vec4 &other);
        };
    }
}
#endif //BIAENGINE_VEC4_H
