PATH: //usr/include/c++/11/bits
FILE_BARU
CREATE
FOLDER_BARU
MKDIR
UPLOAD_FILE
GO
[ .. KEMBALI ]
📄 algorithmfwd.h
↓
X
📄 align.h
↓
X
📄 alloc_traits.h
↓
X
📄 allocated_ptr.h
↓
X
📄 allocator.h
↓
X
📄 atomic_base.h
↓
X
📄 atomic_futex.h
↓
X
📄 atomic_lockfree_defines.h
↓
X
📄 atomic_timed_wait.h
↓
X
📄 atomic_wait.h
↓
X
📄 basic_ios.h
↓
X
📄 basic_ios.tcc
↓
X
📄 basic_string.h
↓
X
📄 basic_string.tcc
↓
X
📄 boost_concept_check.h
↓
X
📄 c++0x_warning.h
↓
X
📄 char_traits.h
↓
X
📄 charconv.h
↓
X
📄 codecvt.h
↓
X
📄 concept_check.h
↓
X
📄 cpp_type_traits.h
↓
X
📄 cxxabi_forced.h
↓
X
📄 cxxabi_init_exception.h
↓
X
📄 deque.tcc
↓
X
📄 enable_special_members.h
↓
X
📄 erase_if.h
↓
X
📄 exception.h
↓
X
📄 exception_defines.h
↓
X
📄 exception_ptr.h
↓
X
📄 forward_list.h
↓
X
📄 forward_list.tcc
↓
X
📄 fs_dir.h
↓
X
📄 fs_fwd.h
↓
X
📄 fs_ops.h
↓
X
📄 fs_path.h
↓
X
📄 fstream.tcc
↓
X
📄 functexcept.h
↓
X
📄 functional_hash.h
↓
X
📄 gslice.h
↓
X
📄 gslice_array.h
↓
X
📄 hash_bytes.h
↓
X
📄 hashtable.h
↓
X
📄 hashtable_policy.h
↓
X
📄 indirect_array.h
↓
X
📄 invoke.h
↓
X
📄 ios_base.h
↓
X
📄 istream.tcc
↓
X
📄 iterator_concepts.h
↓
X
📄 list.tcc
↓
X
📄 locale_classes.h
↓
X
📄 locale_classes.tcc
↓
X
📄 locale_conv.h
↓
X
📄 locale_facets.h
↓
X
📄 locale_facets.tcc
↓
X
📄 locale_facets_nonio.h
↓
X
📄 locale_facets_nonio.tcc
↓
X
📄 localefwd.h
↓
X
📄 mask_array.h
↓
X
📄 max_size_type.h
↓
X
📄 memoryfwd.h
↓
X
📄 move.h
↓
X
📄 nested_exception.h
↓
X
📄 node_handle.h
↓
X
📄 ostream.tcc
↓
X
📄 ostream_insert.h
↓
X
📄 parse_numbers.h
↓
X
📄 postypes.h
↓
X
📄 predefined_ops.h
↓
X
📄 ptr_traits.h
↓
X
📄 quoted_string.h
↓
X
📄 random.h
↓
X
📄 random.tcc
↓
X
📄 range_access.h
↓
X
📄 ranges_algo.h
↓
X
📄 ranges_algobase.h
↓
X
📄 ranges_base.h
↓
X
📄 ranges_cmp.h
↓
X
📄 ranges_uninitialized.h
↓
X
📄 ranges_util.h
↓
X
📄 refwrap.h
↓
X
📄 regex.h
↓
X
📄 regex.tcc
↓
X
📄 regex_automaton.h
↓
X
📄 regex_automaton.tcc
↓
X
📄 regex_compiler.h
↓
X
📄 regex_compiler.tcc
↓
X
📄 regex_constants.h
↓
X
📄 regex_error.h
↓
X
📄 regex_executor.h
↓
X
📄 regex_executor.tcc
↓
X
📄 regex_scanner.h
↓
X
📄 regex_scanner.tcc
↓
X
📄 semaphore_base.h
↓
X
📄 shared_ptr.h
↓
X
📄 shared_ptr_atomic.h
↓
X
📄 shared_ptr_base.h
↓
X
📄 slice_array.h
↓
X
📄 specfun.h
↓
X
📄 sstream.tcc
↓
X
📄 std_abs.h
↓
X
📄 std_function.h
↓
X
📄 std_mutex.h
↓
X
📄 std_thread.h
↓
X
📄 stl_algo.h
↓
X
📄 stl_algobase.h
↓
X
📄 stl_bvector.h
↓
X
📄 stl_construct.h
↓
X
📄 stl_deque.h
↓
X
📄 stl_function.h
↓
X
📄 stl_heap.h
↓
X
📄 stl_iterator.h
↓
X
📄 stl_iterator_base_funcs.h
↓
X
📄 stl_iterator_base_types.h
↓
X
📄 stl_list.h
↓
X
📄 stl_map.h
↓
X
📄 stl_multimap.h
↓
X
📄 stl_multiset.h
↓
X
📄 stl_numeric.h
↓
X
📄 stl_pair.h
↓
X
📄 stl_queue.h
↓
X
📄 stl_raw_storage_iter.h
↓
X
📄 stl_relops.h
↓
X
📄 stl_set.h
↓
X
📄 stl_stack.h
↓
X
📄 stl_tempbuf.h
↓
X
📄 stl_tree.h
↓
X
📄 stl_uninitialized.h
↓
X
📄 stl_vector.h
↓
X
📄 stream_iterator.h
↓
X
📄 streambuf.tcc
↓
X
📄 streambuf_iterator.h
↓
X
📄 string_view.tcc
↓
X
📄 stringfwd.h
↓
X
📄 this_thread_sleep.h
↓
X
📄 uniform_int_dist.h
↓
X
📄 unique_lock.h
↓
X
📄 unique_ptr.h
↓
X
📄 unordered_map.h
↓
X
📄 unordered_set.h
↓
X
📄 uses_allocator.h
↓
X
📄 uses_allocator_args.h
↓
X
📄 valarray_after.h
↓
X
📄 valarray_array.h
↓
X
📄 valarray_array.tcc
↓
X
📄 valarray_before.h
↓
X
📄 vector.tcc
↓
X
SAVING...
BERHASIL DIUBAH!
EDITING: shared_ptr_atomic.h
// shared_ptr atomic access -*- C++ -*- // Copyright (C) 2014-2021 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the // terms of the GNU General Public License as published by the // Free Software Foundation; either version 3, or (at your option) // any later version. // This library is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // Under Section 7 of GPL version 3, you are granted additional // permissions described in the GCC Runtime Library Exception, version // 3.1, as published by the Free Software Foundation. // You should have received a copy of the GNU General Public License and // a copy of the GCC Runtime Library Exception along with this program; // see the files COPYING3 and COPYING.RUNTIME respectively. If not, see // <http://www.gnu.org/licenses/>. /** @file bits/shared_ptr_atomic.h * This is an internal header file, included by other library headers. * Do not attempt to use it directly. @headername{memory} */ #ifndef _SHARED_PTR_ATOMIC_H #define _SHARED_PTR_ATOMIC_H 1 #include <bits/atomic_base.h> namespace std _GLIBCXX_VISIBILITY(default) { _GLIBCXX_BEGIN_NAMESPACE_VERSION /** * @addtogroup pointer_abstractions * @{ */ /// @relates shared_ptr @{ /// @cond undocumented struct _Sp_locker { _Sp_locker(const _Sp_locker&) = delete; _Sp_locker& operator=(const _Sp_locker&) = delete; #ifdef __GTHREADS explicit _Sp_locker(const void*) noexcept; _Sp_locker(const void*, const void*) noexcept; ~_Sp_locker(); private: unsigned char _M_key1; unsigned char _M_key2; #else explicit _Sp_locker(const void*, const void* = nullptr) { } #endif }; /// @endcond /** * @brief Report whether shared_ptr atomic operations are lock-free. * @param __p A non-null pointer to a shared_ptr object. * @return True if atomic access to @c *__p is lock-free, false otherwise. * @{ */ template<typename _Tp, _Lock_policy _Lp> inline bool atomic_is_lock_free(const __shared_ptr<_Tp, _Lp>* __p) { #ifdef __GTHREADS return __gthread_active_p() == 0; #else return true; #endif } template<typename _Tp> inline bool atomic_is_lock_free(const shared_ptr<_Tp>* __p) { return std::atomic_is_lock_free<_Tp, __default_lock_policy>(__p); } /// @} /** * @brief Atomic load for shared_ptr objects. * @param __p A non-null pointer to a shared_ptr object. * @return @c *__p * * The memory order shall not be @c memory_order_release or * @c memory_order_acq_rel. * @{ */ template<typename _Tp> inline shared_ptr<_Tp> atomic_load_explicit(const shared_ptr<_Tp>* __p, memory_order) { _Sp_locker __lock{__p}; return *__p; } template<typename _Tp> inline shared_ptr<_Tp> atomic_load(const shared_ptr<_Tp>* __p) { return std::atomic_load_explicit(__p, memory_order_seq_cst); } template<typename _Tp, _Lock_policy _Lp> inline __shared_ptr<_Tp, _Lp> atomic_load_explicit(const __shared_ptr<_Tp, _Lp>* __p, memory_order) { _Sp_locker __lock{__p}; return *__p; } template<typename _Tp, _Lock_policy _Lp> inline __shared_ptr<_Tp, _Lp> atomic_load(const __shared_ptr<_Tp, _Lp>* __p) { return std::atomic_load_explicit(__p, memory_order_seq_cst); } /// @} /** * @brief Atomic store for shared_ptr objects. * @param __p A non-null pointer to a shared_ptr object. * @param __r The value to store. * * The memory order shall not be @c memory_order_acquire or * @c memory_order_acq_rel. * @{ */ template<typename _Tp> inline void atomic_store_explicit(shared_ptr<_Tp>* __p, shared_ptr<_Tp> __r, memory_order) { _Sp_locker __lock{__p}; __p->swap(__r); // use swap so that **__p not destroyed while lock held } template<typename _Tp> inline void atomic_store(shared_ptr<_Tp>* __p, shared_ptr<_Tp> __r) { std::atomic_store_explicit(__p, std::move(__r), memory_order_seq_cst); } template<typename _Tp, _Lock_policy _Lp> inline void atomic_store_explicit(__shared_ptr<_Tp, _Lp>* __p, __shared_ptr<_Tp, _Lp> __r, memory_order) { _Sp_locker __lock{__p}; __p->swap(__r); // use swap so that **__p not destroyed while lock held } template<typename _Tp, _Lock_policy _Lp> inline void atomic_store(__shared_ptr<_Tp, _Lp>* __p, __shared_ptr<_Tp, _Lp> __r) { std::atomic_store_explicit(__p, std::move(__r), memory_order_seq_cst); } /// @} /** * @brief Atomic exchange for shared_ptr objects. * @param __p A non-null pointer to a shared_ptr object. * @param __r New value to store in @c *__p. * @return The original value of @c *__p * @{ */ template<typename _Tp> inline shared_ptr<_Tp> atomic_exchange_explicit(shared_ptr<_Tp>* __p, shared_ptr<_Tp> __r, memory_order) { _Sp_locker __lock{__p}; __p->swap(__r); return __r; } template<typename _Tp> inline shared_ptr<_Tp> atomic_exchange(shared_ptr<_Tp>* __p, shared_ptr<_Tp> __r) { return std::atomic_exchange_explicit(__p, std::move(__r), memory_order_seq_cst); } template<typename _Tp, _Lock_policy _Lp> inline __shared_ptr<_Tp, _Lp> atomic_exchange_explicit(__shared_ptr<_Tp, _Lp>* __p, __shared_ptr<_Tp, _Lp> __r, memory_order) { _Sp_locker __lock{__p}; __p->swap(__r); return __r; } template<typename _Tp, _Lock_policy _Lp> inline __shared_ptr<_Tp, _Lp> atomic_exchange(__shared_ptr<_Tp, _Lp>* __p, __shared_ptr<_Tp, _Lp> __r) { return std::atomic_exchange_explicit(__p, std::move(__r), memory_order_seq_cst); } /// @} /** * @brief Atomic compare-and-swap for shared_ptr objects. * @param __p A non-null pointer to a shared_ptr object. * @param __v A non-null pointer to a shared_ptr object. * @param __w A non-null pointer to a shared_ptr object. * @return True if @c *__p was equivalent to @c *__v, false otherwise. * * The memory order for failure shall not be @c memory_order_release or * @c memory_order_acq_rel, or stronger than the memory order for success. * @{ */ template<typename _Tp> bool atomic_compare_exchange_strong_explicit(shared_ptr<_Tp>* __p, shared_ptr<_Tp>* __v, shared_ptr<_Tp> __w, memory_order, memory_order) { shared_ptr<_Tp> __x; // goes out of scope after __lock _Sp_locker __lock{__p, __v}; owner_less<shared_ptr<_Tp>> __less; if (*__p == *__v && !__less(*__p, *__v) && !__less(*__v, *__p)) { __x = std::move(*__p); *__p = std::move(__w); return true; } __x = std::move(*__v); *__v = *__p; return false; } template<typename _Tp> inline bool atomic_compare_exchange_strong(shared_ptr<_Tp>* __p, shared_ptr<_Tp>* __v, shared_ptr<_Tp> __w) { return std::atomic_compare_exchange_strong_explicit(__p, __v, std::move(__w), memory_order_seq_cst, memory_order_seq_cst); } template<typename _Tp> inline bool atomic_compare_exchange_weak_explicit(shared_ptr<_Tp>* __p, shared_ptr<_Tp>* __v, shared_ptr<_Tp> __w, memory_order __success, memory_order __failure) { return std::atomic_compare_exchange_strong_explicit(__p, __v, std::move(__w), __success, __failure); } template<typename _Tp> inline bool atomic_compare_exchange_weak(shared_ptr<_Tp>* __p, shared_ptr<_Tp>* __v, shared_ptr<_Tp> __w) { return std::atomic_compare_exchange_weak_explicit(__p, __v, std::move(__w), memory_order_seq_cst, memory_order_seq_cst); } template<typename _Tp, _Lock_policy _Lp> bool atomic_compare_exchange_strong_explicit(__shared_ptr<_Tp, _Lp>* __p, __shared_ptr<_Tp, _Lp>* __v, __shared_ptr<_Tp, _Lp> __w, memory_order, memory_order) { __shared_ptr<_Tp, _Lp> __x; // goes out of scope after __lock _Sp_locker __lock{__p, __v}; owner_less<__shared_ptr<_Tp, _Lp>> __less; if (*__p == *__v && !__less(*__p, *__v) && !__less(*__v, *__p)) { __x = std::move(*__p); *__p = std::move(__w); return true; } __x = std::move(*__v); *__v = *__p; return false; } template<typename _Tp, _Lock_policy _Lp> inline bool atomic_compare_exchange_strong(__shared_ptr<_Tp, _Lp>* __p, __shared_ptr<_Tp, _Lp>* __v, __shared_ptr<_Tp, _Lp> __w) { return std::atomic_compare_exchange_strong_explicit(__p, __v, std::move(__w), memory_order_seq_cst, memory_order_seq_cst); } template<typename _Tp, _Lock_policy _Lp> inline bool atomic_compare_exchange_weak_explicit(__shared_ptr<_Tp, _Lp>* __p, __shared_ptr<_Tp, _Lp>* __v, __shared_ptr<_Tp, _Lp> __w, memory_order __success, memory_order __failure) { return std::atomic_compare_exchange_strong_explicit(__p, __v, std::move(__w), __success, __failure); } template<typename _Tp, _Lock_policy _Lp> inline bool atomic_compare_exchange_weak(__shared_ptr<_Tp, _Lp>* __p, __shared_ptr<_Tp, _Lp>* __v, __shared_ptr<_Tp, _Lp> __w) { return std::atomic_compare_exchange_weak_explicit(__p, __v, std::move(__w), memory_order_seq_cst, memory_order_seq_cst); } /// @} /// @} relates shared_ptr /// @} group pointer_abstractions _GLIBCXX_END_NAMESPACE_VERSION } // namespace #endif // _SHARED_PTR_ATOMIC_H
SIMPAN PERUBAHAN