update boost
This commit is contained in:
@@ -25,24 +25,28 @@
|
||||
/** \def BOOST_VMD_ASSERT(...)
|
||||
|
||||
\brief Conditionally causes an error to be generated.
|
||||
|
||||
|
||||
... = variadic parameters, maximum of 2 will be considered.
|
||||
Any variadic parameters beyond the maximum of 2 are just ignored.
|
||||
|
||||
|
||||
The first variadic parameter is:
|
||||
|
||||
cond = A condition that determines whether an assertion occurs. Valid values range from 0 to BOOST_PP_LIMIT_MAG.
|
||||
|
||||
The second variadic parameter (optional) is:
|
||||
|
||||
errstr = An error string for generating a compiler error when using the VC++ compiler.
|
||||
The VC++ compiler is incapable of producing a preprocessor error so when the 'cond'
|
||||
is 0, a compiler error is generated by outputting C++ code in the form of:
|
||||
|
||||
typedef char errstr[-1];
|
||||
|
||||
The errstr defaults to BOOST_VMD_ASSERT_ERROR if not supplied.
|
||||
It is only relevant for VC++.
|
||||
The second variadic parameter (optional) is:
|
||||
|
||||
errstr = An error string for generating a compiler error when using the VC++ compiler.
|
||||
The VC++ compiler is incapable of producing a preprocessor error so when the 'cond'
|
||||
is 0, a compiler error is generated by outputting C++ code in the form of:
|
||||
|
||||
@code
|
||||
|
||||
typedef char errstr[-1];
|
||||
|
||||
@endcode
|
||||
|
||||
The errstr defaults to BOOST_VMD_ASSERT_ERROR if not supplied.
|
||||
It is only relevant for VC++.
|
||||
|
||||
returns = If cond expands to 0, this macro causes an error. Otherwise, it expands to nothing.
|
||||
For all compilers other than Visual C++ the error is a preprocessing error.
|
||||
|
||||
@@ -31,9 +31,11 @@
|
||||
debug mode. However an end-user can force the macro
|
||||
to check or not check by defining the macro
|
||||
BOOST_VMD_ASSERT_DATA to 1 or 0 respectively.
|
||||
|
||||
|
||||
sequence = a possible Boost PP array.
|
||||
|
||||
@code
|
||||
|
||||
returns = Normally the macro returns nothing.
|
||||
|
||||
If the sequence is a Boost PP array, nothing is
|
||||
@@ -48,6 +50,8 @@
|
||||
without producing output if the sequence is not a
|
||||
Boost PP array.
|
||||
|
||||
@endcode
|
||||
|
||||
*/
|
||||
|
||||
/** \def BOOST_VMD_ASSERT_IS_ARRAY_D(d,sequence)
|
||||
@@ -61,10 +65,12 @@
|
||||
debug mode. However an end-user can force the macro
|
||||
to check or not check by defining the macro
|
||||
BOOST_VMD_ASSERT_DATA to 1 or 0 respectively.
|
||||
|
||||
d = The next available BOOST_PP_WHILE iteration.
|
||||
|
||||
d = The next available BOOST_PP_WHILE iteration. <br/>
|
||||
sequence = a possible Boost PP sequence.
|
||||
|
||||
@code
|
||||
|
||||
returns = Normally the macro returns nothing.
|
||||
|
||||
If the sequence is a Boost PP array, nothing is
|
||||
@@ -79,6 +85,8 @@
|
||||
without producing output if the sequence is not a
|
||||
Boost PP array.
|
||||
|
||||
@endcode
|
||||
|
||||
*/
|
||||
|
||||
#if !BOOST_VMD_ASSERT_DATA
|
||||
|
||||
@@ -41,9 +41,11 @@
|
||||
debug mode. However an end-user can force the macro
|
||||
to check or not check by defining the macro
|
||||
BOOST_VMD_ASSERT_DATA to 1 or 0 respectively.
|
||||
|
||||
|
||||
.... = variadic input, for VC++8 this must be a single parameter.
|
||||
|
||||
@code
|
||||
|
||||
returns = Normally the macro returns nothing.
|
||||
|
||||
If the input is empty, nothing is output.
|
||||
@@ -56,6 +58,8 @@
|
||||
For all other compilers a compiler error is forced
|
||||
without producing output if the input is not empty.
|
||||
|
||||
@endcode
|
||||
|
||||
It is recommended to append BOOST_PP_EMPTY() to whatever input
|
||||
is being tested in order to avoid possible warning messages
|
||||
from some compilers about no parameters being passed to the macro
|
||||
|
||||
@@ -36,11 +36,13 @@
|
||||
|
||||
The variadic parameters are:
|
||||
|
||||
sequence = A sequence to test as an identifier.
|
||||
sequence = A sequence to test as an identifier. <br/>
|
||||
ids (optional) = The data may take one of two forms:
|
||||
it is either one or more single identifiers
|
||||
or a single Boost PP tuple of identifiers.
|
||||
|
||||
@code
|
||||
|
||||
returns = Normally the macro returns nothing.
|
||||
|
||||
If the sequence is an identifier, nothing is
|
||||
@@ -58,19 +60,29 @@
|
||||
without producing output if the sequence is not an
|
||||
identifier.
|
||||
|
||||
@endcode
|
||||
|
||||
Identifiers are registered in VMD with:
|
||||
|
||||
@code
|
||||
|
||||
#define BOOST_VMD_REG_XXX (XXX) where XXX is a v-identifier.
|
||||
|
||||
@endcode
|
||||
|
||||
The identifier must be registered to be found.
|
||||
|
||||
Identifiers are pre-detected in VMD with:
|
||||
|
||||
@code
|
||||
|
||||
#define BOOST_VMD_DETECT_XXX_XXX where XXX is an identifier.
|
||||
|
||||
@endcode
|
||||
|
||||
If you specify optional ids and have not specified the detection
|
||||
of an optional id, that id will never match an identifier.
|
||||
|
||||
|
||||
*/
|
||||
|
||||
/** \def BOOST_VMD_ASSERT_IS_IDENTIFIER_D(d,...)
|
||||
@@ -85,16 +97,18 @@
|
||||
to check or not check by defining the macro
|
||||
BOOST_VMD_ASSERT_DATA to 1 or 0 respectively.
|
||||
|
||||
d = The next available BOOST_PP_WHILE iteration.
|
||||
d = The next available BOOST_PP_WHILE iteration. <br/>
|
||||
... = variadic parameters
|
||||
|
||||
The variadic parameters are:
|
||||
|
||||
sequence = A sequence to test as an identifier.
|
||||
sequence = A sequence to test as an identifier. <br/>
|
||||
ids (optional) = The data may take one of two forms:
|
||||
it is either one or more single identifiers
|
||||
or a single Boost PP tuple of identifiers.
|
||||
|
||||
@code
|
||||
|
||||
returns = Normally the macro returns nothing.
|
||||
|
||||
If the sequence is an identifier, nothing is
|
||||
@@ -112,16 +126,26 @@
|
||||
without producing output if the sequence is not an
|
||||
identifier.
|
||||
|
||||
@endcode
|
||||
|
||||
Identifiers are registered in VMD with:
|
||||
|
||||
@code
|
||||
|
||||
#define BOOST_VMD_REG_XXX (XXX) where XXX is a v-identifier.
|
||||
|
||||
@endcode
|
||||
|
||||
The identifier must be registered to be found.
|
||||
|
||||
Identifiers are pre-detected in VMD with:
|
||||
|
||||
@code
|
||||
|
||||
#define BOOST_VMD_DETECT_XXX_XXX where XXX is an identifier.
|
||||
|
||||
@endcode
|
||||
|
||||
If you specify optional ids and have not specified the detection
|
||||
of an optional id, that id will never match an identifier.
|
||||
|
||||
|
||||
@@ -34,6 +34,8 @@
|
||||
|
||||
sequence = a possible Boost PP list.
|
||||
|
||||
@code
|
||||
|
||||
returns = Normally the macro returns nothing.
|
||||
|
||||
If the sequence is a Boost PP list, nothing is
|
||||
@@ -48,6 +50,8 @@
|
||||
without producing output if the parameter is not a
|
||||
Boost PP list.
|
||||
|
||||
@endcode
|
||||
|
||||
*/
|
||||
|
||||
/** \def BOOST_VMD_ASSERT_IS_LIST_D(d,sequence)
|
||||
@@ -62,9 +66,11 @@
|
||||
to check or not check by defining the macro
|
||||
BOOST_VMD_ASSERT_DATA to 1 or 0 respectively.
|
||||
|
||||
d = The next available BOOST_PP_WHILE iteration.
|
||||
d = The next available BOOST_PP_WHILE iteration. <br/>
|
||||
sequence = a possible Boost PP list.
|
||||
|
||||
@code
|
||||
|
||||
returns = Normally the macro returns nothing.
|
||||
|
||||
If the sequence is a Boost PP list, nothing is
|
||||
@@ -79,6 +85,8 @@
|
||||
without producing output if the parameter is not a
|
||||
Boost PP list.
|
||||
|
||||
@endcode
|
||||
|
||||
*/
|
||||
|
||||
#if !BOOST_VMD_ASSERT_DATA
|
||||
|
||||
@@ -34,6 +34,8 @@
|
||||
|
||||
sequence = a possible number.
|
||||
|
||||
@code
|
||||
|
||||
returns = Normally the macro returns nothing.
|
||||
|
||||
If the sequence is a number, nothing is
|
||||
@@ -48,6 +50,8 @@
|
||||
without producing output if the sequence is not a
|
||||
number.
|
||||
|
||||
@endcode
|
||||
|
||||
*/
|
||||
|
||||
#if !BOOST_VMD_ASSERT_DATA
|
||||
|
||||
@@ -31,9 +31,11 @@
|
||||
debug mode. However an end-user can force the macro
|
||||
to check or not check by defining the macro
|
||||
BOOST_VMD_ASSERT_DATA to 1 or 0 respectively.
|
||||
|
||||
|
||||
sequence = a possible Boost PP seq.
|
||||
|
||||
@code
|
||||
|
||||
returns = Normally the macro returns nothing.
|
||||
|
||||
If the sequence is a Boost PP seq, nothing is
|
||||
@@ -48,6 +50,8 @@
|
||||
without producing output if the sequence is not a
|
||||
Boost PP seq.
|
||||
|
||||
@endcode
|
||||
|
||||
*/
|
||||
|
||||
/** \def BOOST_VMD_ASSERT_IS_SEQ_D(d,sequence)
|
||||
@@ -62,9 +66,11 @@
|
||||
to check or not check by defining the macro
|
||||
BOOST_VMD_ASSERT_DATA to 1 or 0 respectively.
|
||||
|
||||
d = The next available BOOST_PP_WHILE iteration.
|
||||
d = The next available BOOST_PP_WHILE iteration. <br/>
|
||||
sequence = a possible Boost PP seq.
|
||||
|
||||
@code
|
||||
|
||||
returns = Normally the macro returns nothing.
|
||||
|
||||
If the sequence is a Boost PP seq, nothing is
|
||||
@@ -79,6 +85,8 @@
|
||||
without producing output if the sequence is not a
|
||||
Boost PP seq.
|
||||
|
||||
@endcode
|
||||
|
||||
*/
|
||||
|
||||
#if !BOOST_VMD_ASSERT_DATA
|
||||
|
||||
@@ -34,6 +34,8 @@
|
||||
|
||||
sequence = a possible Boost PP tuple.
|
||||
|
||||
@code
|
||||
|
||||
returns = Normally the macro returns nothing.
|
||||
|
||||
If the sequence is a Boost PP tuple, nothing is
|
||||
@@ -48,6 +50,8 @@
|
||||
without producing output if the sequence is not a
|
||||
Boost PP tuple.
|
||||
|
||||
@endcode
|
||||
|
||||
*/
|
||||
|
||||
#if !BOOST_VMD_ASSERT_DATA
|
||||
|
||||
@@ -34,6 +34,8 @@
|
||||
|
||||
sequence = a possible VMD type.
|
||||
|
||||
@code
|
||||
|
||||
returns = Normally the macro returns nothing.
|
||||
|
||||
If the sequence is a VMD type, nothing is
|
||||
@@ -48,6 +50,8 @@
|
||||
without producing output if the sequence is not a
|
||||
VMD type.
|
||||
|
||||
@endcode
|
||||
|
||||
*/
|
||||
|
||||
/** \def BOOST_VMD_ASSERT_IS_TYPE_D(d,sequence)
|
||||
@@ -62,9 +66,11 @@
|
||||
to check or not check by defining the macro
|
||||
BOOST_VMD_ASSERT_DATA to 1 or 0 respectively.
|
||||
|
||||
d = The next available BOOST_PP_WHILE iteration.
|
||||
d = The next available BOOST_PP_WHILE iteration. <br/>
|
||||
sequence = a possible VMD type.
|
||||
|
||||
@code
|
||||
|
||||
returns = Normally the macro returns nothing.
|
||||
|
||||
If the sequence is a VMD type, nothing is
|
||||
@@ -79,6 +85,8 @@
|
||||
without producing output if the sequence is not a
|
||||
VMD type.
|
||||
|
||||
@endcode
|
||||
|
||||
*/
|
||||
|
||||
#if !BOOST_VMD_ASSERT_DATA
|
||||
|
||||
@@ -493,6 +493,16 @@
|
||||
(d,vseq1,vseq2,be1,be2,type) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_OV0(vseq1,vseq2) \
|
||||
BOOST_VMD_DETAIL_EQUAL_EMPTY \
|
||||
( \
|
||||
vseq1, \
|
||||
, \
|
||||
BOOST_VMD_IS_EMPTY(vseq1), \
|
||||
1, \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_OV1(vseq1,vseq2) \
|
||||
BOOST_VMD_DETAIL_EQUAL_EMPTY \
|
||||
( \
|
||||
@@ -514,6 +524,17 @@
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_D_OV0(d,vseq1,vseq2) \
|
||||
BOOST_VMD_DETAIL_EQUAL_EMPTY_D \
|
||||
( \
|
||||
d, \
|
||||
vseq1, \
|
||||
, \
|
||||
BOOST_VMD_IS_EMPTY(vseq1), \
|
||||
1, \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_EQUAL_D_OV1(d,vseq1,vseq2) \
|
||||
BOOST_VMD_DETAIL_EQUAL_EMPTY_D \
|
||||
( \
|
||||
|
||||
65
linx64/include/boost/vmd/detail/is_general_identifier.hpp
Normal file
65
linx64/include/boost/vmd/detail/is_general_identifier.hpp
Normal file
@@ -0,0 +1,65 @@
|
||||
|
||||
// (C) Copyright Edward Diener 2020
|
||||
// Use, modification and distribution are subject to 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(BOOST_VMD_DETAIL_IS_GENERAL_IDENTIFIER_HPP)
|
||||
#define BOOST_VMD_DETAIL_IS_GENERAL_IDENTIFIER_HPP
|
||||
|
||||
#include <boost/preprocessor/comparison/equal.hpp>
|
||||
#include <boost/preprocessor/control/iif.hpp>
|
||||
#include <boost/preprocessor/logical/bitor.hpp>
|
||||
#include <boost/preprocessor/punctuation/is_begin_parens.hpp>
|
||||
#include <boost/preprocessor/variadic/size.hpp>
|
||||
#include <boost/preprocessor/variadic/elem.hpp>
|
||||
#include <boost/vmd/identity.hpp>
|
||||
#include <boost/vmd/is_empty.hpp>
|
||||
#include <boost/vmd/detail/identifier_concat.hpp>
|
||||
|
||||
#define BOOST_VMD_DETAIL_IS_GENERAL_IDENTIFIER_VSEQ_RESULT(ignored) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_VMD_IDENTITY(1)(ignored) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_IS_GENERAL_IDENTIFIER_VSEQ_ID(vseq) \
|
||||
BOOST_VMD_DETAIL_IS_GENERAL_IDENTIFIER_VSEQ_RESULT(BOOST_VMD_DETAIL_IDENTIFIER_CONCATENATE(vseq)) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_IS_GENERAL_IDENTIFIER_VSEQ(vseq) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_BITOR \
|
||||
( \
|
||||
BOOST_VMD_IS_EMPTY(vseq), \
|
||||
BOOST_PP_IS_BEGIN_PARENS(vseq) \
|
||||
), \
|
||||
BOOST_VMD_IDENTITY(0), \
|
||||
BOOST_VMD_DETAIL_IS_GENERAL_IDENTIFIER_VSEQ_ID \
|
||||
) \
|
||||
(vseq) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_IS_GENERAL_IDENTIFIER_SINGLE(...) \
|
||||
BOOST_VMD_DETAIL_IS_GENERAL_IDENTIFIER_VSEQ(BOOST_PP_VARIADIC_ELEM(0,__VA_ARGS__)) \
|
||||
/**/
|
||||
|
||||
#define BOOST_VMD_DETAIL_IS_GENERAL_IDENTIFIER(...) \
|
||||
BOOST_VMD_IDENTITY_RESULT \
|
||||
( \
|
||||
BOOST_PP_IIF \
|
||||
( \
|
||||
BOOST_PP_EQUAL(BOOST_PP_VARIADIC_SIZE(__VA_ARGS__),1), \
|
||||
BOOST_VMD_DETAIL_IS_GENERAL_IDENTIFIER_SINGLE, \
|
||||
BOOST_VMD_IDENTITY(0) \
|
||||
) \
|
||||
(__VA_ARGS__) \
|
||||
) \
|
||||
/**/
|
||||
|
||||
#endif /* BOOST_VMD_DETAIL_IS_GENERAL_IDENTIFIER_HPP */
|
||||
File diff suppressed because it is too large
Load Diff
@@ -26,8 +26,8 @@
|
||||
/** \def BOOST_VMD_ELEM(elem,...)
|
||||
|
||||
\brief Accesses an element of a sequence.
|
||||
|
||||
elem = A sequence element number. From 0 to sequence size - 1.
|
||||
|
||||
elem = A sequence element number. From 0 to sequence size - 1. <br/>
|
||||
... = Variadic parameters.
|
||||
|
||||
The first variadic parameter is required and is the sequence to access.
|
||||
@@ -62,6 +62,8 @@
|
||||
parameters do not change what it means that an element is successfully accessed but they
|
||||
do change what data is returned by the macro.
|
||||
|
||||
@code
|
||||
|
||||
Splitting: Splitting allows the macro to return the rest of the sequence
|
||||
after the element accessed.
|
||||
|
||||
@@ -132,6 +134,8 @@
|
||||
filter or if there are no matching identifiers the BOOST_VMD_RETURN_INDEX is ignored
|
||||
and no index is returned as part of the result.
|
||||
|
||||
@endcode
|
||||
|
||||
returns = With no optional parameters the element accessed is returned, or emptiness if
|
||||
element is outside the bounds of the sequence. Filters and matching identifiers
|
||||
can change the meaning of whether the element accessed is returned or failure
|
||||
@@ -159,9 +163,9 @@
|
||||
/** \def BOOST_VMD_ELEM_D(d,elem,...)
|
||||
|
||||
\brief Accesses an element of a sequence. Re-entrant version.
|
||||
|
||||
d = The next available BOOST_PP_WHILE iteration.
|
||||
elem = A sequence element number. From 0 to sequence size - 1.
|
||||
|
||||
d = The next available BOOST_PP_WHILE iteration. <br/>
|
||||
elem = A sequence element number. From 0 to sequence size - 1. <br/>
|
||||
... = Variadic parameters.
|
||||
|
||||
The first variadic parameter is required and is the sequence to access.
|
||||
@@ -196,6 +200,8 @@
|
||||
parameters do not change what it means that an element is successfully accessed but they
|
||||
do change what data is returned by the macro.
|
||||
|
||||
@code
|
||||
|
||||
Splitting: Splitting allows the macro to return the rest of the sequence
|
||||
after the element accessed.
|
||||
|
||||
@@ -264,6 +270,8 @@
|
||||
filter or if there are no matching identifiers the BOOST_VMD_RETURN_INDEX is ignored
|
||||
and no index is returned as part of the result.
|
||||
|
||||
@endcode
|
||||
|
||||
returns = With no optional parameters the element accessed is returned, or emptiness if
|
||||
element is outside the bounds of the sequence. Filters and matching identifiers
|
||||
can change the meaning of whether the element accessed is returned or failure
|
||||
|
||||
@@ -64,7 +64,7 @@
|
||||
|
||||
\brief Converts a sequence to comma-separated elements which are the elements of the sequence. Re-entrant version.
|
||||
|
||||
d = The next available BOOST_PP_WHILE iteration.
|
||||
d = The next available BOOST_PP_WHILE iteration. <br/>
|
||||
... = Variadic parameters.
|
||||
|
||||
The first variadic parameter is required and is the sequence to convert.
|
||||
|
||||
@@ -26,7 +26,7 @@
|
||||
|
||||
\brief Tests any two sequences for equality.
|
||||
|
||||
sequence = First sequence.
|
||||
sequence = First sequence. <br/>
|
||||
... = variadic parameters, maximum of 2.
|
||||
|
||||
The first variadic parameter is required and is the second sequence to test.
|
||||
@@ -57,8 +57,8 @@
|
||||
|
||||
\brief Tests any two sequences for equality. Re-entrant version.
|
||||
|
||||
d = The next available BOOST_PP_WHILE iteration.
|
||||
sequence = First sequence.
|
||||
d = The next available BOOST_PP_WHILE iteration. <br/>
|
||||
sequence = First sequence. <br/>
|
||||
... = variadic parameters, maximum of 2.
|
||||
|
||||
The first variadic parameter is required and is the second sequence to test.
|
||||
|
||||
@@ -74,7 +74,7 @@
|
||||
|
||||
\brief Returns the type of a sequence as a VMD type. Re-entrant version.
|
||||
|
||||
d = The next available BOOST_PP_WHILE iteration.
|
||||
d = The next available BOOST_PP_WHILE iteration. <br/>
|
||||
... = variadic parameters.
|
||||
|
||||
The first variadic parameter is required and is the sequence whose type we are getting.
|
||||
|
||||
@@ -52,7 +52,7 @@
|
||||
The macro checks that the sequence is a Boost PP array.
|
||||
It returns 1 if it is an array, else if returns 0.
|
||||
|
||||
d = The next available BOOST_PP_WHILE iteration.
|
||||
d = The next available BOOST_PP_WHILE iteration. <br/>
|
||||
sequence = a possible Boost PP array.
|
||||
|
||||
returns = 1 if it is an array, else returns 0.
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
|
||||
// (C) Copyright Edward Diener 2011-2015
|
||||
// (C) Copyright Edward Diener 2011-2015,2019
|
||||
// Use, modification and distribution are subject to 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).
|
||||
@@ -33,18 +33,25 @@
|
||||
The macro is a variadic macro taking any input.
|
||||
For the VC++8 compiler (VS2005) the macro takes a single parameter of input to check.
|
||||
|
||||
The macro is not perfect, and can not be so. The problem
|
||||
area is if the input to be checked is a function-like
|
||||
macro name, in which case either a compiler error can result
|
||||
or a false result can occur.
|
||||
For all levels of C++ prior to C++20 the macro is not perfect,
|
||||
and can not be so. The problem area is if the input to be
|
||||
checked is a function-like macro name, in which case either
|
||||
a compiler error can result or a false result can occur.
|
||||
|
||||
For C++20, with its support for the new __VA_OPT__ preprocessor
|
||||
construct, the macro will always work correctly no matter what
|
||||
the variadic input, and is therefore 100% reliable.
|
||||
|
||||
This macro is a replacement, using variadic macro support,
|
||||
for the undocumented macro BOOST_PP_IS_EMPTY in the Boost
|
||||
PP library. The code is taken from a posting by Paul Mensonides
|
||||
of a variadic version for BOOST_PP_IS_EMPTY, and changed
|
||||
in order to also support VC++.
|
||||
in order to also support VC++. The code for the C++20
|
||||
implementation of the macro, using the __VA_OPT__ preprocessor
|
||||
construct, is the author's own and reuses code added to the
|
||||
Boost preprocessor library by this author.
|
||||
|
||||
.... = variadic input, for VC++8 this must be a single parameter
|
||||
... = variadic input, for VC++8 this must be a single parameter
|
||||
|
||||
returns = 1 if the input is empty, 0 if it is not
|
||||
|
||||
@@ -74,7 +81,26 @@
|
||||
|
||||
#else
|
||||
|
||||
# if defined(__cplusplus) && __cplusplus > 201703L
|
||||
#include <boost/preprocessor/variadic/has_opt.hpp>
|
||||
#include <boost/preprocessor/facilities/is_empty.hpp>
|
||||
#define BOOST_VMD_IS_EMPTY(...) \
|
||||
BOOST_VMD_DETAIL_IS_EMPTY_IIF \
|
||||
( \
|
||||
BOOST_PP_VARIADIC_HAS_OPT() \
|
||||
) \
|
||||
( \
|
||||
BOOST_PP_IS_EMPTY_OPT, \
|
||||
BOOST_VMD_IS_EMPTY_NO_OPT \
|
||||
) \
|
||||
(__VA_ARGS__) \
|
||||
/**/
|
||||
# else
|
||||
#define BOOST_VMD_IS_EMPTY(...) \
|
||||
BOOST_VMD_IS_EMPTY_NO_OPT(__VA_ARGS__) \
|
||||
/**/
|
||||
# endif
|
||||
#define BOOST_VMD_IS_EMPTY_NO_OPT(...) \
|
||||
BOOST_VMD_DETAIL_IS_EMPTY_IIF \
|
||||
( \
|
||||
BOOST_PP_IS_BEGIN_PARENS \
|
||||
@@ -88,8 +114,6 @@
|
||||
) \
|
||||
(__VA_ARGS__) \
|
||||
/**/
|
||||
|
||||
#endif /* BOOST_VMD_MSVC_V8 */
|
||||
|
||||
#endif /* BOOST_PP_VARIADICS */
|
||||
#endif /* BOOST_VMD_IS_EMPTY_HPP */
|
||||
|
||||
@@ -35,7 +35,7 @@
|
||||
|
||||
sequence = a possible empty array
|
||||
|
||||
returns = 1 if the sequence is an empty Boost PP array
|
||||
returns = 1 if the sequence is an empty Boost PP array,
|
||||
0 if it is not.
|
||||
|
||||
The macro will generate a preprocessing error if the sequence
|
||||
@@ -67,10 +67,10 @@
|
||||
size element is 0 and the second element is a tuple with a single
|
||||
empty element, ie. '(0,())'.
|
||||
|
||||
d = The next available BOOST_PP_WHILE iteration.
|
||||
d = The next available BOOST_PP_WHILE iteration. <br/>
|
||||
sequence = a possible empty array
|
||||
|
||||
returns = 1 if the sequence is an empty Boost PP array
|
||||
returns = 1 if the sequence is an empty Boost PP array,
|
||||
0 if it is not.
|
||||
|
||||
The macro will generate a preprocessing error if the sequence
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
|
||||
sequence = a preprocessor parameter
|
||||
|
||||
returns = 1 if the sequence is an empty Boost PP list
|
||||
returns = 1 if the sequence is an empty Boost PP list,
|
||||
0 if it is not.
|
||||
|
||||
The macro will generate a preprocessing error if the input
|
||||
@@ -52,10 +52,10 @@
|
||||
An empty Boost PP list consists of the single identifier 'BOOST_PP_NIL'.
|
||||
This identifier also serves as a list terminator for a non-empty list.
|
||||
|
||||
d = The next available BOOST_PP_WHILE iteration
|
||||
d = The next available BOOST_PP_WHILE iteration <br/>
|
||||
sequence = a preprocessor parameter
|
||||
|
||||
returns = 1 if the sequence is an empty Boost PP list
|
||||
returns = 1 if the sequence is an empty Boost PP list,
|
||||
0 if it is not.
|
||||
|
||||
The macro will generate a preprocessing error if the input
|
||||
|
||||
59
linx64/include/boost/vmd/is_general_identifier.hpp
Normal file
59
linx64/include/boost/vmd/is_general_identifier.hpp
Normal file
@@ -0,0 +1,59 @@
|
||||
|
||||
// (C) Copyright Edward Diener 2020
|
||||
// Use, modification and distribution are subject to 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(BOOST_VMD_IS_GENERAL_IDENTIFIER_HPP)
|
||||
#define BOOST_VMD_IS_GENERAL_IDENTIFIER_HPP
|
||||
|
||||
#include <boost/vmd/detail/setup.hpp>
|
||||
|
||||
#if BOOST_PP_VARIADICS
|
||||
|
||||
#include <boost/vmd/detail/is_general_identifier.hpp>
|
||||
|
||||
/*
|
||||
|
||||
The succeeding comments in this file are in doxygen format.
|
||||
|
||||
*/
|
||||
|
||||
/** \file
|
||||
*/
|
||||
|
||||
/** \def BOOST_VMD_IS_GENERAL_IDENTIFIER(...)
|
||||
|
||||
\brief Tests whether a parameter is a general identifier.
|
||||
|
||||
... = variadic parameters
|
||||
|
||||
The first variadic parameter is required and it is the input to test.
|
||||
|
||||
Passing more than one variadic argument is an error.
|
||||
|
||||
@code
|
||||
|
||||
returns = 1 if the parameter is any general identifier and only a single variadic argument is given, otherwise 0.
|
||||
|
||||
@endcode
|
||||
|
||||
The argument to the macro should be a single possible identifier
|
||||
and not a VMD sequence of preprocessor tokens.
|
||||
|
||||
If the input is not a VMD data type this macro could lead to
|
||||
a preprocessor error. This is because the macro
|
||||
uses preprocessor concatenation to determine if the input
|
||||
is an identifier once it is determined that the input is not empty
|
||||
and does not start with parenthesis. If the data being concatenated would
|
||||
lead to an invalid preprocessor token the compiler can issue
|
||||
a preprocessor error.
|
||||
|
||||
*/
|
||||
|
||||
#define BOOST_VMD_IS_GENERAL_IDENTIFIER(...) \
|
||||
BOOST_VMD_DETAIL_IS_GENERAL_IDENTIFIER(__VA_ARGS__) \
|
||||
/**/
|
||||
|
||||
#endif /* BOOST_PP_VARIADICS */
|
||||
#endif /* BOOST_VMD_IS_GENERAL_IDENTIFIER_HPP */
|
||||
@@ -34,22 +34,34 @@
|
||||
The data may take one of two forms; it is either one or more single identifiers
|
||||
or a single Boost PP tuple of identifiers.
|
||||
|
||||
@code
|
||||
|
||||
returns = 1 if the parameter is an identifier, otherwise 0.
|
||||
|
||||
If the parameter is not an identifier,
|
||||
or if optional identifiers are specified and the identifier
|
||||
does not match any of the optional identifiers, the macro returns 0.
|
||||
|
||||
@endcode
|
||||
|
||||
Identifiers are registered in VMD with:
|
||||
|
||||
@code
|
||||
|
||||
#define BOOST_VMD_REG_XXX (XXX) where XXX is a v-identifier.
|
||||
|
||||
@endcode
|
||||
|
||||
The identifier must be registered to be found.
|
||||
|
||||
Identifiers are pre-detected in VMD with:
|
||||
|
||||
@code
|
||||
|
||||
#define BOOST_VMD_DETECT_XXX_XXX where XXX is an identifier.
|
||||
|
||||
@endcode
|
||||
|
||||
If you specify optional identifiers and have not specified the detection
|
||||
of an optional identifier, that optional identifier will never match the input.
|
||||
|
||||
@@ -71,7 +83,7 @@
|
||||
|
||||
\brief Tests whether a parameter is an identifier. Re-entrant version.
|
||||
|
||||
d = The next available BOOST_PP_WHILE iteration.
|
||||
d = The next available BOOST_PP_WHILE iteration. <br/>
|
||||
... = variadic parameters
|
||||
|
||||
The first variadic parameter is required and it is the input to test.
|
||||
@@ -80,22 +92,34 @@
|
||||
The data may take one of two forms; it is either one or more single identifiers
|
||||
or a single Boost PP tuple of identifiers.
|
||||
|
||||
@code
|
||||
|
||||
returns = 1 if the parameter is an identifier, otherwise 0.
|
||||
|
||||
If the parameter is not an identifier,
|
||||
or if optional identifiers are specified and the identifier
|
||||
does not match any of the optional identifiers, the macro returns 0.
|
||||
|
||||
@endcode
|
||||
|
||||
Identifiers are registered in VMD with:
|
||||
|
||||
@code
|
||||
|
||||
#define BOOST_VMD_REG_XXX (XXX) where XXX is a v-identifier.
|
||||
|
||||
@endcode
|
||||
|
||||
The identifier must be registered to be found.
|
||||
|
||||
Identifiers are pre-detected in VMD with:
|
||||
|
||||
@code
|
||||
|
||||
#define BOOST_VMD_DETECT_XXX_XXX where XXX is an identifier.
|
||||
|
||||
@endcode
|
||||
|
||||
If you specify optional identifiers and have not specified the detection
|
||||
of an optional identifier, that optional identifier will never match the input.
|
||||
|
||||
|
||||
@@ -52,7 +52,7 @@
|
||||
The macro checks that the sequence is a pplib list.
|
||||
It returns 1 if it is a list, else if returns 0.
|
||||
|
||||
d = The next available BOOST_PP_WHILE iteration.
|
||||
d = The next available BOOST_PP_WHILE iteration. <br/>
|
||||
sequence = input as a possible Boost PP list.
|
||||
|
||||
returns = 1 if it a list, else returns 0.
|
||||
|
||||
@@ -46,7 +46,7 @@
|
||||
|
||||
\brief Determines if the sequence has more than one element, referred to as a multi-element sequence.
|
||||
|
||||
d = The next available BOOST_PP_WHILE iteration.
|
||||
d = The next available BOOST_PP_WHILE iteration. <br/>
|
||||
sequence = a sequence
|
||||
|
||||
returns = 1 if the sequence is a multi-element sequence, else returns 0.
|
||||
|
||||
@@ -27,11 +27,11 @@
|
||||
\brief Tests whether a sequence is a Boost PP number.
|
||||
|
||||
The macro checks to see if a sequence is a Boost PP number.
|
||||
A Boost PP number is a value from 0 to 256.
|
||||
A Boost PP number is a value from 0 to BOOST_PP_LIMIT_MAG.
|
||||
|
||||
sequence = a possible number
|
||||
|
||||
returns = 1 if the sequence is a Boost PP number,
|
||||
returns = 1 if the sequence is a Boost PP number,
|
||||
0 if it is not.
|
||||
|
||||
If the input is not a VMD data type this macro could lead to
|
||||
|
||||
@@ -31,6 +31,8 @@
|
||||
returns = 1 if the sequence is a set of parens with no data,
|
||||
else returns 0.
|
||||
|
||||
@code
|
||||
|
||||
A set of parens with no data may be:
|
||||
|
||||
1) a tuple whose size is a single element which is empty
|
||||
@@ -39,6 +41,8 @@
|
||||
|
||||
2) a single element seq whose data is empty
|
||||
|
||||
@endcode
|
||||
|
||||
*/
|
||||
|
||||
#define BOOST_VMD_IS_PARENS_EMPTY(sequence) \
|
||||
@@ -49,12 +53,14 @@
|
||||
|
||||
\brief Determines if the sequence is a set of parens with no data. Re-entrant version.
|
||||
|
||||
d = The next available BOOST_PP_WHILE iteration.
|
||||
d = The next available BOOST_PP_WHILE iteration. <br/>
|
||||
sequence = a VMD sequence
|
||||
|
||||
returns = 1 if the sequence is a set of parens with no data,
|
||||
else returns 0.
|
||||
|
||||
@code
|
||||
|
||||
A set of parens with no data may be:
|
||||
|
||||
1) a tuple whose size is a single element which is empty
|
||||
@@ -63,6 +69,8 @@
|
||||
|
||||
2) a single element seq whose data is empty
|
||||
|
||||
@endcode
|
||||
|
||||
*/
|
||||
|
||||
#define BOOST_VMD_IS_PARENS_EMPTY_D(d,sequence) \
|
||||
|
||||
@@ -51,7 +51,7 @@
|
||||
The macro checks that the sequence is a Boost PP seq.
|
||||
It returns 1 if it is a seq, else if returns 0.
|
||||
|
||||
d = The next available BOOST_PP_WHILE iteration.
|
||||
d = The next available BOOST_PP_WHILE iteration. <br/>
|
||||
sequence = a possible Boost PP seq
|
||||
|
||||
returns = 1 if it a seq, else returns 0.
|
||||
|
||||
@@ -32,7 +32,7 @@
|
||||
|
||||
sequence = a possible tuple
|
||||
|
||||
returns = 1 if the sequence is a Boost PP tuple.
|
||||
returns = 1 if the sequence is a Boost PP tuple,
|
||||
0 if it is not.
|
||||
|
||||
*/
|
||||
|
||||
@@ -49,7 +49,7 @@
|
||||
|
||||
\brief Tests whether a sequence is a VMD type. Re-entrant version.
|
||||
|
||||
d = The next available BOOST_PP_WHILE iteration.
|
||||
d = The next available BOOST_PP_WHILE iteration. <br/>
|
||||
sequence = a possible VMD type
|
||||
|
||||
returns = 1 if the sequence is a VMD type,
|
||||
|
||||
@@ -46,7 +46,7 @@
|
||||
|
||||
\brief Determines if the sequence has only a single element, referred to as a single-element sequence. Re-entrant version.
|
||||
|
||||
d = The next available BOOST_PP_WHILE iteration.
|
||||
d = The next available BOOST_PP_WHILE iteration. <br/>
|
||||
sequence = a sequence
|
||||
|
||||
returns = 1 if the sequence is a single-element sequence, else returns 0.
|
||||
|
||||
@@ -27,7 +27,7 @@
|
||||
|
||||
\brief Tests any two sequences for inequality.
|
||||
|
||||
sequence = First sequence.
|
||||
sequence = First sequence. <br/>
|
||||
... = variadic parameters, maximum of 2.
|
||||
|
||||
The first variadic parameter is required and is the second sequence to test.
|
||||
@@ -60,8 +60,8 @@
|
||||
|
||||
\brief Tests any two sequences for inequality. Re-entrant version.
|
||||
|
||||
d = The next available BOOST_PP_WHILE iteration.
|
||||
sequence = First sequence.
|
||||
d = The next available BOOST_PP_WHILE iteration. <br/>
|
||||
sequence = First sequence. <br/>
|
||||
... = variadic parameters, maximum of 2.
|
||||
|
||||
The first variadic parameter is required and is the second sequence to test.
|
||||
|
||||
@@ -29,7 +29,7 @@
|
||||
|
||||
\brief appends an element to the end of a seq.
|
||||
|
||||
seq = seq to to append an element to.
|
||||
seq = seq to to append an element to. <br/>
|
||||
elem = element to append.
|
||||
|
||||
If the seq is an empty seq the result is a seq with the single element.
|
||||
|
||||
@@ -29,7 +29,7 @@
|
||||
|
||||
\brief inserts an element at the beginning of a seq.
|
||||
|
||||
seq = seq to insert an element at.
|
||||
seq = seq to insert an element at. <br/>
|
||||
elem = element to insert.
|
||||
|
||||
If the seq is an empty seq the result is a seq with the single element.
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
|
||||
\brief removes an element from a seq.
|
||||
|
||||
seq = seq from which an element is to be removed.
|
||||
seq = seq from which an element is to be removed. <br/>
|
||||
index = The zero-based position in seq of the element to be removed.
|
||||
|
||||
If index is greater or equal to the seq size the result is undefined.
|
||||
|
||||
@@ -41,7 +41,7 @@
|
||||
|
||||
\brief Returns the size of a sequence. Re-entrant version.
|
||||
|
||||
d = The next available BOOST_PP_WHILE iteration.
|
||||
d = The next available BOOST_PP_WHILE iteration. <br/>
|
||||
sequence = A sequence to test.
|
||||
|
||||
returns = If the sequence is empty returns 0, else returns the number of elements
|
||||
|
||||
@@ -63,7 +63,7 @@
|
||||
|
||||
\brief Converts a sequence to a Boost PP array whose elements are the elements of the sequence. Re-entrant version.
|
||||
|
||||
d = The next available BOOST_PP_WHILE iteration.
|
||||
d = The next available BOOST_PP_WHILE iteration. <br/>
|
||||
... = Variadic parameters.
|
||||
|
||||
The first variadic parameter is required and is the sequence to convert.
|
||||
|
||||
@@ -63,7 +63,7 @@
|
||||
|
||||
\brief Converts a sequence to a Boost PP list whose elements are the elements of the sequence. Re-entrant version.
|
||||
|
||||
d = The next available BOOST_PP_WHILE iteration.
|
||||
d = The next available BOOST_PP_WHILE iteration. <br/>
|
||||
... = Variadic parameters.
|
||||
|
||||
The first variadic parameter is required and is the sequence to convert.
|
||||
|
||||
@@ -63,7 +63,7 @@
|
||||
|
||||
\brief Converts a sequence to a Boost PP seq whose elements are the elements of the sequence. Re-entrant version.
|
||||
|
||||
d = The next available BOOST_PP_WHILE iteration.
|
||||
d = The next available BOOST_PP_WHILE iteration. <br/>
|
||||
... = Variadic parameters.
|
||||
|
||||
The first variadic parameter is required and is the sequence to convert.
|
||||
|
||||
@@ -63,7 +63,7 @@
|
||||
|
||||
\brief Converts a sequence to a Boost PP tuple whose elements are the elements of the sequence. Re-entrant version.
|
||||
|
||||
d = The next available BOOST_PP_WHILE iteration.
|
||||
d = The next available BOOST_PP_WHILE iteration. <br/>
|
||||
... = Variadic parameters.
|
||||
|
||||
The first variadic parameter is required and is the sequence to convert.
|
||||
|
||||
@@ -51,7 +51,7 @@
|
||||
|
||||
\brief pops an element from the end of a tuple. It reenters BOOST_PP_REPEAT with maximum efficiency.
|
||||
|
||||
z = the next available BOOST_PP_REPEAT dimension.
|
||||
z = the next available BOOST_PP_REPEAT dimension. <br/>
|
||||
tuple = tuple to pop an element from.
|
||||
|
||||
If the tuple is an empty tuple the result is undefined.
|
||||
|
||||
@@ -51,7 +51,7 @@
|
||||
|
||||
\brief pops an element from the front of a tuple. It reenters BOOST_PP_REPEAT with maximum efficiency.
|
||||
|
||||
z = the next available BOOST_PP_REPEAT dimension.
|
||||
z = the next available BOOST_PP_REPEAT dimension. <br/>
|
||||
tuple = tuple to pop an element from.
|
||||
|
||||
If the tuple is an empty tuple the result is undefined.
|
||||
|
||||
@@ -29,7 +29,7 @@
|
||||
|
||||
\brief appends an element to the end of a tuple.
|
||||
|
||||
tuple = tuple to to append an element to.
|
||||
tuple = tuple to to append an element to. <br/>
|
||||
elem = element to append.
|
||||
|
||||
If the tuple is an empty tuple the result is a tuple with the single element.
|
||||
|
||||
@@ -29,7 +29,7 @@
|
||||
|
||||
\brief inserts an element at the beginning of a tuple.
|
||||
|
||||
tuple = tuple to insert an element at.
|
||||
tuple = tuple to insert an element at. <br/>
|
||||
elem = element to insert.
|
||||
|
||||
If the tuple is an empty tuple the result is a tuple with the single element.
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
|
||||
\brief removes an element from a tuple.
|
||||
|
||||
tuple = tuple from which an element is to be removed.
|
||||
tuple = tuple from which an element is to be removed. <br/>
|
||||
index = The zero-based position in tuple of the element to be removed.
|
||||
|
||||
If index is greater or equal to the tuple size the result is undefined.
|
||||
@@ -57,8 +57,8 @@
|
||||
|
||||
\brief removes an element from a tuple. It reenters BOOST_PP_WHILE with maximum efficiency.
|
||||
|
||||
d = The next available BOOST_PP_WHILE iteration.
|
||||
tuple = tuple from which an element is to be removed.
|
||||
d = The next available BOOST_PP_WHILE iteration. <br/>
|
||||
tuple = tuple from which an element is to be removed. <br/>
|
||||
index = The zero-based position in tuple of the element to be removed.
|
||||
|
||||
If index is greater or equal to the tuple size the result is undefined.
|
||||
|
||||
@@ -31,6 +31,7 @@
|
||||
#include <boost/vmd/is_empty.hpp>
|
||||
#include <boost/vmd/is_empty_array.hpp>
|
||||
#include <boost/vmd/is_empty_list.hpp>
|
||||
#include <boost/vmd/is_general_identifier.hpp>
|
||||
#include <boost/vmd/is_identifier.hpp>
|
||||
#include <boost/vmd/is_list.hpp>
|
||||
#include <boost/vmd/is_multi.hpp>
|
||||
|
||||
Reference in New Issue
Block a user