]> git.lyx.org Git - features.git/blobdiff - boost/boost/smart_ptr/detail/yield_k.hpp
boost: add eol property
[features.git] / boost / boost / smart_ptr / detail / yield_k.hpp
index 7fafea7d38530ebbfef769eac2b02d9d172696de..a956cc0c974168883d99badc46961e076b983493 100644 (file)
-#ifndef BOOST_SMART_PTR_DETAIL_YIELD_K_HPP_INCLUDED\r
-#define BOOST_SMART_PTR_DETAIL_YIELD_K_HPP_INCLUDED\r
-\r
-// MS compatible compilers support #pragma once\r
-\r
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)\r
-# pragma once\r
-#endif\r
-\r
-//\r
-//  yield_k.hpp\r
-//\r
-//  Copyright (c) 2008 Peter Dimov\r
-//\r
-//  void yield( unsigned k );\r
-//\r
-//  Typical use:\r
-//\r
-//  for( unsigned k = 0; !try_lock(); ++k ) yield( k );\r
-//\r
-//  Distributed under the Boost Software License, Version 1.0.\r
-//  See accompanying file LICENSE_1_0.txt or copy at\r
-//  http://www.boost.org/LICENSE_1_0.txt\r
-//\r
-\r
-#include <boost/config.hpp>\r
-\r
-// BOOST_SMT_PAUSE\r
-\r
-#if defined(_MSC_VER) && _MSC_VER >= 1310 && ( defined(_M_IX86) || defined(_M_X64) )\r
-\r
-extern "C" void _mm_pause();\r
-#pragma intrinsic( _mm_pause )\r
-\r
-#define BOOST_SMT_PAUSE _mm_pause();\r
-\r
-#elif defined(__GNUC__) && ( defined(__i386__) || defined(__x86_64__) )\r
-\r
-#define BOOST_SMT_PAUSE __asm__ __volatile__( "rep; nop" : : : "memory" );\r
-\r
-#endif\r
-\r
-//\r
-\r
-#if defined( WIN32 ) || defined( _WIN32 ) || defined( __WIN32__ ) || defined( __CYGWIN__ )\r
-\r
-#if defined( BOOST_USE_WINDOWS_H )\r
-# include <windows.h>\r
-#endif\r
-\r
-namespace boost\r
-{\r
-\r
-namespace detail\r
-{\r
-\r
-#if !defined( BOOST_USE_WINDOWS_H )\r
-  extern "C" void __stdcall Sleep( unsigned ms );\r
-#endif\r
-\r
-inline void yield( unsigned k )\r
-{\r
-    if( k < 4 )\r
-    {\r
-    }\r
-#if defined( BOOST_SMT_PAUSE )\r
-    else if( k < 16 )\r
-    {\r
-        BOOST_SMT_PAUSE\r
-    }\r
-#endif\r
-    else if( k < 32 )\r
-    {\r
-        Sleep( 0 );\r
-    }\r
-    else\r
-    {\r
-        Sleep( 1 );\r
-    }\r
-}\r
-\r
-} // namespace detail\r
-\r
-} // namespace boost\r
-\r
-#elif defined( BOOST_HAS_PTHREADS )\r
-\r
-#include <sched.h>\r
-#include <time.h>\r
-\r
-namespace boost\r
-{\r
-\r
-namespace detail\r
-{\r
-\r
-inline void yield( unsigned k )\r
-{\r
-    if( k < 4 )\r
-    {\r
-    }\r
-#if defined( BOOST_SMT_PAUSE )\r
-    else if( k < 16 )\r
-    {\r
-        BOOST_SMT_PAUSE\r
-    }\r
-#endif\r
-    else if( k < 32 || k & 1 )\r
-    {\r
-        sched_yield();\r
-    }\r
-    else\r
-    {\r
-        // g++ -Wextra warns on {} or {0}\r
-        struct timespec rqtp = { 0, 0 };\r
-\r
-        // POSIX says that timespec has tv_sec and tv_nsec\r
-        // But it doesn't guarantee order or placement\r
-\r
-        rqtp.tv_sec = 0;\r
-        rqtp.tv_nsec = 1000;\r
-\r
-        nanosleep( &rqtp, 0 );\r
-    }\r
-}\r
-\r
-} // namespace detail\r
-\r
-} // namespace boost\r
-\r
-#else\r
-\r
-namespace boost\r
-{\r
-\r
-namespace detail\r
-{\r
-\r
-inline void yield( unsigned )\r
-{\r
-}\r
-\r
-} // namespace detail\r
-\r
-} // namespace boost\r
-\r
-#endif\r
-\r
-#endif // #ifndef BOOST_SMART_PTR_DETAIL_YIELD_K_HPP_INCLUDED\r
+#ifndef BOOST_SMART_PTR_DETAIL_YIELD_K_HPP_INCLUDED
+#define BOOST_SMART_PTR_DETAIL_YIELD_K_HPP_INCLUDED
+
+// MS compatible compilers support #pragma once
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+//
+//  yield_k.hpp
+//
+//  Copyright (c) 2008 Peter Dimov
+//
+//  void yield( unsigned k );
+//
+//  Typical use:
+//
+//  for( unsigned k = 0; !try_lock(); ++k ) yield( k );
+//
+//  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
+//
+
+#include <boost/config.hpp>
+
+// BOOST_SMT_PAUSE
+
+#if defined(_MSC_VER) && _MSC_VER >= 1310 && ( defined(_M_IX86) || defined(_M_X64) )
+
+extern "C" void _mm_pause();
+#pragma intrinsic( _mm_pause )
+
+#define BOOST_SMT_PAUSE _mm_pause();
+
+#elif defined(__GNUC__) && ( defined(__i386__) || defined(__x86_64__) )
+
+#define BOOST_SMT_PAUSE __asm__ __volatile__( "rep; nop" : : : "memory" );
+
+#endif
+
+//
+
+#if defined( WIN32 ) || defined( _WIN32 ) || defined( __WIN32__ ) || defined( __CYGWIN__ )
+
+#if defined( BOOST_USE_WINDOWS_H )
+# include <windows.h>
+#endif
+
+namespace boost
+{
+
+namespace detail
+{
+
+#if !defined( BOOST_USE_WINDOWS_H )
+  extern "C" void __stdcall Sleep( unsigned ms );
+#endif
+
+inline void yield( unsigned k )
+{
+    if( k < 4 )
+    {
+    }
+#if defined( BOOST_SMT_PAUSE )
+    else if( k < 16 )
+    {
+        BOOST_SMT_PAUSE
+    }
+#endif
+    else if( k < 32 )
+    {
+        Sleep( 0 );
+    }
+    else
+    {
+        Sleep( 1 );
+    }
+}
+
+} // namespace detail
+
+} // namespace boost
+
+#elif defined( BOOST_HAS_PTHREADS )
+
+#include <sched.h>
+#include <time.h>
+
+namespace boost
+{
+
+namespace detail
+{
+
+inline void yield( unsigned k )
+{
+    if( k < 4 )
+    {
+    }
+#if defined( BOOST_SMT_PAUSE )
+    else if( k < 16 )
+    {
+        BOOST_SMT_PAUSE
+    }
+#endif
+    else if( k < 32 || k & 1 )
+    {
+        sched_yield();
+    }
+    else
+    {
+        // g++ -Wextra warns on {} or {0}
+        struct timespec rqtp = { 0, 0 };
+
+        // POSIX says that timespec has tv_sec and tv_nsec
+        // But it doesn't guarantee order or placement
+
+        rqtp.tv_sec = 0;
+        rqtp.tv_nsec = 1000;
+
+        nanosleep( &rqtp, 0 );
+    }
+}
+
+} // namespace detail
+
+} // namespace boost
+
+#else
+
+namespace boost
+{
+
+namespace detail
+{
+
+inline void yield( unsigned )
+{
+}
+
+} // namespace detail
+
+} // namespace boost
+
+#endif
+
+#endif // #ifndef BOOST_SMART_PTR_DETAIL_YIELD_K_HPP_INCLUDED