Browse Source

Merge branch 'cmake-modularized' of public/ls-standard-library into development

Patrick-Christopher Mattulat 6 giờ trước cách đây
mục cha
commit
14fe927f21
100 tập tin đã thay đổi với 1283 bổ sung1131 xóa
  1. 58 346
      CMakeLists.txt
  2. 9 10
      README.md
  3. 115 0
      cmake/Build.cmake
  4. 23 0
      cmake/Security.cmake
  5. 148 0
      cmake/SourceFiles.cmake
  6. 148 0
      cmake/TestFiles.cmake
  7. 2 2
      include/ls-std/boxing/String.hpp
  8. 3 2
      include/ls-std/io/File.hpp
  9. 2 2
      include/ls-std/io/xml/XmlParser.hpp
  10. 2 1
      include/ls-std/time/common/DateParameterMapper.hpp
  11. 12 12
      source/ls-std/boxing/Boolean.cpp
  12. 22 22
      source/ls-std/boxing/Double.cpp
  13. 21 21
      source/ls-std/boxing/Float.cpp
  14. 19 19
      source/ls-std/boxing/Integer.cpp
  15. 19 19
      source/ls-std/boxing/Long.cpp
  16. 14 14
      source/ls-std/boxing/String.cpp
  17. 2 2
      source/ls-std/core/ConditionalFunctionExecutor.cpp
  18. 6 6
      source/ls-std/core/Version.cpp
  19. 3 5
      source/ls-std/core/evaluator/EmptyStringArgumentEvaluator.cpp
  20. 5 7
      source/ls-std/core/evaluator/IndexOutOfBoundsEvaluator.cpp
  21. 1 2
      source/ls-std/core/exception/EventNotHandledException.cpp
  22. 2 2
      source/ls-std/core/exception/Exception.cpp
  23. 2 2
      source/ls-std/core/exception/ExceptionMessage.cpp
  24. 1 2
      source/ls-std/core/exception/FileNotFoundException.cpp
  25. 1 2
      source/ls-std/core/exception/FileOperationException.cpp
  26. 1 2
      source/ls-std/core/exception/IllegalArgumentException.cpp
  27. 1 2
      source/ls-std/core/exception/IllegalArithmeticOperationException.cpp
  28. 1 2
      source/ls-std/core/exception/IncompleteJsonException.cpp
  29. 1 2
      source/ls-std/core/exception/IndexOutOfBoundsException.cpp
  30. 1 3
      source/ls-std/core/exception/NotImplementedException.cpp
  31. 1 2
      source/ls-std/core/exception/NullPointerException.cpp
  32. 32 32
      source/ls-std/encoding/Base64.cpp
  33. 3 3
      source/ls-std/encoding/cli/cli-base64-main.cpp
  34. 5 5
      source/ls-std/event/EventListener.cpp
  35. 7 7
      source/ls-std/event/EventManager.cpp
  36. 52 50
      source/ls-std/io/File.cpp
  37. 2 2
      source/ls-std/io/FileOutputStream.cpp
  38. 2 2
      source/ls-std/io/FilePathSeparatorMatch.cpp
  39. 14 3
      source/ls-std/io/FileReader.cpp
  40. 2 2
      source/ls-std/io/NewLine.cpp
  41. 2 2
      source/ls-std/io/evaluator/FileExistenceEvaluator.cpp
  42. 2 2
      source/ls-std/io/logging/LogLevel.cpp
  43. 13 14
      source/ls-std/io/logging/Logger.cpp
  44. 2 2
      source/ls-std/io/section-pair/evaluator/SectionPairIdentifierArgumentEvaluator.cpp
  45. 2 2
      source/ls-std/io/section-pair/evaluator/SectionPairRowArgumentEvaluator.cpp
  46. 2 2
      source/ls-std/io/section-pair/evaluator/SectionPairRowListValueArgumentEvaluator.cpp
  47. 2 2
      source/ls-std/io/section-pair/evaluator/SectionPairRowSingleValueArgumentEvaluator.cpp
  48. 2 2
      source/ls-std/io/section-pair/evaluator/SectionPairSectionArgumentEvaluator.cpp
  49. 2 2
      source/ls-std/io/section-pair/evaluator/SectionPairValueArgumentEvaluator.cpp
  50. 5 5
      source/ls-std/io/section-pair/model/SectionPairDocument.cpp
  51. 2 2
      source/ls-std/io/section-pair/model/SectionPairRow.cpp
  52. 2 2
      source/ls-std/io/section-pair/model/SectionPairRowListValue.cpp
  53. 2 2
      source/ls-std/io/section-pair/model/SectionPairRowSingleValue.cpp
  54. 5 3
      source/ls-std/io/section-pair/model/SectionPairRowValue.cpp
  55. 4 4
      source/ls-std/io/section-pair/model/SectionPairSection.cpp
  56. 2 2
      source/ls-std/io/section-pair/reader/SectionPairFileReader.cpp
  57. 2 2
      source/ls-std/io/section-pair/reader/SectionPairFileReaderParameter.cpp
  58. 12 12
      source/ls-std/io/section-pair/serialization/SerializableSectionPairDocument.cpp
  59. 2 2
      source/ls-std/io/section-pair/serialization/SerializableSectionPairParameter.cpp
  60. 12 13
      source/ls-std/io/section-pair/serialization/SerializableSectionPairRow.cpp
  61. 7 7
      source/ls-std/io/section-pair/serialization/SerializableSectionPairRowListValue.cpp
  62. 2 2
      source/ls-std/io/section-pair/serialization/SerializableSectionPairRowSingleValue.cpp
  63. 22 22
      source/ls-std/io/section-pair/serialization/SerializableSectionPairSection.cpp
  64. 7 7
      source/ls-std/io/section-pair/validator/SectionPairDocumentValidator.cpp
  65. 5 5
      source/ls-std/io/section-pair/validator/SectionPairFileExtensionValidator.cpp
  66. 3 3
      source/ls-std/io/section-pair/validator/SectionPairIdentifierValidator.cpp
  67. 7 7
      source/ls-std/io/section-pair/validator/SectionPairRowListValueValidator.cpp
  68. 5 5
      source/ls-std/io/section-pair/validator/SectionPairRowSingleValueValidator.cpp
  69. 5 5
      source/ls-std/io/section-pair/validator/SectionPairRowValidator.cpp
  70. 9 9
      source/ls-std/io/section-pair/validator/SectionPairSectionValidator.cpp
  71. 4 5
      source/ls-std/io/section-pair/validator/SectionPairValueValidator.cpp
  72. 6 5
      source/ls-std/io/xml/XmlDeclaration.cpp
  73. 12 12
      source/ls-std/io/xml/XmlNode.cpp
  74. 45 45
      source/ls-std/io/xml/XmlParser.cpp
  75. 8 8
      source/ls-std/time/Date.cpp
  76. 8 8
      source/ls-std/time/common/DateParameter.cpp
  77. 2 2
      source/ls-std/time/common/DateParameterMapper.cpp
  78. 11 6
      source/ls-std/time/common/jni/JniDateParameterMapper.cpp
  79. 3 3
      source/ls-std/time/system-time/PosixClock.cpp
  80. 3 3
      source/ls-std/time/system-time/SystemTime.cpp
  81. 3 2
      source/ls-std/time/system-time/WindowsClock.cpp
  82. 5 5
      source/ls-std/time/system-time/jni/com_lynarstudios_ls_std_time_systemtime_SystemTimeJni.cpp
  83. 4 4
      test/cases/boxing/BooleanTest.cpp
  84. 44 44
      test/cases/boxing/DoubleTest.cpp
  85. 45 45
      test/cases/boxing/FloatTest.cpp
  86. 43 43
      test/cases/boxing/IntegerTest.cpp
  87. 61 61
      test/cases/boxing/LongTest.cpp
  88. 11 11
      test/cases/boxing/StringTest.cpp
  89. 3 3
      test/cases/core/ClassTest.cpp
  90. 4 4
      test/cases/core/VersionTest.cpp
  91. 5 5
      test/cases/core/evaluator/EmptyStringArgumentEvaluatorTest.cpp
  92. 3 3
      test/cases/core/evaluator/IndexOutOfBoundsEvaluatorTest.cpp
  93. 3 3
      test/cases/core/evaluator/NullPointerArgumentEvaluatorTest.cpp
  94. 7 7
      test/cases/core/evaluator/NullPointerEvaluatorTest.cpp
  95. 3 3
      test/cases/core/evaluator/RawNullPointerArgumentEvaluatorTest.cpp
  96. 3 3
      test/cases/core/evaluator/RawNullPointerEvaluatorTest.cpp
  97. 5 5
      test/cases/core/exception/EventNotHandledExceptionTest.cpp
  98. 3 3
      test/cases/core/exception/ExceptionMessageTest.cpp
  99. 5 5
      test/cases/core/exception/FileNotFoundExceptionTest.cpp
  100. 5 5
      test/cases/core/exception/FileOperationExceptionTest.cpp

+ 58 - 346
CMakeLists.txt

@@ -77,8 +77,8 @@ endif ()
 
 message("${PROJECT_NAME}: Setting compiler flags...")
 set(CMAKE_CXX_STANDARD 17)
-set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS}")
-set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
+set(CMAKE_CXX_STANDARD_REQUIRED ON)
+set(CMAKE_CXX_EXTENSIONS OFF)
 
 ##########################################################
 # Compiler Support
@@ -90,7 +90,6 @@ if (${LS_STD_BUILD_WITH_SUPPORTED_COMPILER})
     # define supported compilers
 
     if (${CMAKE_CXX_COMPILER_ID} STREQUAL MSVC OR
-            ${CMAKE_CXX_COMPILER_ID} STREQUAL GNU OR
             ${CMAKE_CXX_COMPILER_ID} STREQUAL Clang OR
             ${CMAKE_CXX_COMPILER_ID} STREQUAL AppleClang)
         message("${PROJECT_NAME}: ${CMAKE_CXX_COMPILER_ID} ${CMAKE_CXX_COMPILER_VERSION} is supported...")
@@ -154,118 +153,28 @@ endif ()
 ####################################################################################################################
 ####################################################################################################################
 
-set(SOURCE_FILES_BOXING
-        ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/boxing/Boolean.cpp
-        ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/boxing/Double.cpp
-        ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/boxing/Float.cpp
-        ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/boxing/Integer.cpp
-        ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/boxing/Long.cpp
-        ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/boxing/String.cpp)
-
-set(SOURCE_FILES_CORE
-        ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/core/evaluator/EmptyStringArgumentEvaluator.cpp
-        ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/core/evaluator/IndexOutOfBoundsEvaluator.cpp
-        ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/core/evaluator/NullPointerArgumentEvaluator.cpp
-        ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/core/evaluator/NullPointerEvaluator.cpp
-        ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/core/exception/EventNotHandledException.cpp
-        ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/core/exception/Exception.cpp
-        ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/core/exception/ExceptionMessage.cpp
-        ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/core/exception/FileNotFoundException.cpp
-        ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/core/exception/FileOperationException.cpp
-        ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/core/exception/IllegalArgumentException.cpp
-        ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/core/exception/IllegalArithmeticOperationException.cpp
-        ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/core/exception/IncompleteJsonException.cpp
-        ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/core/exception/IndexOutOfBoundsException.cpp
-        ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/core/exception/NotImplementedException.cpp
-        ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/core/exception/NullPointerException.cpp
-        ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/core/interface/IBoxing.cpp
-        ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/core/interface/IEncoding.cpp
-        ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/core/interface/IEvaluator.cpp
-        ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/core/interface/IListener.cpp
-        ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/core/interface/IReader.cpp
-        ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/core/interface/ISerializable.cpp
-        ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/core/interface/IStorable.cpp
-        ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/core/interface/IValidator.cpp
-        ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/core/interface/IWriter.cpp
-        ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/core/Class.cpp
-        ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/core/ConditionalFunctionExecutor.cpp
-        ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/core/LibraryVersion.cpp
-        ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/core/Version.cpp)
-
-set(SOURCE_FILES_CORE_JNI
-        ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/core/interface/IJniApi.cpp
-        ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/core/jni/JniApi.cpp
-        ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/core/jni/JniClass.cpp
-        ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/core/jni/JniClassParameter.cpp
-        ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/core/jni/JniMethod.cpp
-        ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/core/jni/JniReturnValue.cpp)
-
-set(SOURCE_FILES_ENCODING
-        ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/encoding/Base64.cpp)
-
-set(SOURCE_FILES_EVENT
-        ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/event/Event.cpp
-        ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/event/EventListener.cpp
-        ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/event/EventManager.cpp
-        ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/event/EventParameter.cpp)
-
-set(SOURCE_FILES_IO
-        ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/io/evaluator/FileExistenceEvaluator.cpp
-        ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/io/logging/Logger.cpp
-        ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/io/logging/LogLevel.cpp
-        ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/io/section-pair/evaluator/SectionPairIdentifierArgumentEvaluator.cpp
-        ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/io/section-pair/evaluator/SectionPairRowArgumentEvaluator.cpp
-        ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/io/section-pair/evaluator/SectionPairRowListValueArgumentEvaluator.cpp
-        ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/io/section-pair/evaluator/SectionPairRowSingleValueArgumentEvaluator.cpp
-        ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/io/section-pair/evaluator/SectionPairSectionArgumentEvaluator.cpp
-        ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/io/section-pair/evaluator/SectionPairValueArgumentEvaluator.cpp
-        ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/io/section-pair/model/SectionPairDocument.cpp
-        ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/io/section-pair/model/SectionPairRow.cpp
-        ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/io/section-pair/model/SectionPairRowListValue.cpp
-        ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/io/section-pair/model/SectionPairRowSingleValue.cpp
-        ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/io/section-pair/model/SectionPairRowValue.cpp
-        ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/io/section-pair/model/SectionPairSection.cpp
-        ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/io/section-pair/reader/SectionPairFileReader.cpp
-        ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/io/section-pair/reader/SectionPairFileReaderParameter.cpp
-        ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/io/section-pair/serialization/SerializableSectionPairDocument.cpp
-        ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/io/section-pair/serialization/SerializableSectionPairParameter.cpp
-        ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/io/section-pair/serialization/SerializableSectionPairRow.cpp
-        ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/io/section-pair/serialization/SerializableSectionPairRowListValue.cpp
-        ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/io/section-pair/serialization/SerializableSectionPairRowSingleValue.cpp
-        ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/io/section-pair/serialization/SerializableSectionPairSection.cpp
-        ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/io/section-pair/validator/SectionPairDocumentValidator.cpp
-        ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/io/section-pair/validator/SectionPairFileExtensionValidator.cpp
-        ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/io/section-pair/validator/SectionPairIdentifierValidator.cpp
-        ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/io/section-pair/validator/SectionPairRowListValueValidator.cpp
-        ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/io/section-pair/validator/SectionPairRowSingleValueValidator.cpp
-        ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/io/section-pair/validator/SectionPairRowValidator.cpp
-        ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/io/section-pair/validator/SectionPairSectionValidator.cpp
-        ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/io/section-pair/validator/SectionPairValueValidator.cpp
-        ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/io/section-pair/SectionPairMessageFormatter.cpp
-        ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/io/xml/XmlAttribute.cpp
-        ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/io/xml/XmlDeclaration.cpp
-        ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/io/xml/XmlDocument.cpp
-        ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/io/xml/XmlNode.cpp
-        ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/io/xml/XmlParseParameter.cpp
-        ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/io/xml/XmlParser.cpp
-        ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/io/xml/XmlReader.cpp
-        ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/io/File.cpp
-        ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/io/FileOutputStream.cpp
-        ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/io/FilePathSeparator.cpp
-        ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/io/FilePathSeparatorMatch.cpp
-        ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/io/FileReader.cpp
-        ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/io/FileWriter.cpp
-        ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/io/NewLine.cpp
-        ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/io/StandardOutputWriter.cpp
-        ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/io/StorableFile.cpp)
-
-set(SOURCE_FILES_TIME
-        ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/time/common/DateParameter.cpp
-        ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/time/common/DateParameterMapper.cpp
-        ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/time/system-time/IClock.cpp
-        ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/time/system-time/SystemTime.cpp
-        ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/time/system-time/SystemTimeParameter.cpp
-        ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/time/Date.cpp)
+include(cmake/SourceFiles.cmake)
+
+set(SOURCE_FILES_BOXING)
+collect_boxing_module_source_files(SOURCE_FILES_BOXING)
+
+set(SOURCE_FILES_CORE)
+collect_core_module_source_files(SOURCE_FILES_CORE)
+
+set(SOURCE_FILES_CORE_JNI)
+collect_core_jni_module_source_files(SOURCE_FILES_CORE_JNI)
+
+set(SOURCE_FILES_ENCODING)
+collect_encoding_module_source_files(SOURCE_FILES_ENCODING)
+
+set(SOURCE_FILES_EVENT)
+collect_event_module_source_files(SOURCE_FILES_EVENT)
+
+set(SOURCE_FILES_IO)
+collect_io_module_source_files(SOURCE_FILES_IO)
+
+set(SOURCE_FILES_TIME)
+collect_time_module_source_files(SOURCE_FILES_TIME)
 
 set(SOURCE_FILES_LINUX_TIME)
 set(SOURCE_FILES_WINDOWS_TIME)
@@ -280,9 +189,8 @@ else (WIN32)
             ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/time/system-time/WindowsClock.cpp)
 endif ()
 
-set(SOURCE_FILES_TIME_JNI
-        ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/time/common/jni/JniDateParameterMapper.cpp
-        ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/time/system-time/jni/com_lynarstudios_ls_std_time_systemtime_SystemTimeJni.cpp)
+set(SOURCE_FILES_TIME_JNI)
+collect_time_jni_module_source_files(SOURCE_FILES_TIME_JNI)
 
 ####################################################################################################################
 ####################################################################################################################
@@ -293,122 +201,31 @@ set(SOURCE_FILES_TIME_JNI
 ####################################################################################################################
 
 if (${LS_STD_BUILD_WITH_TESTS})
-    set(UNIT_TEST_FILES_BOXING
-            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/boxing/BooleanTest.cpp
-            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/boxing/DoubleTest.cpp
-            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/boxing/FloatTest.cpp
-            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/boxing/IntegerTest.cpp
-            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/boxing/LongTest.cpp
-            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/boxing/StringTest.cpp)
-
-    set(UNIT_TEST_FILES_CORE
-            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/core/evaluator/EmptyStringArgumentEvaluatorTest.cpp
-            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/core/evaluator/IndexOutOfBoundsEvaluatorTest.cpp
-            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/core/evaluator/NullPointerArgumentEvaluatorTest.cpp
-            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/core/evaluator/NullPointerEvaluatorTest.cpp
-            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/core/evaluator/RawNullPointerArgumentEvaluatorTest.cpp
-            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/core/evaluator/RawNullPointerEvaluatorTest.cpp
-            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/core/exception/EventNotHandledExceptionTest.cpp
-            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/core/exception/ExceptionMessageTest.cpp
-            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/core/exception/FileNotFoundExceptionTest.cpp
-            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/core/exception/FileOperationExceptionTest.cpp
-            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/core/exception/IllegalArgumentExceptionTest.cpp
-            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/core/exception/IllegalArithmeticOperationExceptionTest.cpp
-            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/core/exception/IncompleteJsonExceptionTest.cpp
-            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/core/exception/IndexOutOfBoundsExceptionTest.cpp
-            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/core/exception/NotImplementedExceptionTest.cpp
-            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/core/exception/NullPointerExceptionTest.cpp
-            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/core/ClassTest.cpp
-            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/core/ConditionalFunctionExecutorTest.cpp
-            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/core/LibraryVersionTest.cpp
-            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/core/VersionTest.cpp
-            ${CMAKE_CURRENT_SOURCE_DIR}/test/classes/core/ClassWrapper.cpp
-            ${CMAKE_CURRENT_SOURCE_DIR}/test/classes/core/MathOddValidator.cpp)
-
-    set(UNIT_TEST_FILES_CORE_JNI
-            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/core/jni/JniApiTest.cpp
-            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/core/jni/JniClassParameterTest.cpp
-            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/core/jni/JniClassTest.cpp
-            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/core/jni/JniMethodTest.cpp
-            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/core/jni/JniReturnValueTest.cpp
-            ${CMAKE_CURRENT_SOURCE_DIR}/test/classes/core/jni/MockJniApi.cpp)
-
-    set(UNIT_TEST_FILES_ENCODING
-            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/encoding/Base64Test.cpp)
-
-    set(UNIT_TEST_FILES_EVENT
-            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/event/EventListenerTest.cpp
-            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/event/EventManagerTest.cpp
-            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/event/EventParameterTest.cpp
-            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/event/EventTest.cpp
-            ${CMAKE_CURRENT_SOURCE_DIR}/test/classes/event/ChangeColorEvent.cpp
-            ${CMAKE_CURRENT_SOURCE_DIR}/test/classes/event/OnClickEvent.cpp
-            ${CMAKE_CURRENT_SOURCE_DIR}/test/classes/event/Button.cpp)
-
-    set(UNIT_TEST_FILES_IO
-            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/io/evaluator/FileExistenceEvaluatorTest.cpp
-            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/io/logging/LoggerTest.cpp
-            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/io/logging/LogLevelTest.cpp
-            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/io/section-pair/evaluator/SectionPairIdentifierArgumentEvaluatorTest.cpp
-            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/io/section-pair/evaluator/SectionPairRowArgumentEvaluatorTest.cpp
-            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/io/section-pair/evaluator/SectionPairRowListValueArgumentEvaluatorTest.cpp
-            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/io/section-pair/evaluator/SectionPairRowSingleValueArgumentEvaluatorTest.cpp
-            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/io/section-pair/evaluator/SectionPairSectionArgumentEvaluatorTest.cpp
-            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/io/section-pair/evaluator/SectionPairValueArgumentEvaluatorTest.cpp
-            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/io/section-pair/model/SectionPairDocumentTest.cpp
-            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/io/section-pair/model/SectionPairRowListValueTest.cpp
-            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/io/section-pair/model/SectionPairRowSingleValueTest.cpp
-            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/io/section-pair/model/SectionPairRowTest.cpp
-            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/io/section-pair/model/SectionPairSectionTest.cpp
-            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/io/section-pair/reader/SectionPairFileReaderParameterTest.cpp
-            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/io/section-pair/reader/SectionPairFileReaderTest.cpp
-            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/io/section-pair/serialization/SerializableSectionPairDocumentTest.cpp
-            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/io/section-pair/serialization/SerializableSectionPairParameterTest.cpp
-            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/io/section-pair/serialization/SerializableSectionPairRowListValueTest.cpp
-            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/io/section-pair/serialization/SerializableSectionPairRowSingleValueTest.cpp
-            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/io/section-pair/serialization/SerializableSectionPairRowTest.cpp
-            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/io/section-pair/serialization/SerializableSectionPairSectionTest.cpp
-            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/io/section-pair/validator/SectionPairDocumentValidatorTest.cpp
-            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/io/section-pair/validator/SectionPairFileExtensionValidatorTest.cpp
-            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/io/section-pair/validator/SectionPairIdentifierValidatorTest.cpp
-            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/io/section-pair/validator/SectionPairRowListValueValidatorTest.cpp
-            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/io/section-pair/validator/SectionPairRowSingleValueValidatorTest.cpp
-            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/io/section-pair/validator/SectionPairRowValidatorTest.cpp
-            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/io/section-pair/validator/SectionPairSectionValidatorTest.cpp
-            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/io/section-pair/validator/SectionPairValueValidatorTest.cpp
-            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/io/section-pair/SectionPairMessageFormatterTest.cpp
-            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/io/xml/XmlAttributeTest.cpp
-            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/io/xml/XmlDeclarationTest.cpp
-            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/io/xml/XmlDocumentTest.cpp
-            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/io/xml/XmlNodeTest.cpp
-            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/io/xml/XmlParseParameterTest.cpp
-            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/io/xml/XmlParserTest.cpp
-            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/io/xml/XmlParserTestWrapperTest.cpp
-            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/io/xml/XmlReaderTest.cpp
-            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/io/FileOutputStreamTest.cpp
-            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/io/FileReaderTest.cpp
-            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/io/FileTest.cpp
-            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/io/FileWriterTest.cpp
-            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/io/StandardOutputWriterTest.cpp
-            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/io/StorableFileTest.cpp
-            ${CMAKE_CURRENT_SOURCE_DIR}/test/classes/io/section-pair/SectionPairDocumentProvider.cpp
-            ${CMAKE_CURRENT_SOURCE_DIR}/test/classes/io/section-pair/SectionPairSectionProvider.cpp
-            ${CMAKE_CURRENT_SOURCE_DIR}/test/classes/io/section-pair/SerializableSectionPairRowProvider.cpp
-            ${CMAKE_CURRENT_SOURCE_DIR}/test/classes/io/xml/TestDataFactory.cpp
-            ${CMAKE_CURRENT_SOURCE_DIR}/test/classes/io/xml/XmlParserTestWrapper.cpp
-            ${CMAKE_CURRENT_SOURCE_DIR}/test/classes/io/MockFileExistenceEvaluator.cpp
-            ${CMAKE_CURRENT_SOURCE_DIR}/test/classes/io/MockFileReader.cpp)
-
-    set(UNIT_TEST_FILES_SERIALIZATION
-            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/serialization/JsonTest.cpp)
-
-    set(UNIT_TEST_FILES_TIME
-            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/time/common/DateParameterMapperTest.cpp
-            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/time/common/DateParameterTest.cpp
-            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/time/system-time/SystemTimeParameterTest.cpp
-            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/time/system-time/SystemTimeTest.cpp
-            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/time/DateTest.cpp
-            ${CMAKE_CURRENT_SOURCE_DIR}/test/classes/time/system-time/MockClock.cpp)
+    include(cmake/TestFiles.cmake)
+
+    set(UNIT_TEST_FILES_BOXING)
+    collect_boxing_module_test_files(UNIT_TEST_FILES_BOXING)
+
+    set(UNIT_TEST_FILES_CORE)
+    collect_core_module_test_files(UNIT_TEST_FILES_CORE)
+
+    set(UNIT_TEST_FILES_CORE_JNI)
+    collect_core_jni_module_test_files(UNIT_TEST_FILES_CORE_JNI)
+
+    set(UNIT_TEST_FILES_ENCODING)
+    collect_encoding_module_test_files(UNIT_TEST_FILES_ENCODING)
+
+    set(UNIT_TEST_FILES_EVENT)
+    collect_event_module_test_files(UNIT_TEST_FILES_EVENT)
+
+    set(UNIT_TEST_FILES_IO)
+    collect_io_module_test_files(UNIT_TEST_FILES_IO)
+
+    set(UNIT_TEST_FILES_SERIALIZATION)
+    collect_serialization_module_test_files(UNIT_TEST_FILES_SERIALIZATION)
+
+    set(UNIT_TEST_FILES_TIME)
+    collect_time_module_test_files(UNIT_TEST_FILES_TIME)
 endif ()
 
 ####################################################################################################################
@@ -594,125 +411,20 @@ endif ()
 ####################################################################################################################
 ####################################################################################################################
 
-##########################################################
-# Build Library (boxing)
-##########################################################
-
-message("${PROJECT_NAME}: Building ${MODULE_NAME_BOXING} library version ${PROJECT_VERSION}...")
-
-if (${LS_STD_BUILD_STATIC})
-    add_library("${MODULE_NAME_BOXING}" STATIC ${SOURCE_FILES_BOXING})
-    set_target_properties("${MODULE_NAME_BOXING}" PROPERTIES DEBUG_POSTFIX "-d")
-endif ()
-
-if (${LS_STD_BUILD_SHARED})
-    add_library("${MODULE_NAME_BOXING}" SHARED ${SOURCE_FILES_BOXING})
-    target_link_libraries("${MODULE_NAME_BOXING}" ${MODULE_NAME_CORE})
-    set_target_properties("${MODULE_NAME_BOXING}" PROPERTIES DEBUG_POSTFIX "-d")
-endif ()
-
-##########################################################
-# Build Library (core)
-##########################################################
-
-message("${PROJECT_NAME}: Building ${MODULE_NAME_CORE} library version ${PROJECT_VERSION}...")
-
-if (${LS_STD_BUILD_STATIC})
-    add_library("${MODULE_NAME_CORE}" STATIC ${SOURCE_FILES_CORE})
-    set_target_properties("${MODULE_NAME_CORE}" PROPERTIES DEBUG_POSTFIX "-d")
-endif ()
-
-if (${LS_STD_BUILD_SHARED})
-    if (${LS_STD_BUILD_WITH_JNI})
-        message("${MODULE_NAME_CORE}: building with JNI...")
-        add_library("${MODULE_NAME_CORE}" SHARED ${SOURCE_FILES_CORE} ${SOURCE_FILES_CORE_JNI})
-        set_target_properties("${MODULE_NAME_CORE}" PROPERTIES DEBUG_POSTFIX "-d")
-    else ()
-        add_library("${MODULE_NAME_CORE}" SHARED ${SOURCE_FILES_CORE})
-        set_target_properties("${MODULE_NAME_CORE}" PROPERTIES DEBUG_POSTFIX "-d")
-    endif ()
-endif ()
-
-##########################################################
-# Build Library (encoding)
-##########################################################
+include(cmake/Build.cmake)
 
-message("${PROJECT_NAME}: Building ${MODULE_NAME_ENCODING} library version ${PROJECT_VERSION}...")
-
-if (${LS_STD_BUILD_STATIC})
-    add_library("${MODULE_NAME_ENCODING}" STATIC ${SOURCE_FILES_ENCODING})
-    set_target_properties("${MODULE_NAME_ENCODING}" PROPERTIES DEBUG_POSTFIX "-d")
-endif ()
-
-if (${LS_STD_BUILD_SHARED})
-    add_library("${MODULE_NAME_ENCODING}" SHARED ${SOURCE_FILES_ENCODING})
-    target_link_libraries("${MODULE_NAME_ENCODING}" ${MODULE_NAME_CORE})
-    set_target_properties("${MODULE_NAME_ENCODING}" PROPERTIES DEBUG_POSTFIX "-d")
-endif ()
+build_boxing_module(LS_STD_BUILD_STATIC LS_STD_BUILD_SHARED MODULE_NAME_BOXING MODULE_NAME_CORE SOURCE_FILES_BOXING)
+build_core_module(LS_STD_BUILD_STATIC LS_STD_BUILD_SHARED LS_STD_BUILD_WITH_JNI MODULE_NAME_CORE SOURCE_FILES_CORE SOURCE_FILES_CORE_JNI)
+build_encoding_module(LS_STD_BUILD_STATIC LS_STD_BUILD_SHARED MODULE_NAME_ENCODING MODULE_NAME_CORE SOURCE_FILES_ENCODING)
+build_event_module(LS_STD_BUILD_STATIC LS_STD_BUILD_SHARED MODULE_NAME_EVENT MODULE_NAME_CORE SOURCE_FILES_EVENT)
+build_io_module(LS_STD_BUILD_STATIC LS_STD_BUILD_SHARED MODULE_NAME_IO MODULE_NAME_CORE SOURCE_FILES_IO)
+build_time_module(LS_STD_BUILD_STATIC LS_STD_BUILD_SHARED LS_STD_BUILD_WITH_JNI MODULE_NAME_TIME MODULE_NAME_CORE SOURCE_FILES_TIME SOURCE_FILES_LINUX_TIME SOURCE_FILES_WINDOWS_TIME SOURCE_FILES_TIME_JNI)
 
 # CLI base64
 
 add_executable(${CLI_NAME_BASE64}
         ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/encoding/cli/cli-base64-main.cpp)
 
-##########################################################
-# Build Library (event)
-##########################################################
-
-message("${PROJECT_NAME}: Building ${MODULE_NAME_EVENT} library version ${PROJECT_VERSION}...")
-
-if (${LS_STD_BUILD_STATIC})
-    add_library("${MODULE_NAME_EVENT}" STATIC ${SOURCE_FILES_EVENT})
-    set_target_properties("${MODULE_NAME_EVENT}" PROPERTIES DEBUG_POSTFIX "-d")
-endif ()
-
-if (${LS_STD_BUILD_SHARED})
-    add_library("${MODULE_NAME_EVENT}" SHARED ${SOURCE_FILES_EVENT})
-    target_link_libraries("${MODULE_NAME_EVENT}" ${MODULE_NAME_CORE})
-    set_target_properties("${MODULE_NAME_EVENT}" PROPERTIES DEBUG_POSTFIX "-d")
-endif ()
-
-##########################################################
-# Build Library (io)
-##########################################################
-
-message("${PROJECT_NAME}: Building ${MODULE_NAME_IO} library version ${PROJECT_VERSION}...")
-
-if (${LS_STD_BUILD_STATIC})
-    add_library("${MODULE_NAME_IO}" STATIC ${SOURCE_FILES_IO})
-    set_target_properties("${MODULE_NAME_IO}" PROPERTIES DEBUG_POSTFIX "-d")
-endif ()
-
-if (${LS_STD_BUILD_SHARED})
-    add_library("${MODULE_NAME_IO}" SHARED ${SOURCE_FILES_IO})
-    target_link_libraries("${MODULE_NAME_IO}" ${MODULE_NAME_CORE})
-    set_target_properties("${MODULE_NAME_IO}" PROPERTIES DEBUG_POSTFIX "-d")
-endif ()
-
-##########################################################
-# Build Library (time)
-##########################################################
-
-message("${PROJECT_NAME}: Building ${MODULE_NAME_TIME} library version ${PROJECT_VERSION}...")
-
-if (${LS_STD_BUILD_STATIC})
-    add_library("${MODULE_NAME_TIME}" STATIC ${SOURCE_FILES_TIME} ${SOURCE_FILES_LINUX_TIME} ${SOURCE_FILES_WINDOWS_TIME})
-    set_target_properties("${MODULE_NAME_TIME}" PROPERTIES DEBUG_POSTFIX "-d")
-endif ()
-
-if (${LS_STD_BUILD_SHARED})
-    if (${LS_STD_BUILD_WITH_JNI})
-        message("${MODULE_NAME_TIME}: building with JNI...")
-        add_library("${MODULE_NAME_TIME}" SHARED ${SOURCE_FILES_TIME} ${SOURCE_FILES_LINUX_TIME} ${SOURCE_FILES_WINDOWS_TIME} ${SOURCE_FILES_TIME_JNI})
-        target_link_libraries("${MODULE_NAME_TIME}" ${MODULE_NAME_CORE})
-        set_target_properties("${MODULE_NAME_TIME}" PROPERTIES DEBUG_POSTFIX "-d")
-    else ()
-        add_library("${MODULE_NAME_TIME}" SHARED ${SOURCE_FILES_TIME} ${SOURCE_FILES_LINUX_TIME} ${SOURCE_FILES_WINDOWS_TIME})
-        target_link_libraries("${MODULE_NAME_TIME}" ${MODULE_NAME_CORE})
-        set_target_properties("${MODULE_NAME_TIME}" PROPERTIES DEBUG_POSTFIX "-d")
-    endif ()
-endif ()
-
 ####################################################################################################################
 ####################################################################################################################
 ####################################################################################################################

+ 9 - 10
README.md

@@ -1,7 +1,7 @@
 # Lynar Studios - Standard Library 2026.1.0.0 #
 
 This is a cross-platform standard library written in C++ offering functionalities you would usually miss in C++'s standard library, especially if you would search for cross-platform implementations.  
-This library has been tested on __Windows__, __Linux__ and __MacOS__ systems.
+This library has been tested on __Windows__, __Linux__ and __macOS__ systems.
 Following a modularized approach the following independent submodules are defined in scope of this library:
  
 #### Boxing ####
@@ -34,11 +34,12 @@ A __Date__ class comes with this submodule, which you can use to represent a dat
 
 #### Features ####
 
-- none
+- GNU-like compilers are not supported anymore to focus more in depth on MSVC, Clang, Apple Clang - thus, still supporting the major platforms Linux, macOS and Windows
 
 #### Improvements ####
 
-- none
+- CMake project is now modularized to reduce complexity of a single CMakeLists.txt file
+- Overall increased security within code basis (based on Clang compiler security flags)
 
 #### Fixes ####
 
@@ -73,13 +74,11 @@ Building this library would result into providing binaries for each library modu
 
 To build this library you'd need a supported __toolchain__ in place, consisting of a build tool and compiler. The following table is a listing of supported compilers and build tools associated with operating systems, where this library has been tested:
 
-| Supported Compiler<br/>(mandatory) | OS               | Supported Compiler Version<br/>(mandatory) | Build Tool<br/>(mandatory) | Build Tool Version (mandatory) |
-|------------------------------------|------------------|--------------------------------------------|----------------------------|--------------------------------|
-| GCC                                | Ubuntu 22.04 LTS | 14.2.0                                     | CMake                      | \>= 3.30.0                     |
-| Clang                              | Linux Mint 20.3  | 12.0.0-3ubuntu1~20.04.5                    | CMake                      | \>= 3.30.0                     |
-| MinGW-w64 / GCC                    | Windows 10       | 11.2.0                                     | CMake                      | \>= 3.30.0                     |
-| MSVC                               | Windows 10       | 19.41.34120.0                              | CMake                      | \>= 3.30.0                     |
-| AppleClang                         | MacOS Monterey   | 14.0.0                                     | CMake                      | \>= 3.30.0                     |
+| Supported Compiler<br/>(mandatory) | Supported Compiler Version<br/>(mandatory) | Build Tool<br/>(mandatory) | Build Tool Version (mandatory) |
+|------------------------------------|--------------------------------------------|----------------------------|--------------------------------|
+| Clang                              | &gt;= 21.1.8                               | CMake                      | &gt;= 3.30.0                   |
+| MSVC                               | &gt;= 19.50.35721.0                        | CMake                      | &gt;= 3.30.0                   |
+| AppleClang                         | &gt;= 17.0.0                               | CMake                      | &gt;= 3.30.0                   |
 
 Please note, that where the underlying operating system is optional in this listing, the toolchain itself is not! This means, that by default you should use one of the supported listed toolchains.  
 In case you'd like to use an unsupported toolchain, you can enforce this during CMake project generation. For that have a look at the CMake flag usage section below.

+ 115 - 0
cmake/Build.cmake

@@ -0,0 +1,115 @@
+function(build_boxing_module build_static_flag build_shared_flag module_name module_name_core source_files)
+    include(${CMAKE_CURRENT_LIST_DIR}/cmake/Security.cmake)
+
+    if (${build_static_flag})
+        add_library("${${module_name}}" STATIC ${${source_files}})
+        enable_strict_warnings(module_name)
+        set_target_properties("${${module_name}}" PROPERTIES DEBUG_POSTFIX "-d")
+    endif ()
+
+    if (${build_shared_flag})
+        add_library("${${module_name}}" SHARED ${${source_files}})
+        enable_strict_warnings(module_name)
+        target_link_libraries("${${module_name}}" ${${module_name_core}})
+        set_target_properties("${${module_name}}" PROPERTIES DEBUG_POSTFIX "-d")
+    endif ()
+endfunction()
+
+function(build_core_module build_static_flag build_shared_flag build_jni_flag module_name source_files jni_source_files)
+    include(${CMAKE_CURRENT_LIST_DIR}/cmake/Security.cmake)
+
+    if (${build_static_flag})
+        add_library("${${module_name}}" STATIC ${${source_files}})
+        enable_strict_warnings(module_name)
+        set_target_properties("${${module_name}}" PROPERTIES DEBUG_POSTFIX "-d")
+    endif ()
+
+    if (${build_shared_flag})
+        if (${build_jni_flag})
+            message("${${module_name}}: building with JNI...")
+            add_library("${${module_name}}" SHARED ${${source_files}} ${${jni_source_files}})
+            enable_strict_warnings(module_name)
+            set_target_properties("${${module_name}}" PROPERTIES DEBUG_POSTFIX "-d")
+        else ()
+            add_library("${${module_name}}" SHARED ${${source_files}})
+            enable_strict_warnings(module_name)
+            set_target_properties("${${module_name}}" PROPERTIES DEBUG_POSTFIX "-d")
+        endif ()
+    endif ()
+endfunction()
+
+function(build_encoding_module build_static_flag build_shared_flag module_name module_name_core source_files)
+    include(${CMAKE_CURRENT_LIST_DIR}/cmake/Security.cmake)
+
+    if (${build_static_flag})
+        add_library("${${module_name}}" STATIC ${${source_files}})
+        enable_strict_warnings(module_name)
+        set_target_properties("${${module_name}}" PROPERTIES DEBUG_POSTFIX "-d")
+    endif ()
+
+    if (${build_shared_flag})
+        add_library("${${module_name}}" SHARED ${${source_files}})
+        enable_strict_warnings(module_name)
+        target_link_libraries("${${module_name}}" ${${module_name_core}})
+        set_target_properties("${${module_name}}" PROPERTIES DEBUG_POSTFIX "-d")
+    endif ()
+endfunction()
+
+function(build_event_module build_static_flag build_shared_flag module_name module_name_core source_files)
+    include(${CMAKE_CURRENT_LIST_DIR}/cmake/Security.cmake)
+
+    if (${build_static_flag})
+        add_library("${${module_name}}" STATIC ${${source_files}})
+        enable_strict_warnings(module_name)
+        set_target_properties("${${module_name}}" PROPERTIES DEBUG_POSTFIX "-d")
+    endif ()
+
+    if (${build_shared_flag})
+        add_library("${${module_name}}" SHARED ${${source_files}})
+        enable_strict_warnings(module_name)
+        target_link_libraries("${${module_name}}" ${${module_name_core}})
+        set_target_properties("${${module_name}}" PROPERTIES DEBUG_POSTFIX "-d")
+    endif ()
+endfunction()
+
+function(build_io_module build_static_flag build_shared_flag module_name module_name_core source_files)
+    include(${CMAKE_CURRENT_LIST_DIR}/cmake/Security.cmake)
+
+    if (${build_static_flag})
+        add_library("${${module_name}}" STATIC ${${source_files}})
+        enable_strict_warnings(module_name)
+        set_target_properties("${${module_name}}" PROPERTIES DEBUG_POSTFIX "-d")
+    endif ()
+
+    if (${build_shared_flag})
+        add_library("${${module_name}}" SHARED ${${source_files}})
+        enable_strict_warnings(module_name)
+        target_link_libraries("${${module_name}}" ${${module_name_core}})
+        set_target_properties("${${module_name}}" PROPERTIES DEBUG_POSTFIX "-d")
+    endif ()
+endfunction()
+
+function(build_time_module build_static_flag build_shared_flag build_jni_flag module_name module_name_core source_files source_files_linux source_files_windows source_files_jni)
+    include(${CMAKE_CURRENT_LIST_DIR}/cmake/Security.cmake)
+
+    if (${build_static_flag})
+        add_library("${${module_name}}" STATIC ${${source_files}} ${${source_files_linux}} ${${source_files_windows}})
+        enable_strict_warnings(module_name)
+        set_target_properties("${${module_name}}" PROPERTIES DEBUG_POSTFIX "-d")
+    endif ()
+
+    if (${build_shared_flag})
+        if (${build_jni_flag})
+            message("${${module_name}}: building with JNI...")
+            add_library("${${module_name}}" SHARED ${${source_files}} ${${source_files_linux}} ${${source_files_windows}} ${${source_files_jni}})
+            enable_strict_warnings(module_name)
+            target_link_libraries("${${module_name}}" ${${module_name_core}})
+            set_target_properties("${${module_name}}" PROPERTIES DEBUG_POSTFIX "-d")
+        else ()
+            add_library("${${module_name}}" SHARED ${${source_files}} ${${source_files_linux}} ${${source_files_windows}})
+            enable_strict_warnings(module_name)
+            target_link_libraries("${${module_name}}" ${${module_name_core}})
+            set_target_properties("${${module_name}}" PROPERTIES DEBUG_POSTFIX "-d")
+        endif ()
+    endif ()
+endfunction()

+ 23 - 0
cmake/Security.cmake

@@ -0,0 +1,23 @@
+function(enable_strict_warnings target)
+    if (MSVC)
+        #target_compile_options(${${${target}}} PRIVATE // Too complicated currently
+        #        /W3
+        #        /WX
+        #        /permissive-
+        #        /sdl
+        #)
+    else()
+        target_compile_options(${${${target}}} PRIVATE
+                -Wall
+                -Wextra
+                -Wpedantic
+                -Werror
+                -Wshadow
+                -Wconversion
+                -Wsign-conversion
+                -Wnull-dereference
+                -Wdouble-promotion
+                -Wformat=2
+        )
+    endif()
+endfunction()

+ 148 - 0
cmake/SourceFiles.cmake

@@ -0,0 +1,148 @@
+function(collect_boxing_module_source_files placeholder)
+    set(SOURCE_FILES_BOXING
+            ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/boxing/Boolean.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/boxing/Double.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/boxing/Float.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/boxing/Integer.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/boxing/Long.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/boxing/String.cpp)
+
+    set(${placeholder} ${SOURCE_FILES_BOXING} PARENT_SCOPE)
+endfunction()
+
+function(collect_core_module_source_files placeholder)
+    set(SOURCE_FILES_CORE
+            ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/core/evaluator/EmptyStringArgumentEvaluator.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/core/evaluator/IndexOutOfBoundsEvaluator.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/core/evaluator/NullPointerArgumentEvaluator.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/core/evaluator/NullPointerEvaluator.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/core/exception/EventNotHandledException.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/core/exception/Exception.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/core/exception/ExceptionMessage.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/core/exception/FileNotFoundException.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/core/exception/FileOperationException.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/core/exception/IllegalArgumentException.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/core/exception/IllegalArithmeticOperationException.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/core/exception/IncompleteJsonException.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/core/exception/IndexOutOfBoundsException.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/core/exception/NotImplementedException.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/core/exception/NullPointerException.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/core/interface/IBoxing.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/core/interface/IEncoding.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/core/interface/IEvaluator.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/core/interface/IListener.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/core/interface/IReader.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/core/interface/ISerializable.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/core/interface/IStorable.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/core/interface/IValidator.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/core/interface/IWriter.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/core/Class.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/core/ConditionalFunctionExecutor.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/core/LibraryVersion.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/core/Version.cpp)
+
+    set(${placeholder} ${SOURCE_FILES_CORE} PARENT_SCOPE)
+endfunction()
+
+function(collect_core_jni_module_source_files placeholder)
+    set(SOURCE_FILES_CORE_JNI
+            ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/core/interface/IJniApi.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/core/jni/JniApi.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/core/jni/JniClass.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/core/jni/JniClassParameter.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/core/jni/JniMethod.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/core/jni/JniReturnValue.cpp)
+
+    set(${placeholder} ${SOURCE_FILES_CORE_JNI} PARENT_SCOPE)
+endfunction()
+
+function(collect_encoding_module_source_files placeholder)
+    set(SOURCE_FILES_ENCODING
+            ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/encoding/Base64.cpp)
+
+    set(${placeholder} ${SOURCE_FILES_ENCODING} PARENT_SCOPE)
+endfunction()
+
+function(collect_event_module_source_files placeholder)
+    set(SOURCE_FILES_EVENT
+            ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/event/Event.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/event/EventListener.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/event/EventManager.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/event/EventParameter.cpp)
+
+    set(${placeholder} ${SOURCE_FILES_EVENT} PARENT_SCOPE)
+endfunction()
+
+function(collect_io_module_source_files placeholder)
+    set(SOURCE_FILES_IO
+            ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/io/evaluator/FileExistenceEvaluator.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/io/logging/Logger.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/io/logging/LogLevel.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/io/section-pair/evaluator/SectionPairIdentifierArgumentEvaluator.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/io/section-pair/evaluator/SectionPairRowArgumentEvaluator.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/io/section-pair/evaluator/SectionPairRowListValueArgumentEvaluator.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/io/section-pair/evaluator/SectionPairRowSingleValueArgumentEvaluator.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/io/section-pair/evaluator/SectionPairSectionArgumentEvaluator.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/io/section-pair/evaluator/SectionPairValueArgumentEvaluator.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/io/section-pair/model/SectionPairDocument.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/io/section-pair/model/SectionPairRow.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/io/section-pair/model/SectionPairRowListValue.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/io/section-pair/model/SectionPairRowSingleValue.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/io/section-pair/model/SectionPairRowValue.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/io/section-pair/model/SectionPairSection.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/io/section-pair/reader/SectionPairFileReader.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/io/section-pair/reader/SectionPairFileReaderParameter.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/io/section-pair/serialization/SerializableSectionPairDocument.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/io/section-pair/serialization/SerializableSectionPairParameter.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/io/section-pair/serialization/SerializableSectionPairRow.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/io/section-pair/serialization/SerializableSectionPairRowListValue.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/io/section-pair/serialization/SerializableSectionPairRowSingleValue.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/io/section-pair/serialization/SerializableSectionPairSection.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/io/section-pair/validator/SectionPairDocumentValidator.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/io/section-pair/validator/SectionPairFileExtensionValidator.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/io/section-pair/validator/SectionPairIdentifierValidator.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/io/section-pair/validator/SectionPairRowListValueValidator.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/io/section-pair/validator/SectionPairRowSingleValueValidator.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/io/section-pair/validator/SectionPairRowValidator.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/io/section-pair/validator/SectionPairSectionValidator.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/io/section-pair/validator/SectionPairValueValidator.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/io/section-pair/SectionPairMessageFormatter.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/io/xml/XmlAttribute.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/io/xml/XmlDeclaration.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/io/xml/XmlDocument.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/io/xml/XmlNode.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/io/xml/XmlParseParameter.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/io/xml/XmlParser.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/io/xml/XmlReader.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/io/File.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/io/FileOutputStream.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/io/FilePathSeparator.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/io/FilePathSeparatorMatch.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/io/FileReader.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/io/FileWriter.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/io/NewLine.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/io/StandardOutputWriter.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/io/StorableFile.cpp)
+
+    set(${placeholder} ${SOURCE_FILES_IO} PARENT_SCOPE)
+endfunction()
+
+function(collect_time_module_source_files placeholder)
+    set(SOURCE_FILES_TIME
+            ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/time/common/DateParameter.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/time/common/DateParameterMapper.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/time/system-time/IClock.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/time/system-time/SystemTime.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/time/system-time/SystemTimeParameter.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/time/Date.cpp)
+
+    set(${placeholder} ${SOURCE_FILES_TIME} PARENT_SCOPE)
+endfunction()
+
+function(collect_time_jni_module_source_files placeholder)
+    set(SOURCE_FILES_TIME_JNI
+            ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/time/common/jni/JniDateParameterMapper.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/time/system-time/jni/com_lynarstudios_ls_std_time_systemtime_SystemTimeJni.cpp)
+
+    set(${placeholder} ${SOURCE_FILES_TIME_JNI} PARENT_SCOPE)
+endfunction()

+ 148 - 0
cmake/TestFiles.cmake

@@ -0,0 +1,148 @@
+function(collect_boxing_module_test_files placeholder)
+    set(UNIT_TEST_FILES_BOXING
+            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/boxing/BooleanTest.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/boxing/DoubleTest.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/boxing/FloatTest.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/boxing/IntegerTest.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/boxing/LongTest.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/boxing/StringTest.cpp)
+
+    set(${placeholder} ${UNIT_TEST_FILES_BOXING} PARENT_SCOPE)
+endfunction()
+
+function(collect_core_module_test_files placeholder)
+    set(UNIT_TEST_FILES_CORE
+            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/core/evaluator/EmptyStringArgumentEvaluatorTest.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/core/evaluator/IndexOutOfBoundsEvaluatorTest.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/core/evaluator/NullPointerArgumentEvaluatorTest.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/core/evaluator/NullPointerEvaluatorTest.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/core/evaluator/RawNullPointerArgumentEvaluatorTest.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/core/evaluator/RawNullPointerEvaluatorTest.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/core/exception/EventNotHandledExceptionTest.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/core/exception/ExceptionMessageTest.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/core/exception/FileNotFoundExceptionTest.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/core/exception/FileOperationExceptionTest.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/core/exception/IllegalArgumentExceptionTest.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/core/exception/IllegalArithmeticOperationExceptionTest.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/core/exception/IncompleteJsonExceptionTest.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/core/exception/IndexOutOfBoundsExceptionTest.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/core/exception/NotImplementedExceptionTest.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/core/exception/NullPointerExceptionTest.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/core/ClassTest.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/core/ConditionalFunctionExecutorTest.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/core/LibraryVersionTest.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/core/VersionTest.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/test/classes/core/ClassWrapper.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/test/classes/core/MathOddValidator.cpp)
+
+    set(${placeholder} ${UNIT_TEST_FILES_CORE} PARENT_SCOPE)
+endfunction()
+
+function(collect_core_jni_module_test_files placeholder)
+    set(UNIT_TEST_FILES_CORE_JNI
+            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/core/jni/JniApiTest.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/core/jni/JniClassParameterTest.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/core/jni/JniClassTest.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/core/jni/JniMethodTest.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/core/jni/JniReturnValueTest.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/test/classes/core/jni/MockJniApi.cpp)
+
+    set(${placeholder} ${UNIT_TEST_FILES_CORE_JNI} PARENT_SCOPE)
+endfunction()
+
+function(collect_encoding_module_test_files placeholder)
+    set(UNIT_TEST_FILES_ENCODING
+            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/encoding/Base64Test.cpp)
+
+    set(${placeholder} ${UNIT_TEST_FILES_ENCODING} PARENT_SCOPE)
+endfunction()
+
+function(collect_event_module_test_files placeholder)
+    set(UNIT_TEST_FILES_EVENT
+            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/event/EventListenerTest.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/event/EventManagerTest.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/event/EventParameterTest.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/event/EventTest.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/test/classes/event/ChangeColorEvent.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/test/classes/event/OnClickEvent.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/test/classes/event/Button.cpp)
+
+    set(${placeholder} ${UNIT_TEST_FILES_EVENT} PARENT_SCOPE)
+endfunction()
+
+function(collect_io_module_test_files placeholder)
+    set(UNIT_TEST_FILES_IO
+            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/io/evaluator/FileExistenceEvaluatorTest.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/io/logging/LoggerTest.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/io/logging/LogLevelTest.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/io/section-pair/evaluator/SectionPairIdentifierArgumentEvaluatorTest.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/io/section-pair/evaluator/SectionPairRowArgumentEvaluatorTest.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/io/section-pair/evaluator/SectionPairRowListValueArgumentEvaluatorTest.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/io/section-pair/evaluator/SectionPairRowSingleValueArgumentEvaluatorTest.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/io/section-pair/evaluator/SectionPairSectionArgumentEvaluatorTest.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/io/section-pair/evaluator/SectionPairValueArgumentEvaluatorTest.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/io/section-pair/model/SectionPairDocumentTest.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/io/section-pair/model/SectionPairRowListValueTest.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/io/section-pair/model/SectionPairRowSingleValueTest.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/io/section-pair/model/SectionPairRowTest.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/io/section-pair/model/SectionPairSectionTest.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/io/section-pair/reader/SectionPairFileReaderParameterTest.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/io/section-pair/reader/SectionPairFileReaderTest.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/io/section-pair/serialization/SerializableSectionPairDocumentTest.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/io/section-pair/serialization/SerializableSectionPairParameterTest.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/io/section-pair/serialization/SerializableSectionPairRowListValueTest.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/io/section-pair/serialization/SerializableSectionPairRowSingleValueTest.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/io/section-pair/serialization/SerializableSectionPairRowTest.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/io/section-pair/serialization/SerializableSectionPairSectionTest.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/io/section-pair/validator/SectionPairDocumentValidatorTest.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/io/section-pair/validator/SectionPairFileExtensionValidatorTest.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/io/section-pair/validator/SectionPairIdentifierValidatorTest.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/io/section-pair/validator/SectionPairRowListValueValidatorTest.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/io/section-pair/validator/SectionPairRowSingleValueValidatorTest.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/io/section-pair/validator/SectionPairRowValidatorTest.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/io/section-pair/validator/SectionPairSectionValidatorTest.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/io/section-pair/validator/SectionPairValueValidatorTest.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/io/section-pair/SectionPairMessageFormatterTest.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/io/xml/XmlAttributeTest.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/io/xml/XmlDeclarationTest.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/io/xml/XmlDocumentTest.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/io/xml/XmlNodeTest.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/io/xml/XmlParseParameterTest.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/io/xml/XmlParserTest.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/io/xml/XmlParserTestWrapperTest.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/io/xml/XmlReaderTest.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/io/FileOutputStreamTest.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/io/FileReaderTest.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/io/FileTest.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/io/FileWriterTest.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/io/StandardOutputWriterTest.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/io/StorableFileTest.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/test/classes/io/section-pair/SectionPairDocumentProvider.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/test/classes/io/section-pair/SectionPairSectionProvider.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/test/classes/io/section-pair/SerializableSectionPairRowProvider.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/test/classes/io/xml/TestDataFactory.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/test/classes/io/xml/XmlParserTestWrapper.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/test/classes/io/MockFileExistenceEvaluator.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/test/classes/io/MockFileReader.cpp)
+
+    set(${placeholder} ${UNIT_TEST_FILES_IO} PARENT_SCOPE)
+endfunction()
+
+function(collect_serialization_module_test_files placeholder)
+    set(UNIT_TEST_FILES_SERIALIZATION
+            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/serialization/JsonTest.cpp)
+
+    set(${placeholder} ${UNIT_TEST_FILES_SERIALIZATION} PARENT_SCOPE)
+endfunction()
+
+function(collect_time_module_test_files placeholder)
+    set(UNIT_TEST_FILES_TIME
+            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/time/common/DateParameterMapperTest.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/time/common/DateParameterTest.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/time/system-time/SystemTimeParameterTest.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/time/system-time/SystemTimeTest.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/time/DateTest.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/test/classes/time/system-time/MockClock.cpp)
+
+    set(${placeholder} ${UNIT_TEST_FILES_TIME} PARENT_SCOPE)
+endfunction()

+ 2 - 2
include/ls-std/boxing/String.hpp

@@ -3,7 +3,7 @@
  * Company:         Lynar Studios
  * E-Mail:          webmaster@lynarstudios.com
  * Created:         2020-08-14
- * Changed:         2024-09-11
+ * Changed:         2025-12-21
  *
  * */
 
@@ -43,7 +43,7 @@ namespace ls::std::boxing
       ::std::string operator+(ls::std::boxing::String _string) const;
       ::std::string operator+(const ::std::string &_string) const;
       ::std::string operator+(const char *_string) const;
-      ::std::string operator-(int _number) const;
+      ::std::string operator-(::std::string::size_type _number) const;
 
       // compound operators
 

+ 3 - 2
include/ls-std/io/File.hpp

@@ -3,7 +3,7 @@
  * Company:         Lynar Studios
  * E-Mail:          webmaster@lynarstudios.com
  * Created:         2020-08-15
- * Changed:         2024-09-13
+ * Changed:         2025-12-23
  *
  * */
 
@@ -20,6 +20,7 @@
 #include <string>
 #include <vector>
 #ifdef _WIN32
+  #define NOMINMAX
   #include <windows.h>
 #endif
 
@@ -52,7 +53,7 @@ namespace ls::std::io
       [[nodiscard]] ::std::string getAbsoluteFilePath() const;
       [[nodiscard]] ::std::string getName() const;
       [[nodiscard]] ::std::string getParent() const;
-      [[nodiscard]] long getSize() const;
+      [[nodiscard]] size_t getSize() const;
       [[nodiscard]] static ::std::string getWorkingDirectory();
       [[nodiscard]] bool isDirectory() const;
       [[nodiscard]] bool isFile() const;

+ 2 - 2
include/ls-std/io/xml/XmlParser.hpp

@@ -3,7 +3,7 @@
  * Company:         Lynar Studios
  * E-Mail:          webmaster@lynarstudios.com
  * Created:         2020-11-25
- * Changed:         2024-09-13
+ * Changed:         2025-12-21
  *
  * */
 
@@ -74,7 +74,7 @@ namespace ls::std::io
       [[nodiscard]] ::std::string::size_type _parseMode(::std::string::size_type _index, const ls::std::core::type::byte_field &_data);
       [[nodiscard]] size_t _parseOpeningTag(const ls::std::core::type::byte_field &_data, ::std::string::size_type _index);
       [[nodiscard]] static ::std::string_view _parseTagName(::std::string_view _data);
-      [[nodiscard]] size_t _parseValue(::std::string_view _data, ::std::string::size_type _index);
+      [[nodiscard]] size_t _parseValue(::std::string_view _data, ::std::string::size_type _index) const;
       void _reset();
       void _setMaxLevel();
   };

+ 2 - 1
include/ls-std/time/common/DateParameterMapper.hpp

@@ -3,7 +3,7 @@
 * Company:         Lynar Studios
 * E-Mail:          webmaster@lynarstudios.com
 * Created:         2023-03-31
-* Changed:         2024-09-11
+* Changed:         2025-12-23
 *
 * */
 
@@ -14,6 +14,7 @@
 #include <ls-std/os/dynamic-goal.hpp>
 #include <ls-std/time/type/DateParameterTypes.hpp>
 #ifdef _WIN32
+  #define NOMINMAX
   #include <windows.h>
 #endif
 

+ 12 - 12
source/ls-std/boxing/Boolean.cpp

@@ -3,7 +3,7 @@
  * Company:         Lynar Studios
  * E-Mail:          webmaster@lynarstudios.com
  * Created:         2020-08-09
- * Changed:         2023-05-17
+ * Changed:         2025-12-21
  *
  * */
 
@@ -17,21 +17,21 @@ using ls::std::core::IllegalArgumentException;
 using std::string;
 using std::transform;
 
-Boolean::Boolean(bool _value) : Class(Boolean::_fetchClassName()), value(_value)
+Boolean::Boolean(const bool _value) : Class(_fetchClassName()), value(_value)
 {}
 
-Boolean::Boolean() : Class(Boolean::_fetchClassName())
+Boolean::Boolean() : Class(_fetchClassName())
 {}
 
 Boolean::~Boolean() noexcept = default;
 
-Boolean &Boolean::operator=(int _value)
+Boolean &Boolean::operator=(const int _value)
 {
   this->value = _value;
   return *this;
 }
 
-Boolean &Boolean::operator=(bool _value)
+Boolean &Boolean::operator=(const bool _value)
 {
   this->value = _value;
   return *this;
@@ -42,12 +42,12 @@ bool Boolean::operator&&(const Boolean &_boolean) const
   return this->value && _boolean.getValue();
 }
 
-bool Boolean::operator&&(bool _value) const
+bool Boolean::operator&&(const bool _value) const
 {
   return this->value && _value;
 }
 
-bool Boolean::operator&&(int _value) const
+bool Boolean::operator&&(const int _value) const
 {
   return this->value && _value;
 }
@@ -57,12 +57,12 @@ bool Boolean::operator||(const Boolean &_boolean) const
   return this->value || _boolean.getValue();
 }
 
-bool Boolean::operator||(bool _value) const
+bool Boolean::operator||(const bool _value) const
 {
   return this->value || _value;
 }
 
-bool Boolean::operator||(int _value) const
+bool Boolean::operator||(const int _value) const
 {
   return this->value || _value;
 }
@@ -105,17 +105,17 @@ bool Boolean::XOR(const Boolean &_leftExpression, const Boolean &_rightExpressio
   return (_leftExpression && !_rightExpression) || (!_leftExpression && _rightExpression.getValue());
 }
 
-bool Boolean::XOR(const Boolean &_leftExpression, bool _rightExpression)
+bool Boolean::XOR(const Boolean &_leftExpression, const bool _rightExpression)
 {
   return (_leftExpression && !_rightExpression) || (!_leftExpression && _rightExpression);
 }
 
-bool Boolean::XOR(bool _leftExpression, const Boolean &_rightExpression)
+bool Boolean::XOR(const bool _leftExpression, const Boolean &_rightExpression)
 {
   return (_leftExpression && !_rightExpression) || (!_leftExpression && _rightExpression.getValue());
 }
 
-bool Boolean::XOR(bool _leftExpression, bool _rightExpression)
+bool Boolean::XOR(const bool _leftExpression, const bool _rightExpression)
 {
   return (_leftExpression && !_rightExpression) || (!_leftExpression && _rightExpression);
 }

+ 22 - 22
source/ls-std/boxing/Double.cpp

@@ -3,7 +3,7 @@
  * Company:         Lynar Studios
  * E-Mail:          webmaster@lynarstudios.com
  * Created:         2020-08-14
- * Changed:         2023-05-17
+ * Changed:         2025-12-21
  *
  * */
 
@@ -19,19 +19,19 @@ using std::stod;
 using std::string;
 using std::to_string;
 
-Double::Double() : Class(Double::_fetchClassName())
+Double::Double() : Class(_fetchClassName())
 {
   this->_assignEpsilon(0.00000001);
 }
 
-Double::Double(double _value) : Class(Double::_fetchClassName()), value(_value)
+Double::Double(const double _value) : Class(_fetchClassName()), value(_value)
 {
   this->_assignEpsilon(0.00000001);
 }
 
 Double::~Double() noexcept = default;
 
-Double &Double::operator=(double _value)
+Double &Double::operator=(const double _value)
 {
   this->value = _value;
   return *this;
@@ -47,7 +47,7 @@ double Double::operator+(const Double &_double) const
   return this->value + _double.getValue();
 }
 
-double Double::operator+(double _value) const
+double Double::operator+(const double _value) const
 {
   return this->value + _value;
 }
@@ -57,7 +57,7 @@ double Double::operator*(const Double &_double) const
   return this->value * _double.getValue();
 }
 
-double Double::operator*(double _value) const
+double Double::operator*(const double _value) const
 {
   return this->value * _value;
 }
@@ -67,7 +67,7 @@ double Double::operator-(const Double &_double) const
   return this->value - _double.getValue();
 }
 
-double Double::operator-(double _value) const
+double Double::operator-(const double _value) const
 {
   return this->value - _value;
 }
@@ -77,7 +77,7 @@ double Double::operator/(const Double &_double) const
   return this->value / _double.getValue();
 }
 
-double Double::operator/(double _value) const
+double Double::operator/(const double _value) const
 {
   return this->value / _value;
 }
@@ -88,7 +88,7 @@ Double &Double::operator+=(const Double &_double)
   return *this;
 }
 
-Double &Double::operator+=(double _value)
+Double &Double::operator+=(const double _value)
 {
   this->value += _value;
   return *this;
@@ -100,7 +100,7 @@ Double &Double::operator-=(const Double &_double)
   return *this;
 }
 
-Double &Double::operator-=(double _value)
+Double &Double::operator-=(const double _value)
 {
   this->value -= _value;
   return *this;
@@ -112,7 +112,7 @@ Double &Double::operator*=(const Double &_double)
   return *this;
 }
 
-Double &Double::operator*=(double _value)
+Double &Double::operator*=(const double _value)
 {
   this->value *= _value;
   return *this;
@@ -124,7 +124,7 @@ Double &Double::operator/=(const Double &_double)
   return *this;
 }
 
-Double &Double::operator/=(double _value)
+Double &Double::operator/=(const double _value)
 {
   this->value /= _value;
   return *this;
@@ -135,7 +135,7 @@ bool Double::operator==(const Double &_double) const
   return fabs(this->value - _double.getValue()) < this->epsilon;
 }
 
-bool Double::operator==(double _value) const
+bool Double::operator==(const double _value) const
 {
   return fabs(this->value - _value) < this->epsilon;
 }
@@ -145,7 +145,7 @@ bool Double::operator!=(const Double &_double) const
   return fabs(this->value - _double.getValue()) >= this->epsilon;
 }
 
-bool Double::operator!=(double _value) const
+bool Double::operator!=(const double _value) const
 {
   return fabs(this->value - _value) >= this->epsilon;
 }
@@ -155,7 +155,7 @@ bool Double::operator>(const Double &_double) const
   return this->value > _double.getValue();
 }
 
-bool Double::operator>(double _value) const
+bool Double::operator>(const double _value) const
 {
   return this->value > _value;
 }
@@ -165,7 +165,7 @@ bool Double::operator>=(const Double &_double) const
   return this->value >= _double.getValue();
 }
 
-bool Double::operator>=(double _value) const
+bool Double::operator>=(const double _value) const
 {
   return this->value >= _value;
 }
@@ -175,7 +175,7 @@ bool Double::operator<(const Double &_double) const
   return this->value < _double.getValue();
 }
 
-bool Double::operator<(double _value) const
+bool Double::operator<(const double _value) const
 {
   return this->value < _value;
 }
@@ -185,19 +185,19 @@ bool Double::operator<=(const Double &_double) const
   return this->value <= _double.getValue();
 }
 
-bool Double::operator<=(double _value) const
+bool Double::operator<=(const double _value) const
 {
   return this->value <= _value;
 }
 
 void Double::operator++()
 {
-  this->value += 1.0f;
+  this->value += 1.0;
 }
 
 void Double::operator--()
 {
-  this->value -= 1.0f;
+  this->value -= 1.0;
 }
 
 void Double::parse(const string &_parseText)
@@ -220,12 +220,12 @@ double Double::getValue() const
   return this->value;
 }
 
-void Double::setEpsilon(double _epsilon)
+void Double::setEpsilon(const double _epsilon)
 {
   this->_assignEpsilon(_epsilon);
 }
 
-void Double::_assignEpsilon(double _epsilon)
+void Double::_assignEpsilon(const double _epsilon)
 {
   if (_epsilon <= 0.0)
   {

+ 21 - 21
source/ls-std/boxing/Float.cpp

@@ -3,7 +3,7 @@
  * Company:         Lynar Studios
  * E-Mail:          webmaster@lynarstudios.com
  * Created:         2020-08-14
- * Changed:         2023-05-17
+ * Changed:         2025-12-21
  *
  * */
 
@@ -19,15 +19,15 @@ using std::stof;
 using std::string;
 using std::to_string;
 
-Float::Float() : Class(Float::_fetchClassName()), epsilon(0.00001F)
+Float::Float() : Class(_fetchClassName()), epsilon(0.00001F)
 {}
 
-Float::Float(float _value) : Class(Float::_fetchClassName()), epsilon(0.00001f), value(_value)
+Float::Float(const float _value) : Class(_fetchClassName()), epsilon(0.00001f), value(_value)
 {}
 
 Float::~Float() noexcept = default;
 
-Float &Float::operator=(float _value)
+Float &Float::operator=(const float _value)
 {
   this->value = _value;
   return *this;
@@ -43,7 +43,7 @@ float Float::operator+(const Float &_float) const
   return this->value + _float.getValue();
 }
 
-float Float::operator+(float _value) const
+float Float::operator+(const float _value) const
 {
   return this->value + _value;
 }
@@ -53,7 +53,7 @@ float Float::operator*(const Float &_float) const
   return this->value * _float.getValue();
 }
 
-float Float::operator*(float _value) const
+float Float::operator*(const float _value) const
 {
   return this->value * _value;
 }
@@ -63,7 +63,7 @@ float Float::operator-(const Float &_float) const
   return this->value - _float.getValue();
 }
 
-float Float::operator-(float _value) const
+float Float::operator-(const float _value) const
 {
   return this->value - _value;
 }
@@ -73,7 +73,7 @@ float Float::operator/(const Float &_float) const
   return this->value / _float.getValue();
 }
 
-float Float::operator/(float _value) const
+float Float::operator/(const float _value) const
 {
   return this->value / _value;
 }
@@ -84,7 +84,7 @@ Float &Float::operator+=(const Float &_float)
   return *this;
 }
 
-Float &Float::operator+=(float _value)
+Float &Float::operator+=(const float _value)
 {
   this->value += _value;
   return *this;
@@ -96,7 +96,7 @@ Float &Float::operator-=(const Float &_float)
   return *this;
 }
 
-Float &Float::operator-=(float _value)
+Float &Float::operator-=(const float _value)
 {
   this->value -= _value;
   return *this;
@@ -108,7 +108,7 @@ Float &Float::operator*=(const Float &_float)
   return *this;
 }
 
-Float &Float::operator*=(float _value)
+Float &Float::operator*=(const float _value)
 {
   this->value *= _value;
   return *this;
@@ -120,7 +120,7 @@ Float &Float::operator/=(const Float &_float)
   return *this;
 }
 
-Float &Float::operator/=(float _value)
+Float &Float::operator/=(const float _value)
 {
   this->value /= _value;
   return *this;
@@ -131,7 +131,7 @@ bool Float::operator==(const Float &_float) const
   return fabs(this->value - _float.getValue()) < this->epsilon;
 }
 
-bool Float::operator==(float _value) const
+bool Float::operator==(const float _value) const
 {
   return fabs(this->value - _value) < this->epsilon;
 }
@@ -141,7 +141,7 @@ bool Float::operator!=(const Float &_float) const
   return fabs(this->value - _float.getValue()) >= this->epsilon;
 }
 
-bool Float::operator!=(float _value) const
+bool Float::operator!=(const float _value) const
 {
   return fabs(this->value - _value) >= this->epsilon;
 }
@@ -151,7 +151,7 @@ bool Float::operator>(const Float &_float) const
   return this->value > _float.getValue();
 }
 
-bool Float::operator>(float _value) const
+bool Float::operator>(const float _value) const
 {
   return this->value > _value;
 }
@@ -161,7 +161,7 @@ bool Float::operator>=(const Float &_float) const
   return this->value >= _float.getValue();
 }
 
-bool Float::operator>=(float _value) const
+bool Float::operator>=(const float _value) const
 {
   return this->value >= _value;
 }
@@ -171,7 +171,7 @@ bool Float::operator<(const Float &_float) const
   return this->value < _float.getValue();
 }
 
-bool Float::operator<(float _value) const
+bool Float::operator<(const float _value) const
 {
   return this->value < _value;
 }
@@ -181,7 +181,7 @@ bool Float::operator<=(const Float &_float) const
   return this->value <= _float.getValue();
 }
 
-bool Float::operator<=(float _value) const
+bool Float::operator<=(const float _value) const
 {
   return this->value <= _value;
 }
@@ -216,14 +216,14 @@ float Float::getValue() const
   return this->value;
 }
 
-void Float::setEpsilon(float _epsilon)
+void Float::setEpsilon(const float _epsilon)
 {
   this->_assignEpsilon(_epsilon);
 }
 
-void Float::_assignEpsilon(float _epsilon)
+void Float::_assignEpsilon(const float _epsilon)
 {
-  if (_epsilon <= 0.0)
+  if (_epsilon <= 0.0f)
   {
     throw IllegalArgumentException{"epsilon is less than or equal zero"};
   }

+ 19 - 19
source/ls-std/boxing/Integer.cpp

@@ -3,7 +3,7 @@
  * Company:         Lynar Studios
  * E-Mail:          webmaster@lynarstudios.com
  * Created:         2020-08-07
- * Changed:         2023-05-17
+ * Changed:         2025-12-21
  *
  * */
 
@@ -17,15 +17,15 @@ using std::stoi;
 using std::string;
 using std::to_string;
 
-Integer::Integer(int _value) : Class(Integer::_fetchClassName()), value(_value)
+Integer::Integer(const int _value) : Class(_fetchClassName()), value(_value)
 {}
 
-Integer::Integer() : Class(Integer::_fetchClassName())
+Integer::Integer() : Class(_fetchClassName())
 {}
 
 Integer::~Integer() noexcept = default;
 
-Integer &Integer::operator=(int _value)
+Integer &Integer::operator=(const int _value)
 {
   this->value = _value;
   return *this;
@@ -41,7 +41,7 @@ int Integer::operator+(const Integer &_integer) const
   return this->value + _integer.getValue();
 }
 
-int Integer::operator+(int _value) const
+int Integer::operator+(const int _value) const
 {
   return this->value + _value;
 }
@@ -51,7 +51,7 @@ int Integer::operator*(const Integer &_integer) const
   return this->value * _integer.getValue();
 }
 
-int Integer::operator*(int _value) const
+int Integer::operator*(const int _value) const
 {
   return this->value * _value;
 }
@@ -61,7 +61,7 @@ int Integer::operator-(const Integer &_integer) const
   return this->value - _integer.getValue();
 }
 
-int Integer::operator-(int _value) const
+int Integer::operator-(const int _value) const
 {
   return this->value - _value;
 }
@@ -76,7 +76,7 @@ int Integer::operator/(const Integer &_integer) const
   return this->value / _integer.getValue();
 }
 
-int Integer::operator/(int _value) const
+int Integer::operator/(const int _value) const
 {
   if (_value == 0)
   {
@@ -91,7 +91,7 @@ int Integer::operator%(const Integer &_integer) const
   return this->value % _integer.getValue();
 }
 
-int Integer::operator%(int _value) const
+int Integer::operator%(const int _value) const
 {
   return this->value % _value;
 }
@@ -102,7 +102,7 @@ Integer &Integer::operator+=(const Integer &_integer)
   return *this;
 }
 
-Integer &Integer::operator+=(int _value)
+Integer &Integer::operator+=(const int _value)
 {
   this->value += _value;
   return *this;
@@ -114,7 +114,7 @@ Integer &Integer::operator-=(const Integer &_integer)
   return *this;
 }
 
-Integer &Integer::operator-=(int _value)
+Integer &Integer::operator-=(const int _value)
 {
   this->value -= _value;
   return *this;
@@ -126,7 +126,7 @@ Integer &Integer::operator*=(const Integer &_integer)
   return *this;
 }
 
-Integer &Integer::operator*=(int _value)
+Integer &Integer::operator*=(const int _value)
 {
   this->value *= _value;
   return *this;
@@ -143,7 +143,7 @@ Integer &Integer::operator/=(const Integer &_integer)
   return *this;
 }
 
-Integer &Integer::operator/=(int _value)
+Integer &Integer::operator/=(const int _value)
 {
   if (_value == 0)
   {
@@ -159,7 +159,7 @@ bool Integer::operator==(const Integer &_integer) const
   return this->value == _integer.getValue();
 }
 
-bool Integer::operator==(int _value) const
+bool Integer::operator==(const int _value) const
 {
   return this->value == _value;
 }
@@ -169,7 +169,7 @@ bool Integer::operator!=(const Integer &_integer) const
   return this->value != _integer.getValue();
 }
 
-bool Integer::operator!=(int _value) const
+bool Integer::operator!=(const int _value) const
 {
   return this->value != _value;
 }
@@ -179,7 +179,7 @@ bool Integer::operator>(const Integer &_integer) const
   return this->value > _integer.getValue();
 }
 
-bool Integer::operator>(int _value) const
+bool Integer::operator>(const int _value) const
 {
   return this->value > _value;
 }
@@ -189,7 +189,7 @@ bool Integer::operator>=(const Integer &_integer) const
   return this->value >= _integer.getValue();
 }
 
-bool Integer::operator>=(int _value) const
+bool Integer::operator>=(const int _value) const
 {
   return this->value >= _value;
 }
@@ -199,7 +199,7 @@ bool Integer::operator<(const Integer &_integer) const
   return this->value < _integer.getValue();
 }
 
-bool Integer::operator<(int _value) const
+bool Integer::operator<(const int _value) const
 {
   return this->value < _value;
 }
@@ -209,7 +209,7 @@ bool Integer::operator<=(const Integer &_integer) const
   return this->value <= _integer.getValue();
 }
 
-bool Integer::operator<=(int _value) const
+bool Integer::operator<=(const int _value) const
 {
   return this->value <= _value;
 }

+ 19 - 19
source/ls-std/boxing/Long.cpp

@@ -3,7 +3,7 @@
  * Company:         Lynar Studios
  * E-Mail:          webmaster@lynarstudios.com
  * Created:         2020-08-17
- * Changed:         2023-05-17
+ * Changed:         2025-12-21
  *
  * */
 
@@ -18,15 +18,15 @@ using std::stoll;
 using std::string;
 using std::to_string;
 
-Long::Long(long_type _value) : Class(Long::_fetchClassName()), value(_value)
+Long::Long(const long_type _value) : Class(_fetchClassName()), value(_value)
 {}
 
-Long::Long() : Class(Long::_fetchClassName())
+Long::Long() : Class(_fetchClassName())
 {}
 
 Long::~Long() noexcept = default;
 
-Long &Long::operator=(long_type _value)
+Long &Long::operator=(const long_type _value)
 {
   this->value = _value;
   return *this;
@@ -42,7 +42,7 @@ long_type Long::operator+(const Long &_long) const
   return this->value + _long.getValue();
 }
 
-long_type Long::operator+(long_type _value) const
+long_type Long::operator+(const long_type _value) const
 {
   return this->value + _value;
 }
@@ -52,7 +52,7 @@ long_type Long::operator*(const Long &_long) const
   return this->value * _long.getValue();
 }
 
-long_type Long::operator*(long_type _value) const
+long_type Long::operator*(const long_type _value) const
 {
   return this->value * _value;
 }
@@ -62,7 +62,7 @@ long_type Long::operator-(const Long &_long) const
   return this->value - _long.getValue();
 }
 
-long_type Long::operator-(long_type _value) const
+long_type Long::operator-(const long_type _value) const
 {
   return this->value - _value;
 }
@@ -77,7 +77,7 @@ long_type Long::operator/(const Long &_long) const
   return this->value / _long.getValue();
 }
 
-long_type Long::operator/(long_type _value) const
+long_type Long::operator/(const long_type _value) const
 {
   if (_value == 0)
   {
@@ -92,7 +92,7 @@ long_type Long::operator%(const Long &_long) const
   return this->value % _long.getValue();
 }
 
-long_type Long::operator%(long_type _value) const
+long_type Long::operator%(const long_type _value) const
 {
   return this->value % _value;
 }
@@ -103,7 +103,7 @@ Long &Long::operator+=(const Long &_long)
   return *this;
 }
 
-Long &Long::operator+=(long_type _value)
+Long &Long::operator+=(const long_type _value)
 {
   this->value += _value;
   return *this;
@@ -115,7 +115,7 @@ Long &Long::operator-=(const Long &_long)
   return *this;
 }
 
-Long &Long::operator-=(long_type _value)
+Long &Long::operator-=(const long_type _value)
 {
   this->value -= _value;
   return *this;
@@ -127,7 +127,7 @@ Long &Long::operator*=(const Long &_long)
   return *this;
 }
 
-Long &Long::operator*=(long_type _value)
+Long &Long::operator*=(const long_type _value)
 {
   this->value *= _value;
   return *this;
@@ -144,7 +144,7 @@ Long &Long::operator/=(const Long &_long)
   return *this;
 }
 
-Long &Long::operator/=(long_type _value)
+Long &Long::operator/=(const long_type _value)
 {
   if (_value == 0)
   {
@@ -160,7 +160,7 @@ bool Long::operator==(const Long &_long) const
   return this->value == _long.getValue();
 }
 
-bool Long::operator==(long_type _value) const
+bool Long::operator==(const long_type _value) const
 {
   return this->value == _value;
 }
@@ -170,7 +170,7 @@ bool Long::operator!=(const Long &_long) const
   return this->value != _long.getValue();
 }
 
-bool Long::operator!=(long_type _value) const
+bool Long::operator!=(const long_type _value) const
 {
   return this->value != _value;
 }
@@ -180,7 +180,7 @@ bool Long::operator>(const Long &_long) const
   return this->value > _long.getValue();
 }
 
-bool Long::operator>(long_type _value) const
+bool Long::operator>(const long_type _value) const
 {
   return this->value > _value;
 }
@@ -190,7 +190,7 @@ bool Long::operator>=(const Long &_long) const
   return this->value >= _long.getValue();
 }
 
-bool Long::operator>=(long_type _value) const
+bool Long::operator>=(const long_type _value) const
 {
   return this->value >= _value;
 }
@@ -200,7 +200,7 @@ bool Long::operator<(const Long &_long) const
   return this->value < _long.getValue();
 }
 
-bool Long::operator<(long_type _value) const
+bool Long::operator<(const long_type _value) const
 {
   return this->value < _value;
 }
@@ -210,7 +210,7 @@ bool Long::operator<=(const Long &_long) const
   return this->value <= _long.getValue();
 }
 
-bool Long::operator<=(long_type _value) const
+bool Long::operator<=(const long_type _value) const
 {
   return this->value <= _value;
 }

+ 14 - 14
source/ls-std/boxing/String.cpp

@@ -3,7 +3,7 @@
  * Company:         Lynar Studios
  * E-Mail:          webmaster@lynarstudios.com
  * Created:         2020-08-14
- * Changed:         2023-05-17
+ * Changed:         2025-12-21
  *
  * */
 
@@ -51,9 +51,9 @@ string String::operator+(const char *_string) const
   return this->value + _string;
 }
 
-string String::operator-(int _number) const
+string String::operator-(const string::size_type _number) const
 {
-  string copy = this->value;
+  const string copy = this->value;
   return copy.substr(0, copy.size() - _number);
 }
 
@@ -74,7 +74,7 @@ bool String::operator==(String _string) const
   return this->value == _string.toString();
 }
 
-bool String::operator==(string_view _value) const
+bool String::operator==(const string_view _value) const
 {
   return this->value == _value;
 }
@@ -89,7 +89,7 @@ bool String::operator!=(String _string) const
   return this->value != _string.toString();
 }
 
-bool String::operator!=(string_view _value) const
+bool String::operator!=(const string_view _value) const
 {
   return this->value != _value;
 }
@@ -109,12 +109,12 @@ string String::toString()
   return this->value;
 }
 
-bool String::contains(string_view _text) const
+bool String::contains(const string_view _text) const
 {
   return this->value.find(_text) != string::npos;
 }
 
-bool String::endsWith(string_view _text) const
+bool String::endsWith(const string_view _text) const
 {
   return this->value.rfind(_text) == (this->value.size() - _text.size());
 }
@@ -137,12 +137,12 @@ vector<byte_type> String::getByteData()
   return byteData;
 }
 
-string String::padLeft(size_t _width, const char _fillCharacter) const
+string String::padLeft(const size_t _width, const char _fillCharacter) const
 {
   return String::_createFillContent(this->value, _width, _fillCharacter) + this->value;
 }
 
-string String::padRight(size_t _width, const char _fillCharacter) const
+string String::padRight(const size_t _width, const char _fillCharacter) const
 {
   return this->value + String::_createFillContent(this->value, _width, _fillCharacter);
 }
@@ -155,7 +155,7 @@ string String::reverse() const
   return copy;
 }
 
-bool String::startsWith(string_view _text) const
+bool String::startsWith(const string_view _text) const
 {
   return this->value.rfind(_text, 0) == 0;
 }
@@ -176,7 +176,7 @@ string String::toUpperCase() const
   return copy;
 }
 
-string String::_buildCharacterChain(size_t _amount, const char _fillCharacter)
+string String::_buildCharacterChain(const size_t _amount, const char _fillCharacter)
 {
   string fillContent{};
 
@@ -188,14 +188,14 @@ string String::_buildCharacterChain(size_t _amount, const char _fillCharacter)
   return fillContent;
 }
 
-string String::_createFillContent(string_view _text, size_t _width, const char _fillCharacter)
+string String::_createFillContent(const string_view _text, const size_t _width, const char _fillCharacter)
 {
-  size_t fillSize = _text.size() > _width ? 0 : _width - _text.size();
+  const size_t fillSize = _text.size() > _width ? 0 : _width - _text.size();
   string fillContent{};
 
   if (fillSize > 0)
   {
-    fillContent = String::_buildCharacterChain(fillSize, _fillCharacter);
+    fillContent = _buildCharacterChain(fillSize, _fillCharacter);
   }
 
   return fillContent;

+ 2 - 2
source/ls-std/core/ConditionalFunctionExecutor.cpp

@@ -3,7 +3,7 @@
 * Company:         Lynar Studios
 * E-Mail:          webmaster@lynarstudios.com
 * Created:         2023-02-13
-* Changed:         2023-02-23
+* Changed:         2025-12-21
 *
 * */
 
@@ -12,7 +12,7 @@
 using ls::std::core::ConditionalFunctionExecutor;
 using std::function;
 
-ConditionalFunctionExecutor::ConditionalFunctionExecutor(bool _condition) : condition(_condition)
+ConditionalFunctionExecutor::ConditionalFunctionExecutor(const bool _condition) : condition(_condition)
 {}
 
 ConditionalFunctionExecutor::~ConditionalFunctionExecutor() = default;

+ 6 - 6
source/ls-std/core/Version.cpp

@@ -3,7 +3,7 @@
  * Company:         Lynar Studios
  * E-Mail:          webmaster@lynarstudios.com
  * Created:         2020-09-28
- * Changed:         2023-05-16
+ * Changed:         2025-12-21
  *
  * */
 
@@ -20,7 +20,7 @@ using std::string;
 using std::string_view;
 using std::to_string;
 
-Version::Version(version_type _majorVersion, version_type _minorVersion, version_type _patchVersion) : majorVersion(_majorVersion), minorVersion(_minorVersion), patchVersion(_patchVersion)
+Version::Version(const version_type _majorVersion, const version_type _minorVersion, const version_type _patchVersion) : majorVersion(_majorVersion), minorVersion(_minorVersion), patchVersion(_patchVersion)
 {}
 
 Version::~Version() noexcept = default;
@@ -76,22 +76,22 @@ bool Version::isValid(const string &_versionString)
   return Version::_isValid(_versionString);
 }
 
-void Version::setMajorVersion(version_type _major)
+void Version::setMajorVersion(const version_type _major)
 {
   this->majorVersion = _major;
 }
 
-void Version::setMinorVersion(version_type _minor)
+void Version::setMinorVersion(const version_type _minor)
 {
   this->minorVersion = _minor;
 }
 
-void Version::setPatchVersion(version_type _patch)
+void Version::setPatchVersion(const version_type _patch)
 {
   this->patchVersion = _patch;
 }
 
-bool Version::_isValid(string_view _versionString)
+bool Version::_isValid(const string_view _versionString)
 {
   bool isValidVersionString{};
   static regex versionRegex{R"(\d+[.]\d+[.]\d+)"};

+ 3 - 5
source/ls-std/core/evaluator/EmptyStringArgumentEvaluator.cpp

@@ -3,7 +3,7 @@
 * Company:         Lynar Studios
 * E-Mail:          webmaster@lynarstudios.com
 * Created:         2023-02-08
-* Changed:         2023-02-23
+* Changed:         2025-12-21
 *
 * */
 
@@ -31,9 +31,7 @@ void EmptyStringArgumentEvaluator::evaluate()
     {
       throw IllegalArgumentException{"passed argument is empty!"};
     }
-    else
-    {
-      throw IllegalArgumentException{this->message};
-    }
+
+    throw IllegalArgumentException{this->message};
   }
 }

+ 5 - 7
source/ls-std/core/evaluator/IndexOutOfBoundsEvaluator.cpp

@@ -3,7 +3,7 @@
 * Company:         Lynar Studios
 * E-Mail:          webmaster@lynarstudios.com
 * Created:         2023-02-10
-* Changed:         2023-05-16
+* Changed:         2025-12-21
 *
 * */
 
@@ -15,10 +15,10 @@ using ls::std::core::IndexOutOfBoundsException;
 using std::move;
 using std::string;
 
-IndexOutOfBoundsEvaluator::IndexOutOfBoundsEvaluator(size_t _index, size_t _size) : index(_index), size(_size)
+IndexOutOfBoundsEvaluator::IndexOutOfBoundsEvaluator(const size_t _index, const size_t _size) : index(_index), size(_size)
 {}
 
-IndexOutOfBoundsEvaluator::IndexOutOfBoundsEvaluator(size_t _index, size_t _size, string _message) : index(_index), message(::move(_message)), size(_size)
+IndexOutOfBoundsEvaluator::IndexOutOfBoundsEvaluator(const size_t _index, const size_t _size, string _message) : index(_index), message(::move(_message)), size(_size)
 {}
 
 IndexOutOfBoundsEvaluator::~IndexOutOfBoundsEvaluator() noexcept = default;
@@ -31,9 +31,7 @@ void IndexOutOfBoundsEvaluator::evaluate()
     {
       throw IndexOutOfBoundsException{};
     }
-    else
-    {
-      throw IndexOutOfBoundsException{this->message};
-    }
+
+    throw IndexOutOfBoundsException{this->message};
   }
 }

+ 1 - 2
source/ls-std/core/exception/EventNotHandledException.cpp

@@ -3,12 +3,11 @@
  * Company:         Lynar Studios
  * E-Mail:          webmaster@lynarstudios.com
  * Created:         2023-02-04
- * Changed:         2023-05-19
+ * Changed:         2025-12-21
  *
  * */
 
 #include <ls-std/core/exception/EventNotHandledException.hpp>
-#include <ls-std/core/exception/ExceptionMessage.hpp>
 
 using ls::std::core::EventNotHandledException;
 using ls::std::core::Exception;

+ 2 - 2
source/ls-std/core/exception/Exception.cpp

@@ -3,7 +3,7 @@
 * Company:         Lynar Studios
 * E-Mail:          webmaster@lynarstudios.com
 * Created:         2023-02-22
-* Changed:         2023-05-19
+* Changed:         2025-12-21
 *
 * */
 
@@ -41,7 +41,7 @@ const char *Exception::_getIdentifiedMessage(const string &_defaultMessage) cons
   return ExceptionMessage{concatenatedMessage}.toCharacterPointer();
 }
 
-void Exception::_setMessage(string_view _message)
+void Exception::_setMessage(const string_view _message)
 {
   this->message = _message;
 }

+ 2 - 2
source/ls-std/core/exception/ExceptionMessage.cpp

@@ -3,7 +3,7 @@
 * Company:         Lynar Studios
 * E-Mail:          webmaster@lynarstudios.com
 * Created:         2023-02-07
-* Changed:         2023-05-24
+* Changed:         2025-12-21
 *
 * */
 
@@ -14,7 +14,7 @@ using ls::std::core::ExceptionMessage;
 using std::move;
 using std::string;
 
-ExceptionMessage::ExceptionMessage(string _message) : message(::move(_message))
+ExceptionMessage::ExceptionMessage(string _message) : message(::move(_message)) // TODO: deprecated
 {}
 
 ExceptionMessage::~ExceptionMessage() = default;

+ 1 - 2
source/ls-std/core/exception/FileNotFoundException.cpp

@@ -3,11 +3,10 @@
  * Company:         Lynar Studios
  * E-Mail:          webmaster@lynarstudios.com
  * Created:         2023-02-04
- * Changed:         2023-05-19
+ * Changed:         2025-12-21
  *
  * */
 
-#include <ls-std/core/exception/ExceptionMessage.hpp>
 #include <ls-std/core/exception/FileNotFoundException.hpp>
 
 using ls::std::core::Exception;

+ 1 - 2
source/ls-std/core/exception/FileOperationException.cpp

@@ -3,11 +3,10 @@
  * Company:         Lynar Studios
  * E-Mail:          webmaster@lynarstudios.com
  * Created:         2023-02-04
- * Changed:         2023-05-19
+ * Changed:         2025-12-21
  *
  * */
 
-#include <ls-std/core/exception/ExceptionMessage.hpp>
 #include <ls-std/core/exception/FileOperationException.hpp>
 
 using ls::std::core::Exception;

+ 1 - 2
source/ls-std/core/exception/IllegalArgumentException.cpp

@@ -3,11 +3,10 @@
  * Company:         Lynar Studios
  * E-Mail:          webmaster@lynarstudios.com
  * Created:         2023-02-04
- * Changed:         2023-05-19
+ * Changed:         2025-12-21
  *
  * */
 
-#include <ls-std/core/exception/ExceptionMessage.hpp>
 #include <ls-std/core/exception/IllegalArgumentException.hpp>
 
 using ls::std::core::Exception;

+ 1 - 2
source/ls-std/core/exception/IllegalArithmeticOperationException.cpp

@@ -3,11 +3,10 @@
  * Company:         Lynar Studios
  * E-Mail:          webmaster@lynarstudios.com
  * Created:         2023-02-04
- * Changed:         2023-05-19
+ * Changed:         2025-12-21
  *
  * */
 
-#include <ls-std/core/exception/ExceptionMessage.hpp>
 #include <ls-std/core/exception/IllegalArithmeticOperationException.hpp>
 
 using ls::std::core::Exception;

+ 1 - 2
source/ls-std/core/exception/IncompleteJsonException.cpp

@@ -3,11 +3,10 @@
  * Company:         Lynar Studios
  * E-Mail:          webmaster@lynarstudios.com
  * Created:         2023-02-04
- * Changed:         2023-05-19
+ * Changed:         2025-12-21
  *
  * */
 
-#include <ls-std/core/exception/ExceptionMessage.hpp>
 #include <ls-std/core/exception/IncompleteJsonException.hpp>
 
 using ls::std::core::Exception;

+ 1 - 2
source/ls-std/core/exception/IndexOutOfBoundsException.cpp

@@ -3,11 +3,10 @@
 * Company:         Lynar Studios
 * E-Mail:          webmaster@lynarstudios.com
 * Created:         2023-02-10
-* Changed:         2023-05-19
+* Changed:         2025-12-21
 *
 * */
 
-#include <ls-std/core/exception/ExceptionMessage.hpp>
 #include <ls-std/core/exception/IndexOutOfBoundsException.hpp>
 
 using ls::std::core::Exception;

+ 1 - 3
source/ls-std/core/exception/NotImplementedException.cpp

@@ -3,16 +3,14 @@
 * Company:         Lynar Studios
 * E-Mail:          webmaster@lynarstudios.com
 * Created:         2023-03-27
-* Changed:         2023-05-19
+* Changed:         2025-12-21
 *
 * */
 
-#include <ls-std/core/exception/ExceptionMessage.hpp>
 #include <ls-std/core/exception/NotImplementedException.hpp>
 #include <string>
 
 using ls::std::core::Exception;
-using ls::std::core::ExceptionMessage;
 using ls::std::core::NotImplementedException;
 using std::move;
 using std::string;

+ 1 - 2
source/ls-std/core/exception/NullPointerException.cpp

@@ -3,11 +3,10 @@
  * Company:         Lynar Studios
  * E-Mail:          webmaster@lynarstudios.com
  * Created:         2023-02-04
- * Changed:         2023-05-19
+ * Changed:         2025-12-21
  *
  * */
 
-#include <ls-std/core/exception/ExceptionMessage.hpp>
 #include <ls-std/core/exception/NullPointerException.hpp>
 
 using ls::std::core::Exception;

+ 32 - 32
source/ls-std/encoding/Base64.cpp

@@ -3,7 +3,7 @@
  * Company:         Lynar Studios
  * E-Mail:          webmaster@lynarstudios.com
  * Created:         2022-01-03
- * Changed:         2023-05-15
+ * Changed:         2025-12-21
  *
  * */
 
@@ -26,29 +26,29 @@ string Base64::encode(const string &_sequence)
 
   for (size_t index = 0; index < _sequence.size(); index += 3)
   {
-    string_view byteTriple = Base64::_getNextByteTriple(_sequence, index);
-    encodedString += Base64::_encodeByteTriple(byteTriple);
+    const string_view byteTriple = _getNextByteTriple(_sequence, index);
+    encodedString += _encodeByteTriple(byteTriple);
   }
 
-  return Base64::_applyEndingRule(encodedString, _sequence.size());
+  return _applyEndingRule(encodedString, _sequence.size());
 }
 
 string Base64::decode(const string &_sequence)
 {
   string decodedString{};
 
-  for (int index{}; index < _sequence.size(); index += 4)
+  for (size_t index{}; index < _sequence.size(); index += 4)
   {
-    string_view quadruple = Base64::_getNextByteQuadruple(string_view{_sequence}, index);
-    decodedString += Base64::_decodeByteQuadruple(quadruple);
+    const string_view quadruple = _getNextByteQuadruple(string_view{_sequence}, index);
+    decodedString += _decodeByteQuadruple(quadruple);
   }
 
   return decodedString;
 }
 
-string Base64::_applyEndingRule(string _encodedString, size_t _sequenceSize)
+string Base64::_applyEndingRule(string _encodedString, const size_t _sequenceSize)
 {
-  size_t size = _encodedString.size();
+  const size_t size = _encodedString.size();
 
   if (_sequenceSize % 3 == 1)
   {
@@ -64,50 +64,50 @@ string Base64::_applyEndingRule(string _encodedString, size_t _sequenceSize)
   return _encodedString;
 }
 
-string Base64::_decodeByteQuadruple(string_view _quadruple)
+string Base64::_decodeByteQuadruple(const string_view _quadruple)
 {
   string decodedText{};
   uint8_t shiftValue = 16;
-  uint32_t bitStorage = Base64::_toDecodingBitStorage(_quadruple);
+  const uint32_t bitStorage = _toDecodingBitStorage(_quadruple);
 
-  for (uint8_t index = 0; index < ((uint8_t) _quadruple.size() - 1); index++)
+  for (uint8_t index = 0; index < static_cast<uint8_t>(_quadruple.size()) - 1; index++)
   {
-    uint32_t bitMask = Base64::_generateBitMask(255, shiftValue);
-    uint32_t bitSequence = Base64::_extractBitSequence(bitMask, bitStorage);
+    const uint32_t bitMask = _generateBitMask(255, shiftValue);
+    uint32_t bitSequence = _extractBitSequence(bitMask, bitStorage);
     bitSequence = bitSequence >> shiftValue;
 
-    decodedText += (char) bitSequence;
+    decodedText += static_cast<char>(bitSequence);
     shiftValue -= 8;
   }
 
   return decodedText;
 }
 
-string Base64::_encodeByteTriple(string_view _byteTriple)
+string Base64::_encodeByteTriple(const string_view _byteTriple)
 {
   string encodedText{};
-  uint32_t bitStorage = Base64::_toEncodingBitStorage(_byteTriple);
+  const uint32_t bitStorage = _toEncodingBitStorage(_byteTriple);
   static vector<uint32_t> bitMaskStorage = {16515072, 258048, 4032, 63};
-  static unordered_map<uint8_t, char> encodingMap = Base64::_getEncodingMap();
+  static unordered_map<uint8_t, char> encodingMap = _getEncodingMap();
   uint8_t shiftValue = 18;
 
   for (uint8_t bitMaskIndex = 0; bitMaskIndex < 4; bitMaskIndex++)
   {
-    uint32_t extractedBitSequence = Base64::_extractBitSequence(bitMaskStorage[bitMaskIndex], bitStorage);
+    uint32_t extractedBitSequence = _extractBitSequence(bitMaskStorage[bitMaskIndex], bitStorage);
     extractedBitSequence = extractedBitSequence >> shiftValue;
-    encodedText += encodingMap[(uint8_t) extractedBitSequence];
+    encodedText += encodingMap[static_cast<uint8_t>(extractedBitSequence)];
     shiftValue -= 6;
   }
 
   return encodedText;
 }
 
-uint32_t Base64::_extractBitSequence(uint32_t _bitMask, uint32_t _bitStorage)
+uint32_t Base64::_extractBitSequence(const uint32_t _bitMask, const uint32_t _bitStorage)
 {
   return _bitStorage & _bitMask;
 }
 
-uint32_t Base64::_generateBitMask(uint32_t _maskValue, uint8_t _shiftValue)
+uint32_t Base64::_generateBitMask(const uint32_t _maskValue, const uint8_t _shiftValue)
 {
   uint32_t bitmask = _maskValue << _shiftValue;
 
@@ -136,12 +136,12 @@ unordered_map<uint8_t, char> Base64::_getEncodingMap()
   return encodingMap;
 }
 
-string_view Base64::_getNextByteQuadruple(string_view _sequence, size_t _index)
+string_view Base64::_getNextByteQuadruple(const string_view _sequence, const size_t _index)
 {
   return _sequence.substr(_index, 4);
 }
 
-string_view Base64::_getNextByteTriple(string_view _sequence, size_t _index)
+string_view Base64::_getNextByteTriple(const string_view _sequence, const size_t _index)
 {
   return _sequence.substr(_index, 3);
 }
@@ -151,31 +151,31 @@ void Base64::_mergeBitSequence(uint32_t &_bitStorage, const uint32_t &_bitMask)
   _bitStorage = _bitStorage | _bitMask;
 }
 
-uint32_t Base64::_toDecodingBitStorage(string_view _quadruple)
+uint32_t Base64::_toDecodingBitStorage(const string_view _quadruple)
 {
   uint32_t bitStorage{};
   uint8_t letterCounter = 1;
-  unordered_map<char, uint8_t> decodingMap = Base64::_getDecodingMap();
+  unordered_map<char, uint8_t> decodingMap = _getDecodingMap();
 
   for (char letter : _quadruple)
   {
-    uint32_t bitMask = Base64::_generateBitMask(decodingMap[letter], (4 - letterCounter) * 6); // must be hardcoded - even in case of less than 4 characters, so that conversion is correct
-    Base64::_mergeBitSequence(bitStorage, bitMask);
+    uint32_t bitMask = _generateBitMask(decodingMap[letter], (4 - letterCounter) * 6); // must be hardcoded - even in case of less than 4 characters, so that conversion is correct
+    _mergeBitSequence(bitStorage, bitMask);
     ++letterCounter;
   }
 
   return bitStorage;
 }
 
-uint32_t Base64::_toEncodingBitStorage(string_view _triple)
+uint32_t Base64::_toEncodingBitStorage(const string_view _triple)
 {
   uint32_t bitStorage{};
   uint8_t shiftValue = 16;
 
-  for (char letter : _triple)
+  for (const char letter : _triple)
   {
-    uint32_t bitMask = Base64::_generateBitMask((uint8_t) letter, shiftValue);
-    Base64::_mergeBitSequence(bitStorage, bitMask);
+    uint32_t bitMask = _generateBitMask(static_cast<uint8_t>(letter), shiftValue);
+    _mergeBitSequence(bitStorage, bitMask);
     shiftValue -= 8;
   }
 

+ 3 - 3
source/ls-std/encoding/cli/cli-base64-main.cpp

@@ -3,7 +3,7 @@
  * Company:         Lynar Studios
  * E-Mail:          webmaster@lynarstudios.com
  * Created:         2022-07-03
- * Changed:         2023-05-18
+ * Changed:         2025-12-21
  *
  * */
 
@@ -26,9 +26,9 @@ using CliCommand = vector<string>;
 void printHelp();
 bool isValidCommand(const CliCommand &_command);
 
-int main(int argc, char *argv[])
+auto main(const int argc, char *argv[]) -> int
 {
-  if (CliCommand command(argv, argv + argc); isValidCommand(command))
+  if (const CliCommand command(argv, argv + argc); isValidCommand(command))
   {
     if (command[1] == "--encode")
     {

+ 5 - 5
source/ls-std/event/EventListener.cpp

@@ -3,7 +3,7 @@
 * Company:         Lynar Studios
 * E-Mail:          webmaster@lynarstudios.com
 * Created:         2024-05-16
-* Changed:         2024-05-30
+* Changed:         2025-12-21
 *
 * */
 
@@ -32,7 +32,7 @@ listener_id EventListener::getId() const
   return this->id;
 }
 
-void EventListener::setId(listener_id _id)
+void EventListener::setId(const listener_id _id)
 {
   this->id = _id;
 }
@@ -58,7 +58,7 @@ bool EventListener::unsubscribe(const Event &_event)
 
 void EventListener::_requestListenerId(const shared_ptr<Class> &_manager)
 {
-  shared_ptr<EventManager> manager = dynamic_pointer_cast<EventManager>(_manager);
+  const shared_ptr<EventManager> manager = dynamic_pointer_cast<EventManager>(_manager);
 
   if (this->id == 0)
   {
@@ -70,7 +70,7 @@ bool EventListener::_subscribe(const Event &_event, const event_action &_action)
 {
   bool subscribed{};
 
-  if (shared_ptr<EventManager> manager = dynamic_pointer_cast<EventManager>(_event.getManager()); !manager->holdsListenerForEvent(this->id, _event))
+  if (const shared_ptr<EventManager> manager = dynamic_pointer_cast<EventManager>(_event.getManager()); !manager->holdsListenerForEvent(this->id, _event))
   {
     manager->subscribeListenerForEvent(shared_from_this(), _event, _action);
     subscribed = manager->holdsListenerForEvent(this->id, _event);
@@ -83,7 +83,7 @@ bool EventListener::_unsubscribe(const Event &_event)
 {
   bool unsubscribed{};
 
-  if (shared_ptr<EventManager> manager = dynamic_pointer_cast<EventManager>(_event.getManager()); manager->holdsListenerForEvent(this->id, _event))
+  if (const shared_ptr<EventManager> manager = dynamic_pointer_cast<EventManager>(_event.getManager()); manager->holdsListenerForEvent(this->id, _event))
   {
     manager->unsubscribeListenerForEvent(shared_from_this(), _event);
     unsubscribed = !manager->holdsListenerForEvent(this->id, _event);

+ 7 - 7
source/ls-std/event/EventManager.cpp

@@ -3,7 +3,7 @@
 * Company:         Lynar Studios
 * E-Mail:          webmaster@lynarstudios.com
 * Created:         2024-05-16
-* Changed:         2024-05-30
+* Changed:         2025-12-21
 *
 * */
 
@@ -34,7 +34,7 @@ listener_id EventManager::getNextProvisionId() const
   return this->provisionId;
 }
 
-bool EventManager::holdsListenerForEvent(listener_id _id, const Event &_event)
+bool EventManager::holdsListenerForEvent(const listener_id _id, const Event &_event)
 {
   bool holdsListener{};
 
@@ -73,13 +73,13 @@ void EventManager::invoke(const Event &_event, const EventParameter &_parameter)
   }
 
   const auto &listeners = this->inventory[_event.getClassName()];
-  EventManager::_giveListenersParameter(listeners, _parameter);
-  EventManager::_notifyListeners(listeners);
+  _giveListenersParameter(listeners, _parameter);
+  _notifyListeners(listeners);
 }
 
 listener_id EventManager::requestListenerId()
 {
-  listener_id providedId = this->provisionId;
+  const listener_id providedId = this->provisionId;
   ++this->provisionId;
 
   return providedId;
@@ -92,7 +92,7 @@ void EventManager::subscribeListenerForEvent(shared_ptr<EventListener> _listener
     this->inventory[_event.getClassName()] = {};
   }
 
-  auto inventoryEntry = make_pair<shared_ptr<EventListener>, event_action>(::move(_listener), ::move(_action));
+  const auto inventoryEntry = make_pair<shared_ptr<EventListener>, event_action>(::move(_listener), ::move(_action));
   this->inventory[_event.getClassName()].push_back(inventoryEntry);
 }
 
@@ -100,7 +100,7 @@ void EventManager::unsubscribeListenerForEvent(const shared_ptr<EventListener> &
 {
   if (this->_observesEvent(_event))
   {
-    for (auto iterator = this->inventory[_event.getClassName()].begin(); iterator != this->inventory[_event.getClassName()].end(); iterator++)
+    for (auto iterator = this->inventory[_event.getClassName()].begin(); iterator != this->inventory[_event.getClassName()].end(); ++iterator)
     {
       if (iterator->first->getId() == _listener->getId())
       {

+ 52 - 50
source/ls-std/io/File.cpp

@@ -3,7 +3,7 @@
  * Company:         Lynar Studios
  * E-Mail:          webmaster@lynarstudios.com
  * Created:         2020-08-15
- * Changed:         2023-05-16
+ * Changed:         2025-12-21
  *
  * */
 
@@ -46,29 +46,30 @@ using std::remove;
 using std::remove_if;
 using std::rename;
 using std::replace;
+using std::streamoff;
 using std::streampos;
 using std::string;
 using std::stringstream;
 using std::vector;
 
-File::File(string _absoluteFilePath) : Class("File"), absoluteFilePath(File::_normalizePath(::move(_absoluteFilePath)))
+File::File(string _absoluteFilePath) : Class("File"), absoluteFilePath(_normalizePath(::move(_absoluteFilePath)))
 {}
 
 File::~File() noexcept = default;
 
 bool File::operator==(const File &_file) const
 {
-  return File::_equals(*this, _file);
+  return _equals(*this, _file);
 }
 
 bool File::operator!=(const File &_file) const
 {
-  return !File::_equals(*this, _file);
+  return !_equals(*this, _file);
 }
 
 bool File::canExecute() const
 {
-  return File::_isExecutable(this->absoluteFilePath);
+  return _isExecutable(this->absoluteFilePath);
 }
 
 bool File::canRead() const
@@ -76,7 +77,7 @@ bool File::canRead() const
   bool readable{};
 
 #if defined(unix) || defined(__APPLE__)
-  readable = File::_isReadableUnix(this->absoluteFilePath);
+  readable = _isReadableUnix(this->absoluteFilePath);
 #endif
 #ifdef _WIN32
   readable = File::_isReadableWindows(this->absoluteFilePath);
@@ -87,12 +88,12 @@ bool File::canRead() const
 
 bool File::canWrite() const
 {
-  return File::_isWritable(this->absoluteFilePath);
+  return _isWritable(this->absoluteFilePath);
 }
 
 void File::createNewFile() const
 {
-  if (!File::_exists(this->absoluteFilePath))
+  if (!_exists(this->absoluteFilePath))
   {
     ofstream file{this->absoluteFilePath};
     file.close();
@@ -105,7 +106,7 @@ void File::createNewFile() const
 
 bool File::exists() const
 {
-  return File::_exists(this->absoluteFilePath);
+  return _exists(this->absoluteFilePath);
 }
 
 string File::getAbsoluteFilePath() const
@@ -119,20 +120,20 @@ string File::getName() const
 
   // if it's a directory, remove separator from end, if it does exist
 
-  if (File::_isDirectory(this->absoluteFilePath))
+  if (_isDirectory(this->absoluteFilePath))
   {
     copy.erase(remove_if(copy.end() - 1, copy.end(), FilePathSeparatorMatch()), copy.end());
   }
 
   // now get the file / directory name
 
-  auto base = find_if(copy.rbegin(), copy.rend(), FilePathSeparatorMatch()).base();
+  const auto base = find_if(copy.rbegin(), copy.rend(), FilePathSeparatorMatch()).base();
   return string{base, copy.end()};
 }
 
 string File::getParent() const
 {
-  return File::_getParent(this->absoluteFilePath);
+  return _getParent(this->absoluteFilePath);
 }
 
 string File::getWorkingDirectory()
@@ -140,7 +141,7 @@ string File::getWorkingDirectory()
   string workingDirectory{};
 
 #if defined(unix) || defined(__APPLE__)
-  workingDirectory = File::_getWorkingDirectoryUnix();
+  workingDirectory = _getWorkingDirectoryUnix();
 #endif
 #ifdef _WIN32
   workingDirectory = File::_getWorkingDirectoryWindows();
@@ -149,11 +150,11 @@ string File::getWorkingDirectory()
   return workingDirectory;
 }
 
-long File::getSize() const
+size_t File::getSize() const
 {
   streampos fileSize{};
 
-  if (File::_exists(this->absoluteFilePath))
+  if (_exists(this->absoluteFilePath))
   {
     ifstream fileHandler{this->absoluteFilePath, ios::in};
     fileSize = fileHandler.tellg();
@@ -162,31 +163,32 @@ long File::getSize() const
     fileHandler.close();
   }
 
-  return (long) fileSize;
+  const auto off = static_cast<streamoff>(fileSize);
+  return static_cast<size_t>(off); // not redundant ;)
 }
 
 bool File::isDirectory() const
 {
-  return File::_isDirectory(this->absoluteFilePath);
+  return _isDirectory(this->absoluteFilePath);
 }
 
 bool File::isFile() const
 {
-  return File::_isFile(this->absoluteFilePath);
+  return _isFile(this->absoluteFilePath);
 }
 
 time_t File::lastModified() const
 {
-  return File::_lastModified(this->absoluteFilePath);
+  return _lastModified(this->absoluteFilePath);
 }
 
 ::list<string> File::list() const
 {
   ::list<string> fileList{};
 
-  if (File::_isDirectory(this->absoluteFilePath))
+  if (_isDirectory(this->absoluteFilePath))
   {
-    fileList = File::_list(this->absoluteFilePath);
+    fileList = _list(this->absoluteFilePath);
   }
 
   return fileList;
@@ -196,9 +198,9 @@ time_t File::lastModified() const
 {
   ::list<string> fileList{};
 
-  if (File::_isDirectory(this->absoluteFilePath))
+  if (_isDirectory(this->absoluteFilePath))
   {
-    fileList = File::_listFiles(this->absoluteFilePath);
+    fileList = _listFiles(this->absoluteFilePath);
   }
 
   return fileList;
@@ -206,7 +208,7 @@ time_t File::lastModified() const
 
 void File::makeDirectory() const
 {
-  if (!File::_makeDirectory(this->absoluteFilePath))
+  if (!_makeDirectory(this->absoluteFilePath))
   {
     throw FileOperationException{R"lit(directory ")lit" + this->absoluteFilePath + R"lit(" could not be created!)lit"};
   }
@@ -214,7 +216,7 @@ void File::makeDirectory() const
 
 void File::makeDirectories() const
 {
-  vector<string> subDirectories = File::_splitIntoSubDirectoryNames(this->absoluteFilePath);
+  const vector<string> subDirectories = _splitIntoSubDirectoryNames(this->absoluteFilePath);
   const char separator = FilePathSeparator::get();
   string currentHierarchy{};
 
@@ -222,7 +224,7 @@ void File::makeDirectories() const
   {
     currentHierarchy += subDirectory;
 
-    if (!File::_exists(currentHierarchy + separator) && !currentHierarchy.empty() && !File::_makeDirectory(currentHierarchy))
+    if (!_exists(currentHierarchy + separator) && !currentHierarchy.empty() && !_makeDirectory(currentHierarchy))
     {
       throw FileOperationException{"operation: create directory"};
     }
@@ -233,20 +235,20 @@ void File::makeDirectories() const
 
 void File::remove() const
 {
-  if (File::_isFile(this->absoluteFilePath))
+  if (_isFile(this->absoluteFilePath))
   {
     ::remove(this->absoluteFilePath.c_str());
   }
 
-  if (File::_isDirectory(this->absoluteFilePath))
+  if (_isDirectory(this->absoluteFilePath))
   {
-    File::_remove(this->absoluteFilePath);
+    _remove(this->absoluteFilePath);
   }
 }
 
 bool File::renameTo(const string &_newName)
 {
-  bool renamed = File::_renameTo(this->absoluteFilePath, _newName);
+  const bool renamed = _renameTo(this->absoluteFilePath, _newName);
 
   if (renamed)
   {
@@ -258,7 +260,7 @@ bool File::renameTo(const string &_newName)
 
 void File::reset(const string &_newPath)
 {
-  this->absoluteFilePath = File::_normalizePath(_newPath);
+  this->absoluteFilePath = _normalizePath(_newPath);
 }
 
 #ifdef _WIN32
@@ -285,7 +287,7 @@ void File::_addToFileListWindows(const string &_path, bool _withDirectories, WIN
 
 #if defined(unix) || defined(__APPLE__)
 
-void File::_addToFileListUnix(const string &_path, bool _withDirectories, const dirent *directoryEntity, ::list<string> &_list)
+void File::_addToFileListUnix(const string &_path, const bool _withDirectories, const dirent *directoryEntity, ::list<string> &_list)
 {
   const char separator = FilePathSeparator::get();
   string absolutePath = _path + separator + directoryEntity->d_name;
@@ -296,7 +298,7 @@ void File::_addToFileListUnix(const string &_path, bool _withDirectories, const
   }
   else
   {
-    if (File::_isFile(absolutePath))
+    if (_isFile(absolutePath))
     {
       _list.emplace_back(absolutePath);
     }
@@ -383,7 +385,7 @@ bool File::_isDirectory(const string &_path)
 
   if (struct stat _stat{}; stat(_path.c_str(), &_stat) == 0)
   {
-    match = _stat.st_mode & (unsigned short) S_IFDIR;
+    match = _stat.st_mode & static_cast<unsigned short>(S_IFDIR);
   }
 
   return match;
@@ -393,7 +395,7 @@ bool File::_isExecutable(const string &_path)
 {
   bool executable{};
 
-  if (File::_exists(_path))
+  if (_exists(_path))
   {
     struct stat _stat
     {
@@ -401,7 +403,7 @@ bool File::_isExecutable(const string &_path)
 
     if (stat(_path.c_str(), &_stat) == 0)
     {
-      executable = (_stat.st_mode & (unsigned short) S_IEXEC) != 0;
+      executable = (_stat.st_mode & static_cast<unsigned short>(S_IEXEC)) != 0;
     }
   }
 
@@ -414,7 +416,7 @@ bool File::_isFile(const string &_path)
 
   if (struct stat _stat{}; stat(_path.c_str(), &_stat) == 0)
   {
-    match = _stat.st_mode & (unsigned) S_IFREG;
+    match = _stat.st_mode & static_cast<unsigned>(S_IFREG);
   }
 
   return match;
@@ -426,7 +428,7 @@ bool File::_isReadableUnix(const string &_path)
 {
   bool readable{};
 
-  if (File::_exists(_path))
+  if (_exists(_path))
   {
     struct stat _stat
     {
@@ -434,7 +436,7 @@ bool File::_isReadableUnix(const string &_path)
 
     if (stat(_path.c_str(), &_stat) == 0)
     {
-      readable = (_stat.st_mode & (unsigned) S_IREAD) != 0;
+      readable = (_stat.st_mode & static_cast<unsigned>(S_IREAD)) != 0;
     }
   }
   else
@@ -473,7 +475,7 @@ bool File::_isWritable(const string &_path)
 {
   bool writable{};
 
-  if (File::_exists(_path))
+  if (_exists(_path))
   {
     struct stat _stat
     {
@@ -481,7 +483,7 @@ bool File::_isWritable(const string &_path)
 
     if (stat(_path.c_str(), &_stat) == 0)
     {
-      writable = (_stat.st_mode & (unsigned) S_IWRITE) != 0;
+      writable = (_stat.st_mode & static_cast<unsigned>(S_IWRITE)) != 0;
     }
   }
 
@@ -505,7 +507,7 @@ time_t File::_lastModified(const string &_path)
   ::list<string> filesInDirectory{};
 
 #if defined(unix) || defined(__APPLE__)
-  filesInDirectory = File::_listUnix(_path, true);
+  filesInDirectory = _listUnix(_path, true);
 #endif
 #ifdef _WIN32
   filesInDirectory = File::_listWindows(_path, true);
@@ -519,7 +521,7 @@ time_t File::_lastModified(const string &_path)
   ::list<string> filesInDirectory{};
 
 #if defined(unix) || defined(__APPLE__)
-  filesInDirectory = File::_listUnix(_path, false);
+  filesInDirectory = _listUnix(_path, false);
 #endif
 #ifdef _WIN32
   filesInDirectory = File::_listWindows(_path, false);
@@ -530,16 +532,16 @@ time_t File::_lastModified(const string &_path)
 
 #if defined(unix) || defined(__APPLE__)
 
-::list<string> File::_listUnix(const string &_path, bool withDirectories)
+::list<string> File::_listUnix(const string &_path, const bool withDirectories)
 {
   ::list<string> filesInDirectory{};
   DIR *directory = opendir(_path.c_str());
-  const struct dirent *directoryEntity;
+  const dirent *directoryEntity;
   string absolutePath{};
 
   while ((directoryEntity = readdir(directory)) != nullptr)
   {
-    File::_addToFileListUnix(_path, withDirectories, directoryEntity, filesInDirectory);
+    _addToFileListUnix(_path, withDirectories, directoryEntity, filesInDirectory);
   }
 
   closedir(directory);
@@ -589,8 +591,8 @@ bool File::_makeDirectory(const string &_path)
 
 string File::_normalizePath(string _path)
 {
-  _path = File::_replaceWrongSeparator(_path);
-  _path = File::_reduceSeparators(_path);
+  _path = _replaceWrongSeparator(_path);
+  _path = _reduceSeparators(_path);
 
   return _path;
 }
@@ -599,7 +601,7 @@ string File::_reduceSeparators(const string &_path)
 {
   static const char separator = {FilePathSeparator::get()};
   string normalizedPath{};
-  int index{};
+  size_t index{};
 
   while (index < _path.size())
   {
@@ -625,7 +627,7 @@ string File::_reduceSeparators(const string &_path)
 void File::_remove(const string &_path)
 {
 #if defined(unix) || defined(__APPLE__)
-  File::_removeUnix(_path);
+  _removeUnix(_path);
 #endif
 #ifdef _WIN32
   File::_removeWindows(_path);

+ 2 - 2
source/ls-std/io/FileOutputStream.cpp

@@ -3,7 +3,7 @@
  * Company:         Lynar Studios
  * E-Mail:          webmaster@lynarstudios.com
  * Created:         2020-08-20
- * Changed:         2023-05-16
+ * Changed:         2025-12-21
  *
  * */
 
@@ -29,7 +29,7 @@ FileOutputStream::FileOutputStream(const File &_file) : Class("FileOutputStream"
   this->_init();
 }
 
-FileOutputStream::FileOutputStream(const File &_file, bool _append) : Class("FileOutputStream"), append(_append), file(_file)
+FileOutputStream::FileOutputStream(const File &_file, const bool _append) : Class("FileOutputStream"), append(_append), file(_file)
 {
   this->_init();
 }

+ 2 - 2
source/ls-std/io/FilePathSeparatorMatch.cpp

@@ -3,7 +3,7 @@
 * Company:         Lynar Studios
 * E-Mail:          webmaster@lynarstudios.com
 * Created:         2023-02-05
-* Changed:         2023-02-23
+* Changed:         2025-12-21
 *
 * */
 
@@ -17,7 +17,7 @@ FilePathSeparatorMatch::FilePathSeparatorMatch() = default;
 
 FilePathSeparatorMatch::~FilePathSeparatorMatch() = default;
 
-bool FilePathSeparatorMatch::operator()(char _char) const
+bool FilePathSeparatorMatch::operator()(const char _char) const
 {
   return _char == FilePathSeparator::getWindowsFilePathSeparator() || _char == FilePathSeparator::getUnixFilePathSeparator();
 }

+ 14 - 3
source/ls-std/io/FileReader.cpp

@@ -3,14 +3,16 @@
  * Company:         Lynar Studios
  * E-Mail:          webmaster@lynarstudios.com
  * Created:         2020-08-17
- * Changed:         2023-05-16
+ * Changed:         2025-12-21
  *
  * */
 
 #include <fstream>
+#include <limits>
 #include <ls-std/core/exception/FileOperationException.hpp>
 #include <ls-std/io/FileReader.hpp>
 #include <ls-std/io/evaluator/FileExistenceEvaluator.hpp>
+#include <stdexcept>
 
 using ls::std::core::Class;
 using ls::std::core::FileOperationException;
@@ -20,6 +22,9 @@ using ls::std::io::File;
 using ls::std::io::FileExistenceEvaluator;
 using ls::std::io::FileReader;
 using std::ifstream;
+using std::numeric_limits;
+using std::overflow_error;
+using std::streamsize;
 using std::string;
 
 FileReader::FileReader(const File &_file) : Class("FileReader"), file(_file)
@@ -32,9 +37,15 @@ FileReader::~FileReader() noexcept = default;
 byte_field FileReader::read()
 {
   ifstream inputStream{this->file.getAbsoluteFilePath(), ifstream::binary};
-  auto length = (int) this->file.getSize();
+  const auto length = this->file.getSize();
   auto data = string(length, 'x');
-  inputStream.read(data.data(), length);
+
+  if (length > static_cast<size_t>(numeric_limits<streamsize>::max()))
+  {
+    throw overflow_error("file size too large to read");
+  }
+
+  inputStream.read(data.data(), static_cast<streamsize>(length));
 
   if (inputStream.fail())
   {

+ 2 - 2
source/ls-std/io/NewLine.cpp

@@ -3,7 +3,7 @@
 * Company:         Lynar Studios
 * E-Mail:          webmaster@lynarstudios.com
 * Created:         2023-02-04
-* Changed:         2023-02-23
+* Changed:         2025-12-21
 *
 * */
 
@@ -21,7 +21,7 @@ string NewLine::get()
   string newLine{};
 
 #if defined(unix) || defined(__APPLE__)
-  newLine = NewLine::getUnixNewLine();
+  newLine = getUnixNewLine();
 #endif
 #ifdef _WIN32
   newLine = NewLine::getWindowsNewLine();

+ 2 - 2
source/ls-std/io/evaluator/FileExistenceEvaluator.cpp

@@ -3,7 +3,7 @@
 * Company:         Lynar Studios
 * E-Mail:          webmaster@lynarstudios.com
 * Created:         2023-02-21
-* Changed:         2023-02-23
+* Changed:         2025-12-21
 *
 * */
 
@@ -28,7 +28,7 @@ void FileExistenceEvaluator::evaluate()
 {
   if (!File{this->filePath}.exists())
   {
-    string message = "\"" + this->filePath + "\" does not exist!";
+    const string message = "\"" + this->filePath + "\" does not exist!";
     throw FileNotFoundException{message};
   }
 }

+ 2 - 2
source/ls-std/io/logging/LogLevel.cpp

@@ -3,7 +3,7 @@
  * Company:         Lynar Studios
  * E-Mail:          webmaster@lynarstudios.com
  * Created:         2020-08-20
- * Changed:         2023-05-19
+ * Changed:         2025-12-21
  *
  * */
 
@@ -108,7 +108,7 @@ void LogLevel::_init()
   this->level.try_emplace(LogLevelValue::TRACE, "TRACE");
 }
 
-bool LogLevel::_isValidLogLevelString(string_view _value) const
+bool LogLevel::_isValidLogLevelString(const string_view _value) const
 {
   bool isValidString{};
 

+ 13 - 14
source/ls-std/io/logging/Logger.cpp

@@ -3,11 +3,10 @@
  * Company:         Lynar Studios
  * E-Mail:          webmaster@lynarstudios.com
  * Created:         2020-08-20
- * Changed:         2023-05-24
+ * Changed:         2025-12-21
  *
  * */
 
-#include <ctime>
 #include <iomanip>
 #include <ls-std/core/evaluator/NullPointerArgumentEvaluator.hpp>
 #include <ls-std/io/NewLine.hpp>
@@ -122,7 +121,7 @@ void Logger::_assignWriter(const shared_ptr<IWriter> &_writer)
   this->writer = _writer;
 }
 
-string Logger::_buildCharacterChain(size_t _amount)
+string Logger::_buildCharacterChain(const size_t _amount)
 {
   string fillContent{};
 
@@ -134,15 +133,15 @@ string Logger::_buildCharacterChain(size_t _amount)
   return fillContent;
 }
 
-string Logger::_createFillContent(string_view _text)
+string Logger::_createFillContent(const string_view _text)
 {
-  size_t padSize = 10;
-  size_t fillSize = _text.size() > padSize ? 0 : padSize - _text.size();
+  constexpr size_t padSize = 10;
+  const size_t fillSize = _text.size() > padSize ? 0 : padSize - _text.size();
   string fillContent{};
 
   if (fillSize > 0)
   {
-    fillContent = Logger::_buildCharacterChain(fillSize);
+    fillContent = _buildCharacterChain(fillSize);
   }
 
   return fillContent;
@@ -162,7 +161,7 @@ string Logger::_getLogLevelString(const LogLevel &_logLevel) const
 
   if (this->displayLogLevel)
   {
-    logLevelString = Logger::_padRight(string{_logLevel.toString() + ":"});
+    logLevelString = _padRight(string{_logLevel.toString() + ":"});
   }
 
   return logLevelString;
@@ -171,7 +170,7 @@ string Logger::_getLogLevelString(const LogLevel &_logLevel) const
 string Logger::_getTimestampString() const
 {
   time_t timestamp = ::time(nullptr);
-  struct tm localTime
+  tm localTime
   {
   };
 #if defined(unix) || defined(__APPLE__)
@@ -184,7 +183,7 @@ string Logger::_getTimestampString() const
 
   if (this->displayTimestamp)
   {
-    timestampString = "[" + Logger::_generateTimeString(&localTime) + "] ";
+    timestampString = "[" + _generateTimeString(&localTime) + "] ";
   }
 
   return timestampString;
@@ -192,13 +191,13 @@ string Logger::_getTimestampString() const
 
 void Logger::_log(const byte_type *_data, const LogLevel &_logLevel) const
 {
-  string logLevelString = this->_getLogLevelString(_logLevel);
-  string timestampString = this->_getTimestampString();
-  string message = timestampString + logLevelString + string(_data) + NewLine::getUnixNewLine();
+  const string logLevelString = this->_getLogLevelString(_logLevel);
+  const string timestampString = this->_getTimestampString();
+  const string message = timestampString + logLevelString + string(_data) + NewLine::getUnixNewLine();
   this->writer->write(message);
 }
 
 string Logger::_padRight(const string &_text)
 {
-  return _text + Logger::_createFillContent(_text);
+  return _text + _createFillContent(_text);
 }

+ 2 - 2
source/ls-std/io/section-pair/evaluator/SectionPairIdentifierArgumentEvaluator.cpp

@@ -3,7 +3,7 @@
 * Company:         Lynar Studios
 * E-Mail:          webmaster@lynarstudios.com
 * Created:         2023-02-09
-* Changed:         2023-02-23
+* Changed:         2025-12-21
 *
 * */
 
@@ -31,7 +31,7 @@ void SectionPairIdentifierArgumentEvaluator::evaluate()
 {
   if (!SectionPairIdentifierValidator{this->identifier}.isValid())
   {
-    string message = "\"" + this->identifier + "\" is not a valid identifier!";
+    const string message = "\"" + this->identifier + "\" is not a valid identifier!";
     throw IllegalArgumentException{SectionPairMessageFormatter::getFormattedMessage(message)};
   }
 }

+ 2 - 2
source/ls-std/io/section-pair/evaluator/SectionPairRowArgumentEvaluator.cpp

@@ -3,7 +3,7 @@
 * Company:         Lynar Studios
 * E-Mail:          webmaster@lynarstudios.com
 * Created:         2023-02-20
-* Changed:         2023-02-23
+* Changed:         2025-12-21
 *
 * */
 
@@ -30,7 +30,7 @@ void SectionPairRowArgumentEvaluator::evaluate()
 {
   if (!SectionPairRowValidator{this->sectionPairRow}.isValid())
   {
-    string message = "\"" + this->sectionPairRow + "\" is not a valid section pair row!";
+    const string message = "\"" + this->sectionPairRow + "\" is not a valid section pair row!";
     throw IllegalArgumentException{SectionPairMessageFormatter::getFormattedMessage(message)};
   }
 }

+ 2 - 2
source/ls-std/io/section-pair/evaluator/SectionPairRowListValueArgumentEvaluator.cpp

@@ -3,7 +3,7 @@
 * Company:         Lynar Studios
 * E-Mail:          webmaster@lynarstudios.com
 * Created:         2023-02-20
-* Changed:         2023-02-23
+* Changed:         2025-12-21
 *
 * */
 
@@ -29,7 +29,7 @@ void SectionPairRowListValueArgumentEvaluator::evaluate()
 {
   if (!SectionPairRowListValueValidator{this->listValueRow}.isValid())
   {
-    string message = "\"" + this->listValueRow + "\" is not a valid section pair list value row!";
+    const string message = "\"" + this->listValueRow + "\" is not a valid section pair list value row!";
     throw IllegalArgumentException{SectionPairMessageFormatter::getFormattedMessage(message)};
   }
 }

+ 2 - 2
source/ls-std/io/section-pair/evaluator/SectionPairRowSingleValueArgumentEvaluator.cpp

@@ -3,7 +3,7 @@
 * Company:         Lynar Studios
 * E-Mail:          webmaster@lynarstudios.com
 * Created:         2023-02-19
-* Changed:         2023-02-23
+* Changed:         2025-12-21
 *
 * */
 
@@ -29,7 +29,7 @@ void SectionPairRowSingleValueArgumentEvaluator::evaluate()
 {
   if (!SectionPairRowSingleValueValidator{this->singleValueRow}.isValid())
   {
-    string message = "\"" + this->singleValueRow + "\" is not a valid section pair single value row!";
+    const string message = "\"" + this->singleValueRow + "\" is not a valid section pair single value row!";
     throw IllegalArgumentException{SectionPairMessageFormatter::getFormattedMessage(message)};
   }
 }

+ 2 - 2
source/ls-std/io/section-pair/evaluator/SectionPairSectionArgumentEvaluator.cpp

@@ -3,7 +3,7 @@
 * Company:         Lynar Studios
 * E-Mail:          webmaster@lynarstudios.com
 * Created:         2023-02-20
-* Changed:         2023-02-23
+* Changed:         2025-12-21
 *
 * */
 
@@ -29,7 +29,7 @@ void SectionPairSectionArgumentEvaluator::evaluate()
 {
   if (!SectionPairSectionValidator{this->section}.isValid())
   {
-    string message = "\"" + this->section + "\" is not a valid section!";
+    const string message = "\"" + this->section + "\" is not a valid section!";
     throw IllegalArgumentException{SectionPairMessageFormatter::getFormattedMessage(message)};
   }
 }

+ 2 - 2
source/ls-std/io/section-pair/evaluator/SectionPairValueArgumentEvaluator.cpp

@@ -3,7 +3,7 @@
 * Company:         Lynar Studios
 * E-Mail:          webmaster@lynarstudios.com
 * Created:         2023-02-10
-* Changed:         2023-02-23
+* Changed:         2025-12-21
 *
 * */
 
@@ -30,7 +30,7 @@ void SectionPairValueArgumentEvaluator::evaluate()
 {
   if (!SectionPairValueValidator(this->value).isValid())
   {
-    string message = "\"" + this->value + "\" is not a valid value!";
+    const string message = "\"" + this->value + "\" is not a valid value!";
     throw IllegalArgumentException{SectionPairMessageFormatter::getFormattedMessage(message)};
   }
 }

+ 5 - 5
source/ls-std/io/section-pair/model/SectionPairDocument.cpp

@@ -3,7 +3,7 @@
 * Company:         Lynar Studios
 * E-Mail:          webmaster@lynarstudios.com
 * Created:         2023-02-15
-* Changed:         2023-05-16
+* Changed:         2025-12-21
 *
 * */
 
@@ -42,7 +42,7 @@ SectionPairDocument::~SectionPairDocument() noexcept = default;
 
 void SectionPairDocument::add(const section_pair_document_section_list_element &_section)
 {
-  string message = this->getClassName() + ": add section attempt failed, since \"_section\" argument is null!";
+  const string message = this->getClassName() + ": add section attempt failed, since \"_section\" argument is null!";
   NullPointerArgumentEvaluator(reinterpret_pointer_cast<void>(_section), message).evaluate();
   this->_checkSectionExistence(_section->getSectionId());
   this->sections.push_back(_section);
@@ -53,7 +53,7 @@ void SectionPairDocument::clear()
   this->sections.clear();
 }
 
-section_pair_document_section_list_element SectionPairDocument::get(size_t _index) const
+section_pair_document_section_list_element SectionPairDocument::get(const size_t _index) const
 {
   section_pair_document_section_list_element element{};
   IndexOutOfBoundsEvaluator{_index, this->sections.size()}.evaluate();
@@ -104,7 +104,7 @@ byte_field SectionPairDocument::marshal()
   return this->serializable->marshal();
 }
 
-void SectionPairDocument::reserveNewLine(string_view _reservedNewLine)
+void SectionPairDocument::reserveNewLine(const string_view _reservedNewLine)
 {
   this->reservedNewLine = _reservedNewLine;
 }
@@ -119,7 +119,7 @@ void SectionPairDocument::_checkSectionExistence(const section_pair_identifier &
 {
   if (this->_hasSection(_sectionId))
   {
-    string message = this->getClassName() + "section ID \"" + _sectionId + "\" already exists in document!";
+    const string message = this->getClassName() + "section ID \"" + _sectionId + "\" already exists in document!";
     throw IllegalArgumentException{SectionPairMessageFormatter::getFormattedMessage(message)};
   }
 }

+ 2 - 2
source/ls-std/io/section-pair/model/SectionPairRow.cpp

@@ -3,7 +3,7 @@
 * Company:         Lynar Studios
 * E-Mail:          webmaster@lynarstudios.com
 * Created:         2023-02-08
-* Changed:         2023-05-18
+* Changed:         2025-12-21
 *
 * */
 
@@ -70,7 +70,7 @@ byte_field SectionPairRow::marshal()
   return this->serializable->marshal();
 }
 
-void SectionPairRow::reserveNewLine(string_view _reservedNewLine)
+void SectionPairRow::reserveNewLine(const string_view _reservedNewLine)
 {
   this->reservedNewLine = _reservedNewLine;
 }

+ 2 - 2
source/ls-std/io/section-pair/model/SectionPairRowListValue.cpp

@@ -3,7 +3,7 @@
 * Company:         Lynar Studios
 * E-Mail:          webmaster@lynarstudios.com
 * Created:         2023-02-10
-* Changed:         2023-05-22
+* Changed:         2025-12-21
 *
 * */
 
@@ -46,7 +46,7 @@ void SectionPairRowListValue::clear()
   this->values.clear();
 }
 
-section_pair_row_value SectionPairRowListValue::get(size_t _index) const
+section_pair_row_value SectionPairRowListValue::get(const size_t _index) const
 {
   IndexOutOfBoundsEvaluator(_index, this->values.size()).evaluate();
   section_pair_row_value value{};

+ 2 - 2
source/ls-std/io/section-pair/model/SectionPairRowSingleValue.cpp

@@ -3,7 +3,7 @@
 * Company:         Lynar Studios
 * E-Mail:          webmaster@lynarstudios.com
 * Created:         2023-02-10
-* Changed:         2023-05-22
+* Changed:         2025-12-21
 *
 * */
 
@@ -79,7 +79,7 @@ void SectionPairRowSingleValue::_set(const section_pair_row_value &_value)
 {
   EmptyStringArgumentEvaluator{_value}.evaluate();
   SectionPairValueArgumentEvaluator(_value).evaluate();
-  string newLine = this->_getReservedNewLine().empty() ? NewLine::get() : this->_getReservedNewLine();
+  const string newLine = this->_getReservedNewLine().empty() ? NewLine::get() : this->_getReservedNewLine();
   this->value = _value;
 
   if (this->value.find(newLine) != string::npos)

+ 5 - 3
source/ls-std/io/section-pair/model/SectionPairRowValue.cpp

@@ -3,13 +3,15 @@
 * Company:         Lynar Studios
 * E-Mail:          webmaster@lynarstudios.com
 * Created:         2023-02-10
-* Changed:         2023-05-22
+* Changed:         2025-12-21
 *
 * */
 
 #include <ls-std/io/section-pair/model/SectionPairRowValue.hpp>
+#include <ls-std/core/exception/NotImplementedException.hpp>
 
 using ls::std::core::type::byte_field;
+using ls::std::core::NotImplementedException;
 using ls::std::io::SectionPairRowEnumType;
 using ls::std::io::SectionPairRowValue;
 using std::string;
@@ -25,14 +27,14 @@ byte_field SectionPairRowValue::marshal()
   return byte_field{};
 }
 
-void SectionPairRowValue::reserveNewLine(string_view _reservedNewLine)
+void SectionPairRowValue::reserveNewLine(const string_view _reservedNewLine)
 {
   this->reservedNewLine = _reservedNewLine;
 }
 
 void SectionPairRowValue::unmarshal(const byte_field &_data)
 {
-  // since this class is abstract, these methods are not implemented
+  throw NotImplementedException("data (" + _data + ") not used!");
 }
 
 string SectionPairRowValue::_getReservedNewLine() const

+ 4 - 4
source/ls-std/io/section-pair/model/SectionPairSection.cpp

@@ -3,7 +3,7 @@
 * Company:         Lynar Studios
 * E-Mail:          webmaster@lynarstudios.com
 * Created:         2023-02-13
-* Changed:         2023-05-18
+* Changed:         2025-12-21
 *
 * */
 
@@ -59,7 +59,7 @@ void SectionPairSection::clear()
   this->rows.clear();
 }
 
-section_pair_row_list_element SectionPairSection::get(size_t _index) const
+section_pair_row_list_element SectionPairSection::get(const size_t _index) const
 {
   IndexOutOfBoundsEvaluator{_index, this->rows.size()}.evaluate();
   section_pair_row_list_element element{};
@@ -110,7 +110,7 @@ byte_field SectionPairSection::marshal()
   return this->serializable->marshal();
 }
 
-void SectionPairSection::reserveNewLine(string_view _reservedNewLine)
+void SectionPairSection::reserveNewLine(const string_view _reservedNewLine)
 {
   this->reservedNewLine = _reservedNewLine;
 }
@@ -154,7 +154,7 @@ void SectionPairSection::_rowExistenceCheck(const section_pair_identifier &_key)
 {
   if (this->_hasRow(_key))
   {
-    string message = this->getClassName() + ": row key \"" + _key + "\" already exists in section \"" + this->sectionId + "\"!";
+    const string message = this->getClassName() + ": row key \"" + _key + "\" already exists in section \"" + this->sectionId + "\"!";
     throw IllegalArgumentException{SectionPairMessageFormatter::getFormattedMessage(message)};
   }
 }

+ 2 - 2
source/ls-std/io/section-pair/reader/SectionPairFileReader.cpp

@@ -3,7 +3,7 @@
 * Company:         Lynar Studios
 * E-Mail:          webmaster@lynarstudios.com
 * Created:         2023-02-21
-* Changed:         2023-05-18
+* Changed:         2025-12-21
 *
 * */
 
@@ -60,7 +60,7 @@ void SectionPairFileReader::_checkFileExtension() const
 {
   if (!SectionPairFileExtensionValidator{this->parameter.getFilePath()}.isValid())
   {
-    string message = "\"" + this->parameter.getFilePath() + "\" does not have a valid section pair file extension (.txt or .sp)!";
+    const string message = "\"" + this->parameter.getFilePath() + "\" does not have a valid section pair file extension (.txt or .sp)!";
     throw IllegalArgumentException{message};
   }
 }

+ 2 - 2
source/ls-std/io/section-pair/reader/SectionPairFileReaderParameter.cpp

@@ -3,7 +3,7 @@
 * Company:         Lynar Studios
 * E-Mail:          webmaster@lynarstudios.com
 * Created:         2023-02-21
-* Changed:         2023-05-18
+* Changed:         2025-12-21
 *
 * */
 
@@ -51,7 +51,7 @@ void SectionPairFileReaderParameter::setFileExistenceEvaluator(const shared_ptr<
   this->fileExistenceEvaluator = _fileExistenceEvaluator;
 }
 
-void SectionPairFileReaderParameter::setFilePath(string_view _filePath)
+void SectionPairFileReaderParameter::setFilePath(const string_view _filePath)
 {
   this->filePath = _filePath;
 }

+ 12 - 12
source/ls-std/io/section-pair/serialization/SerializableSectionPairDocument.cpp

@@ -3,7 +3,7 @@
 * Company:         Lynar Studios
 * E-Mail:          webmaster@lynarstudios.com
 * Created:         2023-02-16
-* Changed:         2023-05-19
+* Changed:         2025-12-21
 *
 * */
 
@@ -27,7 +27,7 @@ using std::string_view;
 
 SerializableSectionPairDocument::SerializableSectionPairDocument(const SerializableSectionPairParameter &_parameter) : Class("SerializableSectionPairDocument"), parameter(_parameter)
 {
-  string message = this->getClassName() + ": model reference is null!";
+  const string message = this->getClassName() + ": model reference is null!";
   NullPointerArgumentEvaluator{_parameter.getValue(), message}.evaluate();
 }
 
@@ -40,8 +40,8 @@ shared_ptr<Class> SerializableSectionPairDocument::getValue() const
 
 byte_field SerializableSectionPairDocument::marshal()
 {
-  shared_ptr<SectionPairDocument> document = dynamic_pointer_cast<SectionPairDocument>(this->parameter.getValue());
-  string newLine = this->parameter.getNewLine();
+  const shared_ptr<SectionPairDocument> document = dynamic_pointer_cast<SectionPairDocument>(this->parameter.getValue());
+  const string newLine = this->parameter.getNewLine();
   byte_field serializedDocument = document->getHeader() + newLine;
 
   for (const auto &_section : document->getSectionList())
@@ -56,7 +56,7 @@ byte_field SerializableSectionPairDocument::marshal()
 void SerializableSectionPairDocument::unmarshal(const byte_field &_data)
 {
   byte_field serializedDocument = _data;
-  size_t headerSize = dynamic_pointer_cast<SectionPairDocument>(this->parameter.getValue())->getHeader().size() + this->parameter.getNewLine().size();
+  const size_t headerSize = dynamic_pointer_cast<SectionPairDocument>(this->parameter.getValue())->getHeader().size() + this->parameter.getNewLine().size();
   serializedDocument = serializedDocument.substr(headerSize);
   byte_field serializedSection{};
 
@@ -70,15 +70,15 @@ void SerializableSectionPairDocument::unmarshal(const byte_field &_data)
 
 void SerializableSectionPairDocument::_addSection(const byte_field &_serializedSection) const
 {
-  auto section = make_shared<SectionPairSection>("tmp-id");
+  const auto section = make_shared<SectionPairSection>("tmp-id");
   section->reserveNewLine(this->parameter.getNewLine());
   section->unmarshal(_serializedSection);
   dynamic_pointer_cast<SectionPairDocument>(this->parameter.getValue())->add(section);
 }
 
-byte_field SerializableSectionPairDocument::_getCurrentRow(size_t _iterations, string_view _serializedDocument) const
+byte_field SerializableSectionPairDocument::_getCurrentRow(const size_t _iterations, const string_view _serializedDocument) const
 {
-  string newLine = this->parameter.getNewLine();
+  const string newLine = this->parameter.getNewLine();
   string currentRow{};
 
   if (_iterations == 1 || _serializedDocument.find('[') != string::npos)
@@ -100,13 +100,13 @@ byte_field SerializableSectionPairDocument::_getNextSerializedSection(const byte
   size_t iterations{};
   byte_field serializedDocument = _serializedDocument;
   bool isNotNewSection{};
-  string newLine = this->parameter.getNewLine();
+  const string newLine = this->parameter.getNewLine();
 
   do
   {
     ++iterations;
     currentRow = this->_getCurrentRow(iterations, serializedDocument);
-    isNotNewSection = this->_isNotNewSection(currentRow) && !serializedDocument.empty() || iterations == 1;
+    isNotNewSection = (this->_isNotNewSection(currentRow) && !serializedDocument.empty()) || iterations == 1;
     serializedDocument = serializedDocument.substr(currentRow.size());
     serializedSection += currentRow;
   } while (isNotNewSection);
@@ -114,8 +114,8 @@ byte_field SerializableSectionPairDocument::_getNextSerializedSection(const byte
   return serializedDocument.empty() ? serializedSection : serializedSection.substr(0, serializedSection.size() - newLine.size());
 }
 
-bool SerializableSectionPairDocument::_isNotNewSection(string_view _currentRow) const
+bool SerializableSectionPairDocument::_isNotNewSection(const string_view _currentRow) const
 {
-  string newLine = this->parameter.getNewLine();
+  const string newLine = this->parameter.getNewLine();
   return _currentRow.find(newLine + newLine) == string::npos;
 }

+ 2 - 2
source/ls-std/io/section-pair/serialization/SerializableSectionPairParameter.cpp

@@ -3,7 +3,7 @@
 * Company:         Lynar Studios
 * E-Mail:          webmaster@lynarstudios.com
 * Created:         2023-02-17
-* Changed:         2023-05-18
+* Changed:         2025-12-21
 *
 * */
 
@@ -32,7 +32,7 @@ shared_ptr<Class> SerializableSectionPairParameter::getValue() const
   return this->value;
 }
 
-void SerializableSectionPairParameter::setNewLine(string_view _newLine)
+void SerializableSectionPairParameter::setNewLine(const string_view _newLine)
 {
   this->parseNewLine = _newLine;
 }

+ 12 - 13
source/ls-std/io/section-pair/serialization/SerializableSectionPairRow.cpp

@@ -3,7 +3,7 @@
 * Company:         Lynar Studios
 * E-Mail:          webmaster@lynarstudios.com
 * Created:         2023-02-11
-* Changed:         2023-05-18
+* Changed:         2025-12-21
 *
 * */
 
@@ -31,7 +31,7 @@ using std::string;
 
 SerializableSectionPairRow::SerializableSectionPairRow(const SerializableSectionPairParameter &_parameter) : Class("SerializableSectionPairRow"), parameter(_parameter)
 {
-  string message = this->getClassName() + ": model reference is null!";
+  const string message = this->getClassName() + ": model reference is null!";
   NullPointerArgumentEvaluator{_parameter.getValue(), message}.evaluate();
 }
 
@@ -44,15 +44,15 @@ shared_ptr<Class> SerializableSectionPairRow::getValue() const
 
 byte_field SerializableSectionPairRow::marshal()
 {
-  byte_field data = this->_marshalKey();
-  shared_ptr<SectionPairRow> row = dynamic_pointer_cast<SectionPairRow>(this->parameter.getValue());
+  const byte_field data = this->_marshalKey();
+  const shared_ptr<SectionPairRow> row = dynamic_pointer_cast<SectionPairRow>(this->parameter.getValue());
   row->getValue()->reserveNewLine(this->parameter.getNewLine());
   return data + row->getValue()->marshal();
 }
 
 void SerializableSectionPairRow::unmarshal(const byte_field &_data)
 {
-  shared_ptr<SectionPairRow> row = dynamic_pointer_cast<SectionPairRow>(this->parameter.getValue());
+  const shared_ptr<SectionPairRow> row = dynamic_pointer_cast<SectionPairRow>(this->parameter.getValue());
   row->getValue()->reserveNewLine(this->parameter.getNewLine());
 
   if (row->isSingleValue())
@@ -69,7 +69,7 @@ void SerializableSectionPairRow::unmarshal(const byte_field &_data)
 string SerializableSectionPairRow::_marshalKey() const
 {
   string serializedKey{};
-  shared_ptr<SectionPairRow> row = dynamic_pointer_cast<SectionPairRow>(this->parameter.getValue());
+  const shared_ptr<SectionPairRow> row = dynamic_pointer_cast<SectionPairRow>(this->parameter.getValue());
 
   if (row->isSingleValue())
   {
@@ -87,14 +87,14 @@ string SerializableSectionPairRow::_marshalKey() const
 void SerializableSectionPairRow::_unmarshalListValue(const byte_field &_data) const
 {
   SectionPairRowListValueArgumentEvaluator{_data}.evaluate();
-  string::size_type separatorPosition = _data.find(':');
-  string newLine = this->parameter.getNewLine();
+  const string::size_type separatorPosition = _data.find(':');
+  const string newLine = this->parameter.getNewLine();
 
   if (separatorPosition != string::npos)
   {
-    shared_ptr<SectionPairRow> row = dynamic_pointer_cast<SectionPairRow>(this->parameter.getValue());
+    const shared_ptr<SectionPairRow> row = dynamic_pointer_cast<SectionPairRow>(this->parameter.getValue());
     row->setKey(_data.substr(0, separatorPosition));
-    string::size_type newLinePosition = _data.find(newLine) + (newLine.size() - 1);
+    const string::size_type newLinePosition = _data.find(newLine) + (newLine.size() - 1);
     dynamic_pointer_cast<SectionPairRowListValue>(row->getValue())->unmarshal(_data.substr(newLinePosition + 1));
   }
 }
@@ -102,11 +102,10 @@ void SerializableSectionPairRow::_unmarshalListValue(const byte_field &_data) co
 void SerializableSectionPairRow::_unmarshalSingleValue(const byte_field &_data) const
 {
   SectionPairRowSingleValueArgumentEvaluator{_data}.evaluate();
-  string::size_type position = _data.find('=');
 
-  if (position != string::npos)
+  if (const string::size_type position = _data.find('='); position != string::npos)
   {
-    shared_ptr<SectionPairRow> row = dynamic_pointer_cast<SectionPairRow>(this->parameter.getValue());
+    const shared_ptr<SectionPairRow> row = dynamic_pointer_cast<SectionPairRow>(this->parameter.getValue());
     row->setKey(_data.substr(0, position));
     dynamic_pointer_cast<SectionPairRowSingleValue>(row->getValue())->unmarshal(_data.substr(position + 1));
   }

+ 7 - 7
source/ls-std/io/section-pair/serialization/SerializableSectionPairRowListValue.cpp

@@ -3,7 +3,7 @@
 * Company:         Lynar Studios
 * E-Mail:          webmaster@lynarstudios.com
 * Created:         2023-02-11
-* Changed:         2023-05-18
+* Changed:         2025-12-21
 *
 * */
 
@@ -32,7 +32,7 @@ using std::string_view;
 
 SerializableSectionPairRowListValue::SerializableSectionPairRowListValue(const SerializableSectionPairParameter &_parameter) : Class("SerializableSectionPairRowListValue"), parameter(_parameter)
 {
-  string message = this->getClassName() + ": model reference is null!";
+  const string message = this->getClassName() + ": model reference is null!";
   NullPointerArgumentEvaluator{_parameter.getValue(), message}.evaluate();
 }
 
@@ -53,19 +53,19 @@ void SerializableSectionPairRowListValue::unmarshal(const byte_field &_data)
 {
   EmptyStringArgumentEvaluator{_data}.evaluate();
   byte_field searchText = _data;
-  string newLine = this->parameter.getNewLine();
+  const string newLine = this->parameter.getNewLine();
 
   while (!searchText.empty() && searchText != newLine)
   {
-    string::size_type positionOfNewLine = searchText.find(newLine);
-    string line = SerializableSectionPairRowListValue::_getLine(positionOfNewLine, searchText);
+    const string::size_type positionOfNewLine = searchText.find(newLine);
+    string line = _getLine(positionOfNewLine, searchText);
     line = line.substr(2);
     dynamic_pointer_cast<SectionPairRowListValue>(this->getValue())->add(line);
     this->_updateSearchText(positionOfNewLine, searchText);
   }
 }
 
-string SerializableSectionPairRowListValue::_getLine(string::size_type _position, string_view _searchText)
+string SerializableSectionPairRowListValue::_getLine(const string::size_type _position, const string_view _searchText)
 {
   string line{};
 
@@ -81,7 +81,7 @@ string SerializableSectionPairRowListValue::_getLine(string::size_type _position
   return line;
 }
 
-void SerializableSectionPairRowListValue::_updateSearchText(string::size_type _position, byte_field &_searchText) const
+void SerializableSectionPairRowListValue::_updateSearchText(const string::size_type _position, byte_field &_searchText) const
 {
   if (_position != string::npos)
   {

+ 2 - 2
source/ls-std/io/section-pair/serialization/SerializableSectionPairRowSingleValue.cpp

@@ -3,7 +3,7 @@
 * Company:         Lynar Studios
 * E-Mail:          webmaster@lynarstudios.com
 * Created:         2023-02-11
-* Changed:         2023-05-18
+* Changed:         2025-12-21
 *
 * */
 
@@ -25,7 +25,7 @@ using std::string;
 
 SerializableSectionPairRowSingleValue::SerializableSectionPairRowSingleValue(const SerializableSectionPairParameter &_parameter) : Class("SerializableSectionPairRowSingleValue"), parameter(_parameter)
 {
-  string message = this->getClassName() + ": model reference is null!";
+  const string message = this->getClassName() + ": model reference is null!";
   NullPointerArgumentEvaluator{_parameter.getValue(), message}.evaluate();
 }
 

+ 22 - 22
source/ls-std/io/section-pair/serialization/SerializableSectionPairSection.cpp

@@ -3,7 +3,7 @@
 * Company:         Lynar Studios
 * E-Mail:          webmaster@lynarstudios.com
 * Created:         2023-02-14
-* Changed:         2023-05-19
+* Changed:         2025-12-21
 *
 * */
 
@@ -31,7 +31,7 @@ using std::string_view;
 
 SerializableSectionPairSection::SerializableSectionPairSection(const SerializableSectionPairParameter &_parameter) : Class("SerializableSectionPairSection"), parameter(_parameter)
 {
-  string message = this->getClassName() + ": model reference is null!";
+  const string message = this->getClassName() + ": model reference is null!";
   NullPointerArgumentEvaluator(_parameter.getValue(), message).evaluate();
 }
 
@@ -55,22 +55,22 @@ byte_field SerializableSectionPairSection::marshal()
 void SerializableSectionPairSection::unmarshal(const byte_field &_data)
 {
   SectionPairSectionArgumentEvaluator{_data}.evaluate();
-  size_t sectionHeaderSize = this->_unmarshalSectionHeader(_data);
+  const size_t sectionHeaderSize = this->_unmarshalSectionHeader(_data);
   this->_unmarshalRows(_data.substr(sectionHeaderSize));
 }
 
 byte_field SerializableSectionPairSection::_collectSectionRow(const byte_field &_currentRows, SectionPairRowEnumType &_type) const
 {
   string row{};
-  string newLine = this->parameter.getNewLine();
-  string firstRow = _currentRows.substr(0, _currentRows.find(newLine) + newLine.size());
+  const string newLine = this->parameter.getNewLine();
+  const string firstRow = _currentRows.substr(0, _currentRows.find(newLine) + newLine.size());
 
-  if (SerializableSectionPairSection::_isSingleValueRow(firstRow))
+  if (_isSingleValueRow(firstRow))
   {
-    row = SerializableSectionPairSection::_collectSectionSingleValueRow(firstRow, _type);
+    row = _collectSectionSingleValueRow(firstRow, _type);
   }
 
-  if (SerializableSectionPairSection::_isListValueRow(firstRow))
+  if (_isListValueRow(firstRow))
   {
     row = this->_collectSectionListValueRow(_currentRows, _type);
   }
@@ -83,7 +83,7 @@ byte_field SerializableSectionPairSection::_collectSectionListValueRow(const byt
   byte_field currentRows = _currentRows;
   byte_field currentRow{};
   byte_field row{};
-  string newLine = this->parameter.getNewLine();
+  const string newLine = this->parameter.getNewLine();
   _type = SectionPairRowEnumType::SECTION_PAIR_ROW_LIST_VALUE;
   size_t iterations{};
   bool isStillListRow{};
@@ -115,12 +115,12 @@ byte_field SerializableSectionPairSection::_collectSectionSingleValueRow(const b
   return _firstRow;
 }
 
-size_t SerializableSectionPairSection::_getNthSubStringPosition(string_view _text, string_view _subText)
+size_t SerializableSectionPairSection::_getNthSubStringPosition(const string_view _text, const string_view _subText)
 {
-  size_t position = -1;
+  size_t position = string::npos;
   size_t amount{};
 
-  for (int index = 0; index < (_text.size() - _subText.size()); index++)
+  for (size_t index = 0; index < (_text.size() - _subText.size()); index++)
   {
     if (_text.substr(index, _subText.size()) == _subText)
     {
@@ -140,9 +140,9 @@ size_t SerializableSectionPairSection::_getNthSubStringPosition(string_view _tex
 byte_field SerializableSectionPairSection::_getSectionHeader(const byte_field &_data) const
 {
   byte_field sectionHeader{};
-  string newLine = this->parameter.getNewLine();
+  const string newLine = this->parameter.getNewLine();
 
-  if (size_t position = SerializableSectionPairSection::_getNthSubStringPosition(_data, newLine); position != -1)
+  if (const size_t position = _getNthSubStringPosition(_data, newLine); position != string::npos)
   {
     sectionHeader = _data.substr(0, position + 2 * newLine.size());
   }
@@ -150,26 +150,26 @@ byte_field SerializableSectionPairSection::_getSectionHeader(const byte_field &_
   return sectionHeader;
 }
 
-byte_field SerializableSectionPairSection::_getSectionId(string_view _sectionHeader)
+byte_field SerializableSectionPairSection::_getSectionId(const string_view _sectionHeader)
 {
   auto sectionId = byte_field{_sectionHeader.substr(_sectionHeader.find('[') + 1)};
   return sectionId.substr(0, sectionId.find(']'));
 }
 
-bool SerializableSectionPairSection::_isListValueRow(string_view _currentRow)
+bool SerializableSectionPairSection::_isListValueRow(const string_view _currentRow)
 {
   return _currentRow.find(':') != string::npos;
 }
 
 bool SerializableSectionPairSection::_isStartingValueRow(const string &_currentRow)
 {
-  bool isSingleValue = SerializableSectionPairSection::_isSingleValueRow(_currentRow);
-  bool isListValue = SerializableSectionPairSection::_isListValueRow(_currentRow);
+  const bool isSingleValue = _isSingleValueRow(_currentRow);
+  const bool isListValue = _isListValueRow(_currentRow);
 
   return isSingleValue || isListValue;
 }
 
-bool SerializableSectionPairSection::_isSingleValueRow(string_view _currentRow)
+bool SerializableSectionPairSection::_isSingleValueRow(const string_view _currentRow)
 {
   return _currentRow.find('=') != string::npos;
 }
@@ -189,13 +189,13 @@ byte_field SerializableSectionPairSection::_marshalRows() const
 
 byte_field SerializableSectionPairSection::_marshalSectionId() const
 {
-  string newLine = this->parameter.getNewLine();
+  const string newLine = this->parameter.getNewLine();
   return newLine + "[" + dynamic_pointer_cast<SectionPairSection>(this->parameter.getValue())->getSectionId() + "]" + newLine + newLine;
 }
 
 void SerializableSectionPairSection::_unmarshalRow(const string &_sectionRow, SectionPairRowEnumType _type) const
 {
-  auto row = make_shared<SectionPairRow>("tmp-dir", _type);
+  const auto row = make_shared<SectionPairRow>("tmp-dir", _type);
   row->reserveNewLine(this->parameter.getNewLine());
   row->unmarshal(_sectionRow);
   dynamic_pointer_cast<SectionPairSection>(this->parameter.getValue())->add(row);
@@ -216,7 +216,7 @@ void SerializableSectionPairSection::_unmarshalRows(const byte_field &_serialize
 
 size_t SerializableSectionPairSection::_unmarshalSectionHeader(const byte_field &_data) const
 {
-  byte_field sectionHeader = this->_getSectionHeader(_data);
+  const byte_field sectionHeader = this->_getSectionHeader(_data);
   dynamic_pointer_cast<SectionPairSection>(this->parameter.getValue())->setSectionId(SerializableSectionPairSection::_getSectionId(sectionHeader));
 
   return sectionHeader.size();

+ 7 - 7
source/ls-std/io/section-pair/validator/SectionPairDocumentValidator.cpp

@@ -3,7 +3,7 @@
 * Company:         Lynar Studios
 * E-Mail:          webmaster@lynarstudios.com
 * Created:         2023-02-21
-* Changed:         2023-05-16
+* Changed:         2025-12-21
 *
 * */
 
@@ -26,7 +26,7 @@ SectionPairDocumentValidator::~SectionPairDocumentValidator() noexcept = default
 
 bool SectionPairDocumentValidator::isValid()
 {
-  string validationRegex = SectionPairDocumentValidator::_getValidationRegex();
+  const string validationRegex = _getValidationRegex();
   static auto documentRegex = regex{"^" + validationRegex + "$"};
 
   return regex_match(this->document, documentRegex);
@@ -34,11 +34,11 @@ bool SectionPairDocumentValidator::isValid()
 
 string SectionPairDocumentValidator::_getValidationRegex()
 {
-  string newLine = R"(((\n)|(\r\n)))";
-  string documentHeader = R"((# {1}(section\-pair document))" + newLine + R"())";
-  string section = SectionPairSectionValidator::getValidationRegex();
-  string atLeastOneSection = R"(()" + section + R"())";
-  string optionalSections = R"(()" + section + R"()*)";
+  const string newLine = R"(((\n)|(\r\n)))";
+  const string documentHeader = R"((# {1}(section\-pair document))" + newLine + R"())";
+  const string section = SectionPairSectionValidator::getValidationRegex();
+  const string atLeastOneSection = R"(()" + section + R"())";
+  const string optionalSections = R"(()" + section + R"()*)";
 
   return documentHeader + atLeastOneSection + optionalSections;
 }

+ 5 - 5
source/ls-std/io/section-pair/validator/SectionPairFileExtensionValidator.cpp

@@ -3,7 +3,7 @@
 * Company:         Lynar Studios
 * E-Mail:          webmaster@lynarstudios.com
 * Created:         2023-02-21
-* Changed:         2023-02-23
+* Changed:         2025-12-21
 *
 * */
 
@@ -21,10 +21,10 @@ SectionPairFileExtensionValidator::~SectionPairFileExtensionValidator() noexcept
 
 bool SectionPairFileExtensionValidator::isValid()
 {
-  string textFileExtension = ".txt";
-  string sectionPairFileExtension = ".sp";
-  bool endsWithTextFileExtension = this->fileName.rfind(textFileExtension) == (this->fileName.size() - textFileExtension.size());
-  bool endsWithSectionPairFileExtension = this->fileName.rfind(sectionPairFileExtension) == (this->fileName.size() - sectionPairFileExtension.size());
+  const string textFileExtension = ".txt";
+  const string sectionPairFileExtension = ".sp";
+  const bool endsWithTextFileExtension = this->fileName.rfind(textFileExtension) == (this->fileName.size() - textFileExtension.size());
+  const bool endsWithSectionPairFileExtension = this->fileName.rfind(sectionPairFileExtension) == (this->fileName.size() - sectionPairFileExtension.size());
 
   return endsWithTextFileExtension || endsWithSectionPairFileExtension;
 }

+ 3 - 3
source/ls-std/io/section-pair/validator/SectionPairIdentifierValidator.cpp

@@ -3,7 +3,7 @@
 * Company:         Lynar Studios
 * E-Mail:          webmaster@lynarstudios.com
 * Created:         2023-02-09
-* Changed:         2023-04-13
+* Changed:         2025-12-21
 *
 * */
 
@@ -25,12 +25,12 @@ SectionPairIdentifierValidator::~SectionPairIdentifierValidator() noexcept = def
 
 string SectionPairIdentifierValidator::getValidationRegex()
 {
-  return SectionPairIdentifierValidator::_getValidationRegex();
+  return _getValidationRegex();
 }
 
 bool SectionPairIdentifierValidator::isValid()
 {
-  static regex identifierRegex("^" + SectionPairIdentifierValidator::_getValidationRegex());
+  static regex identifierRegex("^" + _getValidationRegex());
   return regex_match(this->identifier, identifierRegex);
 }
 

+ 7 - 7
source/ls-std/io/section-pair/validator/SectionPairRowListValueValidator.cpp

@@ -3,7 +3,7 @@
 * Company:         Lynar Studios
 * E-Mail:          webmaster@lynarstudios.com
 * Created:         2023-02-19
-* Changed:         2023-05-18
+* Changed:         2025-12-21
 *
 * */
 
@@ -28,12 +28,12 @@ SectionPairRowListValueValidator::~SectionPairRowListValueValidator() noexcept =
 
 string SectionPairRowListValueValidator::getValidationRegex()
 {
-  return SectionPairRowListValueValidator::_getValidationRegex();
+  return _getValidationRegex();
 }
 
 bool SectionPairRowListValueValidator::isValid()
 {
-  string validationRegex = SectionPairRowListValueValidator::_getValidationRegex();
+  const string validationRegex = _getValidationRegex();
   static auto listValueRowRegex = regex{"^" + validationRegex};
 
   return regex_match(this->listValueRow, listValueRowRegex);
@@ -41,10 +41,10 @@ bool SectionPairRowListValueValidator::isValid()
 
 string SectionPairRowListValueValidator::_getValidationRegex()
 {
-  string identifierRegex = SectionPairIdentifierValidator::getValidationRegex();
-  string valueRegex = SectionPairValueValidator::getValidationRegex();
-  string lineBreak = R"(((\n{1})|(\r{1}\n{1})))";
-  string firstLine = R"(((()" + identifierRegex + R"():{1}))" + lineBreak + R"())";
+  const string identifierRegex = SectionPairIdentifierValidator::getValidationRegex();
+  const string valueRegex = SectionPairValueValidator::getValidationRegex();
+  const string lineBreak = R"(((\n{1})|(\r{1}\n{1})))";
+  const string firstLine = R"(((()" + identifierRegex + R"():{1}))" + lineBreak + R"())";
 
   return R"((()" + firstLine + R"(( {2})" + valueRegex + R"()" + lineBreak + R"()){1}(( {2})" + valueRegex + R"()" + lineBreak + R"()*)))";
 }

+ 5 - 5
source/ls-std/io/section-pair/validator/SectionPairRowSingleValueValidator.cpp

@@ -3,7 +3,7 @@
 * Company:         Lynar Studios
 * E-Mail:          webmaster@lynarstudios.com
 * Created:         2023-02-19
-* Changed:         2023-05-18
+* Changed:         2025-12-21
 *
 * */
 
@@ -28,12 +28,12 @@ SectionPairRowSingleValueValidator::~SectionPairRowSingleValueValidator() noexce
 
 string SectionPairRowSingleValueValidator::getValidationRegex()
 {
-  return SectionPairRowSingleValueValidator::_getValidationRegex();
+  return _getValidationRegex();
 }
 
 bool SectionPairRowSingleValueValidator::isValid()
 {
-  string validationRegex = SectionPairRowSingleValueValidator::_getValidationRegex();
+  const string validationRegex = _getValidationRegex();
   static auto singleValueRowRegex = regex{"^" + validationRegex};
 
   return regex_match(this->singleValueRow, singleValueRowRegex);
@@ -41,8 +41,8 @@ bool SectionPairRowSingleValueValidator::isValid()
 
 string SectionPairRowSingleValueValidator::_getValidationRegex()
 {
-  string identifierRegex = SectionPairIdentifierValidator::getValidationRegex();
-  string valueRegex = SectionPairValueValidator::getValidationRegex();
+  const string identifierRegex = SectionPairIdentifierValidator::getValidationRegex();
+  const string valueRegex = SectionPairValueValidator::getValidationRegex();
 
   return R"(()" + identifierRegex + R"()={1}()" + valueRegex + R"(){1}($|\n{1}|\r{1}\n{1}))";
 }

+ 5 - 5
source/ls-std/io/section-pair/validator/SectionPairRowValidator.cpp

@@ -3,7 +3,7 @@
 * Company:         Lynar Studios
 * E-Mail:          webmaster@lynarstudios.com
 * Created:         2023-02-20
-* Changed:         2023-05-18
+* Changed:         2025-12-21
 *
 * */
 
@@ -27,12 +27,12 @@ SectionPairRowValidator::~SectionPairRowValidator() noexcept = default;
 
 string SectionPairRowValidator::getValidationRegex()
 {
-  return SectionPairRowValidator::_getValidationRegex();
+  return _getValidationRegex();
 }
 
 bool SectionPairRowValidator::isValid()
 {
-  string validationRegex = SectionPairRowValidator::_getValidationRegex();
+  const string validationRegex = _getValidationRegex();
   static auto sectionPairRowRegex = regex{R"(^()" + validationRegex + R"())"};
 
   return regex_match(this->row, sectionPairRowRegex);
@@ -40,8 +40,8 @@ bool SectionPairRowValidator::isValid()
 
 string SectionPairRowValidator::_getValidationRegex()
 {
-  string listValueRowRegex = SectionPairRowListValueValidator::getValidationRegex();
-  string singleValueRowRegex = SectionPairRowSingleValueValidator::getValidationRegex();
+  const string listValueRowRegex = SectionPairRowListValueValidator::getValidationRegex();
+  const string singleValueRowRegex = SectionPairRowSingleValueValidator::getValidationRegex();
 
   return R"(()" + singleValueRowRegex + R"()|()" + listValueRowRegex + R"())";
 }

+ 9 - 9
source/ls-std/io/section-pair/validator/SectionPairSectionValidator.cpp

@@ -3,7 +3,7 @@
 * Company:         Lynar Studios
 * E-Mail:          webmaster@lynarstudios.com
 * Created:         2023-02-20
-* Changed:         2023-05-18
+* Changed:         2025-12-23
 *
 * */
 
@@ -29,12 +29,12 @@ SectionPairSectionValidator::~SectionPairSectionValidator() noexcept = default;
 
 string SectionPairSectionValidator::getValidationRegex()
 {
-  return SectionPairSectionValidator::_getValidationRegex();
+  return _getValidationRegex();
 }
 
 bool SectionPairSectionValidator::isValid()
 {
-  string validationRegex = SectionPairSectionValidator::_getValidationRegex();
+  const string validationRegex = _getValidationRegex();
   static auto sectionRegex = regex{"^" + validationRegex};
 
   return regex_match(this->section, sectionRegex);
@@ -42,12 +42,12 @@ bool SectionPairSectionValidator::isValid()
 
 string SectionPairSectionValidator::_getValidationRegex()
 {
-  string newLine = R"(((\n)|(\r\n)))";
-  string identifier = SectionPairIdentifierValidator::getValidationRegex();
-  string sectionHeader = newLine + R"(\[{1}()" + identifier + R"()\]{1}()" + newLine + R"({2}))";
-  string row = SectionPairRowValidator::getValidationRegex();
-  string atLeastOneRow = R"((()" + row + R"(){1}))";
-  string optionalRows = R"((()" + row + R"()*))";
+  const string newLine = R"(((\n)|(\r\n)))";
+  const string identifier = SectionPairIdentifierValidator::getValidationRegex();
+  const string sectionHeader = newLine + R"(\[{1}()" + identifier + R"()\]{1}()" + newLine + R"({2}))";
+  const string row = SectionPairRowValidator::getValidationRegex();
+  const string atLeastOneRow = R"((()" + row + R"(){1}))";
+  const string optionalRows = R"((()" + row + R"()*))";
 
   return sectionHeader + atLeastOneRow + optionalRows;
 }

+ 4 - 5
source/ls-std/io/section-pair/validator/SectionPairValueValidator.cpp

@@ -3,11 +3,10 @@
 * Company:         Lynar Studios
 * E-Mail:          webmaster@lynarstudios.com
 * Created:         2023-02-09
-* Changed:         2023-06-06
+* Changed:         2025-12-21
 *
 * */
 
-#include <ls-std/io/NewLine.hpp>
 #include <ls-std/io/section-pair/validator/SectionPairValueValidator.hpp>
 #include <regex>
 
@@ -26,13 +25,13 @@ SectionPairValueValidator::~SectionPairValueValidator() noexcept = default;
 
 string SectionPairValueValidator::getValidationRegex()
 {
-  return SectionPairValueValidator::_getValidationRegex();
+  return _getValidationRegex();
 }
 
 bool SectionPairValueValidator::isValid()
 {
-  string validationRegex = SectionPairValueValidator::_getValidationRegex();
-  string concatenation = "(^" + validationRegex + ")|(^" + validationRegex + R"(\n{1})|(^)" + validationRegex + R"(\r{1}\n{1}))";
+  const string validationRegex = _getValidationRegex();
+  const string concatenation = "(^" + validationRegex + ")|(^" + validationRegex + R"(\n{1})|(^)" + validationRegex + R"(\r{1}\n{1}))";
   static regex valueRegex{concatenation};
 
   return regex_match(this->value, valueRegex);

+ 6 - 5
source/ls-std/io/xml/XmlDeclaration.cpp

@@ -3,17 +3,18 @@
  * Company:         Lynar Studios
  * E-Mail:          webmaster@lynarstudios.com
  * Created:         2020-09-29
- * Changed:         2023-05-17
+ * Changed:         2025-12-21
  *
  * */
 
 #include <ls-std/io/xml/XmlDeclaration.hpp>
 
+using ls::std::core::Class;
 using ls::std::io::XmlAttribute;
 using ls::std::io::XmlDeclaration;
 using std::string;
 
-XmlDeclaration::XmlDeclaration(const string &_version) : ls::std::core::Class("XmlDeclaration")
+XmlDeclaration::XmlDeclaration(const string &_version) : Class("XmlDeclaration")
 {
   this->version.setValue(_version);
 }
@@ -54,9 +55,9 @@ string XmlDeclaration::toXml() const
 {
   string declaration = "<?xml";
 
-  declaration += XmlDeclaration::_toXmlAttribute(this->version);
-  declaration += XmlDeclaration::_toXmlAttribute(this->encoding);
-  declaration += XmlDeclaration::_toXmlAttribute(this->standalone);
+  declaration += _toXmlAttribute(this->version);
+  declaration += _toXmlAttribute(this->encoding);
+  declaration += _toXmlAttribute(this->standalone);
 
   return declaration + " ?>";
 }

+ 12 - 12
source/ls-std/io/xml/XmlNode.cpp

@@ -3,7 +3,7 @@
  * Company:         Lynar Studios
  * E-Mail:          webmaster@lynarstudios.com
  * Created:         2020-09-24
- * Changed:         2023-05-16
+ * Changed:         2025-12-21
  *
  * */
 
@@ -47,13 +47,13 @@ bool XmlNode::addAttributeAfter(const shared_ptr<XmlAttribute> &_attribute, cons
     {
       if ((*iterator)->getName() == _name)
       {
-        iterator++;
+        ++iterator;
         this->attributes.insert(iterator, _attribute);
         added = true;
         break;
       }
 
-      iterator++;
+      ++iterator;
     }
   }
 
@@ -78,7 +78,7 @@ bool XmlNode::addAttributeBefore(const shared_ptr<XmlAttribute> &_attribute, con
         break;
       }
 
-      iterator++;
+      ++iterator;
     }
   }
 
@@ -126,13 +126,13 @@ bool XmlNode::addChildAfter(const shared_ptr<XmlNode> &_child, const shared_ptr<
     {
       if (*iterator == _search)
       {
-        iterator++;
+        ++iterator;
         this->children.insert(iterator, _child);
         added = true;
         break;
       }
 
-      iterator++;
+      ++iterator;
     }
   }
 
@@ -157,7 +157,7 @@ bool XmlNode::addChildBefore(const shared_ptr<XmlNode> &_child, const shared_ptr
         break;
       }
 
-      iterator++;
+      ++iterator;
     }
   }
 
@@ -242,7 +242,7 @@ bool XmlNode::hasChild(const shared_ptr<XmlNode> &_child)
 
 bool XmlNode::removeFirstAttribute()
 {
-  bool isValidOperation = !this->attributes.empty();
+  const bool isValidOperation = !this->attributes.empty();
 
   if (isValidOperation)
   {
@@ -254,7 +254,7 @@ bool XmlNode::removeFirstAttribute()
 
 bool XmlNode::removeLastAttribute()
 {
-  bool isValidOperation = !this->attributes.empty();
+  const bool isValidOperation = !this->attributes.empty();
 
   if (isValidOperation)
   {
@@ -266,7 +266,7 @@ bool XmlNode::removeLastAttribute()
 
 bool XmlNode::removeFirstChild()
 {
-  bool isValidOperation = !this->children.empty();
+  const bool isValidOperation = !this->children.empty();
 
   if (isValidOperation)
   {
@@ -278,7 +278,7 @@ bool XmlNode::removeFirstChild()
 
 bool XmlNode::removeLastChild()
 {
-  bool isValidOperation = !this->children.empty();
+  const bool isValidOperation = !this->children.empty();
 
   if (isValidOperation)
   {
@@ -331,7 +331,7 @@ void XmlNode::_assignValue(const string &_value)
   this->value = _value;
 }
 
-string XmlNode::_getTab(uint8_t _tabSize)
+string XmlNode::_getTab(const uint8_t _tabSize)
 {
   string tab{};
 

+ 45 - 45
source/ls-std/io/xml/XmlParser.cpp

@@ -3,7 +3,7 @@
  * Company:         Lynar Studios
  * E-Mail:          webmaster@lynarstudios.com
  * Created:         2020-11-26
- * Changed:         2023-05-16
+ * Changed:         2025-12-23
  *
  * */
 
@@ -56,15 +56,15 @@ void XmlParser::setDocument(const shared_ptr<XmlDocument> &_document)
 
 pair<string, string> XmlParser::_readAttribute_(const byte_field &_data)
 {
-  return XmlParser::_parseAttribute(_data);
+  return _parseAttribute(_data);
 }
 
 list<pair<string, string>> XmlParser::_readAttributes_(byte_field _data)
 {
-  return XmlParser::_parseAttributes(::move(_data));
+  return _parseAttributes(::move(_data));
 }
 
-void XmlParser::_analyze(const byte_field &_data, string::size_type _index)
+void XmlParser::_analyze(const byte_field &_data, const string::size_type _index)
 {
   this->_isDeclaration(_data, _index);
   this->_isClosingTag(_data, _index);
@@ -78,7 +78,7 @@ void XmlParser::_assignDocument(const shared_ptr<XmlDocument> &_document)
   this->document = _document;
 }
 
-bool XmlParser::_contains(string_view _text, string_view _searchText)
+bool XmlParser::_contains(const string_view _text, const string_view _searchText)
 {
   return _text.find(_searchText) != string::npos;
 }
@@ -86,21 +86,21 @@ bool XmlParser::_contains(string_view _text, string_view _searchText)
 shared_ptr<XmlDeclaration> XmlParser::_createDeclaration(const list<pair<string, string>> &_attributes)
 {
   auto declaration = make_shared<XmlDeclaration>("1.0");
-  pair<string, string> attribute = XmlParser::_findAttribute(_attributes, "version");
+  pair<string, string> attribute = _findAttribute(_attributes, "version");
 
   if (!attribute.first.empty())
   {
     declaration->setVersion(attribute.second);
   }
 
-  attribute = XmlParser::_findAttribute(_attributes, "encoding");
+  attribute = _findAttribute(_attributes, "encoding");
 
   if (!attribute.first.empty())
   {
     declaration->setEncoding(attribute.second);
   }
 
-  attribute = XmlParser::_findAttribute(_attributes, "standalone");
+  attribute = _findAttribute(_attributes, "standalone");
 
   if (!attribute.first.empty())
   {
@@ -110,7 +110,7 @@ shared_ptr<XmlDeclaration> XmlParser::_createDeclaration(const list<pair<string,
   return declaration;
 }
 
-shared_ptr<XmlNode> XmlParser::_createNode(const list<pair<string, string>> &_attributes, string_view _name)
+shared_ptr<XmlNode> XmlParser::_createNode(const list<pair<string, string>> &_attributes, const string_view _name)
 {
   auto node = make_shared<XmlNode>(string{_name});
   shared_ptr<XmlAttribute> attribute{};
@@ -125,7 +125,7 @@ shared_ptr<XmlNode> XmlParser::_createNode(const list<pair<string, string>> &_at
   return node;
 }
 
-bool XmlParser::_endsWith(string_view _text, string_view _ending)
+bool XmlParser::_endsWith(const string_view _text, const string_view _ending)
 {
   return _text.rfind(_ending) == (_text.size() - _ending.size());
 }
@@ -141,7 +141,7 @@ size_t XmlParser::_findAttributeEndPosition(const byte_field &_data)
   string::size_type position = string::npos;
   string::size_type counter{};
 
-  for (char letter : _data)
+  for (const char letter : _data)
   {
     if (letter == '"')
     {
@@ -159,11 +159,11 @@ size_t XmlParser::_findAttributeEndPosition(const byte_field &_data)
   return position;
 }
 
-byte_field XmlParser::_getNextTagString(string_view _data, string::size_type _index)
+byte_field XmlParser::_getNextTagString(const string_view _data, const string::size_type _index)
 {
   byte_field tag{};
 
-  if (size_t closingCharacterPosition = _index + _data.substr(_index).find('>'); closingCharacterPosition != string::npos)
+  if (const size_t closingCharacterPosition = _index + _data.substr(_index).find('>'); closingCharacterPosition != string::npos)
   {
     tag = _data.substr(_index, (closingCharacterPosition - _index) + 1);
   }
@@ -171,7 +171,7 @@ byte_field XmlParser::_getNextTagString(string_view _data, string::size_type _in
   return tag;
 }
 
-void XmlParser::_isClosingTag(string_view _data, string::size_type _index)
+void XmlParser::_isClosingTag(const string_view _data, const string::size_type _index)
 {
   if (this->mode == XmlParseMode::XML_PARSE_MODE_ANALYZE && _data.substr(_index, 2) == "</")
   {
@@ -179,7 +179,7 @@ void XmlParser::_isClosingTag(string_view _data, string::size_type _index)
   }
 }
 
-void XmlParser::_isDeclaration(string_view _data, string::size_type _index)
+void XmlParser::_isDeclaration(const string_view _data, const string::size_type _index)
 {
   if (_data.substr(_index, 5) == "<?xml")
   {
@@ -187,7 +187,7 @@ void XmlParser::_isDeclaration(string_view _data, string::size_type _index)
   }
 }
 
-void XmlParser::_isOpeningTag(string_view _data, string::size_type _index)
+void XmlParser::_isOpeningTag(const string_view _data, const string::size_type _index)
 {
   if (this->mode == XmlParseMode::XML_PARSE_MODE_ANALYZE && _data.substr(_index, 1) == "<")
   {
@@ -195,18 +195,18 @@ void XmlParser::_isOpeningTag(string_view _data, string::size_type _index)
   }
 }
 
-void XmlParser::_isValue(const byte_field &_data, string::size_type _index)
+void XmlParser::_isValue(const byte_field &_data, const string::size_type _index)
 {
   if (this->mode == XmlParseMode::XML_PARSE_MODE_ANALYZE)
   {
-    string::size_type end = _data.substr(_index).find('<');
-    bool isValue = _data[_index - 1] == '>' && end != string::npos && end > 0;
+    const string::size_type end = _data.substr(_index).find('<');
+    const bool isValue = _data[_index - 1] == '>' && end != string::npos && end > 0; // kept as dedicated variable for readability
 
     if (isValue)
     {
-      string value{_data.substr(_index, end)};
+      const string value{_data.substr(_index, end)};
 
-      if (!XmlParser::_contains(string_view{value}, string_view{"\n"}) && !XmlParser::_contains(string_view{value}, string_view{"\r\n"}))
+      if (!_contains(string_view{value}, string_view{"\n"}) && !_contains(string_view{value}, string_view{"\r\n"}))
       {
         this->mode = XmlParseMode::XML_PARSE_MODE_VALUE;
       }
@@ -225,11 +225,11 @@ void XmlParser::_mergeNodes()
   this->document->setRootElement(this->parseParameters.front().getNode());
 }
 
-void XmlParser::_mergeChildrenToParentNode(const shared_ptr<XmlNode> &_parent, list<XmlParseParameter>::iterator &_iterator, uint8_t _parentLevel)
+void XmlParser::_mergeChildrenToParentNode(const shared_ptr<XmlNode> &_parent, list<XmlParseParameter>::iterator &_iterator, const uint8_t _parentLevel)
 {
   do
   {
-    _iterator++;
+    ++_iterator;
 
     if (_iterator == this->parseParameters.end())
     {
@@ -248,7 +248,7 @@ void XmlParser::_mergeChildrenToParentNode(const shared_ptr<XmlNode> &_parent, l
 void XmlParser::_mergeNodesOnCurrentLevel()
 {
   auto iterator = this->parseParameters.begin();
-  uint8_t parentLevel = this->maxLevel - 1;
+  const uint8_t parentLevel = this->maxLevel - 1;
 
   while (iterator != this->parseParameters.end())
   {
@@ -258,7 +258,7 @@ void XmlParser::_mergeNodesOnCurrentLevel()
     }
     else
     {
-      iterator++;
+      ++iterator;
     }
   }
 }
@@ -294,41 +294,41 @@ list<pair<string, string>> XmlParser::_parseAttributes(byte_field _data)
       position = _data.find(' ') + 1;
     } while (_data[position] == ' ');
 
-    if (_data.size() <= 3 && XmlParser::_endsWith(string_view{_data}, ">"))
+    if (_data.size() <= 3 && _endsWith(string_view{_data}, ">"))
     {
       break;
     }
 
-    string attributeString = _data.substr(position, XmlParser::_findAttributeEndPosition(_data) + 1);
-    attributes.push_back(XmlParser::_parseAttribute(attributeString));
+    string attributeString = _data.substr(position, _findAttributeEndPosition(_data) + 1);
+    attributes.push_back(_parseAttribute(attributeString));
     _data = _data.substr(position + attributeString.size());
   }
 
   return attributes;
 }
 
-size_t XmlParser::_parseClosingTag(const byte_field &_data, string::size_type _index)
+size_t XmlParser::_parseClosingTag(const byte_field &_data, const string::size_type _index)
 {
-  string tagString = XmlParser::_getNextTagString(_data, _index);
+  const string tagString = _getNextTagString(_data, _index);
   this->currentLevel -= 1;
   return tagString.empty() ? _index : _index + (tagString.size() - 1);
 }
 
-size_t XmlParser::_parseDeclaration(const byte_field &_data, string::size_type _index) const
+size_t XmlParser::_parseDeclaration(const byte_field &_data, const string::size_type _index) const
 {
-  string tagString = XmlParser::_getNextTagString(_data, _index);
-  bool isValidTagString = !tagString.empty();
+  const string tagString = _getNextTagString(_data, _index);
+  const bool isValidTagString = !tagString.empty();
 
   if (isValidTagString)
   {
-    shared_ptr<XmlDeclaration> declaration = this->_createDeclaration(XmlParser::_parseAttributes(tagString));
+    const shared_ptr<XmlDeclaration> declaration = _createDeclaration(_parseAttributes(tagString));
     this->document->setDeclaration(declaration);
   }
 
   return !isValidTagString ? _index : _index + (tagString.size() - 1);
 }
 
-string::size_type XmlParser::_parseMode(string::size_type _index, const byte_field &_data)
+string::size_type XmlParser::_parseMode(const string::size_type _index, const byte_field &_data)
 {
   string::size_type index = _index;
 
@@ -349,21 +349,21 @@ string::size_type XmlParser::_parseMode(string::size_type _index, const byte_fie
     case XmlParseMode::XML_PARSE_MODE_OPENING_TAG:
     {
       --index;
-      index = XmlParser::_parseOpeningTag(_data, index);
+      index = _parseOpeningTag(_data, index);
       this->mode = XmlParseMode::XML_PARSE_MODE_ANALYZE;
     }
     break;
     case XmlParseMode::XML_PARSE_MODE_VALUE:
     {
       --index;
-      index = XmlParser::_parseValue(_data, index);
+      index = _parseValue(_data, index);
       this->mode = XmlParseMode::XML_PARSE_MODE_ANALYZE;
     }
     break;
     case XmlParseMode::XML_PARSE_MODE_CLOSING_TAG:
     {
       --index;
-      index = XmlParser::_parseClosingTag(_data, index);
+      index = _parseClosingTag(_data, index);
       this->mode = XmlParseMode::XML_PARSE_MODE_ANALYZE;
     }
     break;
@@ -372,21 +372,21 @@ string::size_type XmlParser::_parseMode(string::size_type _index, const byte_fie
   return index;
 }
 
-size_t XmlParser::_parseOpeningTag(const byte_field &_data, string::size_type _index)
+size_t XmlParser::_parseOpeningTag(const byte_field &_data, const string::size_type _index)
 {
-  string tagString{XmlParser::_getNextTagString(_data, _index)};
-  bool isValidTagString = !tagString.empty();
+  const string tagString{_getNextTagString(_data, _index)};
+  const bool isValidTagString = !tagString.empty();
   XmlParseParameter singleParseParameter{};
 
   if (isValidTagString)
   {
-    shared_ptr<XmlNode> node = XmlParser::_createNode(XmlParser::_parseAttributes(tagString), XmlParser::_parseTagName(tagString));
+    const shared_ptr<XmlNode> node = _createNode(_parseAttributes(tagString), _parseTagName(tagString));
 
     singleParseParameter.setLevel(this->currentLevel);
     singleParseParameter.setNode(node);
     this->parseParameters.push_back(singleParseParameter);
 
-    if (!XmlParser::_endsWith(tagString, "/>"))
+    if (!_endsWith(tagString, "/>"))
     {
       this->currentLevel += 1;
       this->_setMaxLevel();
@@ -408,9 +408,9 @@ string_view XmlParser::_parseTagName(string_view _data)
   return _data.substr(1, position - 1);
 }
 
-size_t XmlParser::_parseValue(string_view _data, string::size_type _index)
+size_t XmlParser::_parseValue(const string_view _data, const string::size_type _index) const
 {
-  string_view value = _data.substr(_index, _data.substr(_index).find('<'));
+  const string_view value = _data.substr(_index, _data.substr(_index).find('<'));
   this->parseParameters.back().getNode()->setValue(string{value});
 
   return _index + (value.size() - 1);

+ 8 - 8
source/ls-std/time/Date.cpp

@@ -3,7 +3,7 @@
  * Company:         Lynar Studios
  * E-Mail:          webmaster@lynarstudios.com
  * Created:         2020-08-14
- * Changed:         2023-05-24
+ * Changed:         2025-12-21
  *
  * */
 
@@ -28,25 +28,25 @@ Date::Date() : Class("Date")
 
 Date::~Date() noexcept = default;
 
-Date &Date::operator+(int _value)
+Date &Date::operator+(const int _value)
 {
   this->_incrementByDays(_value);
   return *this;
 }
 
-Date &Date::operator-(int _value)
+Date &Date::operator-(const int _value)
 {
   this->_decrementByDays(_value);
   return *this;
 }
 
-Date &Date::operator+=(int _value)
+Date &Date::operator+=(const int _value)
 {
   this->_incrementByDays(_value);
   return *this;
 }
 
-Date &Date::operator-=(int _value)
+Date &Date::operator-=(const int _value)
 {
   this->_decrementByDays(_value);
   return *this;
@@ -97,7 +97,7 @@ time_t Date::getTime() const
   return this->timestamp;
 }
 
-void Date::setTime(time_t _timestamp)
+void Date::setTime(const time_t _timestamp)
 {
   this->timestamp = _timestamp;
   this->_init();
@@ -111,12 +111,12 @@ string Date::toString() const
   return _stream.str();
 }
 
-void Date::_decrementByDays(int _value)
+void Date::_decrementByDays(const int _value)
 {
   this->timestamp -= (_value * 86400);
 }
 
-void Date::_incrementByDays(int _value)
+void Date::_incrementByDays(const int _value)
 {
   this->timestamp += (_value * 86400);
 }

+ 8 - 8
source/ls-std/time/common/DateParameter.cpp

@@ -3,7 +3,7 @@
 * Company:         Lynar Studios
 * E-Mail:          webmaster@lynarstudios.com
 * Created:         2023-03-29
-* Changed:         2023-05-17
+* Changed:         2025-12-21
 *
 * */
 
@@ -17,7 +17,7 @@ using ls::std::time::type::Month;
 using ls::std::time::type::Second;
 using ls::std::time::type::Year;
 
-DateParameter::DateParameter(Year _year, Month _month, Day _day, Hour _hour, Minute _minute, Second _second) : day(_day), hour(_hour), minute(_minute), month(_month), second(_second), year(_year)
+DateParameter::DateParameter(const Year _year, const Month _month, const Day _day, const Hour _hour, const Minute _minute, const Second _second) : day(_day), hour(_hour), minute(_minute), month(_month), second(_second), year(_year)
 {}
 
 DateParameter::DateParameter() = default;
@@ -59,32 +59,32 @@ Year DateParameter::getYear() const
   return this->year;
 }
 
-void DateParameter::setDay(Day _day)
+void DateParameter::setDay(const Day _day)
 {
   this->day = _day;
 }
 
-void DateParameter::setHour(Hour _hour)
+void DateParameter::setHour(const Hour _hour)
 {
   this->hour = _hour;
 }
 
-void DateParameter::setMinute(Minute _minute)
+void DateParameter::setMinute(const Minute _minute)
 {
   this->minute = _minute;
 }
 
-void DateParameter::setMonth(Month _month)
+void DateParameter::setMonth(const Month _month)
 {
   this->month = _month;
 }
 
-void DateParameter::setSecond(Second _second)
+void DateParameter::setSecond(const Second _second)
 {
   this->second = _second;
 }
 
-void DateParameter::setYear(Year _year)
+void DateParameter::setYear(const Year _year)
 {
   this->year = _year;
 }

+ 2 - 2
source/ls-std/time/common/DateParameterMapper.cpp

@@ -3,7 +3,7 @@
 * Company:         Lynar Studios
 * E-Mail:          webmaster@lynarstudios.com
 * Created:         2023-03-31
-* Changed:         2023-05-17
+* Changed:         2025-12-21
 *
 * */
 
@@ -38,7 +38,7 @@ UnixTimestamp DateParameterMapper::toUnixTimestamp(const DateParameter &_datePar
   timeInfo.tm_sec = _dateParameter.getSecond();
   timeInfo.tm_isdst = -1;
 
-  return (UnixTimestamp) mktime(&timeInfo);
+  return static_cast<UnixTimestamp>(mktime(&timeInfo));
 }
 #endif
 

+ 11 - 6
source/ls-std/time/common/jni/JniDateParameterMapper.cpp

@@ -3,7 +3,7 @@
 * Company:         Lynar Studios
 * E-Mail:          webmaster@lynarstudios.com
 * Created:         2023-04-09
-* Changed:         2023-04-10
+* Changed:         2025-12-22
 *
 * */
 
@@ -14,6 +14,11 @@
 using ls::std::core::experimental::JniClass;
 using ls::std::time::DateParameter;
 using ls::std::time::experimental::JniDateParameterMapper;
+using ls::std::time::type::Day;
+using ls::std::time::type::Hour;
+using ls::std::time::type::Minute;
+using ls::std::time::type::Month;
+using ls::std::time::type::Second;
 
 JniDateParameterMapper::JniDateParameterMapper() = default;
 
@@ -25,11 +30,11 @@ DateParameter JniDateParameterMapper::toDateParameter(const JniClass &_javaClass
   DateParameter dateParameter{};
 
   dateParameter.setYear(javaClass.callMethod("getYear").getIntegerValue());
-  dateParameter.setMonth(javaClass.callMethod("getMonth").getByteValue());
-  dateParameter.setDay(javaClass.callMethod("getDay").getByteValue());
-  dateParameter.setHour(javaClass.callMethod("getHour").getByteValue());
-  dateParameter.setMinute(javaClass.callMethod("getMinute").getByteValue());
-  dateParameter.setSecond(javaClass.callMethod("getSecond").getByteValue());
+  dateParameter.setMonth(static_cast<Month>(javaClass.callMethod("getMonth").getByteValue()));
+  dateParameter.setDay(static_cast<Day>(javaClass.callMethod("getDay").getByteValue()));
+  dateParameter.setHour(static_cast<Hour>(javaClass.callMethod("getHour").getByteValue()));
+  dateParameter.setMinute(static_cast<Minute>(javaClass.callMethod("getMinute").getByteValue()));
+  dateParameter.setSecond(static_cast<Second>(javaClass.callMethod("getSecond").getByteValue()));
 
   return dateParameter;
 }

+ 3 - 3
source/ls-std/time/system-time/PosixClock.cpp

@@ -3,7 +3,7 @@
 * Company:         Lynar Studios
 * E-Mail:          webmaster@lynarstudios.com
 * Created:         2023-03-15
-* Changed:         2023-03-31
+* Changed:         2025-12-21
 *
 * */
 
@@ -22,7 +22,7 @@ PosixClock::~PosixClock() noexcept = default;
 
 bool PosixClock::setTime(const DateParameter &_dateParameter)
 {
-  UnixTimestamp timestamp = DateParameterMapper::toUnixTimestamp(_dateParameter);
-  timespec timespec{timestamp, 0};
+  const UnixTimestamp timestamp = DateParameterMapper::toUnixTimestamp(_dateParameter);
+  const timespec timespec{timestamp, 0};
   return clock_settime(CLOCK_REALTIME, &timespec) == 0;
 }

+ 3 - 3
source/ls-std/time/system-time/SystemTime.cpp

@@ -3,7 +3,7 @@
 * Company:         Lynar Studios
 * E-Mail:          webmaster@lynarstudios.com
 * Created:         2023-03-15
-* Changed:         2023-05-18
+* Changed:         2025-12-21
 *
 * */
 
@@ -35,12 +35,12 @@ using std::make_shared;
 using std::shared_ptr;
 using std::string;
 
-SystemTime::SystemTime(const shared_ptr<SystemTimeParameter> &_parameter) : Class(SystemTime::_fetchClassName()), parameter(_parameter)
+SystemTime::SystemTime(const shared_ptr<SystemTimeParameter> &_parameter) : Class(_fetchClassName()), parameter(_parameter)
 {
   NullPointerArgumentEvaluator{_parameter}.evaluate();
 }
 
-SystemTime::SystemTime() : Class(SystemTime::_fetchClassName())
+SystemTime::SystemTime() : Class(_fetchClassName())
 {
   this->_generateParameter();
 }

+ 3 - 2
source/ls-std/time/system-time/WindowsClock.cpp

@@ -3,12 +3,13 @@
 * Company:         Lynar Studios
 * E-Mail:          webmaster@lynarstudios.com
 * Created:         2023-04-01
-* Changed:         2023-04-01
+* Changed:         2025-12-23
 *
 * */
 
 #include <ls-std/time/common/DateParameterMapper.hpp>
 #include <ls-std/time/system-time/WindowsClock.hpp>
+#define NOMINMAX
 #include <windows.h>
 
 using ls::std::time::DateParameter;
@@ -21,6 +22,6 @@ WindowsClock::~WindowsClock() noexcept = default;
 
 bool WindowsClock::setTime(const DateParameter &_dateParameter)
 {
-  SYSTEMTIME systemTime = DateParameterMapper::toWindowsSystemTime(_dateParameter);
+  const SYSTEMTIME systemTime = DateParameterMapper::toWindowsSystemTime(_dateParameter);
   return SetLocalTime(&systemTime);
 }

+ 5 - 5
source/ls-std/time/system-time/jni/com_lynarstudios_ls_std_time_systemtime_SystemTimeJni.cpp

@@ -3,7 +3,7 @@
 * Company:         Lynar Studios
 * E-Mail:          webmaster@lynarstudios.com
 * Created:         2023-03-16
-* Changed:         2023-05-19
+* Changed:         2025-12-22
 *
 * */
 
@@ -37,7 +37,7 @@ using std::string;
 
 JNIEXPORT jboolean JNICALL Java_com_lynarstudios_ls_std_time_systemtime_SystemTimeJni_set(JNIEnv *_environment, [[maybe_unused]] jobject _object, jobject _dateParameter)
 {
-  auto parameter = make_shared<JniClassParameter>();
+  const auto parameter = make_shared<JniClassParameter>();
   parameter->setJavaEnvironment(_environment);
   parameter->setJavaObject(_dateParameter);
 
@@ -53,12 +53,12 @@ JNIEXPORT jboolean JNICALL Java_com_lynarstudios_ls_std_time_systemtime_SystemTi
 
   // map
 
-  DateParameter dateParameter = JniDateParameterMapper::toDateParameter(javaClass);
-  bool success = SystemTime{}.set(dateParameter);
+  const DateParameter dateParameter = JniDateParameterMapper::toDateParameter(javaClass);
+  const bool success = SystemTime{}.set(dateParameter);
 
   if (success)
   {
-    cout << R"lit(system time successfully set to ")lit" << dateParameter.getYear() << "-" << (int) dateParameter.getMonth() << "-" << (int) dateParameter.getDay() << " " << (int) dateParameter.getHour() << ":" << (int) dateParameter.getMinute() << ":" << (int) dateParameter.getSecond() << R"lit(" ...)lit" << endl;
+    cout << R"lit(system time successfully set to ")lit" << dateParameter.getYear() << "-" << dateParameter.getMonth() << "-" << dateParameter.getDay() << " " << dateParameter.getHour() << ":" << dateParameter.getMinute() << ":" << dateParameter.getSecond() << R"lit(" ...)lit" << endl;
   }
   else
   {

+ 4 - 4
test/cases/boxing/BooleanTest.cpp

@@ -3,7 +3,7 @@
  * Company:         Lynar Studios
  * E-Mail:          webmaster@lynarstudios.com
  * Created:         2020-08-09
- * Changed:         2023-03-25
+ * Changed:         2025-12-21
  *
  * */
 
@@ -59,13 +59,13 @@ namespace
 
   TEST_F(BooleanTest, operator_negation_negative_value)
   {
-    Boolean expression{};
+    const Boolean expression{};
     ASSERT_TRUE(!expression);
   }
 
   TEST_F(BooleanTest, operator_negation_positive_value)
   {
-    Boolean expression{true};
+    const Boolean expression{true};
     ASSERT_FALSE(!expression);
   }
 
@@ -175,7 +175,7 @@ namespace
 
   TEST_F(BooleanTest, getValue)
   {
-    Boolean x{2 < 3};
+    const Boolean x{2 < 3};
     ASSERT_TRUE(x.getValue());
   }
 

+ 44 - 44
test/cases/boxing/DoubleTest.cpp

@@ -3,7 +3,7 @@
  * Company:         Lynar Studios
  * E-Mail:          webmaster@lynarstudios.com
  * Created:         2020-08-14
- * Changed:         2023-03-25
+ * Changed:         2025-12-21
  *
  * */
 
@@ -40,67 +40,67 @@ namespace
 
   TEST_F(DoubleTest, operator_negative)
   {
-    Double x{3.25};
+    const Double x{3.25};
     ASSERT_DOUBLE_EQ(-3.25, -x);
   }
 
   TEST_F(DoubleTest, operator_addition_with_reference)
   {
-    Double x{3.1415};
-    Double y{2.223};
-    Double z{x + y};
+    const Double x{3.1415};
+    const Double y{2.223};
+    const Double z{x + y};
 
     ASSERT_DOUBLE_EQ(5.3645, z.getValue());
   }
 
   TEST_F(DoubleTest, operator_addition_with_value)
   {
-    Double x{3.1415};
+    const Double x{3.1415};
     ASSERT_DOUBLE_EQ(5.3645, x + 2.223);
   }
 
   TEST_F(DoubleTest, operator_multiplication_with_reference)
   {
-    Double x{3.14};
-    Double y{2.22};
-    Double z{x * y};
+    const Double x{3.14};
+    const Double y{2.22};
+    const Double z{x * y};
 
     ASSERT_DOUBLE_EQ(6.9708, z.getValue());
   }
 
   TEST_F(DoubleTest, operator_multiplication_with_value)
   {
-    Double x{3.14};
+    const Double x{3.14};
     ASSERT_DOUBLE_EQ(6.9708, x * 2.22);
   }
 
   TEST_F(DoubleTest, operator_substraction_with_reference)
   {
-    Double x{3.1415};
-    Double y{2.225};
-    Double z{x - y};
+    const Double x{3.1415};
+    const Double y{2.225};
+    const Double z{x - y};
 
     ASSERT_DOUBLE_EQ(0.9165, z.getValue());
   }
 
   TEST_F(DoubleTest, operator_substraction_with_value)
   {
-    Double x{3.1415};
+    const Double x{3.1415};
     ASSERT_DOUBLE_EQ(0.9165, x - 2.225);
   }
 
   TEST_F(DoubleTest, operator_division_with_reference)
   {
-    Double x{2.25};
-    Double y{0.5};
-    Double z{x / y};
+    const Double x{2.25};
+    const Double y{0.5};
+    const Double z{x / y};
 
     ASSERT_DOUBLE_EQ(4.5, z.getValue());
   }
 
   TEST_F(DoubleTest, operator_division_with_value)
   {
-    Double x{2.25};
+    const Double x{2.25};
     ASSERT_DOUBLE_EQ(4.5, x / 0.5);
   }
 
@@ -109,7 +109,7 @@ namespace
   TEST_F(DoubleTest, operator_add_assign_with_reference)
   {
     Double x{2.25000000};
-    Double y{3.14000000};
+    const Double y{3.14000000};
 
     x += y;
     ASSERT_DOUBLE_EQ(5.39000000, x.getValue());
@@ -126,7 +126,7 @@ namespace
   TEST_F(DoubleTest, operator_sub_assign_with_reference)
   {
     Double x{2.25};
-    Double y{0.04};
+    const Double y{0.04};
 
     x -= y;
     ASSERT_DOUBLE_EQ(2.21, x.getValue());
@@ -143,7 +143,7 @@ namespace
   TEST_F(DoubleTest, operator_mul_assign_with_reference)
   {
     Double x{2.25000000};
-    Double y{0.04000000};
+    const Double y{0.04000000};
 
     x *= y;
     ASSERT_DOUBLE_EQ(0.09000000, x.getValue());
@@ -160,7 +160,7 @@ namespace
   TEST_F(DoubleTest, operator_division_assign_with_reference)
   {
     Double x{2.25};
-    Double y{0.05};
+    const Double y{0.05};
 
     x /= y;
     ASSERT_DOUBLE_EQ(45.0, x.getValue());
@@ -178,8 +178,8 @@ namespace
 
   TEST_F(DoubleTest, operator_equals_with_reference)
   {
-    Double x{3.14159};
-    Double y{3.14159};
+    const Double x{3.14159};
+    const Double y{3.14159};
 
     ASSERT_TRUE(x == y);
     ASSERT_TRUE(y == x);
@@ -187,7 +187,7 @@ namespace
 
   TEST_F(DoubleTest, operator_equals_with_value)
   {
-    Double x{3.14159};
+    const Double x{3.14159};
 
     ASSERT_TRUE(x == 3.14159);
     ASSERT_TRUE(3.14159 == x.getValue());
@@ -195,8 +195,8 @@ namespace
 
   TEST_F(DoubleTest, operator_not_equal_with_reference)
   {
-    Double x{3.1415};
-    Double y{3.1414};
+    const Double x{3.1415};
+    const Double y{3.1414};
 
     ASSERT_TRUE(x != y);
     ASSERT_TRUE(y != x);
@@ -204,7 +204,7 @@ namespace
 
   TEST_F(DoubleTest, operator_not_equal_with_value)
   {
-    Double x{3.1415};
+    const Double x{3.1415};
 
     ASSERT_TRUE(x != 3.1414);
     ASSERT_TRUE(3.1414 != x.getValue());
@@ -212,15 +212,15 @@ namespace
 
   TEST_F(DoubleTest, operator_greater_than_with_reference)
   {
-    Double x{3.1415};
-    Double y{3.1414};
+    const Double x{3.1415};
+    const Double y{3.1414};
 
     ASSERT_TRUE(x > y);
   }
 
   TEST_F(DoubleTest, operator_greater_than_with_value)
   {
-    Double x{3.1415};
+    const Double x{3.1415};
     Double y{3.1414};
 
     ASSERT_TRUE(x > 3.1414);
@@ -228,9 +228,9 @@ namespace
 
   TEST_F(DoubleTest, operator_greater_than_equals_with_reference)
   {
-    Double x{3.1414};
-    Double y{3.1414};
-    Double z{3.1415};
+    const Double x{3.1414};
+    const Double y{3.1414};
+    const Double z{3.1415};
 
     ASSERT_TRUE(x >= y);
     ASSERT_TRUE(z >= y);
@@ -238,21 +238,21 @@ namespace
 
   TEST_F(DoubleTest, operator_greater_than_equals_with_value)
   {
-    Double x{3.1414};
+    const Double x{3.1414};
     ASSERT_TRUE(x >= 3.1414);
   }
 
   TEST_F(DoubleTest, operator_less_than_with_reference)
   {
-    Double x{3.1413};
-    Double y{3.1414};
+    const Double x{3.1413};
+    const Double y{3.1414};
 
     ASSERT_TRUE(x < y);
   }
 
   TEST_F(DoubleTest, operator_less_than_with_value)
   {
-    Double x{3.1413};
+    const Double x{3.1413};
     Double y{3.1414};
 
     ASSERT_TRUE(x < 3.1414);
@@ -260,9 +260,9 @@ namespace
 
   TEST_F(DoubleTest, operator_less_than_equals_with_reference)
   {
-    Double x{3.1414};
-    Double y{3.1414};
-    Double z{3.1415};
+    const Double x{3.1414};
+    const Double y{3.1414};
+    const Double z{3.1415};
 
     ASSERT_TRUE(x <= y);
     ASSERT_TRUE(x <= z);
@@ -270,7 +270,7 @@ namespace
 
   TEST_F(DoubleTest, operator_less_than_equals_with_value)
   {
-    Double x{3.1414};
+    const Double x{3.1414};
     ASSERT_TRUE(x <= 3.1414);
   }
 
@@ -320,13 +320,13 @@ namespace
 
   TEST_F(DoubleTest, getEpsilon)
   {
-    Double x{};
+    const Double x{};
     ASSERT_DOUBLE_EQ(0.00000001, x.getEpsilon());
   }
 
   TEST_F(DoubleTest, getValue)
   {
-    Double x{3.1415};
+    const Double x{3.1415};
     ASSERT_DOUBLE_EQ(3.1415, x.getValue());
   }
 

+ 45 - 45
test/cases/boxing/FloatTest.cpp

@@ -3,7 +3,7 @@
  * Company:         Lynar Studios
  * E-Mail:          webmaster@lynarstudios.com
  * Created:         2020-08-14
- * Changed:         2023-03-25
+ * Changed:         2025-12-21
  *
  * */
 
@@ -40,67 +40,67 @@ namespace
 
   TEST_F(FloatTest, operator_negative)
   {
-    Float x{3.25f};
+    const Float x{3.25f};
     ASSERT_FLOAT_EQ(-3.25f, -x);
   }
 
   TEST_F(FloatTest, operator_addition_with_reference)
   {
-    Float x{3.1415f};
-    Float y{2.223f};
-    Float z{x + y};
+    const Float x{3.1415f};
+    const Float y{2.223f};
+    const Float z{x + y};
 
     ASSERT_FLOAT_EQ(5.3645f, z.getValue());
   }
 
   TEST_F(FloatTest, operator_addition_with_value)
   {
-    Float x{3.1415f};
+    const Float x{3.1415f};
     ASSERT_FLOAT_EQ(5.3645f, x + 2.223f);
   }
 
   TEST_F(FloatTest, operator_multiplication_with_reference)
   {
-    Float x{3.14f};
-    Float y{2.22f};
-    Float z{x * y};
+    const Float x{3.14f};
+    const Float y{2.22f};
+    const Float z{x * y};
 
     ASSERT_FLOAT_EQ(6.9708f, z.getValue());
   }
 
   TEST_F(FloatTest, operator_multiplication_with_value)
   {
-    Float x{3.14f};
+    const Float x{3.14f};
     ASSERT_FLOAT_EQ(6.9708f, x * 2.22f);
   }
 
   TEST_F(FloatTest, operator_substraction_with_reference)
   {
-    Float x{3.1415f};
-    Float y{2.225f};
-    Float z{x - y};
+    const Float x{3.1415f};
+    const Float y{2.225f};
+    const Float z{x - y};
 
     ASSERT_FLOAT_EQ(0.9165f, z.getValue());
   }
 
   TEST_F(FloatTest, operator_substraction_with_value)
   {
-    Float x{3.1415f};
+    const Float x{3.1415f};
     ASSERT_FLOAT_EQ(0.9165f, x - 2.225f);
   }
 
   TEST_F(FloatTest, operator_division_with_reference)
   {
-    Float x{2.25f};
-    Float y{0.5f};
-    Float z{x / y};
+    const Float x{2.25f};
+    const Float y{0.5f};
+    const Float z{x / y};
 
     ASSERT_FLOAT_EQ(4.5f, z.getValue());
   }
 
   TEST_F(FloatTest, operator_division_with_value)
   {
-    Float x{2.25f};
+    const Float x{2.25f};
     ASSERT_FLOAT_EQ(4.5f, x / 0.5f);
   }
 
@@ -109,7 +109,7 @@ namespace
   TEST_F(FloatTest, operator_add_assign_with_reference)
   {
     Float x{2.25f};
-    Float y{3.14f};
+    const Float y{3.14f};
     x += y;
 
     ASSERT_FLOAT_EQ(5.39f, x.getValue());
@@ -126,7 +126,7 @@ namespace
   TEST_F(FloatTest, operator_sub_assign_with_reference)
   {
     Float x{2.25f};
-    Float y{1.14f};
+    const Float y{1.14f};
     x -= y;
 
     ASSERT_FLOAT_EQ(1.11f, x.getValue());
@@ -143,7 +143,7 @@ namespace
   TEST_F(FloatTest, operator_mul_assign_with_reference)
   {
     Float x{2.25f};
-    Float y{0.04f};
+    const Float y{0.04f};
     x *= y;
 
     ASSERT_FLOAT_EQ(0.09f, x.getValue());
@@ -160,7 +160,7 @@ namespace
   TEST_F(FloatTest, operator_division_assign_with_reference)
   {
     Float x{2.25f};
-    Float y{1.5f};
+    const Float y{1.5f};
     x /= y;
 
     ASSERT_FLOAT_EQ(1.5f, x.getValue());
@@ -178,8 +178,8 @@ namespace
 
   TEST_F(FloatTest, operator_equals_with_reference)
   {
-    Float x{3.14159f};
-    Float y{3.14159f};
+    const Float x{3.14159f};
+    const Float y{3.14159f};
 
     ASSERT_TRUE(x == y);
     ASSERT_TRUE(y == x);
@@ -187,14 +187,14 @@ namespace
 
   TEST_F(FloatTest, operator_equals_with_value)
   {
-    Float x{3.14159f};
+    const Float x{3.14159f};
     ASSERT_TRUE(x == 3.14159f);
   }
 
   TEST_F(FloatTest, operator_not_equals_with_reference)
   {
-    Float x{3.1415f};
-    Float y{3.1414f};
+    const Float x{3.1415f};
+    const Float y{3.1414f};
 
     ASSERT_TRUE(x != y);
     ASSERT_TRUE(y != x);
@@ -202,14 +202,14 @@ namespace
 
   TEST_F(FloatTest, operator_not_equals_with_value)
   {
-    Float x{3.1415f};
+    const Float x{3.1415f};
     ASSERT_TRUE(x != 3.1414f);
   }
 
   TEST_F(FloatTest, operator_greater_than_with_reference)
   {
-    Float x{3.1415f};
-    Float y{3.1414f};
+    const Float x{3.1415f};
+    const Float y{3.1414f};
 
     ASSERT_TRUE(x > y);
     ASSERT_TRUE(x > 3.1414f);
@@ -217,15 +217,15 @@ namespace
 
   TEST_F(FloatTest, operator_greater_than_with_value)
   {
-    Float x{3.1415f};
+    const Float x{3.1415f};
     ASSERT_TRUE(x > 3.1414f);
   }
 
   TEST_F(FloatTest, operator_greater_than_equals_with_reference)
   {
-    Float x{3.1414f};
-    Float y{3.1414f};
-    Float z{3.1415f};
+    const Float x{3.1414f};
+    const Float y{3.1414f};
+    const Float z{3.1415f};
 
     ASSERT_TRUE(x >= y);
     ASSERT_TRUE(z >= y);
@@ -233,8 +233,8 @@ namespace
 
   TEST_F(FloatTest, operator_greater_than_equals_with_value)
   {
-    Float x{3.1414f};
-    Float z{3.1415f};
+    const Float x{3.1414f};
+    const Float z{3.1415f};
 
     ASSERT_TRUE(x >= 3.1414f);
     ASSERT_TRUE(z >= 3.1414f);
@@ -242,23 +242,23 @@ namespace
 
   TEST_F(FloatTest, operator_less_than_with_reference)
   {
-    Float x{3.1413f};
-    Float y{3.1414f};
+    const Float x{3.1413f};
+    const Float y{3.1414f};
 
     ASSERT_TRUE(x < y);
   }
 
   TEST_F(FloatTest, operator_less_than_with_value)
   {
-    Float x{3.1413f};
+    const Float x{3.1413f};
     ASSERT_TRUE(x < 3.1414f);
   }
 
   TEST_F(FloatTest, operator_less_than_equals_with_reference)
   {
-    Float x{3.1414f};
-    Float y{3.1414f};
-    Float z{3.1415f};
+    const Float x{3.1414f};
+    const Float y{3.1414f};
+    const Float z{3.1415f};
 
     ASSERT_TRUE(x <= y);
     ASSERT_TRUE(x <= z);
@@ -266,7 +266,7 @@ namespace
 
   TEST_F(FloatTest, operator_less_than_equals_with_value)
   {
-    Float x{3.1414f};
+    const Float x{3.1414f};
 
     ASSERT_TRUE(x <= 3.1414f);
     ASSERT_TRUE(x <= 3.1415f);
@@ -310,13 +310,13 @@ namespace
 
   TEST_F(FloatTest, getEpsilon)
   {
-    Float x{};
+    const Float x{};
     ASSERT_FLOAT_EQ(0.00001f, x.getEpsilon());
   }
 
   TEST_F(FloatTest, getValue)
   {
-    Float x{3.1415f};
+    const Float x{3.1415f};
     ASSERT_FLOAT_EQ(3.1415f, x.getValue());
   }
 

+ 43 - 43
test/cases/boxing/IntegerTest.cpp

@@ -3,7 +3,7 @@
  * Company:         Lynar Studios
  * E-Mail:          webmaster@lynarstudios.com
  * Created:         2020-08-09
- * Changed:         2023-05-17
+ * Changed:         2025-12-21
  *
  * */
 
@@ -30,7 +30,7 @@ namespace
   TEST_F(IntegerTest, operator_assignment_with_reference)
   {
     Integer x{};
-    Integer y{3};
+    const Integer y{3};
     x = y;
 
     ASSERT_EQ(3, x.getValue());
@@ -48,8 +48,8 @@ namespace
 
   TEST_F(IntegerTest, operator_negative)
   {
-    Integer x{13};
-    Integer y{-13};
+    const Integer x{13};
+    const Integer y{-13};
 
     ASSERT_EQ(-13, -x);
     ASSERT_EQ(13, -y);
@@ -57,57 +57,57 @@ namespace
 
   TEST_F(IntegerTest, operator_add_with_reference)
   {
-    Integer x{13};
-    Integer y{7};
+    const Integer x{13};
+    const Integer y{7};
 
     ASSERT_EQ(20, x + y);
   }
 
   TEST_F(IntegerTest, operator_add_with_value)
   {
-    Integer x{13};
+    const Integer x{13};
     ASSERT_EQ(20, x + 7);
   }
 
   TEST_F(IntegerTest, operator_mul_with_reference)
   {
-    Integer x{3};
-    Integer y{7};
+    const Integer x{3};
+    const Integer y{7};
 
     ASSERT_EQ(21, x * y);
   }
 
   TEST_F(IntegerTest, operator_mul_with_value)
   {
-    Integer x{3};
+    const Integer x{3};
     ASSERT_EQ(21, x * 7);
   }
 
   TEST_F(IntegerTest, operator_sub_with_reference)
   {
-    Integer x{51};
-    Integer y{17};
+    const Integer x{51};
+    const Integer y{17};
 
     ASSERT_EQ(34, x - y);
   }
 
   TEST_F(IntegerTest, operator_sub_with_value)
   {
-    Integer x{51};
+    const Integer x{51};
     ASSERT_EQ(34, x - 17);
   }
 
   TEST_F(IntegerTest, operator_div_with_reference)
   {
-    Integer x{81};
-    Integer y{9};
+    const Integer x{81};
+    const Integer y{9};
 
     ASSERT_EQ(9, x / y);
   }
 
   TEST_F(IntegerTest, operator_div_with_value)
   {
-    Integer x{81};
+    const Integer x{81};
     ASSERT_EQ(9, x / 9);
   }
 
@@ -149,15 +149,15 @@ namespace
 
   TEST_F(IntegerTest, operator_mod_with_reference)
   {
-    Integer x{85};
-    Integer y{9};
+    const Integer x{85};
+    const Integer y{9};
 
     ASSERT_EQ(4, x % y);
   }
 
   TEST_F(IntegerTest, operator_mod_with_value)
   {
-    Integer x{85};
+    const Integer x{85};
     ASSERT_EQ(4, x % 9);
   }
 
@@ -166,7 +166,7 @@ namespace
   TEST_F(IntegerTest, operator_add_assign_with_reference)
   {
     Integer x{4};
-    Integer y{2};
+    const Integer y{2};
     x += y;
 
     ASSERT_EQ(6, x.getValue());
@@ -183,7 +183,7 @@ namespace
   TEST_F(IntegerTest, operator_sub_assign_with_reference)
   {
     Integer x{14};
-    Integer y{2};
+    const Integer y{2};
     x -= y;
 
     ASSERT_EQ(12, x.getValue());
@@ -200,7 +200,7 @@ namespace
   TEST_F(IntegerTest, operator_mul_assign_with_reference)
   {
     Integer x{6};
-    Integer y{3};
+    const Integer y{3};
     x *= y;
 
     ASSERT_EQ(18, x.getValue());
@@ -217,7 +217,7 @@ namespace
   TEST_F(IntegerTest, operator_div_assign_with_reference)
   {
     Integer x{12};
-    Integer y{3};
+    const Integer y{3};
     x /= y;
 
     ASSERT_EQ(4, x.getValue());
@@ -271,86 +271,86 @@ namespace
 
   TEST_F(IntegerTest, operator_equals_with_reference)
   {
-    Integer x{12};
-    Integer y{12};
+    const Integer x{12};
+    const Integer y{12};
 
     ASSERT_TRUE(x == y);
   }
 
   TEST_F(IntegerTest, operator_equals_with_value)
   {
-    Integer x{12};
+    const Integer x{12};
 
     ASSERT_TRUE(x == 12);
   }
 
   TEST_F(IntegerTest, operator_not_equals_with_reference)
   {
-    Integer x{12};
-    Integer y{3};
+    const Integer x{12};
+    const Integer y{3};
 
     ASSERT_TRUE(x != y);
   }
 
   TEST_F(IntegerTest, operator_not_equals_with_value)
   {
-    Integer x{12};
+    const Integer x{12};
     ASSERT_TRUE(x != 3);
   }
 
   TEST_F(IntegerTest, operator_greater_than_with_reference)
   {
-    Integer x{12};
-    Integer y{3};
+    const Integer x{12};
+    const Integer y{3};
 
     ASSERT_TRUE(x > y);
   }
 
   TEST_F(IntegerTest, operator_greater_than_with_value)
   {
-    Integer x{12};
+    const Integer x{12};
     ASSERT_TRUE(x > 3);
   }
 
   TEST_F(IntegerTest, operator_greater_than_equals_with_reference)
   {
-    Integer x{12};
-    Integer y{12};
+    const Integer x{12};
+    const Integer y{12};
 
     ASSERT_TRUE(x >= y);
   }
 
   TEST_F(IntegerTest, operator_greater_than_equals_with_value)
   {
-    Integer x{12};
+    const Integer x{12};
     ASSERT_TRUE(x >= 12);
   }
 
   TEST_F(IntegerTest, operator_less_than_with_reference)
   {
-    Integer x{10};
-    Integer y{12};
+    const Integer x{10};
+    const Integer y{12};
 
     ASSERT_TRUE(x < y);
   }
 
   TEST_F(IntegerTest, operator_less_than_with_value)
   {
-    Integer x{10};
+    const Integer x{10};
     ASSERT_TRUE(x < 12);
   }
 
   TEST_F(IntegerTest, operator_less_than_equals_with_reference)
   {
-    Integer x{10};
-    Integer y{10};
+    const Integer x{10};
+    const Integer y{10};
 
     ASSERT_TRUE(x <= y);
   }
 
   TEST_F(IntegerTest, operator_less_than_equals_with_value)
   {
-    Integer x{10};
+    const Integer x{10};
     ASSERT_TRUE(x <= 10);
   }
 
@@ -358,7 +358,7 @@ namespace
 
   TEST_F(IntegerTest, operator_negation)
   {
-    Integer x{};
+    const Integer x{};
     ASSERT_TRUE(!x);
   }
 
@@ -408,7 +408,7 @@ namespace
 
   TEST_F(IntegerTest, getValue)
   {
-    Integer x{3};
+    const Integer x{3};
     ASSERT_EQ(3, x.getValue());
   }
 

+ 61 - 61
test/cases/boxing/LongTest.cpp

@@ -3,7 +3,7 @@
  * Company:         Lynar Studios
  * E-Mail:          webmaster@lynarstudios.com
  * Created:         2020-08-17
- * Changed:         2023-05-17
+ * Changed:         2025-12-21
  *
  * */
 
@@ -31,7 +31,7 @@ namespace
   TEST_F(LongTest, operator_assignment_with_reference)
   {
     Long x{13};
-    Long y{3};
+    const Long y{3};
     x = y;
 
     ASSERT_EQ(3, x.getValue());
@@ -40,7 +40,7 @@ namespace
   TEST_F(LongTest, operator_assignment_with_value)
   {
     Long x{13};
-    x = (long_type) 3;
+    x = 3;
 
     ASSERT_EQ(3, x.getValue());
   }
@@ -49,8 +49,8 @@ namespace
 
   TEST_F(LongTest, operator_negative)
   {
-    Long x{13};
-    Long y{-13};
+    const Long x{13};
+    const Long y{-13};
 
     ASSERT_EQ(-13, -x);
     ASSERT_EQ(13, -y);
@@ -58,58 +58,58 @@ namespace
 
   TEST_F(LongTest, operator_add_with_reference)
   {
-    Long x{13};
-    Long y{7};
+    const Long x{13};
+    const Long y{7};
 
     ASSERT_EQ(20, x + y);
   }
 
   TEST_F(LongTest, operator_add_with_value)
   {
-    Long x{13};
-    ASSERT_EQ(20, x + (long_type) 7);
+    const Long x{13};
+    ASSERT_EQ(20, x + 7);
   }
 
   TEST_F(LongTest, operator_mul_with_reference)
   {
-    Long x{3};
-    Long y{7};
+    const Long x{3};
+    const Long y{7};
 
     ASSERT_EQ(21, x * y);
   }
 
   TEST_F(LongTest, operator_mul_with_value)
   {
-    Long x{3};
-    ASSERT_EQ(21, x * (long_type) 7);
+    const Long x{3};
+    ASSERT_EQ(21, x * 7);
   }
 
   TEST_F(LongTest, operator_sub_with_reference)
   {
-    Long x{51};
-    Long y{17};
+    const Long x{51};
+    const Long y{17};
 
     ASSERT_EQ(34, x - y);
   }
 
   TEST_F(LongTest, operator_sub_with_value)
   {
-    Long x{51};
-    ASSERT_EQ(34, x - (long_type) 17);
+    const Long x{51};
+    ASSERT_EQ(34, x - 17);
   }
 
   TEST_F(LongTest, operator_div_with_reference)
   {
-    Long x{81};
-    Long y{9};
+    const Long x{81};
+    const Long y{9};
 
     ASSERT_EQ(9, x / y);
   }
 
   TEST_F(LongTest, operator_div_with_value)
   {
-    Long x{81};
-    ASSERT_EQ(9, x / (long_type) 9);
+    const Long x{81};
+    ASSERT_EQ(9, x / 9);
   }
 
   TEST_F(LongTest, operator_div_by_zero_with_reference)
@@ -138,7 +138,7 @@ namespace
           try
           {
             Long x{9};
-            x = x / (long_type) 0;
+            x = x / 0;
           }
           catch (const IllegalArithmeticOperationException &_exception)
           {
@@ -150,16 +150,16 @@ namespace
 
   TEST_F(LongTest, operator_mod_with_reference)
   {
-    Long x{85};
-    Long y{9};
+    const Long x{85};
+    const Long y{9};
 
     ASSERT_EQ(4, x % y);
   }
 
   TEST_F(LongTest, operator_mod_with_value)
   {
-    Long x{85};
-    ASSERT_EQ(4, x % (long_type) 9);
+    const Long x{85};
+    ASSERT_EQ(4, x % 9);
   }
 
   // compound operators
@@ -167,7 +167,7 @@ namespace
   TEST_F(LongTest, operator_add_equals_with_reference)
   {
     Long x{4};
-    Long y{2};
+    const Long y{2};
     x += y;
 
     ASSERT_EQ(6, x.getValue());
@@ -176,7 +176,7 @@ namespace
   TEST_F(LongTest, operator_add_equals_with_value)
   {
     Long x{4};
-    x += (long_type) 2;
+    x += 2;
 
     ASSERT_EQ(6, x.getValue());
   }
@@ -184,7 +184,7 @@ namespace
   TEST_F(LongTest, operator_sub_equals_with_reference)
   {
     Long x{14};
-    Long y{2};
+    const Long y{2};
     x -= y;
 
     ASSERT_EQ(12, x.getValue());
@@ -193,7 +193,7 @@ namespace
   TEST_F(LongTest, operator_sub_equals_with_value)
   {
     Long x{14};
-    x -= (long_type) 2;
+    x -= 2;
 
     ASSERT_EQ(12, x.getValue());
   }
@@ -201,7 +201,7 @@ namespace
   TEST_F(LongTest, operator_mul_equals_with_reference)
   {
     Long x{6};
-    Long y{3};
+    const Long y{3};
     x *= y;
 
     ASSERT_EQ(18, x.getValue());
@@ -210,7 +210,7 @@ namespace
   TEST_F(LongTest, operator_mul_equals_with_value)
   {
     Long x{6};
-    x *= (long_type) 3;
+    x *= 3;
 
     ASSERT_EQ(18, x.getValue());
   }
@@ -218,7 +218,7 @@ namespace
   TEST_F(LongTest, operator_div_equals_with_reference)
   {
     Long x{12};
-    Long y{3};
+    const Long y{3};
     x /= y;
 
     ASSERT_EQ(4, x.getValue());
@@ -227,7 +227,7 @@ namespace
   TEST_F(LongTest, operator_div_equals_with_value)
   {
     Long x{12};
-    x /= (long_type) 3;
+    x /= 3;
 
     ASSERT_EQ(4, x.getValue());
   }
@@ -258,7 +258,7 @@ namespace
           try
           {
             Long x{9};
-            x = x /= (long_type) 0;
+            x = x /= 0;
           }
           catch (const IllegalArithmeticOperationException &_exception)
           {
@@ -272,95 +272,95 @@ namespace
 
   TEST_F(LongTest, operator_equals_with_reference)
   {
-    Long x{12};
-    Long y{12};
+    const Long x{12};
+    const Long y{12};
 
     ASSERT_TRUE(x == y);
   }
 
   TEST_F(LongTest, operator_equals_with_value)
   {
-    Long x{12};
-    ASSERT_TRUE(x == (long_type) 12);
+    const Long x{12};
+    ASSERT_TRUE(x == 12);
   }
 
   TEST_F(LongTest, operator_not_equals_with_reference)
   {
-    Long x{12};
-    Long y{3};
+    const Long x{12};
+    const Long y{3};
 
     ASSERT_TRUE(x != y);
   }
 
   TEST_F(LongTest, operator_not_equals_with_value)
   {
-    Long x{12};
-    ASSERT_TRUE(x != (long_type) 3);
+    const Long x{12};
+    ASSERT_TRUE(x != 3);
   }
 
   TEST_F(LongTest, operator_greater_than_with_reference)
   {
-    Long x{12};
-    Long y{3};
+    const Long x{12};
+    const Long y{3};
 
     ASSERT_TRUE(x > y);
   }
 
   TEST_F(LongTest, operator_greater_than_with_value)
   {
-    Long x{12};
-    ASSERT_TRUE(x > (long_type) 3);
+    const Long x{12};
+    ASSERT_TRUE(x > 3);
   }
 
   TEST_F(LongTest, operator_greater_than_equals_with_reference)
   {
-    Long x{12};
-    Long y{12};
+    const Long x{12};
+    const Long y{12};
 
     ASSERT_TRUE(x >= y);
   }
 
   TEST_F(LongTest, operator_greater_than_equals_with_value)
   {
-    Long x{12};
-    ASSERT_TRUE(x >= (long_type) 12);
+    const Long x{12};
+    ASSERT_TRUE(x >= 12);
   }
 
   TEST_F(LongTest, operator_less_than_with_reference)
   {
-    Long x{10};
-    Long y{12};
+    const Long x{10};
+    const Long y{12};
 
     ASSERT_TRUE(x < y);
   }
 
   TEST_F(LongTest, operator_less_than_with_value)
   {
-    Long x{10};
+    const Long x{10};
     Long y{12};
 
-    ASSERT_TRUE(x < (long_type) 12);
+    ASSERT_TRUE(x < 12);
   }
 
   TEST_F(LongTest, operator_less_than_equals_with_reference)
   {
-    Long x{10};
-    Long y{10};
+    const Long x{10};
+    const Long y{10};
 
     ASSERT_TRUE(x <= y);
   }
 
   TEST_F(LongTest, operator_less_than_equals_with_value)
   {
-    Long x{10};
-    ASSERT_TRUE(x <= (long_type) 10);
+    const Long x{10};
+    ASSERT_TRUE(x <= 10);
   }
 
   // logical operators
 
   TEST_F(LongTest, operator_negation)
   {
-    Long x{};
+    const Long x{};
     ASSERT_TRUE(!x);
   }
 
@@ -410,7 +410,7 @@ namespace
 
   TEST_F(LongTest, getValue)
   {
-    Long x{3};
+    const Long x{3};
     ASSERT_EQ(3, x.getValue());
   }
 

+ 11 - 11
test/cases/boxing/StringTest.cpp

@@ -3,7 +3,7 @@
  * Company:         Lynar Studios
  * E-Mail:          webmaster@lynarstudios.com
  * Created:         2020-08-14
- * Changed:         2023-03-25
+ * Changed:         2025-12-21
  *
  * */
 
@@ -39,7 +39,7 @@ namespace
   TEST_F(StringTest, operator_add)
   {
     String greetings{"Hello! "};
-    String question{"How are you? "};
+    const String question{"How are you? "};
     const string &answer = "I'm good by the way!";
 
     greetings = greetings + question + answer;
@@ -60,7 +60,7 @@ namespace
   TEST_F(StringTest, operator_add_assign_with_reference)
   {
     String text{};
-    String hello{"Hi!"};
+    const String hello{"Hi!"};
 
     text += hello;
     ASSERT_STREQ("Hi!", text.toString().c_str());
@@ -78,8 +78,8 @@ namespace
 
   TEST_F(StringTest, operator_equals_with_reference)
   {
-    String text{"Hi!"};
-    String hello{"Hi!"};
+    const String text{"Hi!"};
+    const String hello{"Hi!"};
 
     ASSERT_TRUE(text == hello);
     ASSERT_TRUE(hello == text);
@@ -87,21 +87,21 @@ namespace
 
   TEST_F(StringTest, operator_equals_with_value)
   {
-    String hello{"Hi!"};
+    const String hello{"Hi!"};
     ASSERT_TRUE(hello == "Hi!");
   }
 
   TEST_F(StringTest, operator_not_equals_with_reference)
   {
-    String text{"Hi!"};
-    String hello{"Hello!"};
+    const String text{"Hi!"};
+    const String hello{"Hello!"};
 
     ASSERT_TRUE(text != hello);
   }
 
   TEST_F(StringTest, operator_not_equals_with_value)
   {
-    String text{"Hi!"};
+    const String text{"Hi!"};
     ASSERT_TRUE(text != "Hello!");
   }
 
@@ -157,8 +157,8 @@ namespace
 
   TEST_F(StringTest, equalsIgnoreCase)
   {
-    String text{"Hello!"};
-    String hello{"HeLLo!"};
+    const String text{"Hello!"};
+    const String hello{"HeLLo!"};
 
     ASSERT_TRUE(text.equalsIgnoreCase(hello));
     ASSERT_TRUE(text.equalsIgnoreCase("HeLLO!"));

+ 3 - 3
test/cases/core/ClassTest.cpp

@@ -3,7 +3,7 @@
  * Company:         Lynar Studios
  * E-Mail:          webmaster@lynarstudios.com
  * Created:         2020-08-16
- * Changed:         2023-05-15
+ * Changed:         2025-12-21
  *
  * */
 
@@ -46,13 +46,13 @@ namespace
 
   TEST_F(ClassTest, destructor)
   {
-    auto object = make_shared<ClassWrapper>();
+    const auto object = make_shared<ClassWrapper>();
     EXPECT_CALL(*object, Die());
   }
 
   TEST_F(ClassTest, getClassName)
   {
-    Class object{"Class"};
+    const Class object{"Class"};
     ASSERT_STREQ("Class", object.getClassName().c_str());
   }
 

+ 4 - 4
test/cases/core/VersionTest.cpp

@@ -3,7 +3,7 @@
  * Company:         Lynar Studios
  * E-Mail:          webmaster@lynarstudios.com
  * Created:         2020-09-28
- * Changed:         2023-03-25
+ * Changed:         2025-12-21
  *
  * */
 
@@ -45,19 +45,19 @@ namespace
 
   TEST_F(VersionTest, getMajorVersion)
   {
-    Version version{13, 2, 4};
+    const Version version{13, 2, 4};
     ASSERT_EQ(13, version.getMajorVersion());
   }
 
   TEST_F(VersionTest, getMinorVersion)
   {
-    Version version{13, 2, 4};
+    const Version version{13, 2, 4};
     ASSERT_EQ(2, version.getMinorVersion());
   }
 
   TEST_F(VersionTest, getPatchVersion)
   {
-    Version version{13, 2, 4};
+    const Version version{13, 2, 4};
     ASSERT_EQ(4, version.getPatchVersion());
   }
 

+ 5 - 5
test/cases/core/evaluator/EmptyStringArgumentEvaluatorTest.cpp

@@ -3,7 +3,7 @@
 * Company:         Lynar Studios
 * E-Mail:          webmaster@lynarstudios.com
 * Created:         2023-02-08
-* Changed:         2023-03-25
+* Changed:         2025-12-23
 *
 * */
 
@@ -36,8 +36,8 @@ namespace
           }
           catch (const IllegalArgumentException &_exception)
           {
-            string actual = _exception.what();
-            string expected = _exception.getName() + " thrown - passed argument is empty!";
+            const string actual = _exception.what();
+            const string expected = _exception.getName() + " thrown - passed argument is empty!";
 
             ASSERT_STREQ(expected.c_str(), actual.c_str());
             throw;
@@ -56,8 +56,8 @@ namespace
           }
           catch (const IllegalArgumentException &_exception)
           {
-            string actual = _exception.what();
-            string expected = _exception.getName() + " thrown - this id is empty!";
+            const string actual = _exception.what();
+            const string expected = _exception.getName() + " thrown - this id is empty!";
 
             ASSERT_STREQ(expected.c_str(), actual.c_str());
             throw;

+ 3 - 3
test/cases/core/evaluator/IndexOutOfBoundsEvaluatorTest.cpp

@@ -3,7 +3,7 @@
 * Company:         Lynar Studios
 * E-Mail:          webmaster@lynarstudios.com
 * Created:         2023-02-10
-* Changed:         2023-03-25
+* Changed:         2025-12-23
 *
 * */
 
@@ -56,8 +56,8 @@ namespace
           }
           catch (const IndexOutOfBoundsException &_exception)
           {
-            string actual = _exception.what();
-            string expected = _exception.getName() + " thrown - index 3 is not in range of the containers size, which is 2!";
+            const string actual = _exception.what();
+            const string expected = _exception.getName() + " thrown - index 3 is not in range of the containers size, which is 2!";
 
             ASSERT_STREQ(expected.c_str(), actual.c_str());
             throw;

+ 3 - 3
test/cases/core/evaluator/NullPointerArgumentEvaluatorTest.cpp

@@ -3,7 +3,7 @@
 * Company:         Lynar Studios
 * E-Mail:          webmaster@lynarstudios.com
 * Created:         2023-02-08
-* Changed:         2023-04-07
+* Changed:         2025-12-23
 *
 * */
 
@@ -102,8 +102,8 @@ namespace
           }
           catch (const IllegalArgumentException &_exception)
           {
-            string actual = _exception.what();
-            string expected = _exception.getName() + " thrown - this reference is null!";
+            const string actual = _exception.what();
+            const string expected = _exception.getName() + " thrown - this reference is null!";
 
             ASSERT_STREQ(expected.c_str(), actual.c_str());
             throw;

+ 7 - 7
test/cases/core/evaluator/NullPointerEvaluatorTest.cpp

@@ -3,7 +3,7 @@
 * Company:         Lynar Studios
 * E-Mail:          webmaster@lynarstudios.com
 * Created:         2023-02-08
-* Changed:         2023-05-22
+* Changed:         2025-12-23
 *
 * */
 
@@ -70,7 +70,7 @@ namespace
 
   TEST_F(NullPointerEvaluatorTest, evaluate)
   {
-    shared_ptr<void> value{};
+    const shared_ptr<void> value{};
 
     EXPECT_THROW(
         {
@@ -80,8 +80,8 @@ namespace
           }
           catch (const NullPointerException &_exception)
           {
-            string actual = _exception.what();
-            string expected = _exception.getName() + " thrown - reference in use is null!";
+            const string actual = _exception.what();
+            const string expected = _exception.getName() + " thrown - reference in use is null!";
 
             ASSERT_STREQ(expected.c_str(), actual.c_str());
             throw;
@@ -92,7 +92,7 @@ namespace
 
   TEST_F(NullPointerEvaluatorTest, evaluate_dedicated_message)
   {
-    shared_ptr<void> value{};
+    const shared_ptr<void> value{};
 
     EXPECT_THROW(
         {
@@ -102,8 +102,8 @@ namespace
           }
           catch (const NullPointerException &_exception)
           {
-            string actual = _exception.what();
-            string expected = _exception.getName() + " thrown - this reference is not set and causes this exception!";
+            const string actual = _exception.what();
+            const string expected = _exception.getName() + " thrown - this reference is not set and causes this exception!";
 
             ASSERT_STREQ(expected.c_str(), actual.c_str());
             throw;

+ 3 - 3
test/cases/core/evaluator/RawNullPointerArgumentEvaluatorTest.cpp

@@ -3,7 +3,7 @@
 * Company:         Lynar Studios
 * E-Mail:          webmaster@lynarstudios.com
 * Created:         2023-05-23
-* Changed:         2023-05-23
+* Changed:         2025-12-23
 *
 * */
 
@@ -36,8 +36,8 @@ namespace
           }
           catch (const IllegalArgumentException &_exception)
           {
-            string actual = _exception.what();
-            string expected = _exception.getName() + " thrown - passed argument is null!";
+            const string actual = _exception.what();
+            const string expected = _exception.getName() + " thrown - passed argument is null!";
 
             ASSERT_STREQ(expected.c_str(), actual.c_str());
             throw;

+ 3 - 3
test/cases/core/evaluator/RawNullPointerEvaluatorTest.cpp

@@ -3,7 +3,7 @@
 * Company:         Lynar Studios
 * E-Mail:          webmaster@lynarstudios.com
 * Created:         2023-05-24
-* Changed:         2023-05-24
+* Changed:         2025-12-23
 *
 * */
 
@@ -36,8 +36,8 @@ namespace
           }
           catch (const NullPointerException &_exception)
           {
-            string actual = _exception.what();
-            string expected = _exception.getName() + " thrown - reference in use is null!";
+            const string actual = _exception.what();
+            const string expected = _exception.getName() + " thrown - reference in use is null!";
 
             ASSERT_STREQ(expected.c_str(), actual.c_str());
             throw;

+ 5 - 5
test/cases/core/exception/EventNotHandledExceptionTest.cpp

@@ -3,7 +3,7 @@
  * Company:         Lynar Studios
  * E-Mail:          webmaster@lynarstudios.com
  * Created:         2021-05-27
- * Changed:         2023-03-25
+ * Changed:         2025-12-23
  *
  * */
 
@@ -35,8 +35,8 @@ namespace
           }
           catch (const EventNotHandledException &_exception)
           {
-            string actual = _exception.what();
-            string expected = _exception.getName() + " thrown - event was not handled - nothing happened!";
+            const string actual = _exception.what();
+            const string expected = _exception.getName() + " thrown - event was not handled - nothing happened!";
 
             EXPECT_STREQ(expected.c_str(), actual.c_str());
             throw;
@@ -55,8 +55,8 @@ namespace
           }
           catch (const EventNotHandledException &_exception)
           {
-            string actual = _exception.what();
-            string expected = _exception.getName() + " thrown - id: OPEN_DOOR";
+            const string actual = _exception.what();
+            const string expected = _exception.getName() + " thrown - id: OPEN_DOOR";
 
             EXPECT_STREQ(expected.c_str(), actual.c_str());
             throw;

+ 3 - 3
test/cases/core/exception/ExceptionMessageTest.cpp

@@ -3,7 +3,7 @@
 * Company:         Lynar Studios
 * E-Mail:          webmaster@lynarstudios.com
 * Created:         2023-02-07
-* Changed:         2023-05-22
+* Changed:         2025-12-21
 *
 * */
 
@@ -27,9 +27,9 @@ namespace
 
   TEST_F(ExceptionMessageTest, toCharacterPointer)
   {
-    string text = "hello!";
+    const string text = "hello!";
     ExceptionMessage message{text};
-    string_view characterField = message.toCharacterPointer();
+    const string_view characterField = message.toCharacterPointer();
 
     ASSERT_STREQ(text.c_str(), characterField.data());
   }

+ 5 - 5
test/cases/core/exception/FileNotFoundExceptionTest.cpp

@@ -3,7 +3,7 @@
  * Company:         Lynar Studios
  * E-Mail:          webmaster@lynarstudios.com
  * Created:         2021-05-01
- * Changed:         2023-03-25
+ * Changed:         2025-12-23
  *
  * */
 
@@ -35,8 +35,8 @@ namespace
           }
           catch (const FileNotFoundException &_exception)
           {
-            string actual = _exception.what();
-            string expected = _exception.getName() + " thrown - file not found!";
+            const string actual = _exception.what();
+            const string expected = _exception.getName() + " thrown - file not found!";
 
             EXPECT_STREQ(expected.c_str(), actual.c_str());
             throw;
@@ -55,8 +55,8 @@ namespace
           }
           catch (const FileNotFoundException &_exception)
           {
-            string actual = _exception.what();
-            string expected = _exception.getName() + R"( thrown - "settings.txt" not found!)";
+            const string actual = _exception.what();
+            const string expected = _exception.getName() + R"( thrown - "settings.txt" not found!)";
 
             EXPECT_STREQ(expected.c_str(), actual.c_str());
             throw;

+ 5 - 5
test/cases/core/exception/FileOperationExceptionTest.cpp

@@ -3,7 +3,7 @@
  * Company:         Lynar Studios
  * E-Mail:          webmaster@lynarstudios.com
  * Created:         2021-05-01
- * Changed:         2023-03-25
+ * Changed:         2025-12-23
  *
  * */
 
@@ -35,8 +35,8 @@ namespace
           }
           catch (const FileOperationException &_exception)
           {
-            string actual = _exception.what();
-            string expected = _exception.getName() + " thrown - file operation failed!";
+            const string actual = _exception.what();
+            const string expected = _exception.getName() + " thrown - file operation failed!";
 
             EXPECT_STREQ(expected.c_str(), actual.c_str());
             throw;
@@ -55,8 +55,8 @@ namespace
           }
           catch (const FileOperationException &_exception)
           {
-            string actual = _exception.what();
-            string expected = _exception.getName() + R"( thrown - creating directory "tmp")";
+            const string actual = _exception.what();
+            const string expected = _exception.getName() + R"( thrown - creating directory "tmp")";
 
             EXPECT_STREQ(expected.c_str(), actual.c_str());
             throw;

Một số tệp đã không được hiển thị bởi vì quá nhiều tập tin thay đổi trong này khác