| 
									
										
										
										
											2009-03-01 16:00:42 +00:00
										 |  |  | #ifndef BOOST_SMART_PTR_DETAIL_SPINLOCK_HPP_INCLUDED
 | 
					
						
							|  |  |  | #define BOOST_SMART_PTR_DETAIL_SPINLOCK_HPP_INCLUDED
 | 
					
						
							| 
									
										
										
										
											2008-03-30 16:33:58 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | // MS compatible compilers support #pragma once
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #if defined(_MSC_VER) && (_MSC_VER >= 1020)
 | 
					
						
							|  |  |  | # pragma once
 | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | //
 | 
					
						
							|  |  |  | //  boost/detail/spinlock.hpp
 | 
					
						
							|  |  |  | //
 | 
					
						
							|  |  |  | //  Copyright (c) 2008 Peter Dimov
 | 
					
						
							|  |  |  | //
 | 
					
						
							|  |  |  | //  Distributed under the Boost Software License, Version 1.0.
 | 
					
						
							|  |  |  | //  See accompanying file LICENSE_1_0.txt or copy at
 | 
					
						
							|  |  |  | //  http://www.boost.org/LICENSE_1_0.txt)
 | 
					
						
							|  |  |  | //
 | 
					
						
							|  |  |  | //  struct spinlock
 | 
					
						
							|  |  |  | //  {
 | 
					
						
							|  |  |  | //      void lock();
 | 
					
						
							|  |  |  | //      bool try_lock();
 | 
					
						
							|  |  |  | //      void unlock();
 | 
					
						
							|  |  |  | //
 | 
					
						
							|  |  |  | //      class scoped_lock;
 | 
					
						
							|  |  |  | //  };
 | 
					
						
							|  |  |  | //
 | 
					
						
							|  |  |  | //  #define BOOST_DETAIL_SPINLOCK_INIT <unspecified>
 | 
					
						
							|  |  |  | //
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include <boost/config.hpp>
 | 
					
						
							| 
									
										
										
										
											2009-03-02 16:42:28 +00:00
										 |  |  | #include <boost/smart_ptr/detail/sp_has_sync.hpp>
 | 
					
						
							| 
									
										
										
										
											2008-03-30 16:33:58 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-12 20:20:56 +02:00
										 |  |  | #if defined( BOOST_SP_USE_STD_ATOMIC )
 | 
					
						
							| 
									
										
										
										
											2014-03-01 02:14:56 +02:00
										 |  |  | # if !defined( __clang__ )
 | 
					
						
							|  |  |  | #   include <boost/smart_ptr/detail/spinlock_std_atomic.hpp>
 | 
					
						
							|  |  |  | # else
 | 
					
						
							|  |  |  | //  Clang (at least up to 3.4) can't compile spinlock_pool when
 | 
					
						
							|  |  |  | //  using std::atomic, so substitute the __sync implementation instead.
 | 
					
						
							|  |  |  | #   include <boost/smart_ptr/detail/spinlock_sync.hpp>
 | 
					
						
							|  |  |  | # endif
 | 
					
						
							| 
									
										
										
										
											2014-02-12 20:20:56 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | #elif defined( BOOST_SP_USE_PTHREADS )
 | 
					
						
							| 
									
										
										
										
											2011-03-23 00:13:54 +00:00
										 |  |  | #  include <boost/smart_ptr/detail/spinlock_pt.hpp>
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-08-28 21:28:21 +03:00
										 |  |  | #elif !defined( BOOST_NO_CXX11_HDR_ATOMIC )
 | 
					
						
							|  |  |  | #  include <boost/smart_ptr/detail/spinlock_std_atomic.hpp>
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-03-23 00:13:54 +00:00
										 |  |  | #elif defined(__GNUC__) && defined( __arm__ ) && !defined( __thumb__ )
 | 
					
						
							| 
									
										
										
										
											2009-03-01 16:00:42 +00:00
										 |  |  | #  include <boost/smart_ptr/detail/spinlock_gcc_arm.hpp>
 | 
					
						
							| 
									
										
										
										
											2009-03-02 16:42:28 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | #elif defined( BOOST_SP_HAS_SYNC )
 | 
					
						
							| 
									
										
										
										
											2009-03-01 16:00:42 +00:00
										 |  |  | #  include <boost/smart_ptr/detail/spinlock_sync.hpp>
 | 
					
						
							| 
									
										
										
										
											2009-03-02 16:42:28 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-04-05 15:06:31 +00:00
										 |  |  | #elif defined(WIN32) || defined(_WIN32) || defined(__WIN32__) || defined(__CYGWIN__)
 | 
					
						
							| 
									
										
										
										
											2009-03-01 16:00:42 +00:00
										 |  |  | #  include <boost/smart_ptr/detail/spinlock_w32.hpp>
 | 
					
						
							| 
									
										
										
										
											2009-03-02 16:42:28 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-03-30 16:33:58 +00:00
										 |  |  | #elif defined(BOOST_HAS_PTHREADS)
 | 
					
						
							| 
									
										
										
										
											2009-03-01 16:00:42 +00:00
										 |  |  | #  include <boost/smart_ptr/detail/spinlock_pt.hpp>
 | 
					
						
							| 
									
										
										
										
											2009-03-02 16:42:28 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-04-05 15:06:31 +00:00
										 |  |  | #elif !defined(BOOST_HAS_THREADS)
 | 
					
						
							| 
									
										
										
										
											2009-03-01 16:00:42 +00:00
										 |  |  | #  include <boost/smart_ptr/detail/spinlock_nt.hpp>
 | 
					
						
							| 
									
										
										
										
											2009-03-02 16:42:28 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-03-30 16:33:58 +00:00
										 |  |  | #else
 | 
					
						
							|  |  |  | #  error Unrecognized threading platform
 | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-03-01 16:00:42 +00:00
										 |  |  | #endif // #ifndef BOOST_SMART_PTR_DETAIL_SPINLOCK_HPP_INCLUDED
 |