Bläddra i källkod

size_t string converter function

Kajetan Johannes Hammerle 10 månader sedan
förälder
incheckning
7a99004176
12 ändrade filer med 53 tillägg och 52 borttagningar
  1. 2 1
      include/core/Utility.h
  2. 6 6
      src/BitArray.c
  3. 6 6
      src/Box.c
  4. 3 3
      src/Frustum.c
  5. 4 4
      src/HashMap.c
  6. 3 3
      src/LinkedList.c
  7. 3 3
      src/List.c
  8. 5 5
      src/Matrix.c
  9. 4 5
      src/Plane.c
  10. 3 5
      src/Quaternion.c
  11. 3 3
      src/RingBuffer.c
  12. 11 8
      src/Utility.c

+ 2 - 1
include/core/Utility.h

@@ -18,10 +18,11 @@ inline size_t coreMinSize(size_t a, size_t b) {
     return a < b ? a : b;
 }
 
+check_format(3, 4) size_t
+    coreToString(char* buffer, size_t n, const char* format, ...);
 size_t coreToStringSize(const void* p, char* buffer, size_t n);
 size_t coreToStringInt(const void* p, char* buffer, size_t n);
 void coreStringAdd(size_t* w, char** buffer, size_t* n, size_t shift);
-void coreStringAddI(size_t* w, char** buffer, size_t* n, int shift);
 
 typedef void (*CoreExitHandler)(int, void*);
 [[noreturn]] void coreExitWithHandler(const char* file, int line, int value);

+ 6 - 6
src/BitArray.c

@@ -146,18 +146,18 @@ void coreFillBitArray(CoreBitArray* a, u64 value) {
 
 size_t coreToStringBitArray(const CoreBitArray* a, char* buffer, size_t n) {
     size_t w = 0;
-    coreStringAddI(&w, &buffer, &n, snprintf(buffer, n, "["));
+    coreStringAdd(&w, &buffer, &n, coreToString(buffer, n, "["));
     size_t length = a->length;
     if(length > 0) {
         length--;
         for(size_t i = 0; i < length; i++) {
-            coreStringAddI(&w, &buffer, &n,
-                           snprintf(buffer, n, "%lu, ", coreBitArrayGet(a, i)));
+            u64 v = coreBitArrayGet(a, i);
+            coreStringAdd(&w, &buffer, &n, coreToString(buffer, n, "%lu, ", v));
         }
-        coreStringAddI(&w, &buffer, &n,
-                       snprintf(buffer, n, "%lu", coreBitArrayGet(a, length)));
+        u64 v = coreBitArrayGet(a, length);
+        coreStringAdd(&w, &buffer, &n, coreToString(buffer, n, "%lu", v));
     }
-    coreStringAddI(&w, &buffer, &n, snprintf(buffer, n, "]"));
+    coreStringAdd(&w, &buffer, &n, coreToString(buffer, n, "]"));
     return w;
 }
 

+ 6 - 6
src/Box.c

@@ -1,6 +1,6 @@
 #include "core/Box.h"
 
-#include <stdio.h>
+#include "core/Utility.h"
 
 CoreBox* coreSetBox(CoreBox* box, const CoreVector3* size) {
     for(size_t i = 0; i < 3; i++) {
@@ -60,9 +60,9 @@ CoreBox* coreGrowBox(CoreBox* box, const CoreVector3* growth) {
 }
 
 size_t coreToStringBox(const CoreBox* box, char* buffer, size_t n) {
-    int w = snprintf(buffer, n, "Box([%.3f, %.3f, %.3f], [%.3f, %.3f, %.3f])",
-                     (double)box->min.data[0], (double)box->min.data[1],
-                     (double)box->min.data[2], (double)box->min.data[3],
-                     (double)box->min.data[4], (double)box->min.data[5]);
-    return w < 0 ? 0 : (size_t)w;
+    return coreToString(buffer, n,
+                        "Box([%.3f, %.3f, %.3f], [%.3f, %.3f, %.3f])",
+                        (double)box->min.data[0], (double)box->min.data[1],
+                        (double)box->min.data[2], (double)box->min.data[3],
+                        (double)box->min.data[4], (double)box->min.data[5]);
 }

+ 3 - 3
src/Frustum.c

@@ -102,7 +102,7 @@ bool coreIsInsideFrustumRadius(const CoreFrustum* f, const CoreVector3* pos,
 }
 
 size_t coreToStringFrustum(const CoreFrustum* f, char* buffer, size_t n) {
-    int w = snprintf(buffer, n, "(tan = %.3f, nearClip = %.3f, farClip = %.3f)",
-                     (double)f->tan, (double)f->nearClip, (double)f->farClip);
-    return w < 0 ? 0 : (size_t)w;
+    return coreToString(
+        buffer, n, "(tan = %.3f, nearClip = %.3f, farClip = %.3f)",
+        (double)f->tan, (double)f->nearClip, (double)f->farClip);
 }

+ 4 - 4
src/HashMap.c

@@ -221,7 +221,7 @@ bool coreHashMapRemovePointer(CoreHashMap* m, const void* key) {
 size_t coreToStringHashMap(const CoreHashMap* m, char* buffer, size_t n,
                            CoreToString keyString, CoreToString valueString) {
     size_t w = 0;
-    coreStringAddI(&w, &buffer, &n, snprintf(buffer, n, "["));
+    coreStringAdd(&w, &buffer, &n, coreToString(buffer, n, "["));
     char* end = getKey(m, m->capacity);
     char* key = m->keys;
     char* value = m->values;
@@ -229,17 +229,17 @@ size_t coreToStringHashMap(const CoreHashMap* m, char* buffer, size_t n,
     while(key != end) {
         if(isInvalidKey(m, key) == (key + m->keySize == end)) {
             if(notFirst) {
-                coreStringAddI(&w, &buffer, &n, snprintf(buffer, n, ", "));
+                coreStringAdd(&w, &buffer, &n, coreToString(buffer, n, ", "));
             }
             notFirst = true;
             coreStringAdd(&w, &buffer, &n, keyString(key, buffer, n));
-            coreStringAddI(&w, &buffer, &n, snprintf(buffer, n, " = "));
+            coreStringAdd(&w, &buffer, &n, coreToString(buffer, n, " = "));
             coreStringAdd(&w, &buffer, &n, valueString(value, buffer, n));
         }
         key += m->keySize;
         value += m->valueSize;
     }
-    coreStringAddI(&w, &buffer, &n, snprintf(buffer, n, "]"));
+    coreStringAdd(&w, &buffer, &n, coreToString(buffer, n, "]"));
     return w;
 }
 

+ 3 - 3
src/LinkedList.c

@@ -73,17 +73,17 @@ void coreLinkedListRemoveLast(CoreLinkedList* l) {
 size_t coreToStringLinkedList(CoreLinkedList* l, char* buffer, size_t n,
                               CoreToString c) {
     size_t w = 0;
-    coreStringAddI(&w, &buffer, &n, snprintf(buffer, n, "["));
+    coreStringAdd(&w, &buffer, &n, coreToString(buffer, n, "["));
     CoreLinkedListNode* current = l->first;
     while(current != nullptr) {
         coreStringAdd(&w, &buffer, &n,
                       c(coreLinkedListGetPointer(current, void), buffer, n));
         current = current->next;
         if(current != nullptr) {
-            coreStringAddI(&w, &buffer, &n, snprintf(buffer, n, ", "));
+            coreStringAdd(&w, &buffer, &n, coreToString(buffer, n, ", "));
         }
     }
-    coreStringAddI(&w, &buffer, &n, snprintf(buffer, n, "]"));
+    coreStringAdd(&w, &buffer, &n, coreToString(buffer, n, "]"));
     return w;
 }
 

+ 3 - 3
src/List.c

@@ -142,17 +142,17 @@ void coreListRemoveLast(CoreList* l) {
 
 size_t coreToStringList(CoreList* l, char* buffer, size_t n, CoreToString c) {
     size_t w = 0;
-    coreStringAddI(&w, &buffer, &n, snprintf(buffer, n, "["));
+    coreStringAdd(&w, &buffer, &n, coreToString(buffer, n, "["));
     char* end = coreListEnd(l);
     char* p = coreListBegin(l);
     while(p != end) {
         coreStringAdd(&w, &buffer, &n, c(p, buffer, n));
         p += l->dataSize;
         if(p != end) {
-            coreStringAddI(&w, &buffer, &n, snprintf(buffer, n, ", "));
+            coreStringAdd(&w, &buffer, &n, coreToString(buffer, n, ", "));
         }
     }
-    coreStringAddI(&w, &buffer, &n, snprintf(buffer, n, "]"));
+    coreStringAdd(&w, &buffer, &n, coreToString(buffer, n, "]"));
     return w;
 }
 

+ 5 - 5
src/Matrix.c

@@ -137,14 +137,14 @@ CoreMatrix* coreRotateMatrix(CoreMatrix* m, const CoreQuaternion* q) {
 
 size_t coreToStringMatrix(const CoreMatrix* m, char* buffer, size_t n) {
     size_t w = 0;
-    coreStringAddI(&w, &buffer, &n, snprintf(buffer, n, "["));
+    coreStringAdd(&w, &buffer, &n, coreToString(buffer, n, "["));
     coreStringAdd(&w, &buffer, &n, coreToStringV4(m->data + 0, buffer, n));
-    coreStringAddI(&w, &buffer, &n, snprintf(buffer, n, ", "));
+    coreStringAdd(&w, &buffer, &n, coreToString(buffer, n, ", "));
     coreStringAdd(&w, &buffer, &n, coreToStringV4(m->data + 1, buffer, n));
-    coreStringAddI(&w, &buffer, &n, snprintf(buffer, n, ", "));
+    coreStringAdd(&w, &buffer, &n, coreToString(buffer, n, ", "));
     coreStringAdd(&w, &buffer, &n, coreToStringV4(m->data + 2, buffer, n));
-    coreStringAddI(&w, &buffer, &n, snprintf(buffer, n, ", "));
+    coreStringAdd(&w, &buffer, &n, coreToString(buffer, n, ", "));
     coreStringAdd(&w, &buffer, &n, coreToStringV4(m->data + 3, buffer, n));
-    coreStringAddI(&w, &buffer, &n, snprintf(buffer, n, "]"));
+    coreStringAdd(&w, &buffer, &n, coreToString(buffer, n, "]"));
     return w;
 }

+ 4 - 5
src/Plane.c

@@ -1,6 +1,6 @@
 #include "core/Plane.h"
 
-#include <stdio.h>
+#include "core/Utility.h"
 
 #define CV30 (&CORE_VECTOR3)
 
@@ -16,8 +16,7 @@ float coreSignedDistance(const CorePlane* p, const CoreVector3* v) {
 }
 
 size_t coreToStringPlane(const CorePlane* p, char* buffer, size_t n) {
-    int w = snprintf(buffer, n, "(%.3f x + %.3f y + %.3f z + %.3f)",
-                     (double)p->abc.data[0], (double)p->abc.data[1],
-                     (double)p->abc.data[2], (double)p->d);
-    return w < 0 ? 0 : (size_t)w;
+    return coreToString(buffer, n, "(%.3f x + %.3f y + %.3f z + %.3f)",
+                        (double)p->abc.data[0], (double)p->abc.data[1],
+                        (double)p->abc.data[2], (double)p->d);
 }

+ 3 - 5
src/Quaternion.c

@@ -1,7 +1,6 @@
 #include "core/Quaternion.h"
 
 #include <math.h>
-#include <stdio.h>
 
 #include "core/Utility.h"
 
@@ -56,8 +55,7 @@ CoreVector3* coreMulQV3(CoreVector3* r, const CoreQuaternion* q,
 }
 
 size_t coreToStringQ(const CoreQuaternion* q, char* buffer, size_t n) {
-    int w = snprintf(buffer, n, "(%.3f i + %.3f j + %.3f k + %.3f)",
-                     (double)q->xyz.data[0], (double)q->xyz.data[1],
-                     (double)q->xyz.data[2], (double)q->w);
-    return w < 0 ? 0 : (size_t)w;
+    return coreToString(buffer, n, "(%.3f i + %.3f j + %.3f k + %.3f)",
+                        (double)q->xyz.data[0], (double)q->xyz.data[1],
+                        (double)q->xyz.data[2], (double)q->w);
 }

+ 3 - 3
src/RingBuffer.c

@@ -55,19 +55,19 @@ void coreRingBufferRemove(CoreRingBuffer* r) {
 size_t coreToStringRingBuffer(CoreRingBuffer* r, char* buffer, size_t n,
                               CoreToString c) {
     size_t w = 0;
-    coreStringAddI(&w, &buffer, &n, snprintf(buffer, n, "["));
+    coreStringAdd(&w, &buffer, &n, coreToString(buffer, n, "["));
     size_t end = r->length;
     if(end > 0) {
         end--;
         for(size_t i = 0; i < end; i++) {
             coreStringAdd(&w, &buffer, &n,
                           c(coreRingBufferGetVoidPointer(r, i), buffer, n));
-            coreStringAddI(&w, &buffer, &n, snprintf(buffer, n, ", "));
+            coreStringAdd(&w, &buffer, &n, coreToString(buffer, n, ", "));
         }
         coreStringAdd(&w, &buffer, &n,
                       c(coreRingBufferGetVoidPointer(r, end), buffer, n));
     }
-    coreStringAddI(&w, &buffer, &n, snprintf(buffer, n, "]"));
+    coreStringAdd(&w, &buffer, &n, coreToString(buffer, n, "]"));
     return w;
 }
 

+ 11 - 8
src/Utility.c

@@ -1,5 +1,6 @@
 #include "core/Utility.h"
 
+#include <stdarg.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
@@ -26,14 +27,20 @@ size_t corePopCount(u64 u) {
     return sum;
 }
 
-size_t coreToStringSize(const void* p, char* buffer, size_t n) {
-    int w = snprintf(buffer, n, "%zu", *(const size_t*)p);
+size_t coreToString(char* buffer, size_t n, const char* format, ...) {
+    va_list args;
+    va_start(args, format);
+    int w = vsnprintf(buffer, n, format, args);
+    va_end(args);
     return w < 0 ? 0 : (size_t)w;
 }
 
+size_t coreToStringSize(const void* p, char* buffer, size_t n) {
+    return coreToString(buffer, n, "%zu", *(const size_t*)p);
+}
+
 size_t coreToStringInt(const void* p, char* buffer, size_t n) {
-    int w = snprintf(buffer, n, "%d", *(const int*)p);
-    return w < 0 ? 0 : (size_t)w;
+    return coreToString(buffer, n, "%d", *(const int*)p);
 }
 
 void coreStringAdd(size_t* w, char** buffer, size_t* n, size_t shift) {
@@ -46,10 +53,6 @@ void coreStringAdd(size_t* w, char** buffer, size_t* n, size_t shift) {
     }
 }
 
-void coreStringAddI(size_t* w, char** buffer, size_t* n, int shift) {
-    coreStringAdd(w, buffer, n, shift < 0 ? 0 : (size_t)shift);
-}
-
 [[noreturn]] void coreExitWithHandler(const char* file, int line, int value) {
     if(value != 0) {
         file = coreGetShortFileName(file);