X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=boost%2Fboost%2Futility%2Fbase_from_member.hpp;h=04aabb59e26ee92a21bfdfe53adb2a28198a4520;hb=43c09d723435a5b203f2ac0c39e2086de836b386;hp=48d1d4aec540041f41d8ccad22b5929eaf3caf8f;hpb=59b6a4701a8d2b5155af08cf758b4ca120201282;p=lyx.git diff --git a/boost/boost/utility/base_from_member.hpp b/boost/boost/utility/base_from_member.hpp index 48d1d4aec5..04aabb59e2 100644 --- a/boost/boost/utility/base_from_member.hpp +++ b/boost/boost/utility/base_from_member.hpp @@ -1,17 +1,53 @@ // boost utility/base_from_member.hpp header file --------------------------// -// (C) Copyright Daryle Walker 2001. Permission to copy, use, modify, sell -// and distribute this software is granted provided this copyright -// notice appears in all copies. This software is provided "as is" without -// express or implied warranty, and with no claim as to its suitability for -// any purpose. +// Copyright 2001, 2003, 2004 Daryle Walker. Use, modification, and +// distribution are subject to the Boost Software License, Version 1.0. (See +// accompanying file LICENSE_1_0.txt or a copy at +// .) -// See http://www.boost.org for most recent version including documentation. +// See for the library's home page. #ifndef BOOST_UTILITY_BASE_FROM_MEMBER_HPP #define BOOST_UTILITY_BASE_FROM_MEMBER_HPP -#include // required for parameter defaults +#include +#include +#include +#include + + +// Base-from-member arity configuration macro ------------------------------// + +// The following macro determines how many arguments will be in the largest +// constructor template of base_from_member. Constructor templates will be +// generated from one argument to this maximum. Code from other files can read +// this number if they need to always match the exact maximum base_from_member +// uses. The maximum constructor length can be changed by overriding the +// #defined constant. Make sure to apply the override, if any, for all source +// files during project compiling for consistency. + +// Contributed by Jonathan Turkanis + +#ifndef BOOST_BASE_FROM_MEMBER_MAX_ARITY +#define BOOST_BASE_FROM_MEMBER_MAX_ARITY 10 +#endif + + +// An iteration of a constructor template for base_from_member -------------// + +// A macro that should expand to: +// template < typename T1, ..., typename Tn > +// base_from_member( T1 x1, ..., Tn xn ) +// : member( x1, ..., xn ) +// {} +// This macro should only persist within this file. + +#define BOOST_PRIVATE_CTR_DEF( z, n, data ) \ + template < BOOST_PP_ENUM_PARAMS(n, typename T) > \ + explicit base_from_member( BOOST_PP_ENUM_BINARY_PARAMS(n, T, x) ) \ + : member( BOOST_PP_ENUM_PARAMS(n, x) ) \ + {} \ + /**/ namespace boost @@ -26,34 +62,26 @@ namespace boost // Contributed by Daryle Walker -template < typename MemberType, int UniqueID > +template < typename MemberType, int UniqueID = 0 > class base_from_member { protected: MemberType member; - explicit base_from_member() + base_from_member() : member() {} - template< typename T1 > - explicit base_from_member( T1 x1 ) - : member( x1 ) - {} - - template< typename T1, typename T2 > - base_from_member( T1 x1, T2 x2 ) - : member( x1, x2 ) - {} - - template< typename T1, typename T2, typename T3 > - base_from_member( T1 x1, T2 x2, T3 x3 ) - : member( x1, x2, x3 ) - {} + BOOST_PP_REPEAT_FROM_TO( 1, BOOST_PP_INC(BOOST_BASE_FROM_MEMBER_MAX_ARITY), + BOOST_PRIVATE_CTR_DEF, _ ) }; // boost::base_from_member } // namespace boost +// Undo any private macros +#undef BOOST_PRIVATE_CTR_DEF + + #endif // BOOST_UTILITY_BASE_FROM_MEMBER_HPP