瀏覽代碼

Support signed chars

Kajetan Johannes Hammerle 2 月之前
父節點
當前提交
497920ebbc
共有 3 個文件被更改,包括 12 次插入10 次删除
  1. 1 0
      include/core/ToString.hpp
  2. 7 8
      src/ToString.cpp
  3. 4 2
      test/modules/UtilityTests.cpp

+ 1 - 0
include/core/ToString.hpp

@@ -8,6 +8,7 @@
 #include "core/Meta.hpp"
 
 namespace Core {
+    size_t toString(signed char v, char* s, size_t n);
     size_t toString(char v, char* s, size_t n);
     size_t toString(short v, char* s, size_t n);
     size_t toString(int v, char* s, size_t n);

+ 7 - 8
src/ToString.cpp

@@ -8,8 +8,13 @@
         int e = snprintf(s, n, format, v);             \
         return e < 0 ? 0 : static_cast<size_t>(e);     \
     }
+#define TO_STRING_LINK(from, to)                       \
+    size_t Core::toString(from v, char* s, size_t n) { \
+        return toString(static_cast<to>(v), s, n);     \
+    }
 
 TO_STRING(char, "%c")
+TO_STRING_LINK(signed char, char)
 TO_STRING(short, "%hd")
 TO_STRING(int, "%d")
 TO_STRING(long, "%ld")
@@ -21,21 +26,15 @@ TO_STRING(unsigned long, "%lu")
 TO_STRING(unsigned long long, "%llu")
 TO_STRING(double, "%.2f")
 TO_STRING(const char*, "%s")
+TO_STRING_LINK(char*, const char*)
 TO_STRING(const unsigned char*, "%s")
+TO_STRING_LINK(unsigned char*, const unsigned char*)
 
 size_t Core::toString(float v, char* s, size_t n) {
     int e = snprintf(s, n, "%.2f", static_cast<double>(v));
     return e < 0 ? 0 : static_cast<size_t>(e);
 }
 
-size_t Core::toString(char* v, char* s, size_t n) {
-    return toString(static_cast<const char*>(v), s, n);
-}
-
-size_t Core::toString(unsigned char* v, char* s, size_t n) {
-    return toString(static_cast<const unsigned char*>(v), s, n);
-}
-
 size_t Core::toString(bool v, char* s, size_t n) {
     int e = snprintf(s, n, "%s", v ? "true" : "false");
     return e < 0 ? 0 : static_cast<size_t>(e);

+ 4 - 2
test/modules/UtilityTests.cpp

@@ -96,9 +96,11 @@ static void testToString() {
     short s = 4;
     unsigned char cu = 'h';
     unsigned short su = 67;
+    signed char cs = 'x';
     TEST(
-        8, Core::formatBuffer(buffer, sizeof(buffer), "# # # #", c, s, cu, su));
-    TEST_STRING("a 4 h 67", buffer);
+        10, Core::formatBuffer(
+                buffer, sizeof(buffer), "# # # # #", c, s, cu, su, cs));
+    TEST_STRING("a 4 h 67 x", buffer);
 
     unsigned char text[] = "fgsdf";
     TEST(5, Core::toString(text, buffer, sizeof(buffer)));