annotate DEPENDENCIES/generic/include/boost/utility/in_place_factory.hpp @ 125:34e428693f5d vext

Vext -> Repoint
author Chris Cannam
date Thu, 14 Jun 2018 11:15:39 +0100
parents c530137014c0
children
rev   line source
Chris@16 1 // Copyright (C) 2003, Fernando Luis Cacciola Carballal.
Chris@16 2 // Copyright (C) 2007, Tobias Schwinger.
Chris@16 3 //
Chris@16 4 // Use, modification, and distribution is subject to the Boost Software
Chris@16 5 // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
Chris@16 6 // http://www.boost.org/LICENSE_1_0.txt)
Chris@16 7 //
Chris@16 8 // See http://www.boost.org/libs/optional for documentation.
Chris@16 9 //
Chris@16 10 // You are welcome to contact the author at:
Chris@16 11 // fernando_cacciola@hotmail.com
Chris@16 12 //
Chris@16 13 #ifndef BOOST_UTILITY_INPLACE_FACTORY_04APR2007_HPP
Chris@16 14 #ifndef BOOST_PP_IS_ITERATING
Chris@16 15
Chris@16 16 #include <boost/utility/detail/in_place_factory_prefix.hpp>
Chris@16 17
Chris@16 18 namespace boost {
Chris@16 19
Chris@16 20 class in_place_factory_base {} ;
Chris@16 21
Chris@16 22 #define BOOST_PP_ITERATION_LIMITS (0, BOOST_MAX_INPLACE_FACTORY_ARITY)
Chris@16 23 #define BOOST_PP_FILENAME_1 <boost/utility/in_place_factory.hpp>
Chris@16 24 #include BOOST_PP_ITERATE()
Chris@16 25
Chris@16 26 } // namespace boost
Chris@16 27
Chris@16 28 #include <boost/utility/detail/in_place_factory_suffix.hpp>
Chris@16 29
Chris@16 30 #define BOOST_UTILITY_INPLACE_FACTORY_04APR2007_HPP
Chris@16 31 #else
Chris@16 32 #define N BOOST_PP_ITERATION()
Chris@16 33
Chris@16 34 #if N
Chris@16 35 template< BOOST_PP_ENUM_PARAMS(N, class A) >
Chris@16 36 #endif
Chris@16 37 class BOOST_PP_CAT(in_place_factory,N)
Chris@16 38 :
Chris@16 39 public in_place_factory_base
Chris@16 40 {
Chris@16 41 public:
Chris@16 42
Chris@16 43 explicit BOOST_PP_CAT(in_place_factory,N)
Chris@16 44 ( BOOST_PP_ENUM_BINARY_PARAMS(N,A,const& a) )
Chris@16 45 #if N > 0
Chris@16 46 : BOOST_PP_ENUM(N, BOOST_DEFINE_INPLACE_FACTORY_CLASS_MEMBER_INIT, _)
Chris@16 47 #endif
Chris@16 48 {}
Chris@16 49
Chris@16 50 template<class T>
Chris@101 51 void* apply(void* address) const
Chris@16 52 {
Chris@16 53 return new(address) T( BOOST_PP_ENUM_PARAMS(N, m_a) );
Chris@16 54 }
Chris@16 55
Chris@16 56 template<class T>
Chris@101 57 void* apply(void* address, std::size_t n) const
Chris@16 58 {
Chris@16 59 for(char* next = address = this->BOOST_NESTED_TEMPLATE apply<T>(address);
Chris@16 60 !! --n;)
Chris@16 61 this->BOOST_NESTED_TEMPLATE apply<T>(next = next+sizeof(T));
Chris@16 62 return address;
Chris@16 63 }
Chris@16 64
Chris@16 65 BOOST_PP_REPEAT(N, BOOST_DEFINE_INPLACE_FACTORY_CLASS_MEMBER_DECL, _)
Chris@16 66 };
Chris@16 67
Chris@16 68 #if N > 0
Chris@16 69 template< BOOST_PP_ENUM_PARAMS(N, class A) >
Chris@16 70 inline BOOST_PP_CAT(in_place_factory,N)< BOOST_PP_ENUM_PARAMS(N, A) >
Chris@16 71 in_place( BOOST_PP_ENUM_BINARY_PARAMS(N, A, const& a) )
Chris@16 72 {
Chris@16 73 return BOOST_PP_CAT(in_place_factory,N)< BOOST_PP_ENUM_PARAMS(N, A) >
Chris@16 74 ( BOOST_PP_ENUM_PARAMS(N, a) );
Chris@16 75 }
Chris@16 76 #else
Chris@16 77 inline in_place_factory0 in_place()
Chris@16 78 {
Chris@16 79 return in_place_factory0();
Chris@16 80 }
Chris@16 81 #endif
Chris@16 82
Chris@16 83 #undef N
Chris@16 84 #endif
Chris@16 85 #endif
Chris@16 86