atomicfwd_c.h

Go to the documentation of this file.
00001 // -*- C++ -*- header.
00002 
00003 // Copyright (C) 2008, 2009
00004 // Free Software Foundation, Inc.
00005 //
00006 // This file is part of the GNU ISO C++ Library.  This library is free
00007 // software; you can redistribute it and/or modify it under the
00008 // terms of the GNU General Public License as published by the
00009 // Free Software Foundation; either version 3, or (at your option)
00010 // any later version.
00011 
00012 // This library is distributed in the hope that it will be useful,
00013 // but WITHOUT ANY WARRANTY; without even the implied warranty of
00014 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00015 // GNU General Public License for more details.
00016 
00017 // Under Section 7 of GPL version 3, you are granted additional
00018 // permissions described in the GCC Runtime Library Exception, version
00019 // 3.1, as published by the Free Software Foundation.
00020 
00021 // You should have received a copy of the GNU General Public License and
00022 // a copy of the GCC Runtime Library Exception along with this program;
00023 // see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
00024 // <http://www.gnu.org/licenses/>.
00025 
00026 /** @file bits/atomicfwd_c.h
00027  *  This is an internal header file, included by other library headers.
00028  *  You should not attempt to use it directly.
00029  */
00030 
00031 // "C" only bits.
00032 
00033 #define _ATOMIC_MEMBER_ ((__a)->_M_i)
00034 
00035   // POD base classes for atomic intgral types.
00036   struct __atomic_bool_base
00037   {
00038     bool _M_i;
00039   };
00040 
00041   struct __atomic_char_base
00042   {
00043     char _M_i;
00044   };
00045 
00046   struct __atomic_schar_base
00047   {
00048     signed char _M_i;
00049   };
00050 
00051   struct __atomic_uchar_base
00052   {
00053     unsigned char _M_i;
00054   };
00055 
00056   struct __atomic_short_base
00057   {
00058     short _M_i;
00059   };
00060 
00061   struct __atomic_ushort_base
00062   {
00063     unsigned short _M_i;
00064   };
00065 
00066   struct __atomic_int_base
00067   {
00068     int _M_i;
00069   };
00070 
00071   struct __atomic_uint_base
00072   {
00073     unsigned int _M_i;
00074   };
00075 
00076   struct __atomic_long_base
00077   {
00078     long _M_i;
00079   };
00080 
00081   struct __atomic_ulong_base
00082   {
00083     unsigned long _M_i;
00084   };
00085 
00086   struct __atomic_llong_base
00087   {
00088     long long _M_i;
00089   };
00090 
00091   struct __atomic_ullong_base
00092   {
00093     unsigned long long  _M_i;
00094   };
00095 
00096   struct __atomic_wchar_t_base
00097   {
00098     wchar_t _M_i;
00099   };
00100 
00101   typedef struct __atomic_flag_base         atomic_flag;
00102   typedef struct __atomic_address_base      atomic_address;
00103   typedef struct __atomic_bool_base     atomic_bool;
00104   typedef struct __atomic_char_base         atomic_char;
00105   typedef struct __atomic_schar_base        atomic_schar;
00106   typedef struct __atomic_uchar_base        atomic_uchar;
00107   typedef struct __atomic_short_base        atomic_short;
00108   typedef struct __atomic_ushort_base       atomic_ushort;
00109   typedef struct __atomic_int_base      atomic_int;
00110   typedef struct __atomic_uint_base         atomic_uint;
00111   typedef struct __atomic_long_base         atomic_long;
00112   typedef struct __atomic_ulong_base        atomic_ulong;
00113   typedef struct __atomic_llong_base        atomic_llong;
00114   typedef struct __atomic_ullong_base       atomic_ullong;
00115   typedef struct __atomic_wchar_t_base      atomic_wchar_t;
00116   typedef struct __atomic_short_base        atomic_char16_t;
00117   typedef struct __atomic_int_base      atomic_char32_t;
00118 
00119 #define atomic_is_lock_free(__a)                    \
00120   false
00121 
00122 #define atomic_load_explicit(__a, __x)                  \
00123   _ATOMIC_LOAD_(__a, __x)
00124 
00125 #define atomic_load(__a)                        \
00126   atomic_load_explicit(__a, memory_order_seq_cst)
00127 
00128 #define atomic_store_explicit(__a, __m, __x)                \
00129   _ATOMIC_STORE_(__a, __m, __x)
00130 
00131 #define atomic_store(__a, __m)                      \
00132   atomic_store_explicit(__a, __m, memory_order_seq_cst)
00133 
00134 #define atomic_exchange_explicit(__a, __m, __x)             \
00135   _ATOMIC_MODIFY_(__a, =, __m, __x)
00136 
00137 #define atomic_exchange(__a, __m)                   \
00138   atomic_exchange_explicit(__a, __m, memory_order_seq_cst)
00139 
00140 #define atomic_compare_exchange_explicit(__a, __e, __m, __x, __y)   \
00141   _ATOMIC_CMPEXCHNG_(__a, __e, __m, __x)
00142 
00143 #define atomic_compare_exchange(__a, __e, __m)              \
00144   _ATOMIC_CMPEXCHNG_(__a, __e, __m, memory_order_seq_cst)
00145 
00146 #define atomic_fetch_add_explicit(__a, __m, __x)            \
00147   _ATOMIC_MODIFY_(__a, +=, __m, __x)
00148 
00149 #define atomic_fetch_add(__a, __m)                  \
00150   atomic_fetch_add_explicit(__a, __m, memory_order_seq_cst)
00151 
00152 #define atomic_fetch_sub_explicit(__a, __m, __x)            \
00153   _ATOMIC_MODIFY_(__a, -=, __m, __x)
00154 
00155 #define atomic_fetch_sub(__a, __m)                  \
00156   atomic_fetch_sub_explicit(__a, __m, memory_order_seq_cst)
00157 
00158 #define atomic_fetch_and_explicit(__a, __m, __x)            \
00159   _ATOMIC_MODIFY_(__a, &=, __m, __x)
00160 
00161 #define atomic_fetch_and(__a, __m)                  \
00162   atomic_fetch_and_explicit(__a, __m, memory_order_seq_cst)
00163 
00164 #define atomic_fetch_or_explicit(__a, __m, __x)             \
00165   _ATOMIC_MODIFY_(__a, |=, __m, __x)
00166 
00167 #define atomic_fetch_or(__a, __m)                   \
00168   atomic_fetch_or_explicit(__a, __m, memory_order_seq_cst)
00169 
00170 #define atomic_fetch_xor_explicit(__a, __m, __x)            \
00171   _ATOMIC_MODIFY_(__a, ^=, __m, __x)
00172 
00173 #define atomic_fetch_xor(__a, __m)                  \
00174   atomic_fetch_xor_explicit(__a, __m, memory_order_seq_cst)

Generated on Tue Apr 21 13:13:25 2009 for libstdc++ by  doxygen 1.5.8