⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 t_1_024.cpp

📁 Boost provides free peer-reviewed portable C++ source libraries. We emphasize libraries that work
💻 CPP
字号:
/*=============================================================================    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)=============================================================================*/// Tests more complex macro expansion. // token-pasting macro#define CAT(a, b) PRIMITIVE_CAT(a, b)#define PRIMITIVE_CAT(a, b) a ## b// splits a value that is about to expand into two parameters and returns // either the zero-th or one-th element.#define SPLIT(n, im) PRIMITIVE_CAT(SPLIT_, n)(im)#define SPLIT_0(a, b) a#define SPLIT_1(a, b) b// detects if the parameter is nullary parentheses () or something else.  // passing non-nullary parenthesis is invalid input.#define IS_NULLARY(expr) \    SPLIT( \        0, \        CAT(IS_NULLARY_R_, IS_NULLARY_T expr) \    ) \    /**/#define IS_NULLARY_T() 1#define IS_NULLARY_R_1 1, ?#define IS_NULLARY_R_IS_NULLARY_T 0, ?// expands to a macro that eats an n-element parenthesized expression.#define EAT(n) PRIMITIVE_CAT(EAT_, n)#define EAT_0()#define EAT_1(a)#define EAT_2(a, b)#define EAT_3(a, b, c)// expands to a macro that removes the parentheses from an n-element // parenthesized expression#define REM(n) PRIMITIVE_CAT(REM_, n)#define REM_0()#define REM_1(a) a#define REM_2(a, b) a, b#define REM_3(a, b, c) a, b, c// expands to nothing#define NIL// expands to 1 if x is less than y otherwise, it expands to 0#define LESS(x, y) \    IS_NULLARY( \        PRIMITIVE_CAT(LESS_, y)( \            EAT(1), PRIMITIVE_CAT(LESS_, x) \        )() \    ) \    /**/#define LESS_0(a, b) a(EAT(2)) b(REM(1), NIL)#define LESS_1(a, b) a(LESS_0) b(REM(1), NIL)#define LESS_2(a, b) a(LESS_1) b(REM(1), NIL)#define LESS_3(a, b) a(LESS_2) b(REM(1), NIL)#define LESS_4(a, b) a(LESS_3) b(REM(1), NIL)#define LESS_5(a, b) a(LESS_4) b(REM(1), NIL)// expands to the binary one's compliment of a binary input value.  i.e. 0 or 1#define COMPL(n) PRIMITIVE_CAT(COMPL_, n)#define COMPL_0 1#define COMPL_1 0// these do the obvious...#define GREATER(x, y) LESS(y, x)#define LESS_EQUAL(x, y) COMPL(LESS(y, x))#define GREATER_EQUAL(x, y) COMPL(LESS(x, y))// causes another rescan...#define SCAN(x) x// expands to 1 if x is not equal to y. this one contains a workaround...#define NOT_EQUAL(x, y) \    IS_NULLARY( \        SCAN( \            PRIMITIVE_CAT(LESS_, x)( \                EAT(1), \                PRIMITIVE_CAT(LESS_, y) EAT(2) \            )((), ...) \        ) \    ) \    /**/#define EQUAL(x, y) COMPL(NOT_EQUAL(x, y))//R #line 95 "t_1_024.cpp"LESS(2, 3)            //R 1 LESS(3, 2)            //R 0 LESS(3, 3)            //R 0 GREATER(2, 3)         //R 0 GREATER(3, 2)         //R 1 GREATER(3, 3)         //R 0 LESS_EQUAL(2, 3)      //R 1 LESS_EQUAL(3, 2)      //R 0 LESS_EQUAL(3, 3)      //R 1 GREATER_EQUAL(2, 3)   //R 0 GREATER_EQUAL(3, 2)   //R 1 GREATER_EQUAL(3, 3)   //R 1 NOT_EQUAL(2, 3)       //R 1 NOT_EQUAL(3, 2)       //R 1 NOT_EQUAL(3, 3)       //R 0 EQUAL(2, 3)           //R 0 EQUAL(3, 2)           //R 0 EQUAL(3, 3)           //R 1 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -