ToString.h 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637
  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. #define CORE_STRUCT_TO_STRING(type) \
  11. struct Core##type##T; \
  12. size_t coreToString##type(const struct Core##type##T* a, char* buffer, \
  13. size_t n);
  14. CORE_STRUCT_TO_STRING(BitArray)
  15. #ifdef IMPORT_CORE
  16. #define toStringSize coreToStringSize
  17. #define toStringInt coreToStringInt
  18. #define stringAdd coreStringAdd
  19. #define toStringBitArray coreToStringBitArray
  20. // clang-format off
  21. #define CORE_PAIR(a, b) a: b
  22. // clang-format on
  23. #define CORE_STRUCT_PAIR(name) \
  24. CORE_PAIR(const struct Core##name##T*, toString##name), \
  25. CORE_PAIR(struct Core##name##T*, toString##name)
  26. #define toString(t, ...) \
  27. _Generic((t), char*: coreToString, CORE_STRUCT_PAIR(BitArray))( \
  28. t, __VA_ARGS__)
  29. #endif
  30. #endif