📄 collect_token_statistics.hpp
字号:
/*============================================================================= Boost.Wave: A Standard compliant C++ preprocessor library Sample: Collect token statistics from the analysed files http://www.boost.org/ Copyright (c) 2001-2008 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)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -