Added boost header
This commit is contained in:
58
test/external/boost/flyweight/detail/default_value_policy.hpp
vendored
Normal file
58
test/external/boost/flyweight/detail/default_value_policy.hpp
vendored
Normal file
@@ -0,0 +1,58 @@
|
||||
/* Copyright 2006-2008 Joaquin M Lopez Munoz.
|
||||
* 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/flyweight for library home page.
|
||||
*/
|
||||
|
||||
#ifndef BOOST_FLYWEIGHT_DETAIL_DEFAULT_VALUE_POLICY_HPP
|
||||
#define BOOST_FLYWEIGHT_DETAIL_DEFAULT_VALUE_POLICY_HPP
|
||||
|
||||
#if defined(_MSC_VER)&&(_MSC_VER>=1200)
|
||||
#pragma once
|
||||
#endif
|
||||
|
||||
#include <boost/flyweight/detail/value_tag.hpp>
|
||||
#include <boost/preprocessor/repetition/enum_params.hpp>
|
||||
|
||||
/* Default value policy: the key is the same as the value.
|
||||
*/
|
||||
|
||||
namespace boost{
|
||||
|
||||
namespace flyweights{
|
||||
|
||||
namespace detail{
|
||||
|
||||
template<typename Value>
|
||||
struct default_value_policy:value_marker
|
||||
{
|
||||
typedef Value key_type;
|
||||
typedef Value value_type;
|
||||
|
||||
struct rep_type
|
||||
{
|
||||
/* template ctors */
|
||||
|
||||
#define BOOST_FLYWEIGHT_PERFECT_FWD_NAME explicit rep_type
|
||||
#define BOOST_FLYWEIGHT_PERFECT_FWD_BODY(n) \
|
||||
:x(BOOST_PP_ENUM_PARAMS(n,t)){}
|
||||
#include <boost/flyweight/detail/perfect_fwd.hpp>
|
||||
|
||||
operator const value_type&()const{return x;}
|
||||
|
||||
value_type x;
|
||||
};
|
||||
|
||||
static void construct_value(const rep_type&){}
|
||||
static void copy_value(const rep_type&){}
|
||||
};
|
||||
|
||||
} /* namespace flyweights::detail */
|
||||
|
||||
} /* namespace flyweights */
|
||||
|
||||
} /* namespace boost */
|
||||
|
||||
#endif
|
||||
75
test/external/boost/flyweight/detail/dyn_perfect_fwd.hpp
vendored
Normal file
75
test/external/boost/flyweight/detail/dyn_perfect_fwd.hpp
vendored
Normal file
@@ -0,0 +1,75 @@
|
||||
/* Copyright 2006-2008 Joaquin M Lopez Munoz.
|
||||
* 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/flyweight for library home page.
|
||||
*/
|
||||
|
||||
/* no include guards */
|
||||
|
||||
#include <boost/preprocessor/arithmetic/add.hpp>
|
||||
#include <boost/preprocessor/cat.hpp>
|
||||
#include <boost/preprocessor/repetition/enum.hpp>
|
||||
#include <boost/preprocessor/repetition/enum_params.hpp>
|
||||
#include <boost/preprocessor/repetition/repeat.hpp>
|
||||
#include <boost/preprocessor/repetition/repeat_from_to.hpp>
|
||||
#include <boost/preprocessor/seq/elem.hpp>
|
||||
#include <boost/preprocessor/seq/for_each_product.hpp>
|
||||
#include <boost/preprocessor/seq/size.hpp>
|
||||
|
||||
#define BOOST_FLYWEIGHT_CONST(b) BOOST_PP_CAT(BOOST_FLYWEIGHT_CONST,b)
|
||||
#define BOOST_FLYWEIGHT_CONST0
|
||||
#define BOOST_FLYWEIGHT_CONST1 const
|
||||
|
||||
/* if mask[n]==0 --> Tn& tn
|
||||
* if mask[n]==1 --> const Tn& tn
|
||||
*/
|
||||
|
||||
#define BOOST_FLYWEIGHT_PERFECT_FWD_ARG(z,n,mask) \
|
||||
BOOST_FLYWEIGHT_CONST(BOOST_PP_SEQ_ELEM(n,mask)) \
|
||||
BOOST_PP_CAT(T,n)& BOOST_PP_CAT(t,n)
|
||||
|
||||
/* overload accepting size(mask) args, where the template args are
|
||||
* marked const or not according to the given mask (a seq of 0 or 1)
|
||||
*/
|
||||
|
||||
#define BOOST_FLYWEIGHT_PERFECT_FWD(r,mask) \
|
||||
template<BOOST_PP_ENUM_PARAMS(BOOST_PP_SEQ_SIZE(mask),typename T)> \
|
||||
BOOST_FLYWEIGHT_PERFECT_FWD_NAME( \
|
||||
BOOST_PP_ENUM( \
|
||||
BOOST_PP_SEQ_SIZE(mask),BOOST_FLYWEIGHT_PERFECT_FWD_ARG,mask)) \
|
||||
BOOST_FLYWEIGHT_PERFECT_FWD_BODY(BOOST_PP_SEQ_SIZE(mask))
|
||||
|
||||
#define BOOST_FLYWEIGHT_01(z,n,_) ((0)(1))
|
||||
|
||||
/* Perfect forwarding overloads accepting 1 to n args */
|
||||
|
||||
#define BOOST_FLYWEIGHT_PERFECT_FWDS_N(z,n,_) \
|
||||
BOOST_PP_SEQ_FOR_EACH_PRODUCT( \
|
||||
BOOST_FLYWEIGHT_PERFECT_FWD, \
|
||||
BOOST_PP_REPEAT(n,BOOST_FLYWEIGHT_01,~))
|
||||
|
||||
#define BOOST_FLYWEIGHT_PERFECT_FWD_OVERLOADS \
|
||||
BOOST_PP_REPEAT_FROM_TO( \
|
||||
1,BOOST_PP_ADD(BOOST_FLYWEIGHT_LIMIT_PERFECT_FWD_ARGS,1), \
|
||||
BOOST_FLYWEIGHT_PERFECT_FWDS_N,~)
|
||||
|
||||
/* generate the overloads */
|
||||
|
||||
BOOST_FLYWEIGHT_PERFECT_FWD_OVERLOADS
|
||||
|
||||
/* clean up */
|
||||
|
||||
#undef BOOST_FLYWEIGHT_PERFECT_FWD_OVERLOADS
|
||||
#undef BOOST_FLYWEIGHT_01
|
||||
#undef BOOST_FLYWEIGHT_PERFECT_FWD
|
||||
#undef BOOST_FLYWEIGHT_PERFECT_FWD_ARG
|
||||
#undef BOOST_FLYWEIGHT_CONST1
|
||||
#undef BOOST_FLYWEIGHT_CONST0
|
||||
#undef BOOST_FLYWEIGHT_CONST
|
||||
|
||||
/* user supplied argument macros */
|
||||
|
||||
#undef BOOST_FLYWEIGHT_PERFECT_FWD_BODY
|
||||
#undef BOOST_FLYWEIGHT_PERFECT_FWD_NAME
|
||||
252
test/external/boost/flyweight/detail/flyweight_core.hpp
vendored
Normal file
252
test/external/boost/flyweight/detail/flyweight_core.hpp
vendored
Normal file
@@ -0,0 +1,252 @@
|
||||
/* Copyright 2006-2009 Joaquin M Lopez Munoz.
|
||||
* 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/flyweight for library home page.
|
||||
*/
|
||||
|
||||
#ifndef BOOST_FLYWEIGHT_DETAIL_FLYWEIGHT_CORE_HPP
|
||||
#define BOOST_FLYWEIGHT_DETAIL_FLYWEIGHT_CORE_HPP
|
||||
|
||||
#if defined(_MSC_VER)&&(_MSC_VER>=1200)
|
||||
#pragma once
|
||||
#endif
|
||||
|
||||
#include <boost/config.hpp> /* keep it first to prevent nasty warns in MSVC */
|
||||
#include <boost/detail/no_exceptions_support.hpp>
|
||||
#include <boost/detail/workaround.hpp>
|
||||
#include <boost/mpl/apply.hpp>
|
||||
#include <boost/preprocessor/repetition/enum_params.hpp>
|
||||
|
||||
#if BOOST_WORKAROUND(BOOST_MSVC,BOOST_TESTED_AT(1400))
|
||||
#pragma warning(push)
|
||||
#pragma warning(disable:4101) /* unreferenced local vars */
|
||||
#endif
|
||||
|
||||
/* flyweight_core provides the inner implementation of flyweight<> by
|
||||
* weaving together a value policy, a flyweight factory, a holder for the
|
||||
* factory,a tracking policy and a locking policy.
|
||||
*/
|
||||
|
||||
namespace boost{
|
||||
|
||||
namespace flyweights{
|
||||
|
||||
namespace detail{
|
||||
|
||||
template<
|
||||
typename ValuePolicy,typename Tag,typename TrackingPolicy,
|
||||
typename FactorySpecifier,typename LockingPolicy,typename HolderSpecifier
|
||||
>
|
||||
class flyweight_core;
|
||||
|
||||
template<
|
||||
typename ValuePolicy,typename Tag,typename TrackingPolicy,
|
||||
typename FactorySpecifier,typename LockingPolicy,typename HolderSpecifier
|
||||
>
|
||||
struct flyweight_core_tracking_helper
|
||||
{
|
||||
private:
|
||||
typedef flyweight_core<
|
||||
ValuePolicy,Tag,TrackingPolicy,
|
||||
FactorySpecifier,LockingPolicy,
|
||||
HolderSpecifier
|
||||
> core;
|
||||
typedef typename core::handle_type handle_type;
|
||||
typedef typename core::entry_type entry_type;
|
||||
|
||||
public:
|
||||
static const entry_type& entry(const handle_type& h)
|
||||
{
|
||||
return core::entry(h);
|
||||
}
|
||||
|
||||
template<typename Checker>
|
||||
static void erase(const handle_type& h,Checker check)
|
||||
{
|
||||
typedef typename core::lock_type lock_type;
|
||||
lock_type lock(core::mutex());
|
||||
if(check(h))core::factory().erase(h);
|
||||
}
|
||||
};
|
||||
|
||||
template<
|
||||
typename ValuePolicy,typename Tag,typename TrackingPolicy,
|
||||
typename FactorySpecifier,typename LockingPolicy,typename HolderSpecifier
|
||||
>
|
||||
class flyweight_core
|
||||
{
|
||||
public:
|
||||
typedef typename ValuePolicy::key_type key_type;
|
||||
typedef typename ValuePolicy::value_type value_type;
|
||||
typedef typename ValuePolicy::rep_type rep_type;
|
||||
typedef typename mpl::apply2<
|
||||
typename TrackingPolicy::entry_type,
|
||||
rep_type,
|
||||
key_type
|
||||
>::type entry_type;
|
||||
typedef typename mpl::apply2<
|
||||
FactorySpecifier,
|
||||
entry_type,
|
||||
key_type
|
||||
>::type factory_type;
|
||||
typedef typename factory_type::handle_type base_handle_type;
|
||||
typedef typename mpl::apply2<
|
||||
typename TrackingPolicy::handle_type,
|
||||
base_handle_type,
|
||||
flyweight_core_tracking_helper<
|
||||
ValuePolicy,Tag,TrackingPolicy,
|
||||
FactorySpecifier,LockingPolicy,
|
||||
HolderSpecifier
|
||||
>
|
||||
>::type handle_type;
|
||||
typedef typename LockingPolicy::mutex_type mutex_type;
|
||||
typedef typename LockingPolicy::lock_type lock_type;
|
||||
|
||||
static bool init()
|
||||
{
|
||||
if(static_initializer)return true;
|
||||
else{
|
||||
holder_arg& a=holder_type::get();
|
||||
static_factory_ptr=&a.factory;
|
||||
static_mutex_ptr=&a.mutex;
|
||||
static_initializer=(static_factory_ptr!=0);
|
||||
return static_initializer;
|
||||
}
|
||||
}
|
||||
|
||||
/* insert overloads*/
|
||||
|
||||
#define BOOST_FLYWEIGHT_PERFECT_FWD_NAME static handle_type insert
|
||||
#define BOOST_FLYWEIGHT_PERFECT_FWD_BODY(n) \
|
||||
{ \
|
||||
return insert_rep(rep_type(BOOST_PP_ENUM_PARAMS(n,t))); \
|
||||
}
|
||||
#include <boost/flyweight/detail/perfect_fwd.hpp>
|
||||
|
||||
static handle_type insert(const value_type& x){return insert_value(x);}
|
||||
static handle_type insert(value_type& x){return insert_value(x);}
|
||||
|
||||
static const entry_type& entry(const base_handle_type& h)
|
||||
{
|
||||
return factory().entry(h);
|
||||
}
|
||||
|
||||
static const value_type& value(const handle_type& h)
|
||||
{
|
||||
return static_cast<const rep_type&>(entry(h));
|
||||
}
|
||||
|
||||
static const key_type& key(const handle_type& h)
|
||||
{
|
||||
return static_cast<const rep_type&>(entry(h));
|
||||
}
|
||||
|
||||
static factory_type& factory()
|
||||
{
|
||||
return *static_factory_ptr;
|
||||
}
|
||||
|
||||
static mutex_type& mutex()
|
||||
{
|
||||
return *static_mutex_ptr;
|
||||
}
|
||||
|
||||
private:
|
||||
struct holder_arg
|
||||
{
|
||||
factory_type factory;
|
||||
mutex_type mutex;
|
||||
};
|
||||
typedef typename mpl::apply1<
|
||||
HolderSpecifier,
|
||||
holder_arg
|
||||
>::type holder_type;
|
||||
|
||||
static handle_type insert_rep(const rep_type& x)
|
||||
{
|
||||
init();
|
||||
entry_type e(x);
|
||||
lock_type lock(mutex());
|
||||
base_handle_type h(factory().insert(e));
|
||||
BOOST_TRY{
|
||||
ValuePolicy::construct_value(
|
||||
static_cast<const rep_type&>(entry(h)));
|
||||
}
|
||||
BOOST_CATCH(...){
|
||||
factory().erase(h);
|
||||
BOOST_RETHROW;
|
||||
}
|
||||
BOOST_CATCH_END
|
||||
return static_cast<handle_type>(h);
|
||||
}
|
||||
|
||||
static handle_type insert_value(const value_type& x)
|
||||
{
|
||||
init();
|
||||
entry_type e((rep_type(x)));
|
||||
lock_type lock(mutex());
|
||||
base_handle_type h(factory().insert(e));
|
||||
BOOST_TRY{
|
||||
ValuePolicy::copy_value(
|
||||
static_cast<const rep_type&>(entry(h)));
|
||||
}
|
||||
BOOST_CATCH(...){
|
||||
factory().erase(h);
|
||||
BOOST_RETHROW;
|
||||
}
|
||||
BOOST_CATCH_END
|
||||
return static_cast<handle_type>(h);
|
||||
}
|
||||
|
||||
static bool static_initializer;
|
||||
static factory_type* static_factory_ptr;
|
||||
static mutex_type* static_mutex_ptr;
|
||||
};
|
||||
|
||||
template<
|
||||
typename ValuePolicy,typename Tag,typename TrackingPolicy,
|
||||
typename FactorySpecifier,typename LockingPolicy,typename HolderSpecifier
|
||||
>
|
||||
bool
|
||||
flyweight_core<
|
||||
ValuePolicy,Tag,TrackingPolicy,
|
||||
FactorySpecifier,LockingPolicy,HolderSpecifier>::static_initializer=
|
||||
flyweight_core<
|
||||
ValuePolicy,Tag,TrackingPolicy,
|
||||
FactorySpecifier,LockingPolicy,HolderSpecifier>::init();
|
||||
|
||||
template<
|
||||
typename ValuePolicy,typename Tag,typename TrackingPolicy,
|
||||
typename FactorySpecifier,typename LockingPolicy,typename HolderSpecifier
|
||||
>
|
||||
typename flyweight_core<
|
||||
ValuePolicy,Tag,TrackingPolicy,
|
||||
FactorySpecifier,LockingPolicy,HolderSpecifier>::factory_type*
|
||||
flyweight_core<
|
||||
ValuePolicy,Tag,TrackingPolicy,
|
||||
FactorySpecifier,LockingPolicy,HolderSpecifier>::static_factory_ptr=0;
|
||||
|
||||
template<
|
||||
typename ValuePolicy,typename Tag,typename TrackingPolicy,
|
||||
typename FactorySpecifier,typename LockingPolicy,typename HolderSpecifier
|
||||
>
|
||||
typename flyweight_core<
|
||||
ValuePolicy,Tag,TrackingPolicy,
|
||||
FactorySpecifier,LockingPolicy,HolderSpecifier>::mutex_type*
|
||||
flyweight_core<
|
||||
ValuePolicy,Tag,TrackingPolicy,
|
||||
FactorySpecifier,LockingPolicy,HolderSpecifier>::static_mutex_ptr=0;
|
||||
|
||||
} /* namespace flyweights::detail */
|
||||
|
||||
} /* namespace flyweights */
|
||||
|
||||
} /* namespace boost */
|
||||
|
||||
#if BOOST_WORKAROUND(BOOST_MSVC,BOOST_TESTED_AT(1400))
|
||||
#pragma warning(pop)
|
||||
#endif
|
||||
|
||||
#endif
|
||||
65
test/external/boost/flyweight/detail/is_placeholder_expr.hpp
vendored
Normal file
65
test/external/boost/flyweight/detail/is_placeholder_expr.hpp
vendored
Normal file
@@ -0,0 +1,65 @@
|
||||
/* Copyright 2006-2009 Joaquin M Lopez Munoz.
|
||||
* 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/flyweight for library home page.
|
||||
*/
|
||||
|
||||
#ifndef BOOST_FLYWEIGHT_DETAIL_IS_PLACEHOLDER_EXPR_HPP
|
||||
#define BOOST_FLYWEIGHT_DETAIL_IS_PLACEHOLDER_EXPR_HPP
|
||||
|
||||
#if defined(_MSC_VER)&&(_MSC_VER>=1200)
|
||||
#pragma once
|
||||
#endif
|
||||
|
||||
#include <boost/type_traits/is_same.hpp>
|
||||
#include <boost/mpl/apply.hpp>
|
||||
#include <boost/mpl/aux_/lambda_support.hpp>
|
||||
#include <boost/mpl/not.hpp>
|
||||
#include <boost/preprocessor/facilities/intercept.hpp>
|
||||
#include <boost/preprocessor/repetition/enum_params.hpp>
|
||||
|
||||
namespace boost{
|
||||
|
||||
namespace flyweights{
|
||||
|
||||
namespace detail{
|
||||
|
||||
/* is_placeholder_expression<T> indicates whether T is an
|
||||
* MPL placeholder expression.
|
||||
*/
|
||||
|
||||
template<typename T>
|
||||
struct is_placeholder_expression_helper
|
||||
{
|
||||
template<
|
||||
BOOST_PP_ENUM_PARAMS(
|
||||
BOOST_MPL_LIMIT_METAFUNCTION_ARITY,typename BOOST_PP_INTERCEPT)
|
||||
>
|
||||
struct apply{
|
||||
typedef int type;
|
||||
};
|
||||
|
||||
BOOST_MPL_AUX_LAMBDA_SUPPORT(1,is_placeholder_expression_helper,(T))
|
||||
};
|
||||
|
||||
template<typename T>
|
||||
struct is_placeholder_expression:
|
||||
mpl::not_<is_same<
|
||||
typename mpl::apply<
|
||||
is_placeholder_expression_helper<T>,
|
||||
BOOST_PP_ENUM_PARAMS(
|
||||
BOOST_MPL_LIMIT_METAFUNCTION_ARITY,int BOOST_PP_INTERCEPT)
|
||||
>::type,
|
||||
int
|
||||
> >
|
||||
{};
|
||||
|
||||
} /* namespace flyweights::detail */
|
||||
|
||||
} /* namespace flyweights */
|
||||
|
||||
} /* namespace boost */
|
||||
|
||||
#endif
|
||||
39
test/external/boost/flyweight/detail/nested_xxx_if_not_ph.hpp
vendored
Normal file
39
test/external/boost/flyweight/detail/nested_xxx_if_not_ph.hpp
vendored
Normal file
@@ -0,0 +1,39 @@
|
||||
/* Copyright 2006-2009 Joaquin M Lopez Munoz.
|
||||
* 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/flyweight for library home page.
|
||||
*/
|
||||
|
||||
#ifndef BOOST_FLYWEIGHT_DETAIL_NESTED_XXX_IF_NOT_PH_HPP
|
||||
#define BOOST_FLYWEIGHT_DETAIL_NESTED_XXX_IF_NOT_PH_HPP
|
||||
|
||||
#if defined(_MSC_VER)&&(_MSC_VER>=1200)
|
||||
#pragma once
|
||||
#endif
|
||||
|
||||
#include <boost/flyweight/detail/is_placeholder_expr.hpp>
|
||||
#include <boost/mpl/if.hpp>
|
||||
|
||||
/* nested_##name##_if_not_placeholder_expression<T>::type is T::name unless
|
||||
* T is an MPL placeholder expression, in which case it defaults to int.
|
||||
*/
|
||||
|
||||
#define BOOST_FLYWEIGHT_NESTED_XXX_IF_NOT_PLACEHOLDER_EXPRESSION_DEF(name) \
|
||||
struct nested_##name##_if_not_placeholder_expression_helper \
|
||||
{ \
|
||||
typedef int name; \
|
||||
}; \
|
||||
\
|
||||
template<typename T> \
|
||||
struct nested_##name##_if_not_placeholder_expression \
|
||||
{ \
|
||||
typedef typename boost::mpl::if_< \
|
||||
boost::flyweights::detail::is_placeholder_expression<T>, \
|
||||
nested_##name##_if_not_placeholder_expression_helper, \
|
||||
T \
|
||||
>::type::name type; \
|
||||
};
|
||||
|
||||
#endif
|
||||
58
test/external/boost/flyweight/detail/not_placeholder_expr.hpp
vendored
Normal file
58
test/external/boost/flyweight/detail/not_placeholder_expr.hpp
vendored
Normal file
@@ -0,0 +1,58 @@
|
||||
/* Copyright 2006-2008 Joaquin M Lopez Munoz.
|
||||
* 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/flyweight for library home page.
|
||||
*/
|
||||
|
||||
#ifndef BOOST_FLYWEIGHT_DETAIL_NOT_PLACEHOLDER_EXPR_HPP
|
||||
#define BOOST_FLYWEIGHT_DETAIL_NOT_PLACEHOLDER_EXPR_HPP
|
||||
|
||||
#if defined(_MSC_VER)&&(_MSC_VER>=1200)
|
||||
#pragma once
|
||||
#endif
|
||||
|
||||
/* BOOST_FLYWEIGHT_NOT_A_PLACEHOLDER_EXPRESSION can be inserted at the end
|
||||
* of a class template parameter declaration:
|
||||
* template<
|
||||
* typename X0,...,typename Xn
|
||||
* BOOST_FLYWEIGHT_NOT_A_PLACEHOLDER_EXPRESSION
|
||||
* >
|
||||
* struct foo...
|
||||
* to prevent instantiations from being treated as MPL placeholder
|
||||
* expressions in the presence of placeholder arguments; this is useful
|
||||
* to avoid masking of a metafunction class nested ::apply during
|
||||
* MPL invocation.
|
||||
*/
|
||||
|
||||
#include <boost/config.hpp> /* keep it first to prevent nasty warns in MSVC */
|
||||
#include <boost/detail/workaround.hpp>
|
||||
|
||||
#if BOOST_WORKAROUND(__GNUC__, <4)||\
|
||||
BOOST_WORKAROUND(__GNUC__,==4)&&(__GNUC_MINOR__<2)
|
||||
/* The default trick on which the macro is based, namely adding a int=0
|
||||
* defaulted template parameter, does not work in GCC prior to 4.2 due to
|
||||
* an unfortunate compiler non-standard extension, as explained in
|
||||
* http://lists.boost.org/boost-users/2007/07/29866.php
|
||||
* We resort to an uglier technique, adding defaulted template parameters
|
||||
* so as to exceed BOOST_MPL_LIMIT_METAFUNCTION_ARITY.
|
||||
*/
|
||||
|
||||
#include <boost/mpl/limits/arity.hpp>
|
||||
#include <boost/preprocessor/facilities/intercept.hpp>
|
||||
#include <boost/preprocessor/repetition/enum_trailing_params.hpp>
|
||||
|
||||
#define BOOST_FLYWEIGHT_NOT_A_PLACEHOLDER_EXPRESSION \
|
||||
BOOST_PP_ENUM_TRAILING_PARAMS( \
|
||||
BOOST_MPL_LIMIT_METAFUNCTION_ARITY,typename=int BOOST_PP_INTERCEPT)
|
||||
#define BOOST_FLYWEIGHT_NOT_A_PLACEHOLDER_EXPRESSION_DEF \
|
||||
BOOST_PP_ENUM_TRAILING_PARAMS( \
|
||||
BOOST_MPL_LIMIT_METAFUNCTION_ARITY,typename BOOST_PP_INTERCEPT)
|
||||
|
||||
#else
|
||||
#define BOOST_FLYWEIGHT_NOT_A_PLACEHOLDER_EXPRESSION ,int=0
|
||||
#define BOOST_FLYWEIGHT_NOT_A_PLACEHOLDER_EXPRESSION_DEF ,int
|
||||
#endif
|
||||
|
||||
#endif
|
||||
28
test/external/boost/flyweight/detail/perfect_fwd.hpp
vendored
Normal file
28
test/external/boost/flyweight/detail/perfect_fwd.hpp
vendored
Normal file
@@ -0,0 +1,28 @@
|
||||
/* Copyright 2006-2008 Joaquin M Lopez Munoz.
|
||||
* 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/flyweight for library home page.
|
||||
*/
|
||||
|
||||
/* Brute force implementation of perfect forwarding overloads.
|
||||
* Usage: include after having defined the argument macros:
|
||||
* BOOST_FLYWEIGHT_PERFECT_FWD_NAME
|
||||
* BOOST_FLYWEIGHT_PERFECT_FWD_BODY
|
||||
*/
|
||||
|
||||
/* This user_definable macro limits the maximum number of arguments to
|
||||
* be perfect forwarded. Beware combinatorial explosion: manual perfect
|
||||
* forwarding for n arguments produces 2^n distinct overloads.
|
||||
*/
|
||||
|
||||
#if !defined(BOOST_FLYWEIGHT_LIMIT_PERFECT_FWD_ARGS)
|
||||
#define BOOST_FLYWEIGHT_LIMIT_PERFECT_FWD_ARGS 5
|
||||
#endif
|
||||
|
||||
#if BOOST_FLYWEIGHT_LIMIT_PERFECT_FWD_ARGS<=5
|
||||
#include <boost/flyweight/detail/pp_perfect_fwd.hpp>
|
||||
#else
|
||||
#include <boost/flyweight/detail/dyn_perfect_fwd.hpp>
|
||||
#endif
|
||||
153
test/external/boost/flyweight/detail/pp_perfect_fwd.hpp
vendored
Normal file
153
test/external/boost/flyweight/detail/pp_perfect_fwd.hpp
vendored
Normal file
@@ -0,0 +1,153 @@
|
||||
/* Copyright 2006-2008 Joaquin M Lopez Munoz.
|
||||
* 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/flyweight for library home page.
|
||||
*/
|
||||
|
||||
/* no include guards */
|
||||
|
||||
#if BOOST_FLYWEIGHT_LIMIT_PERFECT_FWD_ARGS>=1
|
||||
#define BOOST_FLYWEIGHT_PERFECT_FWDS_1 \
|
||||
template<typename T0> BOOST_FLYWEIGHT_PERFECT_FWD_NAME(T0& t0)BOOST_FLYWEIGHT_PERFECT_FWD_BODY(1)\
|
||||
template<typename T0> BOOST_FLYWEIGHT_PERFECT_FWD_NAME(const T0& t0)BOOST_FLYWEIGHT_PERFECT_FWD_BODY(1)
|
||||
#endif
|
||||
|
||||
#if BOOST_FLYWEIGHT_LIMIT_PERFECT_FWD_ARGS>=2
|
||||
#define BOOST_FLYWEIGHT_PERFECT_FWDS_2 \
|
||||
template<typename T0,typename T1> BOOST_FLYWEIGHT_PERFECT_FWD_NAME(T0& t0,T1& t1)BOOST_FLYWEIGHT_PERFECT_FWD_BODY(2)\
|
||||
template<typename T0,typename T1> BOOST_FLYWEIGHT_PERFECT_FWD_NAME(T0& t0,const T1& t1)BOOST_FLYWEIGHT_PERFECT_FWD_BODY(2)\
|
||||
template<typename T0,typename T1> BOOST_FLYWEIGHT_PERFECT_FWD_NAME(const T0& t0,T1& t1)BOOST_FLYWEIGHT_PERFECT_FWD_BODY(2)\
|
||||
template<typename T0,typename T1> BOOST_FLYWEIGHT_PERFECT_FWD_NAME(const T0& t0,const T1& t1)BOOST_FLYWEIGHT_PERFECT_FWD_BODY(2)
|
||||
#endif
|
||||
|
||||
#if BOOST_FLYWEIGHT_LIMIT_PERFECT_FWD_ARGS>=3
|
||||
#define BOOST_FLYWEIGHT_PERFECT_FWDS_3 \
|
||||
template<typename T0,typename T1,typename T2> BOOST_FLYWEIGHT_PERFECT_FWD_NAME(T0& t0,T1& t1,T2& t2)BOOST_FLYWEIGHT_PERFECT_FWD_BODY(3)\
|
||||
template<typename T0,typename T1,typename T2> BOOST_FLYWEIGHT_PERFECT_FWD_NAME(T0& t0,T1& t1,const T2& t2)BOOST_FLYWEIGHT_PERFECT_FWD_BODY(3)\
|
||||
template<typename T0,typename T1,typename T2> BOOST_FLYWEIGHT_PERFECT_FWD_NAME(T0& t0,const T1& t1,T2& t2)BOOST_FLYWEIGHT_PERFECT_FWD_BODY(3)\
|
||||
template<typename T0,typename T1,typename T2> BOOST_FLYWEIGHT_PERFECT_FWD_NAME(T0& t0,const T1& t1,const T2& t2)BOOST_FLYWEIGHT_PERFECT_FWD_BODY(3)\
|
||||
template<typename T0,typename T1,typename T2> BOOST_FLYWEIGHT_PERFECT_FWD_NAME(const T0& t0,T1& t1,T2& t2)BOOST_FLYWEIGHT_PERFECT_FWD_BODY(3)\
|
||||
template<typename T0,typename T1,typename T2> BOOST_FLYWEIGHT_PERFECT_FWD_NAME(const T0& t0,T1& t1,const T2& t2)BOOST_FLYWEIGHT_PERFECT_FWD_BODY(3)\
|
||||
template<typename T0,typename T1,typename T2> BOOST_FLYWEIGHT_PERFECT_FWD_NAME(const T0& t0,const T1& t1,T2& t2)BOOST_FLYWEIGHT_PERFECT_FWD_BODY(3)\
|
||||
template<typename T0,typename T1,typename T2> BOOST_FLYWEIGHT_PERFECT_FWD_NAME(const T0& t0,const T1& t1,const T2& t2)BOOST_FLYWEIGHT_PERFECT_FWD_BODY(3)
|
||||
#endif
|
||||
|
||||
#if BOOST_FLYWEIGHT_LIMIT_PERFECT_FWD_ARGS>=4
|
||||
#define BOOST_FLYWEIGHT_PERFECT_FWDS_4 \
|
||||
template<typename T0,typename T1,typename T2,typename T3> BOOST_FLYWEIGHT_PERFECT_FWD_NAME(T0& t0,T1& t1,T2& t2,T3& t3)BOOST_FLYWEIGHT_PERFECT_FWD_BODY(4)\
|
||||
template<typename T0,typename T1,typename T2,typename T3> BOOST_FLYWEIGHT_PERFECT_FWD_NAME(T0& t0,T1& t1,T2& t2,const T3& t3)BOOST_FLYWEIGHT_PERFECT_FWD_BODY(4)\
|
||||
template<typename T0,typename T1,typename T2,typename T3> BOOST_FLYWEIGHT_PERFECT_FWD_NAME(T0& t0,T1& t1,const T2& t2,T3& t3)BOOST_FLYWEIGHT_PERFECT_FWD_BODY(4)\
|
||||
template<typename T0,typename T1,typename T2,typename T3> BOOST_FLYWEIGHT_PERFECT_FWD_NAME(T0& t0,T1& t1,const T2& t2,const T3& t3)BOOST_FLYWEIGHT_PERFECT_FWD_BODY(4)\
|
||||
template<typename T0,typename T1,typename T2,typename T3> BOOST_FLYWEIGHT_PERFECT_FWD_NAME(T0& t0,const T1& t1,T2& t2,T3& t3)BOOST_FLYWEIGHT_PERFECT_FWD_BODY(4)\
|
||||
template<typename T0,typename T1,typename T2,typename T3> BOOST_FLYWEIGHT_PERFECT_FWD_NAME(T0& t0,const T1& t1,T2& t2,const T3& t3)BOOST_FLYWEIGHT_PERFECT_FWD_BODY(4)\
|
||||
template<typename T0,typename T1,typename T2,typename T3> BOOST_FLYWEIGHT_PERFECT_FWD_NAME(T0& t0,const T1& t1,const T2& t2,T3& t3)BOOST_FLYWEIGHT_PERFECT_FWD_BODY(4)\
|
||||
template<typename T0,typename T1,typename T2,typename T3> BOOST_FLYWEIGHT_PERFECT_FWD_NAME(T0& t0,const T1& t1,const T2& t2,const T3& t3)BOOST_FLYWEIGHT_PERFECT_FWD_BODY(4)\
|
||||
template<typename T0,typename T1,typename T2,typename T3> BOOST_FLYWEIGHT_PERFECT_FWD_NAME(const T0& t0,T1& t1,T2& t2,T3& t3)BOOST_FLYWEIGHT_PERFECT_FWD_BODY(4)\
|
||||
template<typename T0,typename T1,typename T2,typename T3> BOOST_FLYWEIGHT_PERFECT_FWD_NAME(const T0& t0,T1& t1,T2& t2,const T3& t3)BOOST_FLYWEIGHT_PERFECT_FWD_BODY(4)\
|
||||
template<typename T0,typename T1,typename T2,typename T3> BOOST_FLYWEIGHT_PERFECT_FWD_NAME(const T0& t0,T1& t1,const T2& t2,T3& t3)BOOST_FLYWEIGHT_PERFECT_FWD_BODY(4)\
|
||||
template<typename T0,typename T1,typename T2,typename T3> BOOST_FLYWEIGHT_PERFECT_FWD_NAME(const T0& t0,T1& t1,const T2& t2,const T3& t3)BOOST_FLYWEIGHT_PERFECT_FWD_BODY(4)\
|
||||
template<typename T0,typename T1,typename T2,typename T3> BOOST_FLYWEIGHT_PERFECT_FWD_NAME(const T0& t0,const T1& t1,T2& t2,T3& t3)BOOST_FLYWEIGHT_PERFECT_FWD_BODY(4)\
|
||||
template<typename T0,typename T1,typename T2,typename T3> BOOST_FLYWEIGHT_PERFECT_FWD_NAME(const T0& t0,const T1& t1,T2& t2,const T3& t3)BOOST_FLYWEIGHT_PERFECT_FWD_BODY(4)\
|
||||
template<typename T0,typename T1,typename T2,typename T3> BOOST_FLYWEIGHT_PERFECT_FWD_NAME(const T0& t0,const T1& t1,const T2& t2,T3& t3)BOOST_FLYWEIGHT_PERFECT_FWD_BODY(4)\
|
||||
template<typename T0,typename T1,typename T2,typename T3> BOOST_FLYWEIGHT_PERFECT_FWD_NAME(const T0& t0,const T1& t1,const T2& t2,const T3& t3)BOOST_FLYWEIGHT_PERFECT_FWD_BODY(4)
|
||||
#endif
|
||||
|
||||
#if BOOST_FLYWEIGHT_LIMIT_PERFECT_FWD_ARGS>=5
|
||||
#define BOOST_FLYWEIGHT_PERFECT_FWDS_5 \
|
||||
template<typename T0,typename T1,typename T2,typename T3,typename T4> BOOST_FLYWEIGHT_PERFECT_FWD_NAME(T0& t0,T1& t1,T2& t2,T3& t3,T4& t4)BOOST_FLYWEIGHT_PERFECT_FWD_BODY(5)\
|
||||
template<typename T0,typename T1,typename T2,typename T3,typename T4> BOOST_FLYWEIGHT_PERFECT_FWD_NAME(T0& t0,T1& t1,T2& t2,T3& t3,const T4& t4)BOOST_FLYWEIGHT_PERFECT_FWD_BODY(5)\
|
||||
template<typename T0,typename T1,typename T2,typename T3,typename T4> BOOST_FLYWEIGHT_PERFECT_FWD_NAME(T0& t0,T1& t1,T2& t2,const T3& t3,T4& t4)BOOST_FLYWEIGHT_PERFECT_FWD_BODY(5)\
|
||||
template<typename T0,typename T1,typename T2,typename T3,typename T4> BOOST_FLYWEIGHT_PERFECT_FWD_NAME(T0& t0,T1& t1,T2& t2,const T3& t3,const T4& t4)BOOST_FLYWEIGHT_PERFECT_FWD_BODY(5)\
|
||||
template<typename T0,typename T1,typename T2,typename T3,typename T4> BOOST_FLYWEIGHT_PERFECT_FWD_NAME(T0& t0,T1& t1,const T2& t2,T3& t3,T4& t4)BOOST_FLYWEIGHT_PERFECT_FWD_BODY(5)\
|
||||
template<typename T0,typename T1,typename T2,typename T3,typename T4> BOOST_FLYWEIGHT_PERFECT_FWD_NAME(T0& t0,T1& t1,const T2& t2,T3& t3,const T4& t4)BOOST_FLYWEIGHT_PERFECT_FWD_BODY(5)\
|
||||
template<typename T0,typename T1,typename T2,typename T3,typename T4> BOOST_FLYWEIGHT_PERFECT_FWD_NAME(T0& t0,T1& t1,const T2& t2,const T3& t3,T4& t4)BOOST_FLYWEIGHT_PERFECT_FWD_BODY(5)\
|
||||
template<typename T0,typename T1,typename T2,typename T3,typename T4> BOOST_FLYWEIGHT_PERFECT_FWD_NAME(T0& t0,T1& t1,const T2& t2,const T3& t3,const T4& t4)BOOST_FLYWEIGHT_PERFECT_FWD_BODY(5)\
|
||||
template<typename T0,typename T1,typename T2,typename T3,typename T4> BOOST_FLYWEIGHT_PERFECT_FWD_NAME(T0& t0,const T1& t1,T2& t2,T3& t3,T4& t4)BOOST_FLYWEIGHT_PERFECT_FWD_BODY(5)\
|
||||
template<typename T0,typename T1,typename T2,typename T3,typename T4> BOOST_FLYWEIGHT_PERFECT_FWD_NAME(T0& t0,const T1& t1,T2& t2,T3& t3,const T4& t4)BOOST_FLYWEIGHT_PERFECT_FWD_BODY(5)\
|
||||
template<typename T0,typename T1,typename T2,typename T3,typename T4> BOOST_FLYWEIGHT_PERFECT_FWD_NAME(T0& t0,const T1& t1,T2& t2,const T3& t3,T4& t4)BOOST_FLYWEIGHT_PERFECT_FWD_BODY(5)\
|
||||
template<typename T0,typename T1,typename T2,typename T3,typename T4> BOOST_FLYWEIGHT_PERFECT_FWD_NAME(T0& t0,const T1& t1,T2& t2,const T3& t3,const T4& t4)BOOST_FLYWEIGHT_PERFECT_FWD_BODY(5)\
|
||||
template<typename T0,typename T1,typename T2,typename T3,typename T4> BOOST_FLYWEIGHT_PERFECT_FWD_NAME(T0& t0,const T1& t1,const T2& t2,T3& t3,T4& t4)BOOST_FLYWEIGHT_PERFECT_FWD_BODY(5)\
|
||||
template<typename T0,typename T1,typename T2,typename T3,typename T4> BOOST_FLYWEIGHT_PERFECT_FWD_NAME(T0& t0,const T1& t1,const T2& t2,T3& t3,const T4& t4)BOOST_FLYWEIGHT_PERFECT_FWD_BODY(5)\
|
||||
template<typename T0,typename T1,typename T2,typename T3,typename T4> BOOST_FLYWEIGHT_PERFECT_FWD_NAME(T0& t0,const T1& t1,const T2& t2,const T3& t3,T4& t4)BOOST_FLYWEIGHT_PERFECT_FWD_BODY(5)\
|
||||
template<typename T0,typename T1,typename T2,typename T3,typename T4> BOOST_FLYWEIGHT_PERFECT_FWD_NAME(T0& t0,const T1& t1,const T2& t2,const T3& t3,const T4& t4)BOOST_FLYWEIGHT_PERFECT_FWD_BODY(5)\
|
||||
template<typename T0,typename T1,typename T2,typename T3,typename T4> BOOST_FLYWEIGHT_PERFECT_FWD_NAME(const T0& t0,T1& t1,T2& t2,T3& t3,T4& t4)BOOST_FLYWEIGHT_PERFECT_FWD_BODY(5)\
|
||||
template<typename T0,typename T1,typename T2,typename T3,typename T4> BOOST_FLYWEIGHT_PERFECT_FWD_NAME(const T0& t0,T1& t1,T2& t2,T3& t3,const T4& t4)BOOST_FLYWEIGHT_PERFECT_FWD_BODY(5)\
|
||||
template<typename T0,typename T1,typename T2,typename T3,typename T4> BOOST_FLYWEIGHT_PERFECT_FWD_NAME(const T0& t0,T1& t1,T2& t2,const T3& t3,T4& t4)BOOST_FLYWEIGHT_PERFECT_FWD_BODY(5)\
|
||||
template<typename T0,typename T1,typename T2,typename T3,typename T4> BOOST_FLYWEIGHT_PERFECT_FWD_NAME(const T0& t0,T1& t1,T2& t2,const T3& t3,const T4& t4)BOOST_FLYWEIGHT_PERFECT_FWD_BODY(5)\
|
||||
template<typename T0,typename T1,typename T2,typename T3,typename T4> BOOST_FLYWEIGHT_PERFECT_FWD_NAME(const T0& t0,T1& t1,const T2& t2,T3& t3,T4& t4)BOOST_FLYWEIGHT_PERFECT_FWD_BODY(5)\
|
||||
template<typename T0,typename T1,typename T2,typename T3,typename T4> BOOST_FLYWEIGHT_PERFECT_FWD_NAME(const T0& t0,T1& t1,const T2& t2,T3& t3,const T4& t4)BOOST_FLYWEIGHT_PERFECT_FWD_BODY(5)\
|
||||
template<typename T0,typename T1,typename T2,typename T3,typename T4> BOOST_FLYWEIGHT_PERFECT_FWD_NAME(const T0& t0,T1& t1,const T2& t2,const T3& t3,T4& t4)BOOST_FLYWEIGHT_PERFECT_FWD_BODY(5)\
|
||||
template<typename T0,typename T1,typename T2,typename T3,typename T4> BOOST_FLYWEIGHT_PERFECT_FWD_NAME(const T0& t0,T1& t1,const T2& t2,const T3& t3,const T4& t4)BOOST_FLYWEIGHT_PERFECT_FWD_BODY(5)\
|
||||
template<typename T0,typename T1,typename T2,typename T3,typename T4> BOOST_FLYWEIGHT_PERFECT_FWD_NAME(const T0& t0,const T1& t1,T2& t2,T3& t3,T4& t4)BOOST_FLYWEIGHT_PERFECT_FWD_BODY(5)\
|
||||
template<typename T0,typename T1,typename T2,typename T3,typename T4> BOOST_FLYWEIGHT_PERFECT_FWD_NAME(const T0& t0,const T1& t1,T2& t2,T3& t3,const T4& t4)BOOST_FLYWEIGHT_PERFECT_FWD_BODY(5)\
|
||||
template<typename T0,typename T1,typename T2,typename T3,typename T4> BOOST_FLYWEIGHT_PERFECT_FWD_NAME(const T0& t0,const T1& t1,T2& t2,const T3& t3,T4& t4)BOOST_FLYWEIGHT_PERFECT_FWD_BODY(5)\
|
||||
template<typename T0,typename T1,typename T2,typename T3,typename T4> BOOST_FLYWEIGHT_PERFECT_FWD_NAME(const T0& t0,const T1& t1,T2& t2,const T3& t3,const T4& t4)BOOST_FLYWEIGHT_PERFECT_FWD_BODY(5)\
|
||||
template<typename T0,typename T1,typename T2,typename T3,typename T4> BOOST_FLYWEIGHT_PERFECT_FWD_NAME(const T0& t0,const T1& t1,const T2& t2,T3& t3,T4& t4)BOOST_FLYWEIGHT_PERFECT_FWD_BODY(5)\
|
||||
template<typename T0,typename T1,typename T2,typename T3,typename T4> BOOST_FLYWEIGHT_PERFECT_FWD_NAME(const T0& t0,const T1& t1,const T2& t2,T3& t3,const T4& t4)BOOST_FLYWEIGHT_PERFECT_FWD_BODY(5)\
|
||||
template<typename T0,typename T1,typename T2,typename T3,typename T4> BOOST_FLYWEIGHT_PERFECT_FWD_NAME(const T0& t0,const T1& t1,const T2& t2,const T3& t3,T4& t4)BOOST_FLYWEIGHT_PERFECT_FWD_BODY(5)\
|
||||
template<typename T0,typename T1,typename T2,typename T3,typename T4> BOOST_FLYWEIGHT_PERFECT_FWD_NAME(const T0& t0,const T1& t1,const T2& t2,const T3& t3,const T4& t4)BOOST_FLYWEIGHT_PERFECT_FWD_BODY(5)
|
||||
#endif
|
||||
|
||||
#if BOOST_FLYWEIGHT_LIMIT_PERFECT_FWD_ARGS==0
|
||||
#define BOOST_FLYWEIGHT_PERFECT_FWD_OVERLOADS
|
||||
#elif BOOST_FLYWEIGHT_LIMIT_PERFECT_FWD_ARGS==1
|
||||
#define BOOST_FLYWEIGHT_PERFECT_FWD_OVERLOADS \
|
||||
BOOST_FLYWEIGHT_PERFECT_FWDS_1
|
||||
#elif BOOST_FLYWEIGHT_LIMIT_PERFECT_FWD_ARGS==2
|
||||
#define BOOST_FLYWEIGHT_PERFECT_FWD_OVERLOADS \
|
||||
BOOST_FLYWEIGHT_PERFECT_FWDS_1 \
|
||||
BOOST_FLYWEIGHT_PERFECT_FWDS_2
|
||||
#elif BOOST_FLYWEIGHT_LIMIT_PERFECT_FWD_ARGS==3
|
||||
#define BOOST_FLYWEIGHT_PERFECT_FWD_OVERLOADS \
|
||||
BOOST_FLYWEIGHT_PERFECT_FWDS_1 \
|
||||
BOOST_FLYWEIGHT_PERFECT_FWDS_2 \
|
||||
BOOST_FLYWEIGHT_PERFECT_FWDS_3
|
||||
#elif BOOST_FLYWEIGHT_LIMIT_PERFECT_FWD_ARGS==4
|
||||
#define BOOST_FLYWEIGHT_PERFECT_FWD_OVERLOADS \
|
||||
BOOST_FLYWEIGHT_PERFECT_FWDS_1 \
|
||||
BOOST_FLYWEIGHT_PERFECT_FWDS_2 \
|
||||
BOOST_FLYWEIGHT_PERFECT_FWDS_3 \
|
||||
BOOST_FLYWEIGHT_PERFECT_FWDS_4
|
||||
#else /* BOOST_FLYWEIGHT_LIMIT_PERFECT_FWD_ARGS==5 */
|
||||
#define BOOST_FLYWEIGHT_PERFECT_FWD_OVERLOADS \
|
||||
BOOST_FLYWEIGHT_PERFECT_FWDS_1 \
|
||||
BOOST_FLYWEIGHT_PERFECT_FWDS_2 \
|
||||
BOOST_FLYWEIGHT_PERFECT_FWDS_3 \
|
||||
BOOST_FLYWEIGHT_PERFECT_FWDS_4 \
|
||||
BOOST_FLYWEIGHT_PERFECT_FWDS_5
|
||||
#endif
|
||||
|
||||
/* generate the overloads */
|
||||
|
||||
BOOST_FLYWEIGHT_PERFECT_FWD_OVERLOADS
|
||||
|
||||
/* clean up */
|
||||
|
||||
#undef BOOST_FLYWEIGHT_PERFECT_FWD_OVERLOADS
|
||||
|
||||
#if BOOST_FLYWEIGHT_LIMIT_PERFECT_FWD_ARGS>=1
|
||||
#undef BOOST_FLYWEIGHT_PERFECT_FWDS_1
|
||||
#endif
|
||||
|
||||
#if BOOST_FLYWEIGHT_LIMIT_PERFECT_FWD_ARGS>=2
|
||||
#undef BOOST_FLYWEIGHT_PERFECT_FWDS_2
|
||||
#endif
|
||||
|
||||
#if BOOST_FLYWEIGHT_LIMIT_PERFECT_FWD_ARGS>=3
|
||||
#undef BOOST_FLYWEIGHT_PERFECT_FWDS_3
|
||||
#endif
|
||||
|
||||
#if BOOST_FLYWEIGHT_LIMIT_PERFECT_FWD_ARGS>=4
|
||||
#undef BOOST_FLYWEIGHT_PERFECT_FWDS_4
|
||||
#endif
|
||||
|
||||
#if BOOST_FLYWEIGHT_LIMIT_PERFECT_FWD_ARGS>=5
|
||||
#undef BOOST_FLYWEIGHT_PERFECT_FWDS_5
|
||||
#endif
|
||||
|
||||
/* user supplied argument macros */
|
||||
|
||||
#undef BOOST_FLYWEIGHT_PERFECT_FWD_NAME
|
||||
#undef BOOST_FLYWEIGHT_PERFECT_FWD_BODY
|
||||
91
test/external/boost/flyweight/detail/recursive_lw_mutex.hpp
vendored
Normal file
91
test/external/boost/flyweight/detail/recursive_lw_mutex.hpp
vendored
Normal file
@@ -0,0 +1,91 @@
|
||||
/* Copyright 2006-2008 Joaquin M Lopez Munoz.
|
||||
* 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/flyweight for library home page.
|
||||
*/
|
||||
|
||||
#ifndef BOOST_FLYWEIGHT_DETAIL_RECURSIVE_LW_MUTEX_HPP
|
||||
#define BOOST_FLYWEIGHT_DETAIL_RECURSIVE_LW_MUTEX_HPP
|
||||
|
||||
#if defined(_MSC_VER)&&(_MSC_VER>=1200)
|
||||
#pragma once
|
||||
#endif
|
||||
|
||||
/* Recursive lightweight mutex. Relies entirely on
|
||||
* boost::detail::lightweight_mutex, except in Pthreads, where we
|
||||
* explicitly use the PTHREAD_MUTEX_RECURSIVE attribute
|
||||
* (lightweight_mutex uses the default mutex type instead).
|
||||
*/
|
||||
|
||||
#include <boost/config.hpp>
|
||||
|
||||
#if !defined(BOOST_HAS_PTHREADS)
|
||||
#include <boost/detail/lightweight_mutex.hpp>
|
||||
namespace boost{
|
||||
|
||||
namespace flyweights{
|
||||
|
||||
namespace detail{
|
||||
|
||||
typedef boost::detail::lightweight_mutex recursive_lightweight_mutex;
|
||||
|
||||
} /* namespace flyweights::detail */
|
||||
|
||||
} /* namespace flyweights */
|
||||
|
||||
} /* namespace boost */
|
||||
#else
|
||||
/* code shamelessly ripped from <boost/detail/lwm_pthreads.hpp> */
|
||||
|
||||
#include <boost/noncopyable.hpp>
|
||||
#include <pthread.h>
|
||||
|
||||
namespace boost{
|
||||
|
||||
namespace flyweights{
|
||||
|
||||
namespace detail{
|
||||
|
||||
struct recursive_lightweight_mutex:noncopyable
|
||||
{
|
||||
recursive_lightweight_mutex()
|
||||
{
|
||||
pthread_mutexattr_t attr;
|
||||
pthread_mutexattr_init(&attr);
|
||||
pthread_mutexattr_settype(&attr,PTHREAD_MUTEX_RECURSIVE);
|
||||
pthread_mutex_init(&m_,&attr);
|
||||
pthread_mutexattr_destroy(&attr);
|
||||
}
|
||||
|
||||
~recursive_lightweight_mutex(){pthread_mutex_destroy(&m_);}
|
||||
|
||||
struct scoped_lock;
|
||||
friend struct scoped_lock;
|
||||
struct scoped_lock:noncopyable
|
||||
{
|
||||
public:
|
||||
scoped_lock(recursive_lightweight_mutex& m):m_(m.m_)
|
||||
{
|
||||
pthread_mutex_lock(&m_);
|
||||
}
|
||||
|
||||
~scoped_lock(){pthread_mutex_unlock(&m_);}
|
||||
|
||||
private:
|
||||
pthread_mutex_t& m_;
|
||||
};
|
||||
|
||||
private:
|
||||
pthread_mutex_t m_;
|
||||
};
|
||||
|
||||
} /* namespace flyweights::detail */
|
||||
|
||||
} /* namespace flyweights */
|
||||
|
||||
} /* namespace boost */
|
||||
#endif
|
||||
|
||||
#endif
|
||||
50
test/external/boost/flyweight/detail/value_tag.hpp
vendored
Normal file
50
test/external/boost/flyweight/detail/value_tag.hpp
vendored
Normal file
@@ -0,0 +1,50 @@
|
||||
/* Copyright 2006-2008 Joaquin M Lopez Munoz.
|
||||
* 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/flyweight for library home page.
|
||||
*/
|
||||
|
||||
#ifndef BOOST_FLYWEIGHT_DETAIL_VALUE_TAG_HPP
|
||||
#define BOOST_FLYWEIGHT_DETAIL_VALUE_TAG_HPP
|
||||
|
||||
#if defined(_MSC_VER)&&(_MSC_VER>=1200)
|
||||
#pragma once
|
||||
#endif
|
||||
|
||||
#include <boost/config.hpp> /* keep it first to prevent nasty warns in MSVC */
|
||||
#include <boost/parameter/parameters.hpp>
|
||||
#include <boost/type_traits/is_base_and_derived.hpp>
|
||||
|
||||
namespace boost{
|
||||
|
||||
namespace flyweights{
|
||||
|
||||
namespace detail{
|
||||
|
||||
/* Three ways to indicate that a given class T is a value policy:
|
||||
* 1. Make it derived from value_marker.
|
||||
* 2. Specialize is_value to evaluate to boost::mpl::true_.
|
||||
* 3. Pass it as value<T> when defining a flyweight type.
|
||||
*
|
||||
* For the time being the interface of value policies is not public.
|
||||
*/
|
||||
|
||||
struct value_marker{};
|
||||
|
||||
template<typename T>
|
||||
struct is_value:is_base_and_derived<value_marker,T>
|
||||
{};
|
||||
|
||||
template<typename T=parameter::void_>
|
||||
struct value:parameter::template_keyword<value<>,T>
|
||||
{};
|
||||
|
||||
} /* namespace flyweights::detail */
|
||||
|
||||
} /* namespace flyweights */
|
||||
|
||||
} /* namespace boost */
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user