1 /*============================================================================= 2 Copyright (c) 2001-2011 Joel de Guzman 3 Copyright (c) 2001-2011 Hartmut Kaiser 4 5 Distributed under the Boost Software License, Version 1.0. (See accompanying 6 file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) 7 ==============================================================================*/ 8 #if !defined(BOOST_SPIRIT_LOCALS_APRIL_03_2007_0506PM) 9 #define BOOST_SPIRIT_LOCALS_APRIL_03_2007_0506PM 10 11 #if defined(_MSC_VER) 12 #pragma once 13 #endif 14 15 #include <boost/preprocessor/repetition/enum_params_with_a_default.hpp> 16 #include <boost/preprocessor/repetition/enum_params.hpp> 17 #include <boost/mpl/vector.hpp> 18 #include <boost/mpl/bool.hpp> 19 20 #if !defined(BOOST_SPIRIT_MAX_LOCALS_SIZE) 21 # define BOOST_SPIRIT_MAX_LOCALS_SIZE 10 22 #else 23 # if BOOST_SPIRIT_MAX_LOCALS_SIZE < 3 24 # undef BOOST_SPIRIT_MAX_LOCALS_SIZE 25 # define BOOST_SPIRIT_MAX_LOCALS_SIZE 10 26 # endif 27 #endif 28 29 namespace boost { namespace spirit 30 { 31 /////////////////////////////////////////////////////////////////////////// 32 template < 33 BOOST_PP_ENUM_PARAMS_WITH_A_DEFAULT( 34 BOOST_SPIRIT_MAX_LOCALS_SIZE, typename T, mpl::na) 35 > 36 struct locals 37 : mpl::vector<BOOST_PP_ENUM_PARAMS(BOOST_SPIRIT_MAX_LOCALS_SIZE, T)> {}; 38 39 /////////////////////////////////////////////////////////////////////////// 40 namespace detail 41 { 42 template <typename T> 43 struct is_locals 44 : mpl::false_ 45 {}; 46 47 template <BOOST_PP_ENUM_PARAMS(BOOST_SPIRIT_MAX_LOCALS_SIZE, typename T)> 48 struct is_locals<locals<BOOST_PP_ENUM_PARAMS(BOOST_SPIRIT_MAX_LOCALS_SIZE, T)> > 49 : mpl::true_ 50 {}; 51 } 52 }} 53 54 #endif 55