PageRenderTime 27ms CodeModel.GetById 21ms app.highlight 2ms RepoModel.GetById 2ms app.codeStats 0ms

/Src/Dependencies/Boost/boost/interprocess/detail/preprocessor.hpp

http://hadesmem.googlecode.com/
C++ Header | 137 lines | 73 code | 34 blank | 30 comment | 5 complexity | e933bda1c1c86394020c20addd641a6b MD5 | raw file
  1//////////////////////////////////////////////////////////////////////////////
  2//
  3// (C) Copyright Ion Gaztanaga 2008-2009. Distributed under the Boost
  4// Software License, Version 1.0. (See accompanying file
  5// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
  6//
  7// See http://www.boost.org/libs/interprocess for documentation.
  8//
  9//////////////////////////////////////////////////////////////////////////////
 10
 11#ifndef BOOST_INTERPROCESS_DETAIL_PREPROCESSOR_HPP
 12#define BOOST_INTERPROCESS_DETAIL_PREPROCESSOR_HPP
 13
 14#if (defined _MSC_VER) && (_MSC_VER >= 1200)
 15#  pragma once
 16#endif
 17
 18#include "config_begin.hpp"
 19
 20#ifdef BOOST_INTERPROCESS_PERFECT_FORWARDING
 21#error "This file is not needed when perfect forwarding is available"
 22#endif
 23
 24#include <boost/preprocessor/iteration/local.hpp> 
 25#include <boost/preprocessor/repetition/enum_params.hpp>
 26#include <boost/preprocessor/cat.hpp>
 27#include <boost/preprocessor/repetition/enum.hpp>
 28#include <boost/preprocessor/repetition/repeat.hpp>
 29
 30#define BOOST_INTERPROCESS_MAX_CONSTRUCTOR_PARAMETERS 10
 31
 32//Note:
 33//We define template parameters as const references to
 34//be able to bind temporaries. After that we will un-const them.
 35//This cast is ugly but it is necessary until "perfect forwarding"
 36//is achieved in C++0x. Meanwhile, if we want to be able to
 37//bind rvalues with non-const references, we have to be ugly
 38#ifndef BOOST_NO_RVALUE_REFERENCES
 39   #define BOOST_INTERPROCESS_PP_PARAM_LIST(z, n, data) \
 40   BOOST_PP_CAT(P, n) && BOOST_PP_CAT(p, n) \
 41   //!
 42#else
 43   #define BOOST_INTERPROCESS_PP_PARAM_LIST(z, n, data) \
 44   const BOOST_PP_CAT(P, n) & BOOST_PP_CAT(p, n) \
 45   //!
 46#endif
 47
 48#ifndef BOOST_NO_RVALUE_REFERENCES
 49   #define BOOST_INTERPROCESS_PARAM(U, u) \
 50   U && u \
 51   //!
 52#else
 53   #define BOOST_INTERPROCESS_PARAM(U, u) \
 54   const U & u \
 55   //!
 56#endif
 57
 58#ifndef BOOST_NO_RVALUE_REFERENCES
 59
 60#ifdef BOOST_MOVE_OLD_RVALUE_REF_BINDING_RULES
 61
 62#define BOOST_INTERPROCESS_AUX_PARAM_INIT(z, n, data) \
 63  BOOST_PP_CAT(m_p, n) (BOOST_INTERPROCESS_MOVE_NAMESPACE::forward< BOOST_PP_CAT(P, n) >( BOOST_PP_CAT(p, n) ))           \
 64//!
 65
 66#else
 67
 68#define BOOST_INTERPROCESS_AUX_PARAM_INIT(z, n, data) \
 69  BOOST_PP_CAT(m_p, n) (BOOST_PP_CAT(p, n))           \
 70//!
 71
 72#endif
 73
 74#else
 75#define BOOST_INTERPROCESS_AUX_PARAM_INIT(z, n, data) \
 76  BOOST_PP_CAT(m_p, n) (const_cast<BOOST_PP_CAT(P, n) &>(BOOST_PP_CAT(p, n))) \
 77//!
 78#endif
 79
 80#define BOOST_INTERPROCESS_AUX_PARAM_INC(z, n, data)   \
 81  BOOST_PP_CAT(++m_p, n)                        \
 82//!
 83
 84#ifndef BOOST_NO_RVALUE_REFERENCES
 85
 86#if defined(BOOST_MOVE_MSVC_10_MEMBER_RVALUE_REF_BUG)
 87
 88#define BOOST_INTERPROCESS_AUX_PARAM_DEFINE(z, n, data)  \
 89  BOOST_PP_CAT(P, n) & BOOST_PP_CAT(m_p, n);            \
 90//!
 91
 92#else
 93
 94#define BOOST_INTERPROCESS_AUX_PARAM_DEFINE(z, n, data)  \
 95  BOOST_PP_CAT(P, n) && BOOST_PP_CAT(m_p, n);            \
 96//!
 97
 98#endif //defined(BOOST_MOVE_MSVC_10_MEMBER_RVALUE_REF_BUG)
 99
100
101#else
102#define BOOST_INTERPROCESS_AUX_PARAM_DEFINE(z, n, data)  \
103  BOOST_PP_CAT(P, n) & BOOST_PP_CAT(m_p, n);             \
104//!
105#endif
106
107#define BOOST_INTERPROCESS_PP_PARAM_FORWARD(z, n, data) \
108::boost::interprocess::forward< BOOST_PP_CAT(P, n) >( BOOST_PP_CAT(p, n) ) \
109//!
110
111#if !defined(BOOST_NO_RVALUE_REFERENCES) && defined(BOOST_MOVE_MSVC_10_MEMBER_RVALUE_REF_BUG)
112
113#include <boost/interprocess/containers/container/detail/stored_ref.hpp>
114
115#define BOOST_INTERPROCESS_PP_MEMBER_FORWARD(z, n, data) \
116::boost::container::containers_detail::stored_ref< BOOST_PP_CAT(P, n) >::forward( BOOST_PP_CAT(m_p, n) ) \
117//!
118
119#else
120
121#define BOOST_INTERPROCESS_PP_MEMBER_FORWARD(z, n, data) \
122::boost::interprocess::forward< BOOST_PP_CAT(P, n) >( BOOST_PP_CAT(m_p, n) ) \
123//!
124
125#endif   //!defined(BOOST_NO_RVALUE_REFERENCES) && defined(BOOST_MOVE_MSVC_10_MEMBER_RVALUE_REF_BUG)
126
127#define BOOST_INTERPROCESS_PP_MEMBER_IT_FORWARD(z, n, data) \
128BOOST_PP_CAT(*m_p, n) \
129//!
130
131#include <boost/interprocess/detail/config_end.hpp>
132
133#else
134#ifdef BOOST_INTERPROCESS_PERFECT_FORWARDING
135#error "This file is not needed when perfect forwarding is available"
136#endif
137#endif //#ifndef BOOST_INTERPROCESS_DETAIL_PREPROCESSOR_HPP