Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/branches/consolecommands2/src/libraries/util/VA_NARGS.h @ 6554

Last change on this file since 6554 was 6454, checked in by rgrieder, 15 years ago

3 build fixes for MSVC.

  • Property svn:eol-style set to native
File size: 2.3 KB
RevLine 
[6452]1/*
2 *   ORXONOX - the hottest 3D action shooter ever to exist
3 *                    > www.orxonox.net <
4 *
5 *
6 *   License notice:
7 *
8 *   This program is free software; you can redistribute it and/or
9 *   modify it under the terms of the GNU General Public License
10 *   as published by the Free Software Foundation; either version 2
11 *   of the License, or (at your option) any later version.
12 *
13 *   This program is distributed in the hope that it will be useful,
14 *   but WITHOUT ANY WARRANTY; without even the implied warranty of
15 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16 *   GNU General Public License for more details.
17 *
18 *   You should have received a copy of the GNU General Public License
19 *   along with this program; if not, write to the Free Software
20 *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
21 *
22 *   Author:
23 *      Fabian 'x3n' Landau
24 *   Co-authors:
25 *      ...
26 *
27 */
28
29/**
30    @file
31    @brief Declaration of the ORXONOX_VA_NARGS macro which returns the number of arguments passed to a variadic macro.
32*/
33
[6454]34#include <boost/preprocessor/facilities/expand.hpp>
35
[6452]36/**
37    @brief Returns the number of arguments passed to a variadic macro. Important: The number of arguments must be greater than zero (ORXONOX_VA_NARGS() returns 1).
38*/
39#define ORXONOX_VA_NARGS(...) \
40    ORXONOX_VA_NARGS_CONCAT(__VA_ARGS__, ORXONOX_VA_NARGS_NUMBERS)
41
42
43// some helper macros //
44
45#define ORXONOX_VA_NARGS_CONCAT(...) \
[6454]46    BOOST_PP_EXPAND(ORXONOX_VA_NARGS_INTERN(__VA_ARGS__))
[6452]47
48#define ORXONOX_VA_NARGS_INTERN( \
49    arg1,  arg2,  arg3,  arg4,  arg5,  arg6,  arg7,  arg8,  arg9,  arg10, \
50    arg11, arg12, arg13, arg14, arg15, arg16, arg17, arg18, arg19, arg20, \
51    arg21, arg22, arg23, arg24, arg25, arg26, arg27, arg28, arg29, arg30, \
52    arg31, arg32, arg33, arg34, arg35, arg36, arg37, arg38, arg39, arg40, \
53    arg41, arg42, arg43, arg44, arg45, arg46, arg47, arg48, arg49, arg50, \
54    arg51, arg52, arg53, arg54, arg55, arg56, arg57, arg58, arg59, arg60, \
55    arg61, arg62, arg63, argn, ...) argn
56
57#define ORXONOX_VA_NARGS_NUMBERS \
58    63, 62, 61, 60, 59, 58, 57, 56, 55, 54, 53, 52, 51, 50, 49, 48, \
59    47, 46, 45, 44, 43, 42, 41, 40, 39, 38, 37, 36, 35, 34, 33, 32, \
60    31, 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, 16, \
61    15, 14, 13, 12, 11, 10,  9,  8,  7,  6,  5,  4,  3,  2,  1,  0
Note: See TracBrowser for help on using the repository browser.