From 0103ccc165b3acd637c91df8cadda9c725997bc6 Mon Sep 17 00:00:00 2001 From: Arkadiy Vertleyb Date: Tue, 22 Feb 2005 02:33:20 +0000 Subject: [PATCH] reimplemented template parameters preprocessing using the method by Paul Mensonides [SVN r2499] --- .../typeof/compliant/template_encoding.hpp | 2 +- .../compliant/template_template_param.hpp | 1 + include/boost/typeof/template_encoding.hpp | 53 ++++++------------- .../typeof/vintage/template_encoding.hpp | 2 + test/compliant/typeof.vcproj | 6 --- 5 files changed, 19 insertions(+), 45 deletions(-) diff --git a/include/boost/typeof/compliant/template_encoding.hpp b/include/boost/typeof/compliant/template_encoding.hpp index 46f6b79..7ca3f86 100755 --- a/include/boost/typeof/compliant/template_encoding.hpp +++ b/include/boost/typeof/compliant/template_encoding.hpp @@ -15,7 +15,7 @@ #include #include -#include +#include #define BOOST_TYPEOF_PLACEHOLDER(z, n, elem)\ BOOST_TYPEOF_VIRTUAL(PLACEHOLDER, elem)(elem) diff --git a/include/boost/typeof/compliant/template_template_param.hpp b/include/boost/typeof/compliant/template_template_param.hpp index d1acce3..32400e2 100644 --- a/include/boost/typeof/compliant/template_template_param.hpp +++ b/include/boost/typeof/compliant/template_template_param.hpp @@ -8,6 +8,7 @@ #include #include +#include #define BOOST_TYPEOF_MAKE_OBJ_template(x) BOOST_TYPEOF_TEMPLATE_PARAM(x) #define BOOST_TYPEOF_TEMPLATE(X) template(X) BOOST_TYPEOF_EAT diff --git a/include/boost/typeof/template_encoding.hpp b/include/boost/typeof/template_encoding.hpp index 3d96444..90a76c6 100755 --- a/include/boost/typeof/template_encoding.hpp +++ b/include/boost/typeof/template_encoding.hpp @@ -3,13 +3,16 @@ // Use, modification and distribution is subject to the Boost Software // License, Version 1.0. (http://www.boost.org/LICENSE_1_0.txt) -#ifndef BOOST_TYPEOF_REGISTER_INTEGRAL_HPP_INCLUDED -#define BOOST_TYPEOF_REGISTER_INTEGRAL_HPP_INCLUDED +#ifndef BOOST_TYPEOF_TEMPLATE_ENCODING_HPP_INCLUDED +#define BOOST_TYPEOF_TEMPLATE_ENCODING_HPP_INCLUDED #include -#include #include -#include +#include +#include +#include +#include +#include // The template parameter description, entered by the user, // is converted into a polymorphic "object" @@ -39,41 +42,15 @@ #define BOOST_TYPEOF_MAKE_OBJS(Params)\ BOOST_PP_SEQ_TRANSFORM(BOOST_TYPEOF_OBJECT_MAKER, ~, Params) +// As suggested by Paul Mensonides: + #define BOOST_TYPEOF_TOSEQ(x)\ - BOOST_PP_SEQ_CAT(\ - (BOOST_TYPEOF_STEP3)\ - (BOOST_PP_CAT(BOOST_TYPEOF_STEP2, BOOST_PP_EXPAND(BOOST_TYPEOF_STEP1 x)))\ - ) + BOOST_PP_IIF(\ + BOOST_PP_IS_UNARY(x),\ + x BOOST_PP_TUPLE_EAT(3), BOOST_PP_REPEAT\ + )(x, BOOST_TYPEOF_TOSEQ_2, ~) -#define BOOST_TYPEOF_STEP1(x) _(x) -#define BOOST_TYPEOF_STEP2BOOST_TYPEOF_STEP1 -#define BOOST_TYPEOF_STEP3BOOST_TYPEOF_STEP2_ - -#define BOOST_TYPEOF_STEP31 (class) -#define BOOST_TYPEOF_STEP32 BOOST_TYPEOF_STEP31(class) -#define BOOST_TYPEOF_STEP33 BOOST_TYPEOF_STEP32(class) -#define BOOST_TYPEOF_STEP34 BOOST_TYPEOF_STEP33(class) -#define BOOST_TYPEOF_STEP35 BOOST_TYPEOF_STEP34(class) -#define BOOST_TYPEOF_STEP36 BOOST_TYPEOF_STEP35(class) -#define BOOST_TYPEOF_STEP37 BOOST_TYPEOF_STEP36(class) -#define BOOST_TYPEOF_STEP38 BOOST_TYPEOF_STEP37(class) -#define BOOST_TYPEOF_STEP39 BOOST_TYPEOF_STEP38(class) -#define BOOST_TYPEOF_STEP310 BOOST_TYPEOF_STEP39(class) -#define BOOST_TYPEOF_STEP311 BOOST_TYPEOF_STEP310(class) -#define BOOST_TYPEOF_STEP312 BOOST_TYPEOF_STEP311(class) -#define BOOST_TYPEOF_STEP313 BOOST_TYPEOF_STEP312(class) -#define BOOST_TYPEOF_STEP314 BOOST_TYPEOF_STEP313(class) -#define BOOST_TYPEOF_STEP315 BOOST_TYPEOF_STEP314(class) -#define BOOST_TYPEOF_STEP316 BOOST_TYPEOF_STEP315(class) -#define BOOST_TYPEOF_STEP317 BOOST_TYPEOF_STEP316(class) -#define BOOST_TYPEOF_STEP318 BOOST_TYPEOF_STEP317(class) -#define BOOST_TYPEOF_STEP319 BOOST_TYPEOF_STEP318(class) -#define BOOST_TYPEOF_STEP320 BOOST_TYPEOF_STEP319(class) - -// "interface" - -#define BOOST_TYPEOF_PARAM_EXPAND_TYPE(Param)\ - BOOST_PP_CAT(BOOST_TYPEOF_PARAM_EXPAND_, BOOST_PP_SEQ_ELEM(0, Param))(Param) +#define BOOST_TYPEOF_TOSEQ_2(z, n, _) (class) // BOOST_TYPEOF_VIRTUAL @@ -104,4 +81,4 @@ #define BOOST_TYPEOF_SEQ_ENUM_TRAILING_1(seq,macro)\ BOOST_PP_ENUM_TRAILING(BOOST_PP_SEQ_SIZE(seq),BOOST_TYPEOF_SEQ_EXPAND_ELEMENT_1,(macro)(seq)) -#endif//BOOST_TYPEOF_COMPLIANT_TEMPLATE_ENCODING_HPP_INCLUDED +#endif//BOOST_TYPEOF_TEMPLATE_ENCODING_HPP_INCLUDED diff --git a/include/boost/typeof/vintage/template_encoding.hpp b/include/boost/typeof/vintage/template_encoding.hpp index 7138658..ad99be6 100644 --- a/include/boost/typeof/vintage/template_encoding.hpp +++ b/include/boost/typeof/vintage/template_encoding.hpp @@ -12,6 +12,8 @@ #include #include #include +#include +//#include #include #include diff --git a/test/compliant/typeof.vcproj b/test/compliant/typeof.vcproj index 1624f38..54386e2 100755 --- a/test/compliant/typeof.vcproj +++ b/test/compliant/typeof.vcproj @@ -119,12 +119,6 @@ UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"> - - -