Azure IoT common library
Dependents: STM32F746_iothub_client_sample_mqtt f767zi_mqtt iothub_client_sample_amqp iothub_client_sample_http ... more
Diff: azure_c_shared_utility/macro_utils.h
- Revision:
- 45:1119d0f2c4d8
- Parent:
- 42:0cc3c211ad26
--- a/azure_c_shared_utility/macro_utils.h Fri May 04 13:26:26 2018 -0700 +++ b/azure_c_shared_utility/macro_utils.h Mon Jun 11 15:41:10 2018 -0700 @@ -94,7 +94,7 @@ #define IFCOMMA_124 , #define IFCOMMA_NOFIRST(N) C2(IFCOMMA_NOFIRST, N) -#define IFCOMMA_NOFIRST1 +#define IFCOMMA_NOFIRST1 #define IFCOMMA_NOFIRST2 , #define IFCOMMA_NOFIRST3 , #define IFCOMMA_NOFIRST4 , @@ -7396,7 +7396,7 @@ #ifdef _MSC_VER #define FOR_EACH_2(MACRO_TO_INVOKE, ...) C2(FOR_EACH_2_, C1(COUNT_ARG(__VA_ARGS__))) LPAREN MACRO_TO_INVOKE, __VA_ARGS__) /*the COUNTED breed of FOR_EACH macro invokes a macro with 3 parameters: 1st being the count of invocation. For example. -FOR_EACH_2_COUNTER(MACRO, a,b,c,d,e,f) will result in +FOR_EACH_2_COUNTER(MACRO, a,b,c,d,e,f) will result in MACRO(6, a,b) MACRO(4, c,d) MACRO(2, e,f) @@ -12575,8 +12575,8 @@ extern int C2(enumName, _FromString)(const char* enumAsString, enumName* destination); -#define DEFINE_ENUMERATION_CONSTANT_AS_WIDESTRING(x) C2(L, TOSTRING(x)) , -#define DEFINE_ENUMERATION_CONSTANT_AS_STRING(x) TOSTRING(x) , +#define DEFINE_ENUMERATION_CONSTANT_AS_WIDESTRING(x) C2(L, TOSTRING(x)) , +#define DEFINE_ENUMERATION_CONSTANT_AS_STRING(x) TOSTRING(x) , /*DEFINE_ENUM_STRINGS goes to .c*/ #define DEFINE_ENUM_STRINGS(enumName, ...) const char* C2(enumName, StringStorage)[COUNT_ARG(__VA_ARGS__)] = {FOR_EACH_1(DEFINE_ENUMERATION_CONSTANT_AS_STRING, __VA_ARGS__)}; \ const char* C2(enumName,Strings)(enumName value) \ @@ -12614,6 +12614,39 @@ } \ } \ +#define ENUM_TO_STRING(enumName, enumValue) C2(enumName, Strings)(enumValue) +#define STRING_TO_ENUM(stringValue, enumName, addressOfEnumVariable) C2(enumName, _FromString)(stringValue, addressOfEnumVariable) + +#define DEFINE_MICROMOCK_ENUM_TO_STRING(type, ...) MICROMOCK_ENUM_TO_STRING(type, FOR_EACH_1(DEFINE_ENUMERATION_CONSTANT_AS_WIDESTRING, __VA_ARGS__)); + +#define EMPTY() +#define MACRO_UTILS_DELAY(id) id EMPTY LPAREN ) + +#endif /*MACRO_UTILS_H*/ + +// This portion of macro_utils.h is designed to be included multiple times to +// redefine DEFINE_LOCAL_ENUM in situations where ENUM_TO_STRING is never called +// thus avoiding the following warning +// +// warning: function "XXXXXXStrings" was declared but never referenced +// +// For Example, iothubtransport_amqp_common.c defines AMQP_TRANSPORT_STATE +// but never calls ENUM_TO_STRING. To silence this warning you would do the +// following: +// +// // Suppress unused function warning for AMQP_TRANSPORT_STATEstrings +// #define ENUM_TO_STRING_UNUSED +// #include "azure_c_shared_utility/macro_utils.h" +// +// DEFINE_LOCAL_ENUM(AMQP_TRANSPORT_STATE, AMQP_TRANSPORT_STATE_STRINGS); +// + +#ifdef DEFINE_LOCAL_ENUM +#undef DEFINE_LOCAL_ENUM +#endif + +#ifndef ENUM_TO_STRING_UNUSED + #define DEFINE_LOCAL_ENUM(enumName, ...) typedef enum C2(enumName, _TAG) { FOR_EACH_1(DEFINE_ENUMERATION_CONSTANT, __VA_ARGS__)} enumName; \ static const char* C2(enumName, StringStorage)[COUNT_ARG(__VA_ARGS__)] = {FOR_EACH_1(DEFINE_ENUMERATION_CONSTANT_AS_STRING, __VA_ARGS__)}; \ static const char* C2(enumName,Strings)(enumName value) \ @@ -12629,13 +12662,8 @@ } \ } - -#define ENUM_TO_STRING(enumName, enumValue) C2(enumName, Strings)(enumValue) -#define STRING_TO_ENUM(stringValue, enumName, addressOfEnumVariable) C2(enumName, _FromString)(stringValue, addressOfEnumVariable) - -#define DEFINE_MICROMOCK_ENUM_TO_STRING(type, ...) MICROMOCK_ENUM_TO_STRING(type, FOR_EACH_1(DEFINE_ENUMERATION_CONSTANT_AS_WIDESTRING, __VA_ARGS__)); - -#define EMPTY() -#define MACRO_UTILS_DELAY(id) id EMPTY LPAREN ) - -#endif /*MACRO_UTILS_H*/ +#else + +#define DEFINE_LOCAL_ENUM(enumName, ...) typedef enum C2(enumName, _TAG) { FOR_EACH_1(DEFINE_ENUMERATION_CONSTANT, __VA_ARGS__)} enumName; + +#endif