MSMs transition table uses a mpl::vector. The default maximum size is 20. You can change the size with
#define BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
#define BOOST_MPL_LIMIT_VECTOR_SIZE 50
#define BOOST_MPL_LIMIT_MAP_SIZE 50
to allow a size up to 50. According to the documentation (https://www.boost.org/doc/libs/1_80_0/libs/msm/doc/HTML/ch05.html) it is possible to increase the size even further by adding (for e.g. 60) mpl/vector60.hpp and mpl/map60.hpp
In boost/mpl/vector I find the files vector50_c.hpp and vector50.hpp. The content for vector50.hpp is:
#ifndef BOOST_MPL_VECTOR_VECTOR50_HPP_INCLUDED
#define BOOST_MPL_VECTOR_VECTOR50_HPP_INCLUDED
// Copyright Aleksey Gurtovoy 2000-2004
//
// 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.
// $Id$
// $Date$
// $Revision$
#if !defined(BOOST_MPL_PREPROCESSING_MODE)
# include <boost/mpl/vector/vector40.hpp>
#endif
#include <boost/mpl/aux_/config/use_preprocessed.hpp>
#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \
&& !defined(BOOST_MPL_PREPROCESSING_MODE)
# define BOOST_MPL_PREPROCESSED_HEADER vector50.hpp
# include <boost/mpl/vector/aux_/include_preprocessed.hpp>
#else
# include <boost/mpl/aux_/config/typeof.hpp>
# include <boost/mpl/aux_/config/ctps.hpp>
# include <boost/preprocessor/iterate.hpp>
namespace boost { namespace mpl {
# define BOOST_PP_ITERATION_PARAMS_1 \
(3,(41, 50, <boost/mpl/vector/aux_/numbered.hpp>))
# include BOOST_PP_ITERATE()
}}
#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
#endif // BOOST_MPL_VECTOR_VECTOR50_HPP_INCLUDED
My first guess for writing the vector60.hpp would be:
#ifndef BOOST_MPL_VECTOR_VECTOR60_HPP_INCLUDED
#define BOOST_MPL_VECTOR_VECTOR60_HPP_INCLUDED
// Copyright Aleksey Gurtovoy 2000-2004
//
// 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.
// $Id$
// $Date$
// $Revision$
#if !defined(BOOST_MPL_PREPROCESSING_MODE)
# include <boost/mpl/vector/vector50.hpp>
#endif
#include <boost/mpl/aux_/config/use_preprocessed.hpp>
#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \
&& !defined(BOOST_MPL_PREPROCESSING_MODE)
# define BOOST_MPL_PREPROCESSED_HEADER vector60.hpp
# include <boost/mpl/vector/aux_/include_preprocessed.hpp>
#else
# include <boost/mpl/aux_/config/typeof.hpp>
# include <boost/mpl/aux_/config/ctps.hpp>
# include <boost/preprocessor/iterate.hpp>
namespace boost { namespace mpl {
# define BOOST_PP_ITERATION_PARAMS_1 \
(3,(51, 60, <boost/mpl/vector/aux_/numbered.hpp>))
# include BOOST_PP_ITERATE()
}}
#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
#endif // BOOST_MPL_VECTOR_VECTOR60_HPP_INCLUDED
Edit: My minimal example that I am trying to get to run
#define BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
#define BOOST_MPL_LIMIT_VECTOR_SIZE 60
#include <boost/mpl/vector.hpp>
int main() {
typedef boost::mpl::vector<
int,
int,
int,
int,
int,
int,
int,
int,
int,
int,
int,
int,
int,
int,
int,
int,
int,
int,
int,
int,
int,
int,
int,
int,
int,
int,
int,
int,
int,
int,
int,
int,
int,
int,
int,
int,
int,
int,
int,
int,
int,
int,
int,
int,
int,
int,
int,
int,
int,
int,
int
> vector_51;
return 0;
}
produces currently the error
/usr/include/boost/mpl/vector.hpp:36:1: fatal error: boost/mpl/vector/vector60.hpp: No such file or directory
36 | # include BOOST_PP_STRINGIZE(boost/mpl/vector/AUX778076_VECTOR_HEADER)
My preferred solution would be adding some code before the includes that generates the code at compile time. But just getting my example to work with self-written files would be a good first step.
Do I need to add a file vector60_c.hpp and vector60.hpp? (What's the difference between the two?)
Depends on whether MSM uses vector or vector_c. The difference: https://www.boost.org/doc/libs/1_80_0/libs/mpl/doc/refmanual/vector-c.html
The way you generate the missing files is documented in preprocessed/README.txt.
On my oldish Ubuntu box I could:
cd ~/custom/superboost/libs/mpl
python2.7 ./preprocessed/boost_mpl_preprocess.py
And it generated the files, as well as modifying many existing headers, e.g. aux_/preprocessed/plain/vector.hpp which now contains
template<
typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na
, typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na
, typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na
, typename T12 = na, typename T13 = na, typename T14 = na
, typename T15 = na, typename T16 = na, typename T17 = na
, typename T18 = na, typename T19 = na, typename T20 = na
, typename T21 = na, typename T22 = na, typename T23 = na
, typename T24 = na, typename T25 = na, typename T26 = na
, typename T27 = na, typename T28 = na, typename T29 = na
, typename T30 = na, typename T31 = na, typename T32 = na
, typename T33 = na, typename T34 = na, typename T35 = na
, typename T36 = na, typename T37 = na, typename T38 = na
, typename T39 = na, typename T40 = na, typename T41 = na
, typename T42 = na, typename T43 = na, typename T44 = na
, typename T45 = na, typename T46 = na, typename T47 = na
, typename T48 = na, typename T49 = na, typename T50 = na
, typename T51 = na, typename T52 = na, typename T53 = na
, typename T54 = na, typename T55 = na, typename T56 = na
, typename T57 = na, typename T58 = na, typename T59 = na
, typename T60 = na, typename T61 = na, typename T62 = na
, typename T63 = na, typename T64 = na, typename T65 = na
, typename T66 = na, typename T67 = na, typename T68 = na
, typename T69 = na, typename T70 = na, typename T71 = na
, typename T72 = na, typename T73 = na, typename T74 = na
, typename T75 = na, typename T76 = na, typename T77 = na
, typename T78 = na, typename T79 = na, typename T80 = na
, typename T81 = na, typename T82 = na, typename T83 = na
, typename T84 = na, typename T85 = na, typename T86 = na
, typename T87 = na, typename T88 = na, typename T89 = na
, typename T90 = na, typename T91 = na, typename T92 = na
, typename T93 = na, typename T94 = na, typename T95 = na
, typename T96 = na, typename T97 = na, typename T98 = na
, typename T99 = na
>
struct vector;
compared to the previous
template<
typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na
, typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na
, typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na
, typename T12 = na, typename T13 = na, typename T14 = na
, typename T15 = na, typename T16 = na, typename T17 = na
, typename T18 = na, typename T19 = na
>
struct vector;