HDK
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
preprocessorUtilsLite.h
Go to the documentation of this file.
1 //
2 // Copyright 2016 Pixar
3 //
4 // Licensed under the Apache License, Version 2.0 (the "Apache License")
5 // with the following modification; you may not use this file except in
6 // compliance with the Apache License and the following modification to it:
7 // Section 6. Trademarks. is deleted and replaced with:
8 //
9 // 6. Trademarks. This License does not grant permission to use the trade
10 // names, trademarks, service marks, or product names of the Licensor
11 // and its affiliates, except as required to comply with Section 4(c) of
12 // the License and to reproduce the content of the NOTICE file.
13 //
14 // You may obtain a copy of the Apache License at
15 //
16 // http://www.apache.org/licenses/LICENSE-2.0
17 //
18 // Unless required by applicable law or agreed to in writing, software
19 // distributed under the Apache License with the above modification is
20 // distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
21 // KIND, either express or implied. See the Apache License for the specific
22 // language governing permissions and limitations under the Apache License.
23 //
24 #ifndef PXR_BASE_TF_PREPROCESSOR_UTILS_LITE_H
25 #define PXR_BASE_TF_PREPROCESSOR_UTILS_LITE_H
26 
27 // This "lite" version of preprocessorUtils exists to avoid dependencies on
28 // hboost. Do not add any includes of hboost headers, such as
29 // <hboost/preprocessor/...> or <hboost/vmd/...> to this file.
30 
31 #include "pxr/base/arch/defines.h"
32 
33 // Helper for TF_PP_CAT. This extra indirection is required so that macros get
34 // expanded before the pasting occurs.
35 #define TF_PP_CAT_IMPL(x, y) x ## y
36 
37 /// Paste concatenate preprocessor expressions x and y after expansion. This
38 /// is similar to HBOOST_PP_CAT but doesn't require including the hboost config
39 /// header which is somewhat heavy.
40 #define TF_PP_CAT(x, y) TF_PP_CAT_IMPL(x, y)
41 
42 // Helper for TF_PP_STRINGIZE supplying macro expansion before pasting
43 #define TF_PP_STRINGIZE_IMPL(x) #x
44 
45 /// Expand and convert the argument to a string, using a most minimal macro.
46 #define TF_PP_STRINGIZE(x) TF_PP_STRINGIZE_IMPL(x)
47 
48 #ifdef ARCH_COMPILER_MSVC
49 
50 /// Expand to the number of arguments passed. For example,
51 /// TF_PP_VARIADIC_SIZE(foo, bar, baz) expands to 3. Supports up to 64
52 /// arguments.
53 #define TF_PP_VARIADIC_SIZE(...) TF_PP_CAT(TF_PP_VARIADIC_SIZE_IMPL(__VA_ARGS__, 64, 63, 62, 61, 60, 59, 58, 57, 56, 55, 54, 53, 52, 51, 50, 49, 48, 47, 46, 45, 44, 43, 42, 41, 40, 39, 38, 37, 36, 35, 34, 33, 32, 31, 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1,),)
54 
55 /// Expand to the \p n'th argument of the arguments following \p n,
56 /// zero-indexed. For example, TF_PP_VARIADIC_ELEM(0, a, b, c) expands to a,
57 /// and TF_PP_VARIADIC_ELEM(1, a, b, c) expands to b.
58 #define TF_PP_VARIADIC_ELEM(n, ...) TF_PP_VARIADIC_ELEM_IMPL(n,__VA_ARGS__)
59 #define TF_PP_VARIADIC_ELEM_IMPL(n, ...) TF_PP_CAT(TF_PP_CAT(TF_PP_VAE_, n)(__VA_ARGS__,),)
60 
61 #else // NOT MSVC
62 
63 /// Expand to the number of arguments passed. For example,
64 /// TF_PP_VARIADIC_SIZE(foo, bar, baz) expands to 3. Supports up to 64
65 /// arguments. Does not work for zero arguments, which is trickier.
66 #define TF_PP_VARIADIC_SIZE(...) TF_PP_VARIADIC_SIZE_IMPL(__VA_ARGS__, 64, 63, 62, 61, 60, 59, 58, 57, 56, 55, 54, 53, 52, 51, 50, 49, 48, 47, 46, 45, 44, 43, 42, 41, 40, 39, 38, 37, 36, 35, 34, 33, 32, 31, 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1,)
67 
68 /// Expand to the \p n'th argument of the arguments following \p n,
69 /// zero-indexed. For example, TF_PP_VARIADIC_ELEM(0, a, b, c) expands to a,
70 /// and TF_PP_VARIADIC_ELEM(1, a, b, c) expands to b.
71 #define TF_PP_VARIADIC_ELEM(n, ...) TF_PP_CAT(TF_PP_VAE_, n)(__VA_ARGS__,)
72 
73 #endif // ARCH_COMPILER_MSVC
74 
75 #define TF_PP_VARIADIC_SIZE_IMPL(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31, a32, a33, a34, a35, a36, a37, a38, a39, a40, a41, a42, a43, a44, a45, a46, a47, a48, a49, a50, a51, a52, a53, a54, a55, a56, a57, a58, a59, a60, a61, a62, a63, size, ...) size
76 
77 #define TF_PP_VAE_0(a0, ...) a0
78 #define TF_PP_VAE_1(a0, a1, ...) a1
79 #define TF_PP_VAE_2(a0, a1, a2, ...) a2
80 #define TF_PP_VAE_3(a0, a1, a2, a3, ...) a3
81 #define TF_PP_VAE_4(a0, a1, a2, a3, a4, ...) a4
82 #define TF_PP_VAE_5(a0, a1, a2, a3, a4, a5, ...) a5
83 #define TF_PP_VAE_6(a0, a1, a2, a3, a4, a5, a6, ...) a6
84 #define TF_PP_VAE_7(a0, a1, a2, a3, a4, a5, a6, a7, ...) a7
85 #define TF_PP_VAE_8(a0, a1, a2, a3, a4, a5, a6, a7, a8, ...) a8
86 #define TF_PP_VAE_9(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, ...) a9
87 #define TF_PP_VAE_10(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, ...) a10
88 #define TF_PP_VAE_11(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, ...) a11
89 #define TF_PP_VAE_12(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, ...) a12
90 #define TF_PP_VAE_13(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, ...) a13
91 #define TF_PP_VAE_14(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, ...) a14
92 #define TF_PP_VAE_15(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, ...) a15
93 #define TF_PP_VAE_16(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, ...) a16
94 #define TF_PP_VAE_17(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, ...) a17
95 #define TF_PP_VAE_18(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, ...) a18
96 #define TF_PP_VAE_19(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, ...) a19
97 #define TF_PP_VAE_20(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, ...) a20
98 #define TF_PP_VAE_21(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, ...) a21
99 #define TF_PP_VAE_22(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, ...) a22
100 #define TF_PP_VAE_23(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, ...) a23
101 #define TF_PP_VAE_24(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, ...) a24
102 #define TF_PP_VAE_25(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, ...) a25
103 #define TF_PP_VAE_26(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, ...) a26
104 #define TF_PP_VAE_27(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, ...) a27
105 #define TF_PP_VAE_28(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, ...) a28
106 #define TF_PP_VAE_29(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, ...) a29
107 #define TF_PP_VAE_30(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, ...) a30
108 #define TF_PP_VAE_31(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31, ...) a31
109 #define TF_PP_VAE_32(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31, a32, ...) a32
110 #define TF_PP_VAE_33(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31, a32, a33, ...) a33
111 #define TF_PP_VAE_34(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31, a32, a33, a34, ...) a34
112 #define TF_PP_VAE_35(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31, a32, a33, a34, a35, ...) a35
113 #define TF_PP_VAE_36(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31, a32, a33, a34, a35, a36, ...) a36
114 #define TF_PP_VAE_37(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31, a32, a33, a34, a35, a36, a37, ...) a37
115 #define TF_PP_VAE_38(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31, a32, a33, a34, a35, a36, a37, a38, ...) a38
116 #define TF_PP_VAE_39(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31, a32, a33, a34, a35, a36, a37, a38, a39, ...) a39
117 #define TF_PP_VAE_40(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31, a32, a33, a34, a35, a36, a37, a38, a39, a40, ...) a40
118 #define TF_PP_VAE_41(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31, a32, a33, a34, a35, a36, a37, a38, a39, a40, a41, ...) a41
119 #define TF_PP_VAE_42(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31, a32, a33, a34, a35, a36, a37, a38, a39, a40, a41, a42, ...) a42
120 #define TF_PP_VAE_43(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31, a32, a33, a34, a35, a36, a37, a38, a39, a40, a41, a42, a43, ...) a43
121 #define TF_PP_VAE_44(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31, a32, a33, a34, a35, a36, a37, a38, a39, a40, a41, a42, a43, a44, ...) a44
122 #define TF_PP_VAE_45(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31, a32, a33, a34, a35, a36, a37, a38, a39, a40, a41, a42, a43, a44, a45, ...) a45
123 #define TF_PP_VAE_46(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31, a32, a33, a34, a35, a36, a37, a38, a39, a40, a41, a42, a43, a44, a45, a46, ...) a46
124 #define TF_PP_VAE_47(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31, a32, a33, a34, a35, a36, a37, a38, a39, a40, a41, a42, a43, a44, a45, a46, a47, ...) a47
125 #define TF_PP_VAE_48(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31, a32, a33, a34, a35, a36, a37, a38, a39, a40, a41, a42, a43, a44, a45, a46, a47, a48, ...) a48
126 #define TF_PP_VAE_49(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31, a32, a33, a34, a35, a36, a37, a38, a39, a40, a41, a42, a43, a44, a45, a46, a47, a48, a49, ...) a49
127 #define TF_PP_VAE_50(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31, a32, a33, a34, a35, a36, a37, a38, a39, a40, a41, a42, a43, a44, a45, a46, a47, a48, a49, a50, ...) a50
128 #define TF_PP_VAE_51(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31, a32, a33, a34, a35, a36, a37, a38, a39, a40, a41, a42, a43, a44, a45, a46, a47, a48, a49, a50, a51, ...) a51
129 #define TF_PP_VAE_52(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31, a32, a33, a34, a35, a36, a37, a38, a39, a40, a41, a42, a43, a44, a45, a46, a47, a48, a49, a50, a51, a52, ...) a52
130 #define TF_PP_VAE_53(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31, a32, a33, a34, a35, a36, a37, a38, a39, a40, a41, a42, a43, a44, a45, a46, a47, a48, a49, a50, a51, a52, a53, ...) a53
131 #define TF_PP_VAE_54(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31, a32, a33, a34, a35, a36, a37, a38, a39, a40, a41, a42, a43, a44, a45, a46, a47, a48, a49, a50, a51, a52, a53, a54, ...) a54
132 #define TF_PP_VAE_55(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31, a32, a33, a34, a35, a36, a37, a38, a39, a40, a41, a42, a43, a44, a45, a46, a47, a48, a49, a50, a51, a52, a53, a54, a55, ...) a55
133 #define TF_PP_VAE_56(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31, a32, a33, a34, a35, a36, a37, a38, a39, a40, a41, a42, a43, a44, a45, a46, a47, a48, a49, a50, a51, a52, a53, a54, a55, a56, ...) a56
134 #define TF_PP_VAE_57(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31, a32, a33, a34, a35, a36, a37, a38, a39, a40, a41, a42, a43, a44, a45, a46, a47, a48, a49, a50, a51, a52, a53, a54, a55, a56, a57, ...) a57
135 #define TF_PP_VAE_58(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31, a32, a33, a34, a35, a36, a37, a38, a39, a40, a41, a42, a43, a44, a45, a46, a47, a48, a49, a50, a51, a52, a53, a54, a55, a56, a57, a58, ...) a58
136 #define TF_PP_VAE_59(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31, a32, a33, a34, a35, a36, a37, a38, a39, a40, a41, a42, a43, a44, a45, a46, a47, a48, a49, a50, a51, a52, a53, a54, a55, a56, a57, a58, a59, ...) a59
137 #define TF_PP_VAE_60(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31, a32, a33, a34, a35, a36, a37, a38, a39, a40, a41, a42, a43, a44, a45, a46, a47, a48, a49, a50, a51, a52, a53, a54, a55, a56, a57, a58, a59, a60, ...) a60
138 #define TF_PP_VAE_61(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31, a32, a33, a34, a35, a36, a37, a38, a39, a40, a41, a42, a43, a44, a45, a46, a47, a48, a49, a50, a51, a52, a53, a54, a55, a56, a57, a58, a59, a60, a61, ...) a61
139 #define TF_PP_VAE_62(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31, a32, a33, a34, a35, a36, a37, a38, a39, a40, a41, a42, a43, a44, a45, a46, a47, a48, a49, a50, a51, a52, a53, a54, a55, a56, a57, a58, a59, a60, a61, a62, ...) a62
140 #define TF_PP_VAE_63(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31, a32, a33, a34, a35, a36, a37, a38, a39, a40, a41, a42, a43, a44, a45, a46, a47, a48, a49, a50, a51, a52, a53, a54, a55, a56, a57, a58, a59, a60, a61, a62, a63, ...) a63
141 
142 #ifdef ARCH_COMPILER_MSVC
143 
144 #define TF_PP_FE_0(_macro, ...)
145 #define TF_PP_FE_1(_macro, a) _macro(a)
146 #define TF_PP_FE_2(_macro, a, ...) _macro(a) TF_PP_CAT(TF_PP_FE_1,(_macro, __VA_ARGS__))
147 #define TF_PP_FE_3(_macro, a, ...) _macro(a) TF_PP_CAT(TF_PP_FE_2,(_macro, __VA_ARGS__))
148 #define TF_PP_FE_4(_macro, a, ...) _macro(a) TF_PP_CAT(TF_PP_FE_3,(_macro, __VA_ARGS__))
149 #define TF_PP_FE_5(_macro, a, ...) _macro(a) TF_PP_CAT(TF_PP_FE_4,(_macro, __VA_ARGS__))
150 #define TF_PP_FE_6(_macro, a, ...) _macro(a) TF_PP_CAT(TF_PP_FE_5,(_macro, __VA_ARGS__))
151 #define TF_PP_FE_7(_macro, a, ...) _macro(a) TF_PP_CAT(TF_PP_FE_6,(_macro, __VA_ARGS__))
152 #define TF_PP_FE_8(_macro, a, ...) _macro(a) TF_PP_CAT(TF_PP_FE_7,(_macro, __VA_ARGS__))
153 #define TF_PP_FE_9(_macro, a, ...) _macro(a) TF_PP_CAT(TF_PP_FE_8,(_macro, __VA_ARGS__))
154 #define TF_PP_FE_10(_macro, a, ...) _macro(a) TF_PP_CAT(TF_PP_FE_9,(_macro, __VA_ARGS__))
155 #define TF_PP_FE_11(_macro, a, ...) _macro(a) TF_PP_CAT(TF_PP_FE_10,(_macro, __VA_ARGS__))
156 #define TF_PP_FE_12(_macro, a, ...) _macro(a) TF_PP_CAT(TF_PP_FE_11,(_macro, __VA_ARGS__))
157 #define TF_PP_FE_13(_macro, a, ...) _macro(a) TF_PP_CAT(TF_PP_FE_12,(_macro, __VA_ARGS__))
158 #define TF_PP_FE_14(_macro, a, ...) _macro(a) TF_PP_CAT(TF_PP_FE_13,(_macro, __VA_ARGS__))
159 #define TF_PP_FE_15(_macro, a, ...) _macro(a) TF_PP_CAT(TF_PP_FE_14,(_macro, __VA_ARGS__))
160 #define TF_PP_FE_16(_macro, a, ...) _macro(a) TF_PP_CAT(TF_PP_FE_15,(_macro, __VA_ARGS__))
161 #define TF_PP_FE_17(_macro, a, ...) _macro(a) TF_PP_CAT(TF_PP_FE_16,(_macro, __VA_ARGS__))
162 #define TF_PP_FE_18(_macro, a, ...) _macro(a) TF_PP_CAT(TF_PP_FE_17,(_macro, __VA_ARGS__))
163 #define TF_PP_FE_19(_macro, a, ...) _macro(a) TF_PP_CAT(TF_PP_FE_18,(_macro, __VA_ARGS__))
164 #define TF_PP_FE_20(_macro, a, ...) _macro(a) TF_PP_CAT(TF_PP_FE_19,(_macro, __VA_ARGS__))
165 #define TF_PP_FE_21(_macro, a, ...) _macro(a) TF_PP_CAT(TF_PP_FE_20,(_macro, __VA_ARGS__))
166 #define TF_PP_FE_22(_macro, a, ...) _macro(a) TF_PP_CAT(TF_PP_FE_21,(_macro, __VA_ARGS__))
167 #define TF_PP_FE_23(_macro, a, ...) _macro(a) TF_PP_CAT(TF_PP_FE_22,(_macro, __VA_ARGS__))
168 #define TF_PP_FE_24(_macro, a, ...) _macro(a) TF_PP_CAT(TF_PP_FE_23,(_macro, __VA_ARGS__))
169 #define TF_PP_FE_25(_macro, a, ...) _macro(a) TF_PP_CAT(TF_PP_FE_24,(_macro, __VA_ARGS__))
170 #define TF_PP_FE_26(_macro, a, ...) _macro(a) TF_PP_CAT(TF_PP_FE_25,(_macro, __VA_ARGS__))
171 #define TF_PP_FE_27(_macro, a, ...) _macro(a) TF_PP_CAT(TF_PP_FE_26,(_macro, __VA_ARGS__))
172 #define TF_PP_FE_28(_macro, a, ...) _macro(a) TF_PP_CAT(TF_PP_FE_27,(_macro, __VA_ARGS__))
173 #define TF_PP_FE_29(_macro, a, ...) _macro(a) TF_PP_CAT(TF_PP_FE_28,(_macro, __VA_ARGS__))
174 #define TF_PP_FE_30(_macro, a, ...) _macro(a) TF_PP_CAT(TF_PP_FE_29,(_macro, __VA_ARGS__))
175 #define TF_PP_FE_31(_macro, a, ...) _macro(a) TF_PP_CAT(TF_PP_FE_30,(_macro, __VA_ARGS__))
176 #define TF_PP_FE_32(_macro, a, ...) _macro(a) TF_PP_CAT(TF_PP_FE_31,(_macro, __VA_ARGS__))
177 #define TF_PP_FE_33(_macro, a, ...) _macro(a) TF_PP_CAT(TF_PP_FE_32,(_macro, __VA_ARGS__))
178 #define TF_PP_FE_34(_macro, a, ...) _macro(a) TF_PP_CAT(TF_PP_FE_33,(_macro, __VA_ARGS__))
179 #define TF_PP_FE_35(_macro, a, ...) _macro(a) TF_PP_CAT(TF_PP_FE_34,(_macro, __VA_ARGS__))
180 #define TF_PP_FE_36(_macro, a, ...) _macro(a) TF_PP_CAT(TF_PP_FE_35,(_macro, __VA_ARGS__))
181 #define TF_PP_FE_37(_macro, a, ...) _macro(a) TF_PP_CAT(TF_PP_FE_36,(_macro, __VA_ARGS__))
182 #define TF_PP_FE_38(_macro, a, ...) _macro(a) TF_PP_CAT(TF_PP_FE_37,(_macro, __VA_ARGS__))
183 #define TF_PP_FE_39(_macro, a, ...) _macro(a) TF_PP_CAT(TF_PP_FE_38,(_macro, __VA_ARGS__))
184 #define TF_PP_FE_40(_macro, a, ...) _macro(a) TF_PP_CAT(TF_PP_FE_39,(_macro, __VA_ARGS__))
185 #define TF_PP_FE_41(_macro, a, ...) _macro(a) TF_PP_CAT(TF_PP_FE_40,(_macro, __VA_ARGS__))
186 #define TF_PP_FE_42(_macro, a, ...) _macro(a) TF_PP_CAT(TF_PP_FE_41,(_macro, __VA_ARGS__))
187 #define TF_PP_FE_43(_macro, a, ...) _macro(a) TF_PP_CAT(TF_PP_FE_42,(_macro, __VA_ARGS__))
188 #define TF_PP_FE_44(_macro, a, ...) _macro(a) TF_PP_CAT(TF_PP_FE_43,(_macro, __VA_ARGS__))
189 #define TF_PP_FE_45(_macro, a, ...) _macro(a) TF_PP_CAT(TF_PP_FE_44,(_macro, __VA_ARGS__))
190 #define TF_PP_FE_46(_macro, a, ...) _macro(a) TF_PP_CAT(TF_PP_FE_45,(_macro, __VA_ARGS__))
191 #define TF_PP_FE_47(_macro, a, ...) _macro(a) TF_PP_CAT(TF_PP_FE_46,(_macro, __VA_ARGS__))
192 #define TF_PP_FE_48(_macro, a, ...) _macro(a) TF_PP_CAT(TF_PP_FE_47,(_macro, __VA_ARGS__))
193 #define TF_PP_FE_49(_macro, a, ...) _macro(a) TF_PP_CAT(TF_PP_FE_48,(_macro, __VA_ARGS__))
194 #define TF_PP_FE_50(_macro, a, ...) _macro(a) TF_PP_CAT(TF_PP_FE_49,(_macro, __VA_ARGS__))
195 #define TF_PP_FE_51(_macro, a, ...) _macro(a) TF_PP_CAT(TF_PP_FE_50,(_macro, __VA_ARGS__))
196 #define TF_PP_FE_52(_macro, a, ...) _macro(a) TF_PP_CAT(TF_PP_FE_51,(_macro, __VA_ARGS__))
197 #define TF_PP_FE_53(_macro, a, ...) _macro(a) TF_PP_CAT(TF_PP_FE_52,(_macro, __VA_ARGS__))
198 #define TF_PP_FE_54(_macro, a, ...) _macro(a) TF_PP_CAT(TF_PP_FE_53,(_macro, __VA_ARGS__))
199 #define TF_PP_FE_55(_macro, a, ...) _macro(a) TF_PP_CAT(TF_PP_FE_54,(_macro, __VA_ARGS__))
200 #define TF_PP_FE_56(_macro, a, ...) _macro(a) TF_PP_CAT(TF_PP_FE_55,(_macro, __VA_ARGS__))
201 #define TF_PP_FE_57(_macro, a, ...) _macro(a) TF_PP_CAT(TF_PP_FE_56,(_macro, __VA_ARGS__))
202 #define TF_PP_FE_58(_macro, a, ...) _macro(a) TF_PP_CAT(TF_PP_FE_57,(_macro, __VA_ARGS__))
203 #define TF_PP_FE_59(_macro, a, ...) _macro(a) TF_PP_CAT(TF_PP_FE_58,(_macro, __VA_ARGS__))
204 #define TF_PP_FE_60(_macro, a, ...) _macro(a) TF_PP_CAT(TF_PP_FE_59,(_macro, __VA_ARGS__))
205 #define TF_PP_FE_61(_macro, a, ...) _macro(a) TF_PP_CAT(TF_PP_FE_60,(_macro, __VA_ARGS__))
206 #define TF_PP_FE_62(_macro, a, ...) _macro(a) TF_PP_CAT(TF_PP_FE_61,(_macro, __VA_ARGS__))
207 #define TF_PP_FE_63(_macro, a, ...) _macro(a) TF_PP_CAT(TF_PP_FE_62,(_macro, __VA_ARGS__))
208 
209 #else // not MSVC
210 
211 #define TF_PP_FE_0(_macro, ...)
212 #define TF_PP_FE_1(_macro, a) _macro(a)
213 #define TF_PP_FE_2(_macro, a, ...) _macro(a) TF_PP_FE_1(_macro, __VA_ARGS__)
214 #define TF_PP_FE_3(_macro, a, ...) _macro(a) TF_PP_FE_2(_macro, __VA_ARGS__)
215 #define TF_PP_FE_4(_macro, a, ...) _macro(a) TF_PP_FE_3(_macro, __VA_ARGS__)
216 #define TF_PP_FE_5(_macro, a, ...) _macro(a) TF_PP_FE_4(_macro, __VA_ARGS__)
217 #define TF_PP_FE_6(_macro, a, ...) _macro(a) TF_PP_FE_5(_macro, __VA_ARGS__)
218 #define TF_PP_FE_7(_macro, a, ...) _macro(a) TF_PP_FE_6(_macro, __VA_ARGS__)
219 #define TF_PP_FE_8(_macro, a, ...) _macro(a) TF_PP_FE_7(_macro, __VA_ARGS__)
220 #define TF_PP_FE_9(_macro, a, ...) _macro(a) TF_PP_FE_8(_macro, __VA_ARGS__)
221 #define TF_PP_FE_10(_macro, a, ...) _macro(a) TF_PP_FE_9(_macro, __VA_ARGS__)
222 #define TF_PP_FE_11(_macro, a, ...) _macro(a) TF_PP_FE_10(_macro, __VA_ARGS__)
223 #define TF_PP_FE_12(_macro, a, ...) _macro(a) TF_PP_FE_11(_macro, __VA_ARGS__)
224 #define TF_PP_FE_13(_macro, a, ...) _macro(a) TF_PP_FE_12(_macro, __VA_ARGS__)
225 #define TF_PP_FE_14(_macro, a, ...) _macro(a) TF_PP_FE_13(_macro, __VA_ARGS__)
226 #define TF_PP_FE_15(_macro, a, ...) _macro(a) TF_PP_FE_14(_macro, __VA_ARGS__)
227 #define TF_PP_FE_16(_macro, a, ...) _macro(a) TF_PP_FE_15(_macro, __VA_ARGS__)
228 #define TF_PP_FE_17(_macro, a, ...) _macro(a) TF_PP_FE_16(_macro, __VA_ARGS__)
229 #define TF_PP_FE_18(_macro, a, ...) _macro(a) TF_PP_FE_17(_macro, __VA_ARGS__)
230 #define TF_PP_FE_19(_macro, a, ...) _macro(a) TF_PP_FE_18(_macro, __VA_ARGS__)
231 #define TF_PP_FE_20(_macro, a, ...) _macro(a) TF_PP_FE_19(_macro, __VA_ARGS__)
232 #define TF_PP_FE_21(_macro, a, ...) _macro(a) TF_PP_FE_20(_macro, __VA_ARGS__)
233 #define TF_PP_FE_22(_macro, a, ...) _macro(a) TF_PP_FE_21(_macro, __VA_ARGS__)
234 #define TF_PP_FE_23(_macro, a, ...) _macro(a) TF_PP_FE_22(_macro, __VA_ARGS__)
235 #define TF_PP_FE_24(_macro, a, ...) _macro(a) TF_PP_FE_23(_macro, __VA_ARGS__)
236 #define TF_PP_FE_25(_macro, a, ...) _macro(a) TF_PP_FE_24(_macro, __VA_ARGS__)
237 #define TF_PP_FE_26(_macro, a, ...) _macro(a) TF_PP_FE_25(_macro, __VA_ARGS__)
238 #define TF_PP_FE_27(_macro, a, ...) _macro(a) TF_PP_FE_26(_macro, __VA_ARGS__)
239 #define TF_PP_FE_28(_macro, a, ...) _macro(a) TF_PP_FE_27(_macro, __VA_ARGS__)
240 #define TF_PP_FE_29(_macro, a, ...) _macro(a) TF_PP_FE_28(_macro, __VA_ARGS__)
241 #define TF_PP_FE_30(_macro, a, ...) _macro(a) TF_PP_FE_29(_macro, __VA_ARGS__)
242 #define TF_PP_FE_31(_macro, a, ...) _macro(a) TF_PP_FE_30(_macro, __VA_ARGS__)
243 #define TF_PP_FE_32(_macro, a, ...) _macro(a) TF_PP_FE_31(_macro, __VA_ARGS__)
244 #define TF_PP_FE_33(_macro, a, ...) _macro(a) TF_PP_FE_32(_macro, __VA_ARGS__)
245 #define TF_PP_FE_34(_macro, a, ...) _macro(a) TF_PP_FE_33(_macro, __VA_ARGS__)
246 #define TF_PP_FE_35(_macro, a, ...) _macro(a) TF_PP_FE_34(_macro, __VA_ARGS__)
247 #define TF_PP_FE_36(_macro, a, ...) _macro(a) TF_PP_FE_35(_macro, __VA_ARGS__)
248 #define TF_PP_FE_37(_macro, a, ...) _macro(a) TF_PP_FE_36(_macro, __VA_ARGS__)
249 #define TF_PP_FE_38(_macro, a, ...) _macro(a) TF_PP_FE_37(_macro, __VA_ARGS__)
250 #define TF_PP_FE_39(_macro, a, ...) _macro(a) TF_PP_FE_38(_macro, __VA_ARGS__)
251 #define TF_PP_FE_40(_macro, a, ...) _macro(a) TF_PP_FE_39(_macro, __VA_ARGS__)
252 #define TF_PP_FE_41(_macro, a, ...) _macro(a) TF_PP_FE_40(_macro, __VA_ARGS__)
253 #define TF_PP_FE_42(_macro, a, ...) _macro(a) TF_PP_FE_41(_macro, __VA_ARGS__)
254 #define TF_PP_FE_43(_macro, a, ...) _macro(a) TF_PP_FE_42(_macro, __VA_ARGS__)
255 #define TF_PP_FE_44(_macro, a, ...) _macro(a) TF_PP_FE_43(_macro, __VA_ARGS__)
256 #define TF_PP_FE_45(_macro, a, ...) _macro(a) TF_PP_FE_44(_macro, __VA_ARGS__)
257 #define TF_PP_FE_46(_macro, a, ...) _macro(a) TF_PP_FE_45(_macro, __VA_ARGS__)
258 #define TF_PP_FE_47(_macro, a, ...) _macro(a) TF_PP_FE_46(_macro, __VA_ARGS__)
259 #define TF_PP_FE_48(_macro, a, ...) _macro(a) TF_PP_FE_47(_macro, __VA_ARGS__)
260 #define TF_PP_FE_49(_macro, a, ...) _macro(a) TF_PP_FE_48(_macro, __VA_ARGS__)
261 #define TF_PP_FE_50(_macro, a, ...) _macro(a) TF_PP_FE_49(_macro, __VA_ARGS__)
262 #define TF_PP_FE_51(_macro, a, ...) _macro(a) TF_PP_FE_50(_macro, __VA_ARGS__)
263 #define TF_PP_FE_52(_macro, a, ...) _macro(a) TF_PP_FE_51(_macro, __VA_ARGS__)
264 #define TF_PP_FE_53(_macro, a, ...) _macro(a) TF_PP_FE_52(_macro, __VA_ARGS__)
265 #define TF_PP_FE_54(_macro, a, ...) _macro(a) TF_PP_FE_53(_macro, __VA_ARGS__)
266 #define TF_PP_FE_55(_macro, a, ...) _macro(a) TF_PP_FE_54(_macro, __VA_ARGS__)
267 #define TF_PP_FE_56(_macro, a, ...) _macro(a) TF_PP_FE_55(_macro, __VA_ARGS__)
268 #define TF_PP_FE_57(_macro, a, ...) _macro(a) TF_PP_FE_56(_macro, __VA_ARGS__)
269 #define TF_PP_FE_58(_macro, a, ...) _macro(a) TF_PP_FE_57(_macro, __VA_ARGS__)
270 #define TF_PP_FE_59(_macro, a, ...) _macro(a) TF_PP_FE_58(_macro, __VA_ARGS__)
271 #define TF_PP_FE_60(_macro, a, ...) _macro(a) TF_PP_FE_59(_macro, __VA_ARGS__)
272 #define TF_PP_FE_61(_macro, a, ...) _macro(a) TF_PP_FE_60(_macro, __VA_ARGS__)
273 #define TF_PP_FE_62(_macro, a, ...) _macro(a) TF_PP_FE_61(_macro, __VA_ARGS__)
274 #define TF_PP_FE_63(_macro, a, ...) _macro(a) TF_PP_FE_62(_macro, __VA_ARGS__)
275 
276 #endif
277 
278 #ifdef ARCH_COMPILER_MSVC
279 
280 /// Expand the macro \p x on every variadic argument. For example
281 /// TF_PP_FOR_EACH(MACRO, foo, bar, baz) expands to MACRO(foo) MACRO(bar)
282 /// MACRO(baz). Supports up to 64 variadic arguments.
283 #define TF_PP_FOR_EACH(x, ...) \
284  TF_PP_CAT(TF_PP_VARIADIC_ELEM(TF_PP_VARIADIC_SIZE(__VA_ARGS__), \
285  TF_PP_FE_0, TF_PP_FE_1, TF_PP_FE_2, TF_PP_FE_3, TF_PP_FE_4, \
286  TF_PP_FE_5, TF_PP_FE_6, TF_PP_FE_7, TF_PP_FE_8, TF_PP_FE_9, \
287  TF_PP_FE_10, TF_PP_FE_11, TF_PP_FE_12, TF_PP_FE_13, TF_PP_FE_14, \
288  TF_PP_FE_15, TF_PP_FE_16, TF_PP_FE_17, TF_PP_FE_18, TF_PP_FE_19, \
289  TF_PP_FE_20, TF_PP_FE_21, TF_PP_FE_22, TF_PP_FE_23, TF_PP_FE_24, \
290  TF_PP_FE_25, TF_PP_FE_26, TF_PP_FE_27, TF_PP_FE_28, TF_PP_FE_29, \
291  TF_PP_FE_30, TF_PP_FE_31, TF_PP_FE_32, TF_PP_FE_33, TF_PP_FE_34, \
292  TF_PP_FE_35, TF_PP_FE_36, TF_PP_FE_37, TF_PP_FE_38, TF_PP_FE_39, \
293  TF_PP_FE_40, TF_PP_FE_41, TF_PP_FE_42, TF_PP_FE_43, TF_PP_FE_44, \
294  TF_PP_FE_45, TF_PP_FE_46, TF_PP_FE_47, TF_PP_FE_48, TF_PP_FE_49, \
295  TF_PP_FE_50, TF_PP_FE_51, TF_PP_FE_52, TF_PP_FE_53, TF_PP_FE_54, \
296  TF_PP_FE_55, TF_PP_FE_56, TF_PP_FE_57, TF_PP_FE_58, TF_PP_FE_59, \
297  TF_PP_FE_60, TF_PP_FE_61, TF_PP_FE_62, TF_PP_FE_63)(x, ##__VA_ARGS__),)
298 
299 #else // Not MSVC.
300 
301 /// Expand the macro \p x on every variadic argument. For example
302 /// TF_PP_FOR_EACH(MACRO, foo, bar, baz) expands to MACRO(foo) MACRO(bar)
303 /// MACRO(baz). Supports up to 64 variadic arguments.
304 #define TF_PP_FOR_EACH(x, ...) \
305  TF_PP_VARIADIC_ELEM(TF_PP_VARIADIC_SIZE(__VA_ARGS__), \
306  TF_PP_FE_0, TF_PP_FE_1, TF_PP_FE_2, TF_PP_FE_3, TF_PP_FE_4, \
307  TF_PP_FE_5, TF_PP_FE_6, TF_PP_FE_7, TF_PP_FE_8, TF_PP_FE_9, \
308  TF_PP_FE_10, TF_PP_FE_11, TF_PP_FE_12, TF_PP_FE_13, TF_PP_FE_14, \
309  TF_PP_FE_15, TF_PP_FE_16, TF_PP_FE_17, TF_PP_FE_18, TF_PP_FE_19, \
310  TF_PP_FE_20, TF_PP_FE_21, TF_PP_FE_22, TF_PP_FE_23, TF_PP_FE_24, \
311  TF_PP_FE_25, TF_PP_FE_26, TF_PP_FE_27, TF_PP_FE_28, TF_PP_FE_29, \
312  TF_PP_FE_30, TF_PP_FE_31, TF_PP_FE_32, TF_PP_FE_33, TF_PP_FE_34, \
313  TF_PP_FE_35, TF_PP_FE_36, TF_PP_FE_37, TF_PP_FE_38, TF_PP_FE_39, \
314  TF_PP_FE_40, TF_PP_FE_41, TF_PP_FE_42, TF_PP_FE_43, TF_PP_FE_44, \
315  TF_PP_FE_45, TF_PP_FE_46, TF_PP_FE_47, TF_PP_FE_48, TF_PP_FE_49, \
316  TF_PP_FE_50, TF_PP_FE_51, TF_PP_FE_52, TF_PP_FE_53, TF_PP_FE_54, \
317  TF_PP_FE_55, TF_PP_FE_56, TF_PP_FE_57, TF_PP_FE_58, TF_PP_FE_59, \
318  TF_PP_FE_60, TF_PP_FE_61, TF_PP_FE_62, TF_PP_FE_63)(x, ##__VA_ARGS__)
319 
320 #endif
321 
322 #endif // PXR_BASE_TF_PREPROCESSOR_UTILS_LITE_H