#ifndef _RIVE_PATH_SPACE_HPP_
#define _RIVE_PATH_SPACE_HPP_

#include <type_traits>

namespace rive {
    enum class PathSpace : unsigned char {
        Neither = 0,
        Local = 1 << 1,
        World = 1 << 2,
        Difference = 1 << 3,
        Clipping = 1 << 4
    };

    inline constexpr PathSpace operator&(PathSpace lhs, PathSpace rhs) {
        return static_cast<PathSpace>(
            static_cast<std::underlying_type<PathSpace>::type>(lhs) &
            static_cast<std::underlying_type<PathSpace>::type>(rhs));
    }

    inline constexpr PathSpace operator^(PathSpace lhs, PathSpace rhs) {
        return static_cast<PathSpace>(
            static_cast<std::underlying_type<PathSpace>::type>(lhs) ^
            static_cast<std::underlying_type<PathSpace>::type>(rhs));
    }

    inline constexpr PathSpace operator|(PathSpace lhs, PathSpace rhs) {
        return static_cast<PathSpace>(
            static_cast<std::underlying_type<PathSpace>::type>(lhs) |
            static_cast<std::underlying_type<PathSpace>::type>(rhs));
    }

    inline constexpr PathSpace operator~(PathSpace rhs) {
        return static_cast<PathSpace>(
            ~static_cast<std::underlying_type<PathSpace>::type>(rhs));
    }

    inline PathSpace& operator|=(PathSpace& lhs, PathSpace rhs) {
        lhs = static_cast<PathSpace>(
            static_cast<std::underlying_type<PathSpace>::type>(lhs) |
            static_cast<std::underlying_type<PathSpace>::type>(rhs));

        return lhs;
    }

    inline PathSpace& operator&=(PathSpace& lhs, PathSpace rhs) {
        lhs = static_cast<PathSpace>(
            static_cast<std::underlying_type<PathSpace>::type>(lhs) &
            static_cast<std::underlying_type<PathSpace>::type>(rhs));

        return lhs;
    }

    inline PathSpace& operator^=(PathSpace& lhs, PathSpace rhs) {
        lhs = static_cast<PathSpace>(
            static_cast<std::underlying_type<PathSpace>::type>(lhs) ^
            static_cast<std::underlying_type<PathSpace>::type>(rhs));

        return lhs;
    }
} // namespace rive

#endif