| /*============================================================================= |
| Copyright (c) 2002-2003 Hartmut Kaiser |
| http://spirit.sourceforge.net/ |
| |
| 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) |
| =============================================================================*/ |
| #if !defined(BOOST_SPIRIT_FUNDAMENTAL_HPP) |
| #define BOOST_SPIRIT_FUNDAMENTAL_HPP |
| |
| #include <boost/spirit/home/classic/namespace.hpp> |
| #include <boost/spirit/home/classic/meta/impl/fundamental.ipp> |
| |
| namespace boost { namespace spirit { |
| |
| BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN |
| |
| /////////////////////////////////////////////////////////////////////////// |
| // |
| // Helper template for counting the number of nodes contained in a |
| // given parser type. |
| // All parser_category type parsers are counted as nodes. |
| // |
| /////////////////////////////////////////////////////////////////////////// |
| template <typename ParserT> |
| struct node_count { |
| |
| typedef typename ParserT::parser_category_t parser_category_t; |
| typedef typename impl::nodes<parser_category_t> |
| ::template count<ParserT, mpl::int_<0> > count_t; |
| |
| BOOST_STATIC_CONSTANT(int, value = count_t::value); |
| }; |
| |
| /////////////////////////////////////////////////////////////////////////// |
| // |
| // Helper template for counting the number of leaf nodes contained in a |
| // given parser type. |
| // Only plain_parser_category type parsers are counted as leaf nodes. |
| // |
| /////////////////////////////////////////////////////////////////////////// |
| template <typename ParserT> |
| struct leaf_count { |
| |
| typedef typename ParserT::parser_category_t parser_category_t; |
| typedef typename impl::leafs<parser_category_t> |
| ::template count<ParserT, mpl::int_<0> > count_t; |
| |
| BOOST_STATIC_CONSTANT(int, value = count_t::value); |
| }; |
| |
| BOOST_SPIRIT_CLASSIC_NAMESPACE_END |
| |
| }} // namespace BOOST_SPIRIT_CLASSIC_NS |
| |
| #endif // !defined(BOOST_SPIRIT_FUNDAMENTAL_HPP) |