ToString.h 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. #ifndef CORE_TO_STRING_H
  2. #define CORE_TO_STRING_H
  3. #include "core/Check.h"
  4. #include "core/Types.h"
  5. check_format(3, 4) size_t
  6. coreToString(char* buffer, size_t n, const char* format, ...);
  7. size_t coreToStringSize(const void* p, char* buffer, size_t n);
  8. size_t coreToStringInt(const void* p, char* buffer, size_t n);
  9. void coreStringAdd(size_t* w, char** buffer, size_t* n, size_t shift);
  10. struct CoreListT;
  11. size_t coreToStringList(const struct CoreListT* l, char* buffer, size_t n,
  12. CoreToString c);
  13. struct CoreQueueT;
  14. size_t coreToStringQueue(const struct CoreQueueT* r, char* buffer, size_t n,
  15. CoreToString c);
  16. struct CoreHashMapT;
  17. size_t coreToStringHashMap(const struct CoreHashMapT* m, char* buffer, size_t n,
  18. CoreToString keyString, CoreToString valueString);
  19. #define CORE_STRUCT_TO_STRING(type) \
  20. struct Core##type##T; \
  21. size_t coreToString##type(const struct Core##type##T* a, char* buffer, \
  22. size_t n);
  23. CORE_STRUCT_TO_STRING(BitArray)
  24. CORE_STRUCT_TO_STRING(Box)
  25. CORE_STRUCT_TO_STRING(Matrix)
  26. CORE_STRUCT_TO_STRING(Plane)
  27. #ifdef IMPORT_CORE
  28. #define toStringSize coreToStringSize
  29. #define toStringInt coreToStringInt
  30. #define stringAdd coreStringAdd
  31. #define toStringList coreToStringList
  32. #define toStringQueue coreToStringQueue
  33. #define toStringHashMap coreToStringHashMap
  34. #define toStringBitArray coreToStringBitArray
  35. #define toStringBox coreToStringBox
  36. #define toStringMatrix coreToStringMatrix
  37. #define toStringPlane coreToStringPlane
  38. // clang-format off
  39. #define CORE_PAIR(a, b) a: b
  40. // clang-format on
  41. #define CORE_STRUCT_PAIR(name) \
  42. CORE_PAIR(const struct Core##name##T*, toString##name), \
  43. CORE_PAIR(struct Core##name##T*, toString##name)
  44. #define toString(t, ...) \
  45. _Generic((t), \
  46. char*: coreToString, \
  47. CORE_STRUCT_PAIR(BitArray), \
  48. CORE_STRUCT_PAIR(Box), \
  49. CORE_STRUCT_PAIR(Matrix), \
  50. CORE_STRUCT_PAIR(Plane), \
  51. CORE_STRUCT_PAIR(List), \
  52. CORE_STRUCT_PAIR(Queue), \
  53. CORE_STRUCT_PAIR(HashMap))(t, __VA_ARGS__)
  54. #endif
  55. #endif