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_COPY_OPTIONS_H 117056250fSNikolas Klauser #define _LIBCPP___FILESYSTEM_COPY_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 233583bf3aSNikolas Klauser enum class copy_options : unsigned short { 247056250fSNikolas Klauser none = 0, 257056250fSNikolas Klauser skip_existing = 1, 267056250fSNikolas Klauser overwrite_existing = 2, 277056250fSNikolas Klauser update_existing = 4, 287056250fSNikolas Klauser recursive = 8, 297056250fSNikolas Klauser copy_symlinks = 16, 307056250fSNikolas Klauser skip_symlinks = 32, 317056250fSNikolas Klauser directories_only = 64, 327056250fSNikolas Klauser create_symlinks = 128, 337056250fSNikolas Klauser create_hard_links = 256, 347056250fSNikolas Klauser __in_recursive_copy = 512, 357056250fSNikolas Klauser }; 367056250fSNikolas Klauser 37*9783f28cSLouis Dionne _LIBCPP_HIDE_FROM_ABI inline constexpr copy_options operator&(copy_options __lhs, copy_options __rhs) { 38*9783f28cSLouis Dionne return static_cast<copy_options>(static_cast<unsigned short>(__lhs) & static_cast<unsigned short>(__rhs)); 397056250fSNikolas Klauser } 407056250fSNikolas Klauser 41*9783f28cSLouis Dionne _LIBCPP_HIDE_FROM_ABI inline constexpr copy_options operator|(copy_options __lhs, copy_options __rhs) { 42*9783f28cSLouis Dionne return static_cast<copy_options>(static_cast<unsigned short>(__lhs) | static_cast<unsigned short>(__rhs)); 437056250fSNikolas Klauser } 447056250fSNikolas Klauser 45*9783f28cSLouis Dionne _LIBCPP_HIDE_FROM_ABI inline constexpr copy_options operator^(copy_options __lhs, copy_options __rhs) { 46*9783f28cSLouis Dionne return static_cast<copy_options>(static_cast<unsigned short>(__lhs) ^ static_cast<unsigned short>(__rhs)); 477056250fSNikolas Klauser } 487056250fSNikolas Klauser 49*9783f28cSLouis Dionne _LIBCPP_HIDE_FROM_ABI inline constexpr copy_options operator~(copy_options __lhs) { 50b48c5010SNikolas Klauser return static_cast<copy_options>(~static_cast<unsigned short>(__lhs)); 517056250fSNikolas Klauser } 527056250fSNikolas Klauser 53*9783f28cSLouis Dionne _LIBCPP_HIDE_FROM_ABI inline copy_options& operator&=(copy_options& __lhs, copy_options __rhs) { 54b48c5010SNikolas Klauser return __lhs = __lhs & __rhs; 557056250fSNikolas Klauser } 567056250fSNikolas Klauser 57*9783f28cSLouis Dionne _LIBCPP_HIDE_FROM_ABI inline copy_options& operator|=(copy_options& __lhs, copy_options __rhs) { 58b48c5010SNikolas Klauser return __lhs = __lhs | __rhs; 597056250fSNikolas Klauser } 607056250fSNikolas Klauser 61*9783f28cSLouis Dionne _LIBCPP_HIDE_FROM_ABI inline copy_options& operator^=(copy_options& __lhs, copy_options __rhs) { 62b48c5010SNikolas Klauser return __lhs = __lhs ^ __rhs; 637056250fSNikolas Klauser } 647056250fSNikolas Klauser 657056250fSNikolas Klauser _LIBCPP_END_NAMESPACE_FILESYSTEM 667056250fSNikolas Klauser 67ac8c9f1eSLouis Dionne #endif // _LIBCPP_STD_VER >= 17 687056250fSNikolas Klauser 697056250fSNikolas Klauser #endif // _LIBCPP___FILESYSTEM_COPY_OPTIONS_H 70