1 /*=============================================================================
2     Copyright (c) 2002-2003 Hartmut Kaiser
3     http://spirit.sourceforge.net/
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_FUNDAMENTAL_HPP)
9 #define BOOST_SPIRIT_FUNDAMENTAL_HPP
10 
11 #include <boost/spirit/home/classic/namespace.hpp>
12 #include <boost/spirit/home/classic/meta/impl/fundamental.ipp>
13 
14 namespace boost { namespace spirit {
15 
16 BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
17 
18     ///////////////////////////////////////////////////////////////////////////
19     //
20     //  Helper template for counting the number of nodes contained in a
21     //  given parser type.
22     //  All parser_category type parsers are counted as nodes.
23     //
24     ///////////////////////////////////////////////////////////////////////////
25     template <typename ParserT>
26     struct node_count {
27 
28         typedef typename ParserT::parser_category_t parser_category_t;
29         typedef typename impl::nodes<parser_category_t>
30             ::template count<ParserT, mpl::int_<0> > count_t;
31 
32         BOOST_STATIC_CONSTANT(int, value = count_t::value);
33     };
34 
35     ///////////////////////////////////////////////////////////////////////////
36     //
37     //  Helper template for counting the number of leaf nodes contained in a
38     //  given parser type.
39     //  Only plain_parser_category type parsers are counted as leaf nodes.
40     //
41     ///////////////////////////////////////////////////////////////////////////
42     template <typename ParserT>
43     struct leaf_count {
44 
45         typedef typename ParserT::parser_category_t parser_category_t;
46         typedef typename impl::leafs<parser_category_t>
47             ::template count<ParserT, mpl::int_<0> > count_t;
48 
49         BOOST_STATIC_CONSTANT(int, value = count_t::value);
50     };
51 
52 BOOST_SPIRIT_CLASSIC_NAMESPACE_END
53 
54 }} // namespace BOOST_SPIRIT_CLASSIC_NS
55 
56 #endif // !defined(BOOST_SPIRIT_FUNDAMENTAL_HPP)
57