1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- /*=============================================================================
- Boost.Wave: A Standard compliant C++ preprocessor library
- Sample: Collect token statistics from the analysed files
-
- http://www.boost.org/
- Copyright (c) 2001-2010 Hartmut Kaiser. 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(COLLECT_TOKEN_STATISTICS_VERSION_HPP)
- #define COLLECT_TOKEN_STATISTICS_VERSION_HPP
- #include <algorithm>
- #include <map>
- #include <boost/assert.hpp>
- #include <boost/wave/token_ids.hpp>
- ///////////////////////////////////////////////////////////////////////////////
- class collect_token_statistics
- {
- enum {
- count = boost::wave::T_LAST_TOKEN - boost::wave::T_FIRST_TOKEN
- };
-
- public:
- collect_token_statistics()
- {
- std::fill(&token_count[0], &token_count[count], 0);
- }
-
- // account for the given token type
- template <typename Token>
- void operator() (Token const& token)
- {
- using boost::wave::token_id;
-
- int id = token_id(token) - boost::wave::T_FIRST_TOKEN;
- BOOST_ASSERT(id < count);
- ++token_count[id];
- }
- // print out the token statistics in descending order
- void print() const
- {
- using namespace boost::wave;
- typedef std::multimap<int, token_id> ids_type;
-
- ids_type ids;
- for (unsigned int i = 0; i < count; ++i)
- {
- ids.insert(ids_type::value_type(
- token_count[i], token_id(i + T_FIRST_TOKEN)));
- }
-
- ids_type::reverse_iterator rend = ids.rend();
- for(ids_type::reverse_iterator rit = ids.rbegin(); rit != rend; ++rit)
- {
- std::cout << boost::wave::get_token_name((*rit).second) << ": "
- << (*rit).first << std::endl;
- }
- }
-
- private:
- int token_count[count];
- };
- #endif // !defined(COLLECT_TOKEN_STATISTICS_VERSION_HPP)
|