38 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
		
		
			
		
	
	
			38 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| 
								 | 
							
								//---------------------------------------------------------------------------//
							 | 
						||
| 
								 | 
							
								// Copyright (c) 2013-2014 Kyle Lutz <kyle.r.lutz@gmail.com>
							 | 
						||
| 
								 | 
							
								//
							 | 
						||
| 
								 | 
							
								// 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
							 | 
						||
| 
								 | 
							
								//
							 | 
						||
| 
								 | 
							
								// See http://boostorg.github.com/compute for more information.
							 | 
						||
| 
								 | 
							
								//---------------------------------------------------------------------------//
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#ifndef BOOST_COMPUTE_DETAIL_GLOBAL_STATIC_HPP
							 | 
						||
| 
								 | 
							
								#define BOOST_COMPUTE_DETAIL_GLOBAL_STATIC_HPP
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#include <boost/compute/config.hpp>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#ifdef BOOST_COMPUTE_THREAD_SAFE
							 | 
						||
| 
								 | 
							
								#  ifdef BOOST_COMPUTE_HAVE_THREAD_LOCAL
							 | 
						||
| 
								 | 
							
								     // use c++11 thread local storage
							 | 
						||
| 
								 | 
							
								#    define BOOST_COMPUTE_DETAIL_GLOBAL_STATIC(type, name, ctor) \
							 | 
						||
| 
								 | 
							
								       thread_local type name ctor;
							 | 
						||
| 
								 | 
							
								#  else
							 | 
						||
| 
								 | 
							
								      // use thread_specific_ptr from boost.thread
							 | 
						||
| 
								 | 
							
								#     include <boost/thread/tss.hpp>
							 | 
						||
| 
								 | 
							
								#     define BOOST_COMPUTE_DETAIL_GLOBAL_STATIC(type, name, ctor) \
							 | 
						||
| 
								 | 
							
								        static ::boost::thread_specific_ptr< type > BOOST_PP_CAT(name, _tls_ptr_); \
							 | 
						||
| 
								 | 
							
								        if(!BOOST_PP_CAT(name, _tls_ptr_).get()){ \
							 | 
						||
| 
								 | 
							
								            BOOST_PP_CAT(name, _tls_ptr_).reset(new type ctor); \
							 | 
						||
| 
								 | 
							
								        } \
							 | 
						||
| 
								 | 
							
								        static type &name = *BOOST_PP_CAT(name, _tls_ptr_);
							 | 
						||
| 
								 | 
							
								#  endif
							 | 
						||
| 
								 | 
							
								#else
							 | 
						||
| 
								 | 
							
								   // no thread-safety, just use static
							 | 
						||
| 
								 | 
							
								#  define BOOST_COMPUTE_DETAIL_GLOBAL_STATIC(type, name, ctor) \
							 | 
						||
| 
								 | 
							
								     static type name ctor;
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#endif // BOOST_COMPUTE_DETAIL_GLOBAL_STATIC_HPP
							 |