x
Yes
No
Do you want to visit DriveHQ English website?
首页
产品服务
价格
免费试用
下载客户端
关于我们
云文件服务
|
云备份服务
|
FTP服务
|
企业邮箱服务
|
网站托管
|
客户端软件
云文件服务
云备份服务
FTP服务
企业级邮箱服务
网站托管
客户端软件
cpp_ifblock.hpp - Hosted on DriveHQ Cloud IT Platform
返回上层目录
上传
下载
共享
发布
新建文件夹
新建文件
复制
剪切
删除
粘贴
评论
升级服务
路径: \\game3dprogramming\materials\GameFactory\GameFactoryDemo\references\boost_1_35_0\boost\wave\util\cpp_ifblock.hpp
旋转
特效
属性
历史版本
/*============================================================================= Boost.Wave: A Standard compliant C++ preprocessor library 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(CPP_IFBLOCK_HPP_D4676B36_00C5_41F4_BC9F_9CBBAE3B8006_INCLUDED) #define CPP_IFBLOCK_HPP_D4676B36_00C5_41F4_BC9F_9CBBAE3B8006_INCLUDED #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 util { /////////////////////////////////////////////////////////////////////////////// // the class if_blocks handles recursive conditional compilation contexts class if_block { public: if_block() : status(true), some_part_status(true), enclosing_status(true), is_in_else(false) { } if_block(bool status_, bool enclosing_status_) : status(status_), some_part_status(status_), enclosing_status(enclosing_status_), is_in_else(false) { } void set_status(bool status_) { status = status_; if (status_) some_part_status = true; } bool get_status() const { return status; } bool get_some_part_status() const { return some_part_status; } bool get_enclosing_status() const { return enclosing_status; } bool get_in_else() const { return is_in_else; } void set_in_else() { is_in_else = true; } private: bool status; // Current block is true bool some_part_status; // One of the preceding or current #if/#elif was true bool enclosing_status; // Enclosing #if block is true bool is_in_else; // Inside the #else part }; /////////////////////////////////////////////////////////////////////////////// // stack of conditional compilation contexts class if_block_stack : private std::stack
{ public: typedef std::stack
::size_type size_type; void enter_if_block(bool new_status) { // If enclosing block is false, then this block is also false bool enclosing_status = get_status(); this->push (value_type (new_status && enclosing_status, enclosing_status)); } bool enter_elif_block(bool new_status) { if (!is_inside_ifpart()) return false; // #elif without matching #if if (get_enclosing_status()) { if (get_status()) { // entered a (false) #elif block from a true block this->top().set_status(false); } else if (new_status && !this->top().get_some_part_status()) { // Entered true #elif block and no previous block was true this->top().set_status(new_status); } } return true; } bool enter_else_block() { if (!is_inside_ifpart()) return false; // #else without matching #if if (get_enclosing_status()) { if (!this->top().get_some_part_status()) { // Entered (true) #else block and no previous block was true this->top().set_status(true); } else if (get_status()) { // Entered (false) #else block from true block this->top().set_status(false); } // Set else flag this->top().set_in_else(); } return true; } bool exit_if_block() { if (0 == this->size()) return false; // #endif without matching #if this->pop(); return true; } // return, whether the top (innermost) condition is true or false bool get_status() const { return 0 == this->size() || this->top().get_status(); } bool get_some_part_status() const { return 0 == this->size() || this->top().get_some_part_status(); } bool get_enclosing_status() const { return 0 == this->size() || this->top().get_enclosing_status(); } size_type get_if_block_depth() const { return this->size(); } protected: bool is_inside_ifpart() const { return 0 != this->size() && !this->top().get_in_else(); } bool is_inside_elsepart() const { return 0 != this->size() && this->top().get_in_else(); } }; /////////////////////////////////////////////////////////////////////////////// } // namespace util } // 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(CPP_IFBLOCK_HPP_D4676B36_00C5_41F4_BC9F_9CBBAE3B8006_INCLUDED)
cpp_ifblock.hpp
网页地址
文件地址
上一页 1/19
下一页
下载
( 5 KB )
Comments
Total ratings:
0
Average rating:
无评论
of 10
Would you like to comment?
Join now
, or
Logon
if you are already a member.