123 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			123 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| //////////////////////////////////////////////////////////////////////////////
 | |
| //
 | |
| // (C) Copyright Ion Gaztanaga 2005-2016.
 | |
| //
 | |
| // 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://www.boost.org/libs/interprocess for documentation.
 | |
| //
 | |
| //////////////////////////////////////////////////////////////////////////////
 | |
| 
 | |
| #ifndef BOOST_INTERPROCESS_DETAIL_MPL_HPP
 | |
| #define BOOST_INTERPROCESS_DETAIL_MPL_HPP
 | |
| 
 | |
| #ifndef BOOST_CONFIG_HPP
 | |
| #  include <boost/config.hpp>
 | |
| #endif
 | |
| #
 | |
| #if defined(BOOST_HAS_PRAGMA_ONCE)
 | |
| #  pragma once
 | |
| #endif
 | |
| 
 | |
| #include <cstddef>
 | |
| 
 | |
| namespace boost {
 | |
| namespace interprocess {
 | |
| namespace ipcdetail {
 | |
| 
 | |
| template <class T, T val>
 | |
| struct integral_constant
 | |
| {
 | |
|    static const T value = val;
 | |
|    typedef integral_constant<T,val> type;
 | |
| };
 | |
| 
 | |
| template< bool C_ >
 | |
| struct bool_ : integral_constant<bool, C_>
 | |
| {
 | |
|    static const bool value = C_;
 | |
| };
 | |
| 
 | |
| typedef bool_<true>        true_;
 | |
| typedef bool_<false>       false_;
 | |
| 
 | |
| typedef true_  true_type;
 | |
| typedef false_ false_type;
 | |
| 
 | |
| typedef char yes_type;
 | |
| struct no_type
 | |
| {
 | |
|    char padding[8];
 | |
| };
 | |
| 
 | |
| template <bool B, class T = void>
 | |
| struct enable_if_c {
 | |
|   typedef T type;
 | |
| };
 | |
| 
 | |
| template <class T>
 | |
| struct enable_if_c<false, T> {};
 | |
| 
 | |
| template <class Cond, class T = void>
 | |
| struct enable_if : public enable_if_c<Cond::value, T> {};
 | |
| 
 | |
| template <class Cond, class T = void>
 | |
| struct disable_if : public enable_if_c<!Cond::value, T> {};
 | |
| 
 | |
| template<
 | |
|       bool C
 | |
|     , typename T1
 | |
|     , typename T2
 | |
|     >
 | |
| struct if_c
 | |
| {
 | |
|     typedef T1 type;
 | |
| };
 | |
| 
 | |
| template<
 | |
|       typename T1
 | |
|     , typename T2
 | |
|     >
 | |
| struct if_c<false,T1,T2>
 | |
| {
 | |
|     typedef T2 type;
 | |
| };
 | |
| 
 | |
| template<
 | |
|       typename T1
 | |
|     , typename T2
 | |
|     , typename T3
 | |
|     >
 | |
| struct if_
 | |
| {
 | |
|    typedef typename if_c<0 != T1::value, T2, T3>::type type;
 | |
| };
 | |
| 
 | |
| 
 | |
| template<std::size_t S>
 | |
| struct ls_zeros
 | |
| {
 | |
|    static const std::size_t value = (S & std::size_t(1)) ? 0 : (1u + ls_zeros<(S >> 1u)>::value);
 | |
| };
 | |
| 
 | |
| template<>
 | |
| struct ls_zeros<0>
 | |
| {
 | |
|    static const std::size_t value = 0;
 | |
| };
 | |
| 
 | |
| template<>
 | |
| struct ls_zeros<1>
 | |
| {
 | |
|    static const std::size_t value = 0;
 | |
| };
 | |
| 
 | |
| }  //namespace ipcdetail {
 | |
| }  //namespace interprocess {
 | |
| }  //namespace boost {
 | |
| 
 | |
| #endif   //#ifndef BOOST_INTERPROCESS_DETAIL_MPL_HPP
 | |
| 
 | 
