Browse Source

improved string appending

Kajetan Johannes Hammerle 3 years ago
parent
commit
db7cde907c
2 changed files with 17 additions and 39 deletions
  1. 3 35
      utils/String.cpp
  2. 14 4
      utils/String.h

+ 3 - 35
utils/String.cpp

@@ -50,48 +50,16 @@ String& String::append(const char* str) {
     return *this;
 }
 
-String& String::appendFormat(const char* format, void* value) {
-    uint left = MAX_LENGTH - length;
-    uint written = snprintf(data + length, left, format, value);
-    if(written < left) {
-        length += written;
-    } else {
-        length = MAX_LENGTH;
-    }
-    return *this;
-}
-
 String& String::append(uint i) {
-    uint left = MAX_LENGTH - length;
-    uint written = snprintf(data + length, left, "%u", i);
-    if(written < left) {
-        length += written;
-    } else {
-        length = MAX_LENGTH;
-    }
-    return *this;
+    return append("%u", i);
 }
 
 String& String::append(int i) {
-    uint left = MAX_LENGTH - length;
-    uint written = snprintf(data + length, left, "%d", i);
-    if(written < left) {
-        length += written;
-    } else {
-        length = MAX_LENGTH;
-    }
-    return *this;
+    return append("%d", i);
 }
 
 String& String::append(float f) {
-    uint left = MAX_LENGTH - length;
-    uint written = snprintf(data + length, left, "%.2f", f);
-    if(written < left) {
-        length += written;
-    } else {
-        length = MAX_LENGTH;
-    }
-    return *this;
+    return append("%.2f", f);
 }
 
 String& String::append(bool b) {

+ 14 - 4
utils/String.h

@@ -7,13 +7,25 @@ class String final {
 public:
     String();
     String(const char* str);
-    
+
     bool operator==(const String& other) const;
     bool operator!=(const String& other) const;
     operator const char*() const;
     char operator[](uint index) const;
     uint getLength() const;
-    
+
+    template<typename T>
+    String& append(const char* format, const T& t) {
+        uint left = MAX_LENGTH - length;
+        uint written = snprintf(data + length, left, format, t);
+        if(written < left) {
+            length += written;
+        } else {
+            length = MAX_LENGTH;
+        }
+        return *this;
+    }
+
     String& append(char c);
     String& append(const char* str);
     String& append(uint i);
@@ -22,8 +34,6 @@ public:
     String& append(bool b);
 
 private:
-    String& appendFormat(const char* format, void* value);
-    
     static constexpr uint MAX_LENGTH = 255;
     char data[MAX_LENGTH];
     u8 length;