2D Integer Scalar

// 2D integer scalar.
class RVAPI S2i
{
public:
    // X coordinate.
    int x;

    // Y coordinate.
    int y;

    // Check if all coordinates are zero.
    bool operator ! () const { return !x && !y; }

    // Get scalar with negated coordnates.
    S2i operator - () const { return S2i(-x, -y); }

    // Get sum of scalars.
    S2i operator + (const S2i &scalar) const { return S2i(x + scalar.x, y + scalar.y); }

    // Get difference of scalars.
    S2i operator - (const S2i &scalar) const { return S2i(x - scalar.x, y - scalar.y); }

    // Get product of scalars.
    S2i operator * (const S2i &scalar) const { return S2i(x * scalar.x, y * scalar.y); }

    // Get division of scalars.
    S2i operator / (const S2i &scalar) const { return S2i(x / scalar.x, y / scalar.y); }

    // Get modulo of scalars.
    S2i operator % (const S2i &scalar) const { return S2i(x % scalar.x, y % scalar.y); }

    // Add [scalar] to this scalar.
    S2i &operator += (const S2i &scalar) { return *this = *this + scalar; }

    // Subtract [scalar] from this scalar.
    S2i &operator -= (const S2i &scalar) { return *this = *this - scalar; }

    // Multiply [scalar] and this scalar.
    S2i &operator *= (const S2i &scalar) { return *this = *this * scalar; }

    // Divide [scalar] into this scalar.
    S2i &operator /= (const S2i &scalar) { return *this = *this / scalar; }

    // Modulo [scalar] into this scalar.
    S2i &operator %= (const S2i &scalar) { return *this = *this % scalar; }

    // Get minimim of scalars.
    S2i Min(const S2i &scalar) const { return S2i(scalar.x < x ? scalar.x : x, scalar.y < y ? scalar.y : y); }

    // Get maximum of scalars.
    S2i Max(const S2i &scalar) const { return S2i(scalar.x > x ? scalar.x : x, scalar.y > y ? scalar.y : y); }

    // Construct scalar from coordinates.
    S2i(int x, int y) : x(x), y(y) {}

    // Construct scalar from single value.
    S2i(int n = 0) : x(n), y(n) {}

    // Construct scalar from S2f scalar.
    S2i(const S2f &scalar);

    // Destructor.
    ~S2i() {}
};