2 Komitmen 7b06b4a136 ... 42d1c97875

Pembuat SHA1 Pesan Tanggal
  Kajetan Johannes Hammerle 42d1c97875 Fix string copy/move 11 jam lalu
  Kajetan Johannes Hammerle 60c1dab8a6 Improved module installer 1 bulan lalu
6 mengubah file dengan 124 tambahan dan 78 penghapusan
  1. 7 47
      CMakeLists.txt
  2. 62 0
      cmake/add_modules.cmake
  3. 22 2
      modules/ToString.cppm
  4. 4 0
      src/Wusi.hpp
  5. 2 2
      test/modules/MatrixTests.cpp
  6. 27 27
      test/modules/UtilityTests.cpp

+ 7 - 47
CMakeLists.txt

@@ -7,48 +7,6 @@ set(PRIVATE_MODULES
     "src/ErrorSimulator.cppm"
 )
 
-set(PUBLIC_MODULES
-    "modules/AlignedData.cppm"
-    "modules/Array.cppm"
-    "modules/Assert.cppm"
-    "modules/ArrayList.cppm"
-    "modules/BitArray.cppm"
-    "modules/Box.cppm"
-    "modules/Buffer.cppm"
-    "modules/Clock.cppm"
-    "modules/Color.cppm"
-    "modules/Components.cppm"
-    "modules/File.cppm"
-    "modules/Frustum.cppm"
-    "modules/HashMap.cppm"
-    "modules/HashedString.cppm"
-    "modules/List.cppm"
-    "modules/Logger.cppm"
-    "modules/Math.cppm"
-    "modules/Matrix.cppm"
-    "modules/Meta.cppm"
-    "modules/New.cppm"
-    "modules/Plane.cppm"
-    "modules/Quaternion.cppm"
-    "modules/Queue.cppm"
-    "modules/Random.cppm"
-    "modules/ReadLine.cppm"
-    "modules/Std.cppm"
-    "modules/StringFormat.cppm"
-    "modules/StringJoin.cppm"
-    "modules/Terminal.cppm"
-    "modules/TerminalConstants.cppm"
-    "modules/Test.cppm"
-    "modules/Thread.cppm"
-    "modules/ToString.cppm"
-    "modules/Types.cppm"
-    "modules/Unicode.cppm"
-    "modules/UniquePointer.cppm"
-    "modules/Utility.cppm"
-    "modules/Vector.cppm"
-    "modules/View.cppm"
-)
-
 set(SRC
     "src/BitArray.cpp"
     "src/Box.cpp"
@@ -136,6 +94,7 @@ if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
 elseif(CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
     include("cmake/clang_warnings.cmake")
 endif()
+include("cmake/add_modules.cmake")
 
 add_library(core STATIC ${SRC})
 target_compile_options(core PUBLIC
@@ -143,10 +102,10 @@ target_compile_options(core PUBLIC
     ${WARNINGS}
     -fdiagnostics-color=always
 )
-target_sources(core PUBLIC
-    FILE_SET public_modules
-    TYPE CXX_MODULES
-    FILES ${PUBLIC_MODULES}
+add_modules(
+    TARGET core
+    NAME public_modules
+    FILES ${core_modules}
 )
 target_sources(core PUBLIC
     FILE_SET private_modules
@@ -160,7 +119,8 @@ target_compile_definitions(core
 target_link_libraries(core
     PRIVATE m ${LINK_OPTIONS}
 )
-install(TARGETS core FILE_SET public_modules DESTINATION modules)
+install(TARGETS core FILE_SET public_modules DESTINATION .)
+install(FILES cmake/add_modules.cmake DESTINATION cmake)
 
 add_executable(test ${SRC_TESTS})
 target_sources(test PUBLIC

+ 62 - 0
cmake/add_modules.cmake

@@ -0,0 +1,62 @@
+set(core_modules
+    "modules/AlignedData.cppm"
+    "modules/Array.cppm"
+    "modules/Assert.cppm"
+    "modules/ArrayList.cppm"
+    "modules/BitArray.cppm"
+    "modules/Box.cppm"
+    "modules/Buffer.cppm"
+    "modules/Clock.cppm"
+    "modules/Color.cppm"
+    "modules/Components.cppm"
+    "modules/File.cppm"
+    "modules/Frustum.cppm"
+    "modules/HashMap.cppm"
+    "modules/HashedString.cppm"
+    "modules/List.cppm"
+    "modules/Logger.cppm"
+    "modules/Math.cppm"
+    "modules/Matrix.cppm"
+    "modules/Meta.cppm"
+    "modules/New.cppm"
+    "modules/Plane.cppm"
+    "modules/Quaternion.cppm"
+    "modules/Queue.cppm"
+    "modules/Random.cppm"
+    "modules/ReadLine.cppm"
+    "modules/Std.cppm"
+    "modules/StringFormat.cppm"
+    "modules/StringJoin.cppm"
+    "modules/Terminal.cppm"
+    "modules/TerminalConstants.cppm"
+    "modules/Test.cppm"
+    "modules/Thread.cppm"
+    "modules/ToString.cppm"
+    "modules/Types.cppm"
+    "modules/Unicode.cppm"
+    "modules/UniquePointer.cppm"
+    "modules/Utility.cppm"
+    "modules/Vector.cppm"
+    "modules/View.cppm"
+)
+
+function(add_modules)
+    cmake_parse_arguments(args
+        "" "TARGET;NAME;PREFIX" "FILES" ${ARGN}
+    )
+    if("${args_TARGET}" STREQUAL "")
+        message( FATAL_ERROR "add_modules misses TARGET" )
+    endif()
+    if("${args_NAME}" STREQUAL "")
+        message( FATAL_ERROR "add_modules misses NAME" )
+    endif()
+
+    list(TRANSFORM args_FILES PREPEND ${args_PREFIX}./)
+
+    target_sources(${args_TARGET} PUBLIC
+        FILE_SET ${args_NAME}
+        TYPE CXX_MODULES
+        BASE_DIRS ${args_PREFIX}
+        FILES ${args_FILES}
+    )
+endfunction()

+ 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() {