#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
