Advertisement
Guest User

Untitled

a guest
Apr 22nd, 2019
107
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.17 KB | None | 0 0
  1. #ifndef ENUM_FACTORY_H__
  2. #define ENUM_FACTORY_H__
  3.  
  4. /*
  5. Factory used example:
  6. someEnum.h:
  7. #include "enum_factory.h"
  8. #define SOME_ENUM(XX) \
  9. XX(FirstValue,) \
  10. XX(SecondValue,) \
  11. XX(SomeOtherValue,=50) \
  12. XX(OneMoreValue,=100)
  13.  
  14. DECLARE_ENUM(SomeEnum,SOME_ENUM)
  15.  
  16. someEnum.cpp:
  17. #include "someEnum.h"
  18. DEFINE_ENUM(SomeEnum,SOME_ENUM)
  19. */
  20.  
  21. #include <string.h>
  22. // expansion macro for enum value definition
  23. #define ENUM_VALUE(name, assign) name assign,
  24.  
  25. // expansion macro for enum to string conversion
  26. #define ENUM_CASE(name, assign) \
  27. case name: \
  28. return #name;
  29.  
  30. // expansion macro for string to enum conversion
  31. #define ENUM_STRCMP(name, assign) \
  32. if (!strcmp(str, #name)) \
  33. return name;
  34.  
  35. /// declare the access function and define enum values
  36. #define DECLARE_ENUM(EnumType, ENUM_DEF) \
  37. enum EnumType { ENUM_DEF(ENUM_VALUE) }; \
  38. const char *GetString(EnumType dummy); \
  39. EnumType Get##EnumType##Value(const char *string);
  40.  
  41. /// define the access function names
  42. #define DEFINE_ENUM(EnumType, ENUM_DEF) \
  43. const char *GetString(EnumType value) { \
  44. switch (value) { \
  45. ENUM_DEF(ENUM_CASE) \
  46. default: \
  47. return ""; /* handle input error */ \
  48. } \
  49. } \
  50. EnumType Get##EnumType##Value(const char *str) { \
  51. ENUM_DEF(ENUM_STRCMP) \
  52. return (EnumType)0; /* handle input error */ \
  53. }
  54. #endif
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement