17056250fSNikolas Klauser // -*- C++ -*- 27056250fSNikolas Klauser //===----------------------------------------------------------------------===// 37056250fSNikolas Klauser // 47056250fSNikolas Klauser // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 57056250fSNikolas Klauser // See https://llvm.org/LICENSE.txt for license information. 67056250fSNikolas Klauser // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 77056250fSNikolas Klauser // 87056250fSNikolas Klauser //===----------------------------------------------------------------------===// 97056250fSNikolas Klauser 107056250fSNikolas Klauser #ifndef _LIBCPP___FILESYSTEM_PERM_OPTIONS_H 117056250fSNikolas Klauser #define _LIBCPP___FILESYSTEM_PERM_OPTIONS_H 127056250fSNikolas Klauser 137056250fSNikolas Klauser #include <__config> 147056250fSNikolas Klauser 15fa6b9e40SArthur O'Dwyer #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) 16fa6b9e40SArthur O'Dwyer # pragma GCC system_header 17fa6b9e40SArthur O'Dwyer #endif 18fa6b9e40SArthur O'Dwyer 19ac8c9f1eSLouis Dionne #if _LIBCPP_STD_VER >= 17 207056250fSNikolas Klauser 217056250fSNikolas Klauser _LIBCPP_BEGIN_NAMESPACE_FILESYSTEM 227056250fSNikolas Klauser 23*9783f28cSLouis Dionne enum class perm_options : unsigned char { replace = 1, add = 2, remove = 4, nofollow = 8 }; 247056250fSNikolas Klauser 25*9783f28cSLouis Dionne _LIBCPP_HIDE_FROM_ABI inline constexpr perm_options operator&(perm_options __lhs, perm_options __rhs) { 26*9783f28cSLouis Dionne return static_cast<perm_options>(static_cast<unsigned>(__lhs) & static_cast<unsigned>(__rhs)); 277056250fSNikolas Klauser } 287056250fSNikolas Klauser 29*9783f28cSLouis Dionne _LIBCPP_HIDE_FROM_ABI inline constexpr perm_options operator|(perm_options __lhs, perm_options __rhs) { 30*9783f28cSLouis Dionne return static_cast<perm_options>(static_cast<unsigned>(__lhs) | static_cast<unsigned>(__rhs)); 317056250fSNikolas Klauser } 327056250fSNikolas Klauser 33*9783f28cSLouis Dionne _LIBCPP_HIDE_FROM_ABI inline constexpr perm_options operator^(perm_options __lhs, perm_options __rhs) { 34*9783f28cSLouis Dionne return static_cast<perm_options>(static_cast<unsigned>(__lhs) ^ static_cast<unsigned>(__rhs)); 357056250fSNikolas Klauser } 367056250fSNikolas Klauser 37*9783f28cSLouis Dionne _LIBCPP_HIDE_FROM_ABI inline constexpr perm_options operator~(perm_options __lhs) { 38b48c5010SNikolas Klauser return static_cast<perm_options>(~static_cast<unsigned>(__lhs)); 397056250fSNikolas Klauser } 407056250fSNikolas Klauser 41*9783f28cSLouis Dionne _LIBCPP_HIDE_FROM_ABI inline perm_options& operator&=(perm_options& __lhs, perm_options __rhs) { 42b48c5010SNikolas Klauser return __lhs = __lhs & __rhs; 437056250fSNikolas Klauser } 447056250fSNikolas Klauser 45*9783f28cSLouis Dionne _LIBCPP_HIDE_FROM_ABI inline perm_options& operator|=(perm_options& __lhs, perm_options __rhs) { 46b48c5010SNikolas Klauser return __lhs = __lhs | __rhs; 477056250fSNikolas Klauser } 487056250fSNikolas Klauser 49*9783f28cSLouis Dionne _LIBCPP_HIDE_FROM_ABI inline perm_options& operator^=(perm_options& __lhs, perm_options __rhs) { 50b48c5010SNikolas Klauser return __lhs = __lhs ^ __rhs; 517056250fSNikolas Klauser } 527056250fSNikolas Klauser 537056250fSNikolas Klauser _LIBCPP_END_NAMESPACE_FILESYSTEM 547056250fSNikolas Klauser 55ac8c9f1eSLouis Dionne #endif // _LIBCPP_STD_VER >= 17 567056250fSNikolas Klauser 577056250fSNikolas Klauser #endif // _LIBCPP___FILESYSTEM_PERM_OPTIONS_H 58