diff --git a/doc/src/refmanual/LIMIT_STRING_SIZE.rst b/doc/src/refmanual/LIMIT_STRING_SIZE.rst new file mode 100644 index 0000000..4754e90 --- /dev/null +++ b/doc/src/refmanual/LIMIT_STRING_SIZE.rst @@ -0,0 +1,52 @@ +.. Macros/Configuration//BOOST_MPL_LIMIT_STRING_SIZE |65 + +.. Copyright Eric Niebler 2009. +.. 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) + +BOOST_MPL_LIMIT_STRING_SIZE +=========================== + +Synopsis +-------- + +.. parsed-literal:: + + #if !defined(BOOST_MPL_LIMIT_STRING_SIZE) + # define BOOST_MPL_LIMIT_STRING_SIZE \\ + |idic| \\ + /\*\*/ + #endif + + +Description +----------- + +``BOOST_MPL_LIMIT_STRING_SIZE`` is an overridable configuration macro regulating +the maximum arity of the ``string``\ 's |variadic forms|. In this +implementation of the library, ``BOOST_MPL_LIMIT_STRING_SIZE`` has a default value +of 32. To override the default limit, define ``BOOST_MPL_LIMIT_STRING_SIZE`` to +the desired maximum arity before including any library header. + + +Example +------- + +.. parsed-literal:: + + #define BOOST_MPL_LIMIT_STRING_SIZE 8 + ``#``\ include + + using namespace boost::mpl; + + typedef string<'a'> s_1; + typedef string<'abcd','efgh'> s_8; + // typedef string<'abcd','efgh','i'> s_9; // error! + + +See also +-------- + +|Configuration|, |BOOST_MPL_LIMIT_VECTOR_SIZE| + diff --git a/doc/src/refmanual/string.rst b/doc/src/refmanual/string.rst index 833762b..7264041 100644 --- a/doc/src/refmanual/string.rst +++ b/doc/src/refmanual/string.rst @@ -12,8 +12,8 @@ Description ----------- ``string`` is a |variadic|, `bidirectional`__, `extensible`__ |Integral Sequence Wrapper| of -characters that supports constant-time insertion and removal of elements at both ends, and -linear-time insertion and removal of elements in the middle. The parameters to ``string`` +characters that supports amortized constant-time insertion and removal of elements at both ends, +and linear-time insertion and removal of elements in the middle. The parameters to ``string`` are multi-character literals, giving a somewhat readable syntax for compile-time strings. ``string`` can also be an argument to the ``c_str`` metafunction, which generates a null-terminated character array that facilitates interoperability with runtime string diff --git a/include/boost/mpl/limits/string.hpp b/include/boost/mpl/limits/string.hpp new file mode 100644 index 0000000..eb85aa3 --- /dev/null +++ b/include/boost/mpl/limits/string.hpp @@ -0,0 +1,21 @@ + +#ifndef BOOST_MPL_LIMITS_STRING_HPP_INCLUDED +#define BOOST_MPL_LIMITS_STRING_HPP_INCLUDED + +// Copyright Eric Niebler 2009 +// +// 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: string.hpp 49239 2009-04-01 09:10:26Z eric_niebler $ +// $Date: 2009-04-01 02:10:26 -0700 (Wed, 1 Apr 2009) $ +// $Revision: 49239 $ + +#if !defined(BOOST_MPL_LIMIT_STRING_SIZE) +# define BOOST_MPL_LIMIT_STRING_SIZE 32 +#endif + +#endif // BOOST_MPL_LIMITS_STRING_HPP_INCLUDED diff --git a/include/boost/mpl/string.hpp b/include/boost/mpl/string.hpp index f5877d4..ab34926 100644 --- a/include/boost/mpl/string.hpp +++ b/include/boost/mpl/string.hpp @@ -14,11 +14,13 @@ // $Date: 2009-04-01 02:10:26 -0700 (Wed, 1 Apr 2009) $ // $Revision: 49239 $ +#include #include #include #include #include #include +#include #include #include #include @@ -37,11 +39,7 @@ namespace boost { namespace mpl { - #ifndef BOOST_MPL_STRING_MAX_LENGTH - # define BOOST_MPL_STRING_MAX_LENGTH 32 - #endif - - #define BOOST_MPL_STRING_MAX_PARAMS BOOST_PP_DIV(BOOST_PP_ADD(BOOST_MPL_STRING_MAX_LENGTH, 3), 4) + #define BOOST_MPL_STRING_MAX_PARAMS BOOST_PP_DIV(BOOST_PP_ADD(BOOST_MPL_LIMIT_STRING_SIZE, 3), 4) #define BOOST_MPL_MULTICHAR_LENGTH(c) (std::size_t)((c>0xffffff)+(c>0xffff)+(c>0xff)+1) #define BOOST_MPL_MULTICHAR_AT(c,i) (char)(0xff&(c>>(8*(BOOST_MPL_MULTICHAR_LENGTH(c)-(std::size_t)(i)-1)))) @@ -135,7 +133,7 @@ namespace boost { namespace mpl struct apply { BOOST_MPL_ASSERT_MSG( - (BOOST_MPL_STRING_MAX_LENGTH != mpl::size::type::value) + (BOOST_MPL_LIMIT_STRING_SIZE != mpl::size::type::value) , PUSH_BACK_FAILED_MPL_STRING_IS_FULL , (Sequence) ); @@ -228,7 +226,7 @@ namespace boost { namespace mpl struct apply { BOOST_MPL_ASSERT_MSG( - (BOOST_MPL_STRING_MAX_LENGTH != mpl::size::type::value) + (BOOST_MPL_LIMIT_STRING_SIZE != mpl::size::type::value) , PUSH_FRONT_FAILED_MPL_STRING_IS_FULL , (Sequence) ); @@ -479,7 +477,7 @@ namespace boost { namespace mpl typedef \ typename mpl::aux_::next_unless::type \ BOOST_PP_CAT(i, BOOST_PP_INC(n)); - BOOST_PP_REPEAT(BOOST_MPL_STRING_MAX_LENGTH, M0, ~) + BOOST_PP_REPEAT(BOOST_MPL_LIMIT_STRING_SIZE, M0, ~) #undef M0 typedef c_str type; @@ -491,7 +489,7 @@ namespace boost { namespace mpl { #define M0(z, n, data) \ mpl::aux_::deref_unless::type::value, - BOOST_PP_REPEAT(BOOST_MPL_STRING_MAX_LENGTH, M0, ~) + BOOST_PP_REPEAT(BOOST_MPL_LIMIT_STRING_SIZE, M0, ~) #undef M0 '\0' };