x
Yes
No
Do you want to visit DriveHQ English website?
首页
产品服务
价格
免费试用
下载客户端
关于我们
云文件服务
|
云备份服务
|
FTP服务
|
企业邮箱服务
|
网站托管
|
客户端软件
云文件服务
云备份服务
FTP服务
企业级邮箱服务
网站托管
客户端软件
whitespace_handling.hpp - Hosted on DriveHQ Cloud IT Platform
返回上层目录
上传
下载
共享
发布
新建文件夹
新建文件
复制
剪切
删除
粘贴
评论
升级服务
路径: \\game3dprogramming\materials\GameFactory\GameFactoryDemo\references\boost_1_35_0\boost\wave\whitespace_handling.hpp
旋转
特效
属性
历史版本
/*============================================================================= Boost.Wave: A Standard compliant C++ preprocessor library Whitespace eater http://www.boost.org/ Copyright (c) 2003 Paul Mensonides 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(WHITESPACE_HANDLING_HPP_INCLUDED) #define WHITESPACE_HANDLING_HPP_INCLUDED #include
#include
#include
#include
// this must occur after all of the includes and before any code appears #ifdef BOOST_HAS_ABI_HEADERS #include BOOST_ABI_PREFIX #endif /////////////////////////////////////////////////////////////////////////////// namespace boost { namespace wave { namespace context_policies { namespace util { /////////////////////////////////////////////////////////////////////////// // This function returns true if the given C style comment contains at // least one newline template
bool ccomment_has_newline(TokenT const& token) { using namespace boost::wave; if (T_CCOMMENT == token_id(token) && TokenT::string_type::npos != token.get_value().find_first_of("\n")) { return true; } return false; } /////////////////////////////////////////////////////////////////////////// // This function returns the number of newlines in the given C style // comment template
int ccomment_count_newlines(TokenT const& token) { using namespace boost::wave; int newlines = 0; if (T_CCOMMENT == token_id(token)) { typename TokenT::string_type const& value = token.get_value(); typename TokenT::string_type::size_type p = value.find_first_of("\n"); while (TokenT::string_type::npos != p) { ++newlines; p = value.find_first_of("\n", p+1); } } return newlines; } } /////////////////////////////////////////////////////////////////////////////// template
class eat_whitespace : public default_preprocessing_hooks { public: eat_whitespace(); template
bool may_skip_whitespace(ContextT const& ctx, TokenT &token, bool &skipped_newline); protected: bool skip_cppcomment(boost::wave::token_id id) { return !preserve_comments && T_CPPCOMMENT == id; } private: typedef bool state_t(TokenT &token, bool &skipped_newline); state_t eat_whitespace::* state; state_t general, newline, newline_2nd, whitespace; bool preserve_comments; }; template
inline eat_whitespace
::eat_whitespace() : state(&eat_whitespace::newline), preserve_comments(false) { } template
template
inline bool eat_whitespace
::may_skip_whitespace(ContextT const& ctx, TokenT &token, bool &skipped_newline) { // re-initialize the preserve comments state preserve_comments = boost::wave::need_preserve_comments(ctx.get_language()); return (this->*state)(token, skipped_newline); } template
inline bool eat_whitespace
::general(TokenT &token, bool &skipped_newline) { using namespace boost::wave; token_id id = token_id(token); if (T_NEWLINE == id || T_CPPCOMMENT == id) { state = &eat_whitespace::newline; } else if (T_SPACE == id || T_SPACE2 == id || T_CCOMMENT == id) { state = &eat_whitespace::whitespace; if (util::ccomment_has_newline(token)) skipped_newline = true; if ((!preserve_comments || T_CCOMMENT != id) && token.get_value().size() > 1) { token.set_value(" "); // replace with a single space } } else { state = &eat_whitespace::general; } return false; } template
inline bool eat_whitespace
::newline(TokenT &token, bool &skipped_newline) { using namespace boost::wave; token_id id = token_id(token); if (T_NEWLINE == id || T_CPPCOMMENT == id) { skipped_newline = true; state = &eat_whitespace::newline_2nd; return T_NEWLINE == id || skip_cppcomment(id); } else if (T_SPACE != id && T_SPACE2 != id && T_CCOMMENT != id) { return general(token, skipped_newline); } if (T_CCOMMENT == id) { if (util::ccomment_has_newline(token)) { skipped_newline = true; state = &eat_whitespace::newline_2nd; } if (preserve_comments) { state = &eat_whitespace::general; return false; } // fall through... } return true; } template
inline bool eat_whitespace
::newline_2nd(TokenT &token, bool &skipped_newline) { using namespace boost::wave; token_id id = token_id(token); if (T_SPACE == id || T_SPACE2 == id) return true; if (T_CCOMMENT == id) { if (util::ccomment_has_newline(token)) skipped_newline = true; if (preserve_comments) { state = &eat_whitespace::general; return false; } return true; } if (T_NEWLINE != id && T_CPPCOMMENT != id) return general(token, skipped_newline); skipped_newline = true; return T_NEWLINE == id || skip_cppcomment(id); } template
inline bool eat_whitespace
::whitespace(TokenT &token, bool &skipped_newline) { using namespace boost::wave; token_id id = token_id(token); if (T_SPACE != id && T_SPACE2 != id && T_CCOMMENT != id && T_CPPCOMMENT != id) { return general(token, skipped_newline); } if (T_CCOMMENT == id) { if (util::ccomment_has_newline(token)) skipped_newline = true; return !preserve_comments; } return T_SPACE == id || T_SPACE2 == id || skip_cppcomment(id); } /////////////////////////////////////////////////////////////////////////////// } // namespace context_policies } // namespace wave } // namespace boost // the suffix header occurs after all of the code #ifdef BOOST_HAS_ABI_HEADERS #include BOOST_ABI_SUFFIX #endif #endif // !defined(WHITESPACE_HANDLING_HPP_INCLUDED)
whitespace_handling.hpp
网页地址
文件地址
上一页
11/11 下一页
下载
( 6 KB )
Comments
Total ratings:
0
Average rating:
无评论
of 10
Would you like to comment?
Join now
, or
Logon
if you are already a member.