(root)/
gcc-13.2.0/
libstdc++-v3/
include/
c_compatibility/
stdatomic.h
       1  // C compatibility header <stdatomic.h> -*- C++ -*-
       2  
       3  // Copyright The GNU Toolchain Authors.
       4  //
       5  // This file is part of the GNU ISO C++ Library.  This library is free
       6  // software; you can redistribute it and/or modify it under the
       7  // terms of the GNU General Public License as published by the
       8  // Free Software Foundation; either version 3, or (at your option)
       9  // any later version.
      10  
      11  // This library is distributed in the hope that it will be useful,
      12  // but WITHOUT ANY WARRANTY; without even the implied warranty of
      13  // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      14  // GNU General Public License for more details.
      15  
      16  // Under Section 7 of GPL version 3, you are granted additional
      17  // permissions described in the GCC Runtime Library Exception, version
      18  // 3.1, as published by the Free Software Foundation.
      19  
      20  // You should have received a copy of the GNU General Public License and
      21  // a copy of the GCC Runtime Library Exception along with this program;
      22  // see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
      23  // <http://www.gnu.org/licenses/>.
      24  
      25  /** @file include/stdatomic.h
      26   *  This is a Standard C++ Library header.
      27   */
      28  
      29  #ifndef _GLIBCXX_STDATOMIC_H
      30  #define _GLIBCXX_STDATOMIC_H
      31  
      32  #if __cplusplus > 202002L
      33  #include <atomic>
      34  
      35  #define __cpp_lib_stdatomic_h 202011L
      36  
      37  #define _Atomic(_Tp) std::atomic<_Tp>
      38  
      39  using std::memory_order;
      40  using std::memory_order_relaxed;
      41  using std::memory_order_consume;
      42  using std::memory_order_acquire;
      43  using std::memory_order_release;
      44  using std::memory_order_acq_rel;
      45  using std::memory_order_seq_cst;
      46  using std::atomic_flag;
      47  using std::atomic_bool;
      48  using std::atomic_char;
      49  using std::atomic_schar;
      50  using std::atomic_uchar;
      51  using std::atomic_short;
      52  using std::atomic_ushort;
      53  using std::atomic_int;
      54  using std::atomic_uint;
      55  using std::atomic_long;
      56  using std::atomic_ulong;
      57  using std::atomic_llong;
      58  using std::atomic_ullong;
      59  #ifdef _GLIBCXX_USE_CHAR8_T
      60  using std::atomic_char8_t;
      61  #endif
      62  using std::atomic_char16_t;
      63  using std::atomic_char32_t;
      64  using std::atomic_wchar_t;
      65  #ifdef _GLIBCXX_USE_C99_STDINT_TR1
      66  using std::atomic_int8_t;
      67  using std::atomic_uint8_t;
      68  using std::atomic_int16_t;
      69  using std::atomic_uint16_t;
      70  using std::atomic_int32_t;
      71  using std::atomic_uint32_t;
      72  using std::atomic_int64_t;
      73  using std::atomic_uint64_t;
      74  using std::atomic_int_least8_t;
      75  using std::atomic_uint_least8_t;
      76  using std::atomic_int_least16_t;
      77  using std::atomic_uint_least16_t;
      78  using std::atomic_int_least32_t;
      79  using std::atomic_uint_least32_t;
      80  using std::atomic_int_least64_t;
      81  using std::atomic_uint_least64_t;
      82  using std::atomic_int_fast8_t;
      83  using std::atomic_uint_fast8_t;
      84  using std::atomic_int_fast16_t;
      85  using std::atomic_uint_fast16_t;
      86  using std::atomic_int_fast32_t;
      87  using std::atomic_uint_fast32_t;
      88  using std::atomic_int_fast64_t;
      89  using std::atomic_uint_fast64_t;
      90  #endif
      91  using std::atomic_intptr_t;
      92  using std::atomic_uintptr_t;
      93  using std::atomic_size_t;
      94  using std::atomic_ptrdiff_t;
      95  #ifdef _GLIBCXX_USE_C99_STDINT_TR1
      96  using std::atomic_intmax_t;
      97  using std::atomic_uintmax_t;
      98  #endif
      99  using std::atomic_is_lock_free;
     100  using std::atomic_load;
     101  using std::atomic_load_explicit;
     102  using std::atomic_store;
     103  using std::atomic_store_explicit;
     104  using std::atomic_exchange;
     105  using std::atomic_exchange_explicit;
     106  using std::atomic_compare_exchange_strong;
     107  using std::atomic_compare_exchange_strong_explicit;
     108  using std::atomic_compare_exchange_weak;
     109  using std::atomic_compare_exchange_weak_explicit;
     110  using std::atomic_fetch_add;
     111  using std::atomic_fetch_add_explicit;
     112  using std::atomic_fetch_sub;
     113  using std::atomic_fetch_sub_explicit;
     114  using std::atomic_fetch_or;
     115  using std::atomic_fetch_or_explicit;
     116  using std::atomic_fetch_xor;
     117  using std::atomic_fetch_xor_explicit;
     118  using std::atomic_fetch_and;
     119  using std::atomic_fetch_and_explicit;
     120  using std::atomic_flag_test_and_set;
     121  using std::atomic_flag_test_and_set_explicit;
     122  using std::atomic_flag_clear;
     123  using std::atomic_flag_clear_explicit;
     124  using std::atomic_thread_fence;
     125  using std::atomic_signal_fence;
     126  
     127  #elif defined __clang__
     128  # include_next <stdatomic.h>
     129  #endif // C++23
     130  #endif // _GLIBCXX_STDATOMIC_H