Hello Alexey,
using the C++ preprocessor macro to generate map of 150 types works fine and code which uses the
new mapN type compiles and runs fine as well. Just as you described it in the post:
http://lists.boost.org/boost-users/2006/11/23321.php
We have successfully tested it with 115 elements.
Then we tried to switch to the second approach with pregenerated types. The problem we face is
that the python script generates empty headers.
To avoid all errors we just copied \boost\mpl\map\map50.hpp to
\boost\mpl\map\map60.hpp and changed the file accordingly. Here the modified source:
//
// 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/mpl for documentation.
// $Source: /cvsroot/boost/boost/boost/mpl/map/map50.hpp,v $
// $Date: 2004/09/02 15:40:59 $
// $Revision: 1.2 $
#if !defined(BOOST_MPL_PREPROCESSING_MODE)
# include
#endif
#include
#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \
&& !defined(BOOST_MPL_PREPROCESSING_MODE)
# define BOOST_MPL_PREPROCESSED_HEADER map60.hpp
# include
#else
# include
namespace boost { namespace mpl {
# define BOOST_PP_ITERATION_PARAMS_1 \
(3,(51, 60, ))
# include BOOST_PP_ITERATE()
}}
#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
#endif // BOOST_MPL_MAP_MAP60_HPP_INCLUDED
Afterwards we did the same with the CPP file in \libs\mpl\preprocessed\map\:
// Copyright Aleksey Gurtovoy 2003-4004
//
// 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/mpl for documentation.
// $Source: /cvsroot/boost/boost/libs/mpl/preprocessed/map/map50.cpp,v $
// $Date: 2004/09/05 09:45:17 $
// $Revision: 1.3 $
#define BOOST_MPL_PREPROCESSING_MODE
#include
#include
gcc is installed and is registered in the PATH variable. OS Win XP, GCC version:
gcc (GCC) 3.4.4 (cygming special) (gdc 0.12, using dmd 0.125)
Copyright (C) 2004 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Calling the python script command like:
$prompt>python ./preprocess_map.py all E:/global_libs/boost_1_33_1 map60.cpp
Produces the output:
E:\global_libs\boost_1_33_1\libs\mpl\preprocessed>gcc -E -C -P -IE:/global_libs/
boost_1_33_1 "-D BOOST_USER_CONFIG=" -D BOOST_MPL_CFG_NO_OWN_PP_PRIMITIVES E:\global_l
ibs\boost_1_33_1\libs\mpl\preprocessed\map\map60.cpp 1>E:\global_libs\boost_1_3
3_1\libs\mpl\preprocessed\map\map60.hpp
E:\global_libs\boost_1_33_1\libs\mpl\preprocessed>gcc -E -C -P -IE:/global_libs/
boost_1_33_1 "-D BOOST_USER_CONFIG=" -D BOOST_MPL_CFG_NO_OWN_PP_PRIMITIVES E:\g
lobal_libs\boost_1_33_1\libs\mpl\preprocessed\map\map60.cpp 1>E:\global_libs\bo
ost_1_33_1\libs\mpl\preprocessed\map\map60.hpp
E:\global_libs\boost_1_33_1\libs\mpl\preprocessed>gcc -E -C -P -IE:/global_libs/
boost_1_33_1 "-D BOOST_USER_CONFIG=" -D BOOST_MPL_CFG_NO_OWN_PP_PRIMITIVES E:\global
_libs\boost_1_33_1\libs\mpl\preprocessed\map\map60.cpp 1>E:\global_libs\boost_1
_33_1\libs\mpl\preprocessed\map\map60.hpp
But the resulting files in pregenerated directories have the size 0. Doing the same thing by
passing map50.cpp works just fine and pregenerates new files. Is there smth, that I miss?
With Kind Regards,
Ovanes Markarian