diff --git a/Sources/OpenRenderBoxCxx/Color/ColorSpace.cpp b/Sources/OpenRenderBoxCxx/Color/ColorSpace.cpp index dedb13c..7b6c98c 100644 --- a/Sources/OpenRenderBoxCxx/Color/ColorSpace.cpp +++ b/Sources/OpenRenderBoxCxx/Color/ColorSpace.cpp @@ -10,9 +10,9 @@ namespace ORB { -std::optional color_space_from_cg_name(CFStringRef name) { +ORB::Optional color_space_from_cg_name(CFStringRef name) { if (name == nullptr) { - return std::nullopt; + return ORB::nullopt; } else if (CFEqual(name, kCGColorSpaceSRGB) || CFEqual(name, kCGColorSpaceExtendedSRGB)) { return ColorSpace::SRGB; @@ -26,13 +26,13 @@ std::optional color_space_from_cg_name(CFStringRef name) { CFEqual(name, kCGColorSpaceExtendedLinearDisplayP3)) { return ColorSpace::LinearDisplayP3; } else { - return std::nullopt; + return ORB::nullopt; } } -std::optional color_space_from_cg(CGColorSpaceRef colorSpace) { +ORB::Optional color_space_from_cg(CGColorSpaceRef colorSpace) { if (colorSpace == nullptr) { - return std::nullopt; + return ORB::nullopt; } CFStringRef name = CGColorSpaceGetName(colorSpace); return color_space_from_cg_name(name); @@ -107,10 +107,10 @@ CGColorSpaceRef gray_colorspace() { } /* namespace ORB */ -std::optional orb_color_space(ORBColorSpace orbColorSpace) { +ORB::Optional orb_color_space(ORBColorSpace orbColorSpace) { switch (orbColorSpace) { case ORBColorSpaceDefault: - return std::nullopt; + return ORB::nullopt; case ORBColorSpaceSRGB: return ORB::ColorSpace::SRGB; case ORBColorSpaceLinearSRGB: @@ -120,15 +120,15 @@ std::optional orb_color_space(ORBColorSpace orbColorSpace) { case ORBColorSpaceLinearDisplayP3: return ORB::ColorSpace::LinearDisplayP3; default: - return std::nullopt; + return ORB::nullopt; } } -ORBColorSpace orb_color_space(std::optional colorSpace) { - if (!colorSpace.has_value()) { +ORBColorSpace orb_color_space(ORB::Optional colorSpace) { + if (!colorSpace) { return ORBColorSpaceDefault; } - switch (colorSpace.value()) { + switch (*colorSpace) { case ORB::ColorSpace::LinearSRGB: return ORBColorSpaceLinearSRGB; case ORB::ColorSpace::SRGB: diff --git a/Sources/OpenRenderBoxCxx/include/OpenRenderBoxCxx/Color/ColorSpace.hpp b/Sources/OpenRenderBoxCxx/include/OpenRenderBoxCxx/Color/ColorSpace.hpp index 241ef7c..b0b5942 100644 --- a/Sources/OpenRenderBoxCxx/include/OpenRenderBoxCxx/Color/ColorSpace.hpp +++ b/Sources/OpenRenderBoxCxx/include/OpenRenderBoxCxx/Color/ColorSpace.hpp @@ -10,7 +10,19 @@ #include #include #endif /* ORB_TARGET_OS_DARWIN */ +#if __has_include() #include +namespace ORB { +template using Optional = std::optional; +constexpr auto nullopt = std::nullopt; +} +#else +#include +namespace ORB { +template using Optional = std::experimental::optional; +constexpr auto nullopt = std::experimental::nullopt; +} +#endif namespace ORB { @@ -27,13 +39,13 @@ enum class ColorSpace : uint32_t { #if ORB_TARGET_OS_DARWIN /// Converts a CGColorSpace name (CFStringRef) to internal ColorSpace enum. /// @param name The color space name from CGColorSpaceGetName. -/// @return The ColorSpace if recognized, or std::nullopt if not. -std::optional color_space_from_cg_name(CFStringRef name); +/// @return The ColorSpace if recognized, or ORB::nullopt if not. +Optional color_space_from_cg_name(CFStringRef name); /// Converts a CGColorSpaceRef to internal ColorSpace enum. /// @param colorSpace The CGColorSpace to convert. -/// @return The ColorSpace if recognized, or std::nullopt if not. -std::optional color_space_from_cg(CGColorSpaceRef colorSpace); +/// @return The ColorSpace if recognized, or ORB::nullopt if not. +Optional color_space_from_cg(CGColorSpaceRef colorSpace); /// Returns a CGColorSpaceRef for the given internal color space. /// @param colorSpace The internal color space enum value. @@ -74,6 +86,6 @@ CGColorSpaceRef gray_colorspace(); } /* namespace ORB */ -std::optional orb_color_space(ORBColorSpace orbColorSpace); +ORB::Optional orb_color_space(ORBColorSpace orbColorSpace); -ORBColorSpace orb_color_space(std::optional colorSpace); \ No newline at end of file +ORBColorSpace orb_color_space(ORB::Optional colorSpace);