Kaynağa Gözat

Fix string copy/move

Kajetan Johannes Hammerle 16 saat önce
ebeveyn
işleme
42d1c97875

+ 22 - 2
modules/ToString.cppm

@@ -24,9 +24,9 @@ export namespace Core {
         StringBase(char* s, size_t n) noexcept : capacity(n), buffer(s) {
         }
 
-        StringBase(StringBase&& other) = default;
+        StringBase(StringBase&& other) = delete;
         StringBase(const StringBase& other) = delete;
-        StringBase& operator=(StringBase&& other) = default;
+        StringBase& operator=(StringBase&& other) = delete;
         StringBase& operator=(const StringBase& other) = delete;
 
         operator const char*() const noexcept {
@@ -146,6 +146,26 @@ export namespace Core {
 
         String() noexcept : StringBase(data, N) {
         }
+
+        String(String&& other) : String(static_cast<const String&>(other)) {
+        }
+
+        String(const String& other) : String() {
+            clear();
+            add(other);
+        }
+
+        String& operator=(String&& other) {
+            clear();
+            add(other);
+            return *this;
+        }
+
+        String& operator=(const String& other) {
+            clear();
+            add(other);
+            return *this;
+        }
     };
 
     template<typename... Args>

+ 4 - 0
src/Wusi.hpp

@@ -0,0 +1,4 @@
+#pragma once
+
+inline void greatFunction() {
+}

+ 2 - 2
test/modules/MatrixTests.cpp

@@ -178,8 +178,8 @@ static void testToString() {
         "[[1.00, 2.00, 3.00, 4.00], [5.00, 6.00, 7.00, 8.00], "
         "[9.00, 10.00, 11.00, 12.00], [13.00, 14.00, 15.00, 16.00]]",
         s);
-    s = Core::StringBase(buffer, 20);
-    n = s.add(m);
+    Core::StringBase s2(buffer, 20);
+    n = s2.add(m);
     Core::test(111, n);
     Core::testString("[[1.00, 2.00, 3.00,", buffer);
 }

+ 27 - 27
test/modules/UtilityTests.cpp

@@ -88,38 +88,38 @@ static void testToString() {
     Core::test(7, b.format("{{a}{}{{b}", 1));
     Core::testString("{a}1{b}", b);
 
-    b = Core::StringBase(buffer, 3);
-    Core::test(6, b.format("aaaaaa"));
-    Core::testString("aa", b);
+    Core::StringBase b2(buffer, 3);
+    Core::test(6, b2.format("aaaaaa"));
+    Core::testString("aa", b2);
 
-    b = Core::StringBase(buffer, 4);
-    Core::test(4, b.format("a{}", 456));
-    Core::testString("a45", b);
+    Core::StringBase b3(buffer, 4);
+    Core::test(4, b3.format("a{}", 456));
+    Core::testString("a45", b3);
 
-    b = Core::StringBase(buffer, 4);
-    Core::test(10, b.format("{} {} {}", 456, 567, 78));
-    Core::testString("456", b);
+    Core::StringBase b4(buffer, 4);
+    Core::test(10, b4.format("{} {} {}", 456, 567, 78));
+    Core::testString("456", b4);
 
-    b = Core::StringBase(buffer, 1);
-    Core::test(10, b.format("{} {} {}", 456, 567, 78));
-    Core::testString("", b);
+    Core::StringBase b5(buffer, 1);
+    Core::test(10, b5.format("{} {} {}", 456, 567, 78));
+    Core::testString("", b5);
 
-    b = Core::StringBase(nullptr, 0);
-    Core::test(10, b.format("{} {} {}", 456ll, 567l, 78ull));
+    Core::StringBase b6(nullptr, 0);
+    Core::test(10, b6.format("{} {} {}", 456ll, 567l, 78ull));
 
     char c = 'a';
     short s = -454;
     unsigned char cu = 'h';
     unsigned short su = 67;
     signed char cs = 'x';
-    b = Core::StringBase(buffer, sizeof(buffer));
+    Core::StringBase b7(buffer, sizeof(buffer));
     Core::test(
-        24, b.format("{} {} {} {} {} {} {}", c, s, cu, su, cs, true, false));
+        24, b7.format("{} {} {} {} {} {} {}", c, s, cu, su, cs, true, false));
     Core::testString("a -454 h 67 x true false", b);
 
     unsigned char text[] = "fgsdf";
-    b.clear();
-    Core::test(5, b.add(text));
+    b7.clear();
+    Core::test(5, b7.add(text));
     Core::testString("fgsdf", buffer);
 }
 
@@ -135,15 +135,15 @@ static void testStringFormat() {
     Core::test(7, s.format("X{l5}X", 5));
     Core::testString("X5    X", s);
 
-    s = Core::StringBase(buffer, 0);
-    Core::test(3, s.format("X{}X", 5));
-    Core::testString("", s);
-    Core::test(7, s.format("X{5}X", 5));
-    Core::testString("", s);
-    Core::test(7, s.format("X{r5}X", 5));
-    Core::testString("", s);
-    Core::test(7, s.format("X{l5}X", 5));
-    Core::testString("", s);
+    Core::StringBase s2(buffer, 0);
+    Core::test(3, s2.format("X{}X", 5));
+    Core::testString("", s2);
+    Core::test(7, s2.format("X{5}X", 5));
+    Core::testString("", s2);
+    Core::test(7, s2.format("X{r5}X", 5));
+    Core::testString("", s2);
+    Core::test(7, s2.format("X{l5}X", 5));
+    Core::testString("", s2);
 }
 
 static void testDefaultString() {