#ifndef _RIVE_PATH_FLAGS_HPP_
#define _RIVE_PATH_FLAGS_HPP_

#include "rive/rive_types.hpp"

namespace rive
{
enum class PathFlags : uint8_t
{
    none = 0,
    local = 1 << 1,
    world = 1 << 2,
    clipping = 1 << 3,
    followPath = 1 << 4,
    neverDeferUpdate = 1 << 5,
    localClockwise = 1 << 6,
};

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

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

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

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

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

    return lhs;
}

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

    return lhs;
}

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

    return lhs;
}
} // namespace rive

#endif
