Advertisement
YoungSideways

type_cast.h

Apr 17th, 2021
409
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 4.98 KB | None | 0 0
  1. #pragma once
  2.  
  3. #ifdef _inl_
  4. #undef _inl_
  5. #endif // !_inl_
  6. #ifdef TYPE_CAST_NO_INLINE
  7. #define _inl_
  8. #else
  9. #define _inl_ inline
  10. #endif // !TYPE_CAST_NO_INLINE
  11.  
  12. #define _CRT_SECURE_NO_WARNINGS
  13. #include <stdio.h>
  14. #include <inttypes.h>
  15.  
  16. #define type__format(T) _Generic((T),\
  17. char                : "%c ",\
  18. short               : "%" PRId16 " ",\
  19. int                 : "%" PRId32 " ",\
  20. long                : "%" PRId32 " ",\
  21. long long           : "%" PRId64 " ",\
  22. unsigned char       : "%" PRIu8  " ",\
  23. unsigned short      : "%" PRIu16 " ",\
  24. unsigned int        : "%" PRIu32 " ",\
  25. unsigned long       : "%" PRIu32 " ",\
  26. unsigned long long  : "%" PRIu64 " ",\
  27. float               : "%g ",\
  28. double              : "%lg ",\
  29. long double         : "%Lg ",\
  30. char*               : "%s",\
  31. default             : "%" PRIi32 " ")
  32.  
  33. #define type_format(T) type__format((T)0)
  34.  
  35. #define declare(NAME, T)\
  36. _inl_ void NAME##ts(void* data, char* buffer) {\
  37.         sprintf(buffer, type_format( T ), *( T *)data);\
  38. };\
  39. _inl_ void NAME##ts_s(void* data, char* buffer, size_t buffer_size) {\
  40.     if (data && buffer)\
  41.         snprintf(buffer, buffer_size, type_format( T ), *( T *)data);\
  42. }
  43.  
  44. typedef long double ldouble;
  45.  
  46. declare(c, int8_t);
  47. declare(i16, int16_t);
  48. declare(i32, int32_t);
  49. declare(i64, int64_t);
  50. declare(u8, uint8_t);
  51. declare(u16, uint16_t);
  52. declare(u32, uint32_t);
  53. declare(u64, uint64_t);
  54. declare(f, float);
  55. declare(d, double);
  56. declare(ld, ldouble);
  57. _inl_ void sts(char* data, char* buffer) {
  58.     sprintf(buffer, type_format(char*), data);
  59. };
  60. _inl_ void sts_s(char* data, char* buffer, size_t buffer_size) {
  61.     if (data && buffer)\
  62.         snprintf(buffer, buffer_size, type_format(char*), data);
  63. }
  64. /*_inl_ void cts(void* data, char* buffer) {
  65.     sprintf(buffer, "%c ", *(char*)data);
  66. }
  67. _inl_ void cts_s(void* data, char* buffer, size_t buffer_size) {
  68.     if (data && buffer && buffer_size)
  69.         snprintf(buffer, buffer_size, "%c ", *(char*)data);
  70. }
  71.  
  72. _inl_ void i8ts(void* data, char* buffer) {
  73.     sprintf(buffer, "%" PRIi8 " ", *(int8_t*)data);
  74. }
  75. _inl_ void u8ts(void* data, char* buffer) {
  76.     sprintf(buffer, "%" PRIu8 " ", *(uint8_t*)data);
  77. }
  78. _inl_ void i8ts_s(void* data, char* buffer, size_t buffer_size) {
  79.     if (data && buffer && buffer_size)
  80.         snprintf(buffer, buffer_size, "%" PRIi8 " ", *(int8_t*)data);
  81. }
  82. _inl_ void u8ts_s(void* data, char* buffer, size_t buffer_size) {
  83.     if (data && buffer && buffer_size)
  84.         snprintf(buffer, buffer_size, "%" PRIu8 " ", *(uint8_t*)data);
  85. }
  86.  
  87. _inl_ void i16ts(void* data, char* buffer) {
  88.     sprintf(buffer, "%" PRIi16 " ", *(int16_t*)data);
  89. }
  90. _inl_ void u16ts(void* data, char* buffer) {
  91.     sprintf(buffer, "%" PRIu16 " ", *(uint16_t*)data);
  92. }
  93. _inl_ void i16ts_s(void* data, char* buffer, size_t buffer_size) {
  94.     if (data && buffer && buffer_size)
  95.         snprintf(buffer, buffer_size, "%" PRIi16 " ", *(int16_t*)data);
  96. }
  97. _inl_ void u16ts_s(void* data, char* buffer, size_t buffer_size) {
  98.     if (data && buffer && buffer_size)
  99.         snprintf(buffer, buffer_size, "%" PRIu16 " ", *(uint16_t*)data);
  100. }
  101.  
  102. _inl_ void i32ts(void* data, char* buffer) {
  103.     sprintf(buffer, "%" PRIi32 " ", *(int32_t*)data);
  104. }
  105. _inl_ void u32ts(void* data, char* buffer) {
  106.     sprintf(buffer, "%" PRIu32 " ", *(uint32_t*)data);
  107. }
  108. _inl_ void i32ts_s(void* data, char* buffer, size_t buffer_size) {
  109.     if (data && buffer && buffer_size)
  110.         snprintf(buffer, buffer_size, "%" PRIi32 " ", *(int32_t*)data);
  111. }
  112. _inl_ void u32ts_s(void* data, char* buffer, size_t buffer_size) {
  113.     if (data && buffer && buffer_size)
  114.         snprintf(buffer, buffer_size, "%" PRIu32 " ", *(uint32_t*)data);
  115. }
  116.  
  117. _inl_ void i64ts(void* data, char* buffer) {
  118.     sprintf(buffer, "%" PRIi64 " ", *(int64_t*)data);
  119. }
  120. _inl_ void u64ts(void* data, char* buffer) {
  121.     sprintf(buffer, "%" PRIu64 " ", *(uint64_t*)data);
  122. }
  123. _inl_ void i64ts_s(void* data, char* buffer, size_t buffer_size) {
  124.     if (data && buffer && buffer_size)
  125.         snprintf(buffer, buffer_size, "%" PRIi64 " ", *(int64_t*)data);
  126. }
  127. _inl_ void u64ts_s(void* data, char* buffer, size_t buffer_size) {
  128.     if (data && buffer && buffer_size)
  129.         snprintf(buffer, buffer_size, "%" PRIu64 " ", *(uint64_t*)data);
  130. }
  131.  
  132. _inl_ void fts(void* data, char* buffer) {
  133.     sprintf(buffer, "%f ", *(float*)data);
  134. }
  135. _inl_ void fts_s(void* data, char* buffer, size_t buffer_size) {
  136.     if (data && buffer && buffer_size)
  137.         snprintf(buffer, buffer_size, "%f ", *(float*)data);
  138. }
  139. _inl_ void dts(void* data, char* buffer) {
  140.     sprintf(buffer, "%lf ", *(double*)data);
  141. }
  142. _inl_ void dts_s(void* data, char* buffer, size_t buffer_size) {
  143.     if (data && buffer && buffer_size)
  144.         snprintf(buffer, buffer_size, "%lf ", *(double*)data);
  145. }
  146. _inl_ void ldts(void* data, char* buffer) {
  147.     sprintf(buffer, "%lf ", *(long double*)data);
  148. }
  149. _inl_ void ldts_s(void* data, char* buffer, size_t buffer_size) {
  150.     if (data && buffer && buffer_size)
  151.         snprintf(buffer, buffer_size, "%lf ", *(long double*)data);
  152. }
  153.  
  154. _inl_ void sts(void* data, char* buffer) {
  155.     sprintf(buffer, "%s\n", (char*)data);
  156. }
  157. _inl_ void sts_s(void* data, char* buffer, size_t buffer_size) {
  158.     if (data && buffer && buffer_size)
  159.     snprintf(buffer, buffer_size, "%s\n", (char*)data);
  160. }*/
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement