1349cc55cSDimitry Andric // -*- C++ -*- 2349cc55cSDimitry Andric //===----------------------------------------------------------------------===// 3349cc55cSDimitry Andric // 4349cc55cSDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 5349cc55cSDimitry Andric // See https://llvm.org/LICENSE.txt for license information. 6349cc55cSDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 7349cc55cSDimitry Andric // 8349cc55cSDimitry Andric //===----------------------------------------------------------------------===// 9349cc55cSDimitry Andric 10349cc55cSDimitry Andric #ifndef _LIBCPP___CHARCONV_CHARS_FORMAT_H 11349cc55cSDimitry Andric #define _LIBCPP___CHARCONV_CHARS_FORMAT_H 12349cc55cSDimitry Andric 13349cc55cSDimitry Andric #include <__config> 14349cc55cSDimitry Andric #include <__utility/to_underlying.h> 15349cc55cSDimitry Andric 16349cc55cSDimitry Andric #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) 17349cc55cSDimitry Andric # pragma GCC system_header 18349cc55cSDimitry Andric #endif 19349cc55cSDimitry Andric 20349cc55cSDimitry Andric _LIBCPP_BEGIN_NAMESPACE_STD 21349cc55cSDimitry Andric 2206c3fb27SDimitry Andric #if _LIBCPP_STD_VER >= 17 23349cc55cSDimitry Andric 245f757f3fSDimitry Andric enum class chars_format { scientific = 0x1, fixed = 0x2, hex = 0x4, general = fixed | scientific }; 25349cc55cSDimitry Andric 2606c3fb27SDimitry Andric inline _LIBCPP_HIDE_FROM_ABI constexpr chars_format operator~(chars_format __x) { 2706c3fb27SDimitry Andric return chars_format(~std::__to_underlying(__x)); 28349cc55cSDimitry Andric } 29349cc55cSDimitry Andric 3006c3fb27SDimitry Andric inline _LIBCPP_HIDE_FROM_ABI constexpr chars_format operator&(chars_format __x, chars_format __y) { 3106c3fb27SDimitry Andric return chars_format(std::__to_underlying(__x) & std::__to_underlying(__y)); 32349cc55cSDimitry Andric } 33349cc55cSDimitry Andric 3406c3fb27SDimitry Andric inline _LIBCPP_HIDE_FROM_ABI constexpr chars_format operator|(chars_format __x, chars_format __y) { 3506c3fb27SDimitry Andric return chars_format(std::__to_underlying(__x) | std::__to_underlying(__y)); 36349cc55cSDimitry Andric } 37349cc55cSDimitry Andric 3806c3fb27SDimitry Andric inline _LIBCPP_HIDE_FROM_ABI constexpr chars_format operator^(chars_format __x, chars_format __y) { 3906c3fb27SDimitry Andric return chars_format(std::__to_underlying(__x) ^ std::__to_underlying(__y)); 40349cc55cSDimitry Andric } 41349cc55cSDimitry Andric 42*0fca6ea1SDimitry Andric inline _LIBCPP_HIDE_FROM_ABI constexpr chars_format& operator&=(chars_format& __x, chars_format __y) { 43349cc55cSDimitry Andric __x = __x & __y; 44349cc55cSDimitry Andric return __x; 45349cc55cSDimitry Andric } 46349cc55cSDimitry Andric 47*0fca6ea1SDimitry Andric inline _LIBCPP_HIDE_FROM_ABI constexpr chars_format& operator|=(chars_format& __x, chars_format __y) { 48349cc55cSDimitry Andric __x = __x | __y; 49349cc55cSDimitry Andric return __x; 50349cc55cSDimitry Andric } 51349cc55cSDimitry Andric 52*0fca6ea1SDimitry Andric inline _LIBCPP_HIDE_FROM_ABI constexpr chars_format& operator^=(chars_format& __x, chars_format __y) { 53349cc55cSDimitry Andric __x = __x ^ __y; 54349cc55cSDimitry Andric return __x; 55349cc55cSDimitry Andric } 56349cc55cSDimitry Andric 5706c3fb27SDimitry Andric #endif // _LIBCPP_STD_VER >= 17 58349cc55cSDimitry Andric 59349cc55cSDimitry Andric _LIBCPP_END_NAMESPACE_STD 60349cc55cSDimitry Andric 61349cc55cSDimitry Andric #endif // _LIBCPP___CHARCONV_CHARS_FORMAT_H 62