#pragma once


/**
 * Every type of rotation that can be applied to an object in a 2D grid
 */
enum Rotation {
    NONE,
    CLOCKWISE,
    DOUBLE,
    COUNTERCLOCKWISE
};


/**
 * Addition operator
 * @return A rotation corresponding to doing both rotations
 */
inline Rotation operator+(const Rotation& left, const Rotation& right) {
    return Rotation(((int) left + (int) right) % 4);
}

/**
 * Additive assignation operator, rotates the left rotation by the right rotation
 * @return A reference to the left rotation
 */
inline Rotation& operator+=(Rotation& left, const Rotation& right) {
    left = left + right;
    return left;
}
