Przeglądaj źródła

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

Patrick-Christopher Mattulat 2 miesięcy temu
rodzic
commit
c499d3c636
100 zmienionych plików z 1363 dodań i 395 usunięć
  1. 1 5
      .gitignore
  2. 10 20
      CMakeLists.txt
  3. 0 14
      LICENSE.MIT
  4. 165 0
      LICENSE.txt
  5. 29 11
      README.md
  6. 19 0
      coline.yml
  7. 29 0
      config/scripts/init.ps1
  8. 44 0
      config/scripts/init.sh
  9. 44 0
      config/scripts/init.zsh
  10. 379 0
      doc/coline.html
  11. BIN
      doc/event-handling-uml.png
  12. 2 0
      doc/internal/check-list.txt
  13. 31 0
      doc/internal/coding-guidelines.md
  14. 0 0
      doc/internal/section-pair-2023-standard.odt
  15. BIN
      doc/internal/section-pair-2023-standard.pdf
  16. BIN
      doc/state-machine-test.png
  17. 6 1
      include/ls-std/boxing/Boolean.hpp
  18. 6 1
      include/ls-std/boxing/Double.hpp
  19. 6 1
      include/ls-std/boxing/Float.hpp
  20. 6 1
      include/ls-std/boxing/Integer.hpp
  21. 6 1
      include/ls-std/boxing/Long.hpp
  22. 6 1
      include/ls-std/boxing/String.hpp
  23. 6 1
      include/ls-std/core/Class.hpp
  24. 6 1
      include/ls-std/core/ConditionalFunctionExecutor.hpp
  25. 6 1
      include/ls-std/core/LibraryVersion.hpp
  26. 6 1
      include/ls-std/core/Version.hpp
  27. 6 1
      include/ls-std/core/evaluator/EmptyStringArgumentEvaluator.hpp
  28. 6 1
      include/ls-std/core/evaluator/IndexOutOfBoundsEvaluator.hpp
  29. 6 1
      include/ls-std/core/evaluator/NullPointerArgumentEvaluator.hpp
  30. 6 1
      include/ls-std/core/evaluator/NullPointerEvaluator.hpp
  31. 6 1
      include/ls-std/core/evaluator/RawNullPointerArgumentEvaluator.hpp
  32. 6 1
      include/ls-std/core/evaluator/RawNullPointerEvaluator.hpp
  33. 6 1
      include/ls-std/core/exception/EventNotHandledException.hpp
  34. 0 31
      include/ls-std/core/exception/EventNotSubscribedException.hpp
  35. 6 1
      include/ls-std/core/exception/Exception.hpp
  36. 6 1
      include/ls-std/core/exception/ExceptionMessage.hpp
  37. 6 1
      include/ls-std/core/exception/FileNotFoundException.hpp
  38. 6 1
      include/ls-std/core/exception/FileOperationException.hpp
  39. 6 1
      include/ls-std/core/exception/IllegalArgumentException.hpp
  40. 6 1
      include/ls-std/core/exception/IllegalArithmeticOperationException.hpp
  41. 6 1
      include/ls-std/core/exception/IncompleteJsonException.hpp
  42. 6 1
      include/ls-std/core/exception/IndexOutOfBoundsException.hpp
  43. 6 1
      include/ls-std/core/exception/NotImplementedException.hpp
  44. 6 1
      include/ls-std/core/exception/NullPointerException.hpp
  45. 0 32
      include/ls-std/core/interface/IEventSubscriber.hpp
  46. 6 1
      include/ls-std/core/jni/JniApi.hpp
  47. 6 1
      include/ls-std/core/jni/JniClass.hpp
  48. 6 1
      include/ls-std/core/jni/JniClassParameter.hpp
  49. 6 1
      include/ls-std/core/jni/JniMethod.hpp
  50. 6 1
      include/ls-std/core/jni/JniReturnValue.hpp
  51. 0 27
      include/ls-std/core/type/EventTypes.hpp
  52. 7 1
      include/ls-std/encoding/Base64.hpp
  53. 18 23
      include/ls-std/event/Event.hpp
  54. 0 40
      include/ls-std/event/EventHandler.hpp
  55. 53 0
      include/ls-std/event/EventListener.hpp
  56. 38 26
      include/ls-std/event/EventManager.hpp
  57. 40 0
      include/ls-std/event/EventParameter.hpp
  58. 0 42
      include/ls-std/event/Narrator.hpp
  59. 0 51
      include/ls-std/event/serialization/SerializableJsonEvent.hpp
  60. 22 0
      include/ls-std/event/type/EventTypes.hpp
  61. 6 1
      include/ls-std/io/File.hpp
  62. 6 1
      include/ls-std/io/FileOutputStream.hpp
  63. 6 1
      include/ls-std/io/FilePathSeparator.hpp
  64. 6 1
      include/ls-std/io/FilePathSeparatorMatch.hpp
  65. 6 1
      include/ls-std/io/FileReader.hpp
  66. 6 1
      include/ls-std/io/FileWriter.hpp
  67. 6 1
      include/ls-std/io/NewLine.hpp
  68. 6 1
      include/ls-std/io/StandardOutputWriter.hpp
  69. 6 1
      include/ls-std/io/StorableFile.hpp
  70. 6 1
      include/ls-std/io/evaluator/FileExistenceEvaluator.hpp
  71. 6 1
      include/ls-std/io/logging/LogLevel.hpp
  72. 6 1
      include/ls-std/io/logging/Logger.hpp
  73. 6 1
      include/ls-std/io/section-pair/SectionPairMessageFormatter.hpp
  74. 6 1
      include/ls-std/io/section-pair/evaluator/SectionPairIdentifierArgumentEvaluator.hpp
  75. 6 1
      include/ls-std/io/section-pair/evaluator/SectionPairRowArgumentEvaluator.hpp
  76. 6 1
      include/ls-std/io/section-pair/evaluator/SectionPairRowListValueArgumentEvaluator.hpp
  77. 6 1
      include/ls-std/io/section-pair/evaluator/SectionPairRowSingleValueArgumentEvaluator.hpp
  78. 6 1
      include/ls-std/io/section-pair/evaluator/SectionPairSectionArgumentEvaluator.hpp
  79. 6 1
      include/ls-std/io/section-pair/evaluator/SectionPairValueArgumentEvaluator.hpp
  80. 6 1
      include/ls-std/io/section-pair/model/SectionPairDocument.hpp
  81. 6 1
      include/ls-std/io/section-pair/model/SectionPairRow.hpp
  82. 6 1
      include/ls-std/io/section-pair/model/SectionPairRowListValue.hpp
  83. 6 1
      include/ls-std/io/section-pair/model/SectionPairRowSingleValue.hpp
  84. 6 1
      include/ls-std/io/section-pair/model/SectionPairRowValue.hpp
  85. 6 1
      include/ls-std/io/section-pair/model/SectionPairSection.hpp
  86. 6 1
      include/ls-std/io/section-pair/reader/SectionPairFileReader.hpp
  87. 6 1
      include/ls-std/io/section-pair/reader/SectionPairFileReaderParameter.hpp
  88. 6 1
      include/ls-std/io/section-pair/serialization/SerializableSectionPairDocument.hpp
  89. 6 1
      include/ls-std/io/section-pair/serialization/SerializableSectionPairParameter.hpp
  90. 6 1
      include/ls-std/io/section-pair/serialization/SerializableSectionPairRow.hpp
  91. 6 1
      include/ls-std/io/section-pair/serialization/SerializableSectionPairRowListValue.hpp
  92. 6 1
      include/ls-std/io/section-pair/serialization/SerializableSectionPairRowSingleValue.hpp
  93. 6 1
      include/ls-std/io/section-pair/serialization/SerializableSectionPairSection.hpp
  94. 6 1
      include/ls-std/io/section-pair/validator/SectionPairDocumentValidator.hpp
  95. 6 1
      include/ls-std/io/section-pair/validator/SectionPairFileExtensionValidator.hpp
  96. 6 1
      include/ls-std/io/section-pair/validator/SectionPairIdentifierValidator.hpp
  97. 6 1
      include/ls-std/io/section-pair/validator/SectionPairRowListValueValidator.hpp
  98. 6 1
      include/ls-std/io/section-pair/validator/SectionPairRowSingleValueValidator.hpp
  99. 6 1
      include/ls-std/io/section-pair/validator/SectionPairRowValidator.hpp
  100. 6 1
      include/ls-std/io/section-pair/validator/SectionPairSectionValidator.hpp

+ 1 - 5
.gitignore

@@ -1,7 +1,3 @@
 .idea
-cmake-build-debug
-cmake-build-release
-cmake-build-debug-coverage
-cmake-build-wsl_debug
-cmake-build-default
+cmake-build-*
 test/TestHelper.hpp

+ 10 - 20
CMakeLists.txt

@@ -10,8 +10,8 @@
 # Basic
 ##########################################################
 
-cmake_minimum_required(VERSION 3.17)
-project(ls-std VERSION 2023.2.1)
+cmake_minimum_required(VERSION 3.30)
+project(ls-std VERSION 2024.1.0.0)
 
 set(MODULE_NAME_BOXING ls-std-boxing)
 set(MODULE_NAME_CORE ls-std-core)
@@ -20,7 +20,7 @@ set(MODULE_NAME_EVENT ls-std-event)
 set(MODULE_NAME_IO ls-std-io)
 set(MODULE_NAME_TIME ls-std-time)
 
-set(GOOGLE_TEST_MODULE googletest-1.11.0)
+set(GOOGLE_TEST_MODULE googletest-1.15.2)
 
 set(CLI_NAME_BASE64 cli-base64)
 
@@ -168,7 +168,6 @@ set(SOURCE_FILES_CORE
         ${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/EventNotSubscribedException.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
@@ -182,7 +181,6 @@ set(SOURCE_FILES_CORE
         ${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/IEventSubscriber.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
@@ -206,11 +204,10 @@ 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/serialization/SerializableJsonEvent.cpp
         ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/event/Event.cpp
-        ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/event/EventHandler.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/Narrator.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
@@ -312,7 +309,6 @@ if (${LS_STD_BUILD_WITH_TESTS})
             ${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/EventNotSubscribedExceptionTest.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
@@ -341,19 +337,13 @@ if (${LS_STD_BUILD_WITH_TESTS})
             ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/encoding/Base64Test.cpp)
 
     set(UNIT_TEST_FILES_EVENT
-            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/event/serialization/SerializableJsonEventTest.cpp
-            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/event/EventHandlerTest.cpp
+            ${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/cases/event/NarratorTest.cpp
-            ${CMAKE_CURRENT_SOURCE_DIR}/test/classes/event/Colour.cpp
-            ${CMAKE_CURRENT_SOURCE_DIR}/test/classes/event/DailyNewsAgency.cpp
-            ${CMAKE_CURRENT_SOURCE_DIR}/test/classes/event/GossipNewsAgency.cpp
-            ${CMAKE_CURRENT_SOURCE_DIR}/test/classes/event/GossipNewsEvent.cpp
-            ${CMAKE_CURRENT_SOURCE_DIR}/test/classes/event/NewsAgency.cpp
-            ${CMAKE_CURRENT_SOURCE_DIR}/test/classes/event/SeriousNewsEvent.cpp
-            ${CMAKE_CURRENT_SOURCE_DIR}/test/classes/event/TestDataCar.cpp
-            ${CMAKE_CURRENT_SOURCE_DIR}/test/classes/event/TestDataMercedesCar.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

+ 0 - 14
LICENSE.MIT

@@ -1,14 +0,0 @@
-Copyright (c) 2020-2023 Patrick-Christopher Mattulat (webmaster@lynarstudios.com)
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated
-documentation files (the "Software"), to deal in the Software without restriction, including without limitation the
-rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit
-persons to whom the Software is furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all copies or substantial portions of the
-Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
-COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
-OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

+ 165 - 0
LICENSE.txt

@@ -0,0 +1,165 @@
+GNU LESSER GENERAL PUBLIC LICENSE
+Version 3, 29 June 2007
+
+Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
+Everyone is permitted to copy and distribute verbatim copies
+of this license document, but changing it is not allowed.
+
+
+This version of the GNU Lesser General Public License incorporates
+the terms and conditions of version 3 of the GNU General Public
+License, supplemented by the additional permissions listed below.
+
+0. Additional Definitions.
+
+As used herein, "this License" refers to version 3 of the GNU Lesser
+General Public License, and the "GNU GPL" refers to version 3 of the GNU
+General Public License.
+
+"The Library" refers to a covered work governed by this License,
+other than an Application or a Combined Work as defined below.
+
+An "Application" is any work that makes use of an interface provided
+by the Library, but which is not otherwise based on the Library.
+Defining a subclass of a class defined by the Library is deemed a mode
+of using an interface provided by the Library.
+
+A "Combined Work" is a work produced by combining or linking an
+Application with the Library.  The particular version of the Library
+with which the Combined Work was made is also called the "Linked
+Version".
+
+The "Minimal Corresponding Source" for a Combined Work means the
+Corresponding Source for the Combined Work, excluding any source code
+for portions of the Combined Work that, considered in isolation, are
+based on the Application, and not on the Linked Version.
+
+The "Corresponding Application Code" for a Combined Work means the
+object code and/or source code for the Application, including any data
+and utility programs needed for reproducing the Combined Work from the
+Application, but excluding the System Libraries of the Combined Work.
+
+1. Exception to Section 3 of the GNU GPL.
+
+You may convey a covered work under sections 3 and 4 of this License
+without being bound by section 3 of the GNU GPL.
+
+2. Conveying Modified Versions.
+
+If you modify a copy of the Library, and, in your modifications, a
+facility refers to a function or data to be supplied by an Application
+that uses the facility (other than as an argument passed when the
+facility is invoked), then you may convey a copy of the modified
+version:
+
+a) under this License, provided that you make a good faith effort to
+ensure that, in the event an Application does not supply the
+function or data, the facility still operates, and performs
+whatever part of its purpose remains meaningful, or
+
+b) under the GNU GPL, with none of the additional permissions of
+this License applicable to that copy.
+
+3. Object Code Incorporating Material from Library Header Files.
+
+The object code form of an Application may incorporate material from
+a header file that is part of the Library.  You may convey such object
+code under terms of your choice, provided that, if the incorporated
+material is not limited to numerical parameters, data structure
+layouts and accessors, or small macros, inline functions and templates
+(ten or fewer lines in length), you do both of the following:
+
+a) Give prominent notice with each copy of the object code that the
+Library is used in it and that the Library and its use are
+covered by this License.
+
+b) Accompany the object code with a copy of the GNU GPL and this license
+document.
+
+4. Combined Works.
+
+You may convey a Combined Work under terms of your choice that,
+taken together, effectively do not restrict modification of the
+portions of the Library contained in the Combined Work and reverse
+engineering for debugging such modifications, if you also do each of
+the following:
+
+a) Give prominent notice with each copy of the Combined Work that
+the Library is used in it and that the Library and its use are
+covered by this License.
+
+b) Accompany the Combined Work with a copy of the GNU GPL and this license
+document.
+
+c) For a Combined Work that displays copyright notices during
+execution, include the copyright notice for the Library among
+these notices, as well as a reference directing the user to the
+copies of the GNU GPL and this license document.
+
+d) Do one of the following:
+
+       0) Convey the Minimal Corresponding Source under the terms of this
+       License, and the Corresponding Application Code in a form
+       suitable for, and under terms that permit, the user to
+       recombine or relink the Application with a modified version of
+       the Linked Version to produce a modified Combined Work, in the
+       manner specified by section 6 of the GNU GPL for conveying
+       Corresponding Source.
+
+       1) Use a suitable shared library mechanism for linking with the
+       Library.  A suitable mechanism is one that (a) uses at run time
+       a copy of the Library already present on the user's computer
+       system, and (b) will operate properly with a modified version
+       of the Library that is interface-compatible with the Linked
+       Version.
+
+e) Provide Installation Information, but only if you would otherwise
+be required to provide such information under section 6 of the
+GNU GPL, and only to the extent that such information is
+necessary to install and execute a modified version of the
+Combined Work produced by recombining or relinking the
+Application with a modified version of the Linked Version. (If
+you use option 4d0, the Installation Information must accompany
+the Minimal Corresponding Source and Corresponding Application
+Code. If you use option 4d1, you must provide the Installation
+Information in the manner specified by section 6 of the GNU GPL
+for conveying Corresponding Source.)
+
+5. Combined Libraries.
+
+You may place library facilities that are a work based on the
+Library side by side in a single library together with other library
+facilities that are not Applications and are not covered by this
+License, and convey such a combined library under terms of your
+choice, if you do both of the following:
+
+a) Accompany the combined library with a copy of the same work based
+on the Library, uncombined with any other library facilities,
+conveyed under the terms of this License.
+
+b) Give prominent notice with the combined library that part of it
+is a work based on the Library, and explaining where to find the
+accompanying uncombined form of the same work.
+
+6. Revised Versions of the GNU Lesser General Public License.
+
+The Free Software Foundation may publish revised and/or new versions
+of the GNU Lesser General Public License from time to time. Such new
+versions will be similar in spirit to the present version, but may
+differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number. If the
+Library as you received it specifies that a certain numbered version
+of the GNU Lesser General Public License "or any later version"
+applies to it, you have the option of following the terms and
+conditions either of that published version or of any later version
+published by the Free Software Foundation. If the Library as you
+received it does not specify a version number of the GNU Lesser
+General Public License, you may choose any version of the GNU Lesser
+General Public License ever published by the Free Software Foundation.
+
+If the Library as you received it specifies that a proxy can decide
+whether future versions of the GNU Lesser General Public License shall
+apply, that proxy's public statement of acceptance of any version is
+permanent authorization for you to choose that version for the
+Library.

+ 29 - 11
README.md

@@ -1,6 +1,6 @@
-# Lynar Studios - Standard Library 2023.2.1 #
+# Lynar Studios - Standard Library 2024.1.0.0 #
 
-This is a cross-platform standard library written in C++ offering functionalities you would usually miss in C++'s standard template library (STL), especially if you would search for cross-platform implementations.  
+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.
 Following a modularized approach the following independent submodules are defined in scope of this library:
  
@@ -34,11 +34,19 @@ A __Date__ class comes with this submodule, which you can use to represent a dat
 
 #### Features ####
 
-- Section Pair values now support backslash characters, which are common on Windows to describe a file path
+- a reworked version of Event handling is now available, which orients more on nowadays standards - this implementation
+  is replacing the old Event based implementation
+- this library is now licensed under the __LGPL v3__ license
+- a class documentation has been added, which was generated by Coline code generation tool
 
 #### Improvements ####
 
-- solved more than 400 SonarLint findings, which were mostly on critical level
+- an OS-specific initialization-script is now being provided for setting up the project and preparing it for the developer for code-contribution
+- the library version scheme is now reflecting major-, minor- and patch-level additionally to the year of release to
+  rightfully reflect on the change impact, resulting into the format YYYY.MAJOR.MINOR.PATCH
+- CMake required minimum version was upgraded to __3.30.0__
+- GCC required minimum compiler version was upgraded to __14.2__
+- Google Test version was upgraded to __1.15.2__
 
 #### Fixes ####
 
@@ -73,13 +81,13 @@ 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                                | Linux Mint 20.3 | 12.2.0                                     | CMake                      | \>= 3.24.0                     |
-| Clang                              | Linux Mint 20.3 | 12.0.0-3ubuntu1~20.04.5                    | CMake                      | \>= 3.24.0                     |
-| MinGW-w64 / GCC                    | Windows 10      | 11.2.0                                     | CMake                      | \>= 3.24.0                     |
-| MSVC                               | Windows 10      | 19.32.31332.0                              | CMake                      | \>= 3.24.0                     |
-| AppleClang                         | MacOS Monterey  | 14.0.0                                     | CMake                      | \>= 3.24.0                     |
+| 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                     |
 
 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.
@@ -142,6 +150,16 @@ target_link_libraries(... ls-std-core ls-std-boxing ...)
 
 ---
 
+### Project Contribution ###
+
+#### Initialization ####
+
+To initialize this project and prepare it for local development, an OS-specific init-script must be executed. This script is located in __config/scripts__ location of the projects' root folder. Choose the OS-specific script (e.g. init.sh for Linux) and execute it via CLI.
+
+#### Guidelines ####
+
+Please refer to the __coding-guidelines.md__ file located in __doc/internal__ to be able to follow the library style.
+
 ### Run Automated Tests ###
 
 When enabling test build CMake flag during CMake project generation, executable test suite binaries will be generated during project compilation.  

+ 19 - 0
coline.yml

@@ -0,0 +1,19 @@
+name: "Lynar Studios - Standard Library"
+
+# the version of this library
+version: v2024.1.0.0
+
+# the source locations of this library containing documentation comment sections,
+# this is different on every individual computer
+source_locations:
+#  - /Users/folder/ls-standard-library/include
+#  - /Users/folder/ls-standard-library/source
+
+# the file extensions, which should be respected
+file_extensions:
+  - .cpp
+  - .hpp
+
+# the output location, where the generated documentation should end up,
+# this is different on every individual computer
+output_location: /Users/folder/ls-standard-library/doc

+ 29 - 0
config/scripts/init.ps1

@@ -0,0 +1,29 @@
+$project_name = "Lynar Studios - Standard Library"
+
+$script_directory=$PWD
+$root_directory=(Split-Path -Parent (Split-Path -Parent $script_directory))
+$test_directory="$root_directory\test"
+$test_resources_directory="$test_directory\resources"
+$test_file_name="no-writable-windows.txt"
+$test_file_path="$test_resources_directory\$test_file_name"
+
+$indentation="  -->"
+
+########################################
+# script execution
+########################################
+
+Write-Host "Setting up project '$project_name' for development on Windows environment ...
+"
+
+# list variables
+
+Write-Host "$indentation script directory identified as '$script_directory' ..."
+Write-Host "$indentation root directory identified as '$root_directory' ..."
+Write-Host "$indentation test directory identified as '$test_directory' ..."
+Write-Host "$indentation test resources directory identified as '$test_resources_directory' ..."
+
+# prepare test files
+
+Write-Host "$indentation changing permissions for '$test_file_path' file ..."
+Set-ItemProperty -Path $test_file_path -Name Attributes -Value ([System.IO.FileAttributes]::ReadOnly)

+ 44 - 0
config/scripts/init.sh

@@ -0,0 +1,44 @@
+#!/bin/bash
+
+project_name="Lynar Studios - Standard Library"
+
+script_directory="$PWD"
+root_directory=$(dirname $(dirname $script_directory))
+test_directory="$root_directory/test"
+test_resources_directory="$test_directory/resources"
+test_file_name="no-writable.txt"
+test_file_path="$test_resources_directory/$test_file_name"
+
+indentation="  -->"
+error_level="[ERROR]"
+
+########################################
+# script execution
+########################################
+
+echo "Setting up project '$project_name' for development on Linux environment ...
+"
+
+# check if rights are sufficient
+
+echo "$indentation checking rights ..."
+
+if ! sudo -v; then
+  echo "$indentation $error_level no sufficient rights, must be executed as sudo-user ..."
+else
+  echo "$indentation user is sudo ..."
+fi
+
+# list variables
+
+echo "$indentation script directory identified as '$script_directory' ..."
+echo "$indentation root directory identified as '$root_directory' ..."
+echo "$indentation test directory identified as '$test_directory' ..."
+echo "$indentation test resources directory identified as '$test_resources_directory' ..."
+
+# prepare test files
+
+if sudo -v; then
+  echo "$indentation changing permissions for '$test_file_path' file ..."
+  chmod -w "$test_file_path"
+fi

+ 44 - 0
config/scripts/init.zsh

@@ -0,0 +1,44 @@
+#!/bin/zsh
+
+project_name="Lynar Studios - Standard Library"
+
+script_directory="$PWD"
+root_directory=$(dirname $(dirname $script_directory))
+test_directory="$root_directory/test"
+test_resources_directory="$test_directory/resources"
+test_file_name="no-writable.txt"
+test_file_path="$test_resources_directory/$test_file_name"
+
+indentation="  -->"
+error_level="[ERROR]"
+
+########################################
+# script execution
+########################################
+
+echo "Setting up project '$project_name' for development on MacOS environment ...
+"
+
+# check if rights are sufficient
+
+echo "$indentation checking rights ..."
+
+if ! sudo -v; then
+  echo "$indentation $error_level no sufficient rights, must be executed as sudo-user ..."
+else
+  echo "$indentation user is sudo ..."
+fi
+
+# list variables
+
+echo "$indentation script directory identified as '$script_directory' ..."
+echo "$indentation root directory identified as '$root_directory' ..."
+echo "$indentation test directory identified as '$test_directory' ..."
+echo "$indentation test resources directory identified as '$test_resources_directory' ..."
+
+# prepare test files
+
+if sudo -v; then
+  echo "$indentation changing permissions for '$test_file_path' file ..."
+  chmod -w "$test_file_path"
+fi

+ 379 - 0
doc/coline.html

@@ -0,0 +1,379 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+<title>Coline - C++ Documentation</title>
+<meta charset="UTF-8">
+<meta name="description" content="This documentation was created with Coline.">
+<meta name="author" content="Patrick-Christopher Mattulat">
+<meta name="keywords" content="Coline, C++-Documentation, Lynar Studios, Lynar Studios - Standard Library">
+<style>
+body
+{
+  background-color: #151517;
+  font-family: Arial, serif;
+  color: #727274;
+}
+a.default_link_layout:link
+{
+  color: #727274;
+  text-decoration: none;
+}
+a.default_link_layout:visited
+{
+  color: #727274;
+  text-decoration: none;
+}
+a.default_link_layout:hover
+{
+  color: #4e4944;
+  text-decoration: none;
+}
+a.default_link_layout:active
+{
+  color: #4e4944;
+  text-decoration: none;
+}
+p.default_text
+{
+  color: inherit;
+  font-size: 16px;
+  text-decoration: none;
+  font-weight: normal;
+}
+li.package_li
+{
+  font-size: 16px;
+  text-decoration: none;
+  font-weight: normal;
+}
+li.class_li
+{
+  font-size: 16px;
+  text-decoration: none;
+  font-weight: normal;
+}
+</style>
+</head>
+<body>
+<h1>Lynar Studios - Standard Library - v2024.1.0.0 Documentation</h1>
+<h2>Packages</h2>
+<ul id="package_list">
+<li class="package_li"><a class="default_link_layout" href="#package_boxing">boxing</a></li>
+<li class="package_li"><a class="default_link_layout" href="#package_core">core</a></li>
+<li class="package_li"><a class="default_link_layout" href="#package_encoding">encoding</a></li>
+<li class="package_li"><a class="default_link_layout" href="#package_event">event</a></li>
+<li class="package_li"><a class="default_link_layout" href="#package_io">io</a></li>
+<li class="package_li"><a class="default_link_layout" href="#package_time">time</a></li>
+</ul>
+<h3 id="package_boxing">boxing</h3>
+<p class="default_text">This package provides functionalities for wrapping primitive datatypes (boolean, double, float, int, long, string). Wrapping those types would enable a developer to provide string representations, or parsing from strings to convert them back into their primitive forms. Additionally, these boxing types come with a great selection of operators and convenient functions.</p>
+<h4>Classes</h4>
+<ul id="boxing_class_list">
+<li class="class_li"><a class="default_link_layout" href="#boxing_integer">Integer</a></li>
+<li class="class_li"><a class="default_link_layout" href="#boxing_boolean">Boolean</a></li>
+<li class="class_li"><a class="default_link_layout" href="#boxing_double">Double</a></li>
+<li class="class_li"><a class="default_link_layout" href="#boxing_float">Float</a></li>
+<li class="class_li"><a class="default_link_layout" href="#boxing_string">String</a></li>
+<li class="class_li"><a class="default_link_layout" href="#boxing_long">Long</a></li>
+</ul>
+<h3 id="package_core">core</h3>
+<p class="default_text">This package provides a base class, which can be used to provide simple class reflection. Other functionalities of this package include customized exceptions, basic interfaces and convenient types.</p>
+<h4>Classes</h4>
+<ul id="core_class_list">
+<li class="class_li"><a class="default_link_layout" href="#core_class">Class</a></li>
+<li class="class_li"><a class="default_link_layout" href="#core_libraryversion">LibraryVersion</a></li>
+<li class="class_li"><a class="default_link_layout" href="#core_version">Version</a></li>
+<li class="class_li"><a class="default_link_layout" href="#core_conditionalfunctionexecutor">ConditionalFunctionExecutor</a></li>
+<li class="class_li"><a class="default_link_layout" href="#core_nullpointerargumentevaluator">NullPointerArgumentEvaluator</a></li>
+<li class="class_li"><a class="default_link_layout" href="#core_nullpointerevaluator">NullPointerEvaluator</a></li>
+<li class="class_li"><a class="default_link_layout" href="#core_rawnullpointerargumentevaluator">RawNullPointerArgumentEvaluator</a></li>
+<li class="class_li"><a class="default_link_layout" href="#core_indexoutofboundsevaluator">IndexOutOfBoundsEvaluator</a></li>
+<li class="class_li"><a class="default_link_layout" href="#core_emptystringargumentevaluator">EmptyStringArgumentEvaluator</a></li>
+<li class="class_li"><a class="default_link_layout" href="#core_rawnullpointerevaluator">RawNullPointerEvaluator</a></li>
+<li class="class_li"><a class="default_link_layout" href="#core_jnireturnvalue">JniReturnValue</a></li>
+<li class="class_li"><a class="default_link_layout" href="#core_jniclassparameter">JniClassParameter</a></li>
+<li class="class_li"><a class="default_link_layout" href="#core_jniapi">JniApi</a></li>
+<li class="class_li"><a class="default_link_layout" href="#core_jnimethod">JniMethod</a></li>
+<li class="class_li"><a class="default_link_layout" href="#core_jniclass">JniClass</a></li>
+<li class="class_li"><a class="default_link_layout" href="#core_nullpointerexception">NullPointerException</a></li>
+<li class="class_li"><a class="default_link_layout" href="#core_eventnothandledexception">EventNotHandledException</a></li>
+<li class="class_li"><a class="default_link_layout" href="#core_illegalargumentexception">IllegalArgumentException</a></li>
+<li class="class_li"><a class="default_link_layout" href="#core_exceptionmessage">ExceptionMessage</a></li>
+<li class="class_li"><a class="default_link_layout" href="#core_fileoperationexception">FileOperationException</a></li>
+<li class="class_li"><a class="default_link_layout" href="#core_illegalarithmeticoperationexception">IllegalArithmeticOperationException</a></li>
+<li class="class_li"><a class="default_link_layout" href="#core_filenotfoundexception">FileNotFoundException</a></li>
+<li class="class_li"><a class="default_link_layout" href="#core_incompletejsonexception">IncompleteJsonException</a></li>
+<li class="class_li"><a class="default_link_layout" href="#core_notimplementedexception">NotImplementedException</a></li>
+<li class="class_li"><a class="default_link_layout" href="#core_indexoutofboundsexception">IndexOutOfBoundsException</a></li>
+<li class="class_li"><a class="default_link_layout" href="#core_exception">Exception</a></li>
+</ul>
+<h3 id="package_encoding">encoding</h3>
+<p class="default_text">This package provides encoding functionalities, which in the current scope is limited to Base64. This would also include the provision of a Base-64-CLI-tool.</p>
+<h4>Classes</h4>
+<ul id="encoding_class_list">
+<li class="class_li"><a class="default_link_layout" href="#encoding_base64">Base64</a></li>
+</ul>
+<h3 id="package_event">event</h3>
+<p class="default_text">This package provides an event manager and the functionality to through events.</p>
+<h4>Classes</h4>
+<ul id="event_class_list">
+<li class="class_li"><a class="default_link_layout" href="#event_event">Event</a></li>
+<li class="class_li"><a class="default_link_layout" href="#event_eventlistener">EventListener</a></li>
+<li class="class_li"><a class="default_link_layout" href="#event_eventmanager">EventManager</a></li>
+<li class="class_li"><a class="default_link_layout" href="#event_eventparameter">EventParameter</a></li>
+</ul>
+<h3 id="package_io">io</h3>
+<p class="default_text">This package provides cross-platform functionalities for handling files, parsing and writing XML, logging, parsing and writing SP-files (.INI-based files).</p>
+<h4>Classes</h4>
+<ul id="io_class_list">
+<li class="class_li"><a class="default_link_layout" href="#io_filewriter">FileWriter</a></li>
+<li class="class_li"><a class="default_link_layout" href="#io_filepathseparatormatch">FilePathSeparatorMatch</a></li>
+<li class="class_li"><a class="default_link_layout" href="#io_fileoutputstream">FileOutputStream</a></li>
+<li class="class_li"><a class="default_link_layout" href="#io_storablefile">StorableFile</a></li>
+<li class="class_li"><a class="default_link_layout" href="#io_newline">NewLine</a></li>
+<li class="class_li"><a class="default_link_layout" href="#io_filereader">FileReader</a></li>
+<li class="class_li"><a class="default_link_layout" href="#io_file">File</a></li>
+<li class="class_li"><a class="default_link_layout" href="#io_standardoutputwriter">StandardOutputWriter</a></li>
+<li class="class_li"><a class="default_link_layout" href="#io_filepathseparator">FilePathSeparator</a></li>
+<li class="class_li"><a class="default_link_layout" href="#io_fileexistenceevaluator">FileExistenceEvaluator</a></li>
+<li class="class_li"><a class="default_link_layout" href="#io_sectionpairmessageformatter">SectionPairMessageFormatter</a></li>
+<li class="class_li"><a class="default_link_layout" href="#io_sectionpairfilereaderparameter">SectionPairFileReaderParameter</a></li>
+<li class="class_li"><a class="default_link_layout" href="#io_sectionpairfilereader">SectionPairFileReader</a></li>
+<li class="class_li"><a class="default_link_layout" href="#io_sectionpairsectionargumentevaluator">SectionPairSectionArgumentEvaluator</a></li>
+<li class="class_li"><a class="default_link_layout" href="#io_sectionpairvalueargumentevaluator">SectionPairValueArgumentEvaluator</a></li>
+<li class="class_li"><a class="default_link_layout" href="#io_sectionpairrowlistvalueargumentevaluator">SectionPairRowListValueArgumentEvaluator</a></li>
+<li class="class_li"><a class="default_link_layout" href="#io_sectionpairrowsinglevalueargumentevaluator">SectionPairRowSingleValueArgumentEvaluator</a></li>
+<li class="class_li"><a class="default_link_layout" href="#io_sectionpairrowargumentevaluator">SectionPairRowArgumentEvaluator</a></li>
+<li class="class_li"><a class="default_link_layout" href="#io_sectionpairidentifierargumentevaluator">SectionPairIdentifierArgumentEvaluator</a></li>
+<li class="class_li"><a class="default_link_layout" href="#io_sectionpairidentifiervalidator">SectionPairIdentifierValidator</a></li>
+<li class="class_li"><a class="default_link_layout" href="#io_sectionpairsectionvalidator">SectionPairSectionValidator</a></li>
+<li class="class_li"><a class="default_link_layout" href="#io_sectionpairrowlistvaluevalidator">SectionPairRowListValueValidator</a></li>
+<li class="class_li"><a class="default_link_layout" href="#io_sectionpairrowsinglevaluevalidator">SectionPairRowSingleValueValidator</a></li>
+<li class="class_li"><a class="default_link_layout" href="#io_sectionpairdocumentvalidator">SectionPairDocumentValidator</a></li>
+<li class="class_li"><a class="default_link_layout" href="#io_sectionpairvaluevalidator">SectionPairValueValidator</a></li>
+<li class="class_li"><a class="default_link_layout" href="#io_sectionpairfileextensionvalidator">SectionPairFileExtensionValidator</a></li>
+<li class="class_li"><a class="default_link_layout" href="#io_sectionpairrowvalidator">SectionPairRowValidator</a></li>
+<li class="class_li"><a class="default_link_layout" href="#io_serializablesectionpairsection">SerializableSectionPairSection</a></li>
+<li class="class_li"><a class="default_link_layout" href="#io_serializablesectionpairrowsinglevalue">SerializableSectionPairRowSingleValue</a></li>
+<li class="class_li"><a class="default_link_layout" href="#io_serializablesectionpairrow">SerializableSectionPairRow</a></li>
+<li class="class_li"><a class="default_link_layout" href="#io_serializablesectionpairrowlistvalue">SerializableSectionPairRowListValue</a></li>
+<li class="class_li"><a class="default_link_layout" href="#io_serializablesectionpairparameter">SerializableSectionPairParameter</a></li>
+<li class="class_li"><a class="default_link_layout" href="#io_serializablesectionpairdocument">SerializableSectionPairDocument</a></li>
+<li class="class_li"><a class="default_link_layout" href="#io_sectionpairrowvalue">SectionPairRowValue</a></li>
+<li class="class_li"><a class="default_link_layout" href="#io_sectionpairdocument">SectionPairDocument</a></li>
+<li class="class_li"><a class="default_link_layout" href="#io_sectionpairrowlistvalue">SectionPairRowListValue</a></li>
+<li class="class_li"><a class="default_link_layout" href="#io_sectionpairrow">SectionPairRow</a></li>
+<li class="class_li"><a class="default_link_layout" href="#io_sectionpairsection">SectionPairSection</a></li>
+<li class="class_li"><a class="default_link_layout" href="#io_sectionpairrowsinglevalue">SectionPairRowSingleValue</a></li>
+<li class="class_li"><a class="default_link_layout" href="#io_xmldeclaration">XmlDeclaration</a></li>
+<li class="class_li"><a class="default_link_layout" href="#io_xmlparser">XmlParser</a></li>
+<li class="class_li"><a class="default_link_layout" href="#io_xmlreader">XmlReader</a></li>
+<li class="class_li"><a class="default_link_layout" href="#io_xmldocument">XmlDocument</a></li>
+<li class="class_li"><a class="default_link_layout" href="#io_xmlattribute">XmlAttribute</a></li>
+<li class="class_li"><a class="default_link_layout" href="#io_xmlparseparameter">XmlParseParameter</a></li>
+<li class="class_li"><a class="default_link_layout" href="#io_xmlnode">XmlNode</a></li>
+<li class="class_li"><a class="default_link_layout" href="#io_logger">Logger</a></li>
+<li class="class_li"><a class="default_link_layout" href="#io_loglevel">LogLevel</a></li>
+</ul>
+<h3 id="package_time">time</h3>
+<p class="default_text">This package provides convenient time functionalities and data structures, like a Date class for representing a date or SystemTime for setting a systems local time.</p>
+<h4>Classes</h4>
+<ul id="time_class_list">
+<li class="class_li"><a class="default_link_layout" href="#time_date">Date</a></li>
+<li class="class_li"><a class="default_link_layout" href="#time_dateparameter">DateParameter</a></li>
+<li class="class_li"><a class="default_link_layout" href="#time_dateparametermapper">DateParameterMapper</a></li>
+<li class="class_li"><a class="default_link_layout" href="#time_jnidateparametermapper">JniDateParameterMapper</a></li>
+<li class="class_li"><a class="default_link_layout" href="#time_systemtimeparameter">SystemTimeParameter</a></li>
+<li class="class_li"><a class="default_link_layout" href="#time_posixclock">PosixClock</a></li>
+<li class="class_li"><a class="default_link_layout" href="#time_systemtime">SystemTime</a></li>
+<li class="class_li"><a class="default_link_layout" href="#time_windowsclock">WindowsClock</a></li>
+</ul>
+<h2>Classes</h2>
+<h3 id="io_filewriter">io.FileWriter</h3>
+<p class="default_text">This class can write to a file.</p>
+<h3 id="io_filepathseparatormatch">io.FilePathSeparatorMatch</h3>
+<p class="default_text">This class can filter file path separators.</p>
+<h3 id="io_fileoutputstream">io.FileOutputStream</h3>
+<p class="default_text">This class can be used for writing to a file stream.</p>
+<h3 id="io_storablefile">io.StorableFile</h3>
+<p class="default_text">This class can be used to store any serialized information to a file.</p>
+<h3 id="io_newline">io.NewLine</h3>
+<p class="default_text">This class can be used as new line based on the preferred operating system. Currently, Windows and Unix-like operating systems are supported.</p>
+<h3 id="io_filereader">io.FileReader</h3>
+<p class="default_text">This class can read the content of a file and return it as byte field.</p>
+<h3 id="io_file">io.File</h3>
+<p class="default_text">This class represents a file in the file system and provides functionalities for location, operations and fetching property information.</p>
+<h3 id="io_standardoutputwriter">io.StandardOutputWriter</h3>
+<p class="default_text">This class can be used to write a string to stdout.</p>
+<h3 id="io_filepathseparator">io.FilePathSeparator</h3>
+<p class="default_text">This class represents the OS specific separator withing file paths on either Windows- or Unix-like operating systems.</p>
+<h3 id="io_fileexistenceevaluator">io.FileExistenceEvaluator</h3>
+<p class="default_text">This class evaluates whether a file exists and throws an exception in case it does not.</p>
+<h3 id="io_sectionpairmessageformatter">io.SectionPairMessageFormatter</h3>
+<p class="default_text">This message formatter replaces new line sequences, which are OS specific, to a readable tag for error message formatting.</p>
+<h3 id="io_sectionpairfilereaderparameter">io.SectionPairFileReaderParameter</h3>
+<p class="default_text">This class holds evaluators and the document instance for Section Pair file reading.</p>
+<h3 id="io_sectionpairfilereader">io.SectionPairFileReader</h3>
+<p class="default_text">This class reads a Section Pair file and writes it to a Section Pair document instance.</p>
+<h3 id="io_sectionpairsectionargumentevaluator">io.SectionPairSectionArgumentEvaluator</h3>
+<p class="default_text">This class checks whether a whole section argument is valid and throws an exception if that is not the case.</p>
+<h3 id="io_sectionpairvalueargumentevaluator">io.SectionPairValueArgumentEvaluator</h3>
+<p class="default_text">This class checks whether a value argument is valid and throws an exception if that is not the case.</p>
+<h3 id="io_sectionpairrowlistvalueargumentevaluator">io.SectionPairRowListValueArgumentEvaluator</h3>
+<p class="default_text">This class checks whether a row list value argument is valid and throws an exception if that is not the case.</p>
+<h3 id="io_sectionpairrowsinglevalueargumentevaluator">io.SectionPairRowSingleValueArgumentEvaluator</h3>
+<p class="default_text">This class checks whether a single row value argument is valid and throws an exception if that is not the case.</p>
+<h3 id="io_sectionpairrowargumentevaluator">io.SectionPairRowArgumentEvaluator</h3>
+<p class="default_text">This class checks whether a row argument is valid and throws an exception if that is not the case.</p>
+<h3 id="io_sectionpairidentifierargumentevaluator">io.SectionPairIdentifierArgumentEvaluator</h3>
+<p class="default_text">This class checks whether an identifier argument is valid and throws an exception if that is not the case.</p>
+<h3 id="io_sectionpairidentifiervalidator">io.SectionPairIdentifierValidator</h3>
+<p class="default_text">This validator checks whether a string is a valid Section Pair identifier.</p>
+<h3 id="io_sectionpairsectionvalidator">io.SectionPairSectionValidator</h3>
+<p class="default_text">This validator checks whether a content is a valid Section Pair section.</p>
+<h3 id="io_sectionpairrowlistvaluevalidator">io.SectionPairRowListValueValidator</h3>
+<p class="default_text">This validator checks whether a content is a valid Section Pair row list value.</p>
+<h3 id="io_sectionpairrowsinglevaluevalidator">io.SectionPairRowSingleValueValidator</h3>
+<p class="default_text">This validator checks whether a content is a valid Section Pair row single value.</p>
+<h3 id="io_sectionpairdocumentvalidator">io.SectionPairDocumentValidator</h3>
+<p class="default_text">This validator checks whether a content is a valid Section Pair document.</p>
+<h3 id="io_sectionpairvaluevalidator">io.SectionPairValueValidator</h3>
+<p class="default_text">This validator checks whether a content is a valid Section Pair value.</p>
+<h3 id="io_sectionpairfileextensionvalidator">io.SectionPairFileExtensionValidator</h3>
+<p class="default_text">This validator checks whether a file name has a valid Section Pair file extension.</p>
+<h3 id="io_sectionpairrowvalidator">io.SectionPairRowValidator</h3>
+<p class="default_text">This validator checks whether a content is a valid Section Pair row.</p>
+<h3 id="io_serializablesectionpairsection">io.SerializableSectionPairSection</h3>
+<p class="default_text">This class can serialize a Section Pair section for file persistence.</p>
+<h3 id="io_serializablesectionpairrowsinglevalue">io.SerializableSectionPairRowSingleValue</h3>
+<p class="default_text">This class can serialize a Section Pair single value for file persistence.</p>
+<h3 id="io_serializablesectionpairrow">io.SerializableSectionPairRow</h3>
+<p class="default_text">This class can serialize a Section Pair row for file persistence.</p>
+<h3 id="io_serializablesectionpairrowlistvalue">io.SerializableSectionPairRowListValue</h3>
+<p class="default_text">This class can serialize a Section Pair row list value for file persistence.</p>
+<h3 id="io_serializablesectionpairparameter">io.SerializableSectionPairParameter</h3>
+<p class="default_text">This class is holding information for Section Pair serialization.</p>
+<h3 id="io_serializablesectionpairdocument">io.SerializableSectionPairDocument</h3>
+<p class="default_text">This class can serialize a Section Pair document for file persistence.</p>
+<h3 id="io_sectionpairrowvalue">io.SectionPairRowValue</h3>
+<p class="default_text">This class represents a Section Pair row value.</p>
+<h3 id="io_sectionpairdocument">io.SectionPairDocument</h3>
+<p class="default_text">This class represents a whole Section Pair document.</p>
+<h3 id="io_sectionpairrowlistvalue">io.SectionPairRowListValue</h3>
+<p class="default_text">This class represents a Section Pair row list value.</p>
+<h3 id="io_sectionpairrow">io.SectionPairRow</h3>
+<p class="default_text">This class represents a Section Pair row.</p>
+<h3 id="io_sectionpairsection">io.SectionPairSection</h3>
+<p class="default_text">This class represents a Section Pair section.</p>
+<h3 id="io_sectionpairrowsinglevalue">io.SectionPairRowSingleValue</h3>
+<p class="default_text">This class represents a Section Pair row single value.</p>
+<h3 id="io_xmldeclaration">io.XmlDeclaration</h3>
+<p class="default_text">This class represents an XML declaration and can be serialized to an XML tag.</p>
+<h3 id="io_xmlparser">io.XmlParser</h3>
+<p class="default_text">This class parses a whole XML tree in form of an XML document.</p>
+<h3 id="io_xmlreader">io.XmlReader</h3>
+<p class="default_text">This class reads an XML file and returns an XML document.</p>
+<h3 id="io_xmldocument">io.XmlDocument</h3>
+<p class="default_text">This class represents a whole XML document and can be serialized to a whole XML tree.</p>
+<h3 id="io_xmlattribute">io.XmlAttribute</h3>
+<p class="default_text">This class represents an XML attribute and can be serialized to an XML tag.</p>
+<h3 id="io_xmlparseparameter">io.XmlParseParameter</h3>
+<p class="default_text">This class holds information regarding parsing an XML tree.</p>
+<h3 id="io_xmlnode">io.XmlNode</h3>
+<p class="default_text">This class represents an XML node and can be serialized to an XML tree.</p>
+<h3 id="io_logger">io.Logger</h3>
+<p class="default_text">This is a logger which can log to any implemented target.</p>
+<h3 id="io_loglevel">io.LogLevel</h3>
+<p class="default_text">This class represents the log level controlling how noisy a log should be.</p>
+<h3 id="core_class">core.Class</h3>
+<p class="default_text">This class represents a base class offering minimal reflection on the class name.</p>
+<h3 id="core_libraryversion">core.LibraryVersion</h3>
+<p class="default_text">This class provides the version information of this library.</p>
+<h3 id="core_version">core.Version</h3>
+<p class="default_text">This class represents a semantic versioning scheme.</p>
+<h3 id="core_conditionalfunctionexecutor">core.ConditionalFunctionExecutor</h3>
+<p class="default_text">This class can execute any method matching a specific signature based on a specific condition.</p>
+<h3 id="core_nullpointerargumentevaluator">core.NullPointerArgumentEvaluator</h3>
+<p class="default_text">This class evaluates whether a passed shared pointer argument is null.</p>
+<h3 id="core_nullpointerevaluator">core.NullPointerEvaluator</h3>
+<p class="default_text">This class evaluates whether a passed shared pointer reference is null.</p>
+<h3 id="core_rawnullpointerargumentevaluator">core.RawNullPointerArgumentEvaluator</h3>
+<p class="default_text">This class evaluates whether a passed raw pointer argument is null.</p>
+<h3 id="core_indexoutofboundsevaluator">core.IndexOutOfBoundsEvaluator</h3>
+<p class="default_text">This class evaluates whether a passed index is out of bounds.</p>
+<h3 id="core_emptystringargumentevaluator">core.EmptyStringArgumentEvaluator</h3>
+<p class="default_text">This class evaluates whether a passed string is empty.</p>
+<h3 id="core_rawnullpointerevaluator">core.RawNullPointerEvaluator</h3>
+<p class="default_text">This class evaluates whether a passed raw pointer reference is null.</p>
+<h3 id="core_jnireturnvalue">core.JniReturnValue</h3>
+<p class="default_text">This class represents a method return value of a Java class within Java Native Interface (JNI) context.</p>
+<h3 id="core_jniclassparameter">core.JniClassParameter</h3>
+<p class="default_text">This class holds important information for the usage of the Java Native Interface (JNI), like Java environment or a specific Java object.</p>
+<h3 id="core_jniapi">core.JniApi</h3>
+<p class="default_text">This class represents an API for the Java Native Interface (JNI) wrapping basic JNI end points.</p>
+<h3 id="core_jnimethod">core.JniMethod</h3>
+<p class="default_text">This class represents a class method within Java Native Interface (JNI) context.</p>
+<h3 id="core_jniclass">core.JniClass</h3>
+<p class="default_text">This class represents a Java class within the Java Native Interface (JNI).</p>
+<h3 id="core_nullpointerexception">core.NullPointerException</h3>
+<p class="default_text">This exception can be thrown in case a called reference is null.</p>
+<h3 id="core_eventnothandledexception">core.EventNotHandledException</h3>
+<p class="default_text">This exception can be thrown in case an event is not handled.</p>
+<h3 id="core_illegalargumentexception">core.IllegalArgumentException</h3>
+<p class="default_text">This exception can be thrown in case a passed argument is illegal, which can be individually interpreted.</p>
+<h3 id="core_exceptionmessage">core.ExceptionMessage</h3>
+<p class="default_text">This is the message container being used by these libraries provided exceptions.</p>
+<h3 id="core_fileoperationexception">core.FileOperationException</h3>
+<p class="default_text">This exception can be thrown in case a file could not be processed, like opened or being read.</p>
+<h3 id="core_illegalarithmeticoperationexception">core.IllegalArithmeticOperationException</h3>
+<p class="default_text">This exception can be thrown in case an arithmetic operation is illegal. One example would be the division by zero.</p>
+<h3 id="core_filenotfoundexception">core.FileNotFoundException</h3>
+<p class="default_text">This exception can be thrown in case a file could not be found.</p>
+<h3 id="core_incompletejsonexception">core.IncompleteJsonException</h3>
+<p class="default_text">This exception can be thrown when a passed JSON is incomplete - e.g. if a key is missing.</p>
+<h3 id="core_notimplementedexception">core.NotImplementedException</h3>
+<p class="default_text">This exception can be thrown in case a called method is not implemented.</p>
+<h3 id="core_indexoutofboundsexception">core.IndexOutOfBoundsException</h3>
+<p class="default_text">This exception can be thrown in case an index of an array like structure is out of bounds.</p>
+<h3 id="core_exception">core.Exception</h3>
+<p class="default_text">This a base exception that can be thrown in any scenario.</p>
+<h3 id="boxing_integer">boxing.Integer</h3>
+<p class="default_text">This class represents the primitive datatype int and provides functionalities for arithmetic operations and string representation.</p>
+<h3 id="boxing_boolean">boxing.Boolean</h3>
+<p class="default_text">This class represents the primitive datatype bool and provides functionalities for boolean expressions and string representation.</p>
+<h3 id="boxing_double">boxing.Double</h3>
+<p class="default_text">This class represents the primitive datatype double and provides functionalities for arithmetic operations, accuracy and string representation.</p>
+<h3 id="boxing_float">boxing.Float</h3>
+<p class="default_text">This class represents the primitive datatype float and provides functionalities for arithmetic operations, accuracy and string representation.</p>
+<h3 id="boxing_string">boxing.String</h3>
+<p class="default_text">This class represents a string and provides operations, like filling and searching.</p>
+<h3 id="boxing_long">boxing.Long</h3>
+<p class="default_text">This class represents the primitive datatype long and provides functionalities for arithmetic operations and string representation.</p>
+<h3 id="time_date">time.Date</h3>
+<p class="default_text">This class represents a date and provides functionalities for string representation, arithmetic operations and time comparison.</p>
+<h3 id="time_dateparameter">time.DateParameter</h3>
+<p class="default_text">This class holds information of a date processed by this library.</p>
+<h3 id="time_dateparametermapper">time.DateParameterMapper</h3>
+<p class="default_text">This class maps date information to either an internal POSIX clock or an internal Windows clock, which can then be processed for setting the system time.</p>
+<h3 id="time_jnidateparametermapper">time.JniDateParameterMapper</h3>
+<p class="default_text">This mapper is converting a date Java class to a date model class of this library.</p>
+<h3 id="time_systemtimeparameter">time.SystemTimeParameter</h3>
+<p class="default_text">This class holds information for setting the system time.</p>
+<h3 id="time_posixclock">time.PosixClock</h3>
+<p class="default_text">This is a POSIX based internal time.</p>
+<h3 id="time_systemtime">time.SystemTime</h3>
+<p class="default_text">This class represents the system time and can be set. This would require root privileges.</p>
+<h3 id="time_windowsclock">time.WindowsClock</h3>
+<p class="default_text">This is a Windows based internal time.</p>
+<h3 id="encoding_base64">encoding.Base64</h3>
+<p class="default_text">This class can encode and decode the Base64 format.</p>
+<h3 id="event_event">event.Event</h3>
+<p class="default_text">This class represents an event that can be invoked.</p>
+<h3 id="event_eventlistener">event.EventListener</h3>
+<p class="default_text">An instance of this class can listen to any event. Usually, this class is used as base class of any class that must listen to an event.</p>
+<h3 id="event_eventmanager">event.EventManager</h3>
+<p class="default_text">This class can invoke all events known by subscribed listeners.</p>
+<h3 id="event_eventparameter">event.EventParameter</h3>
+<p class="default_text">This class holds parameters which can be sent during event invocation.</p>
+</body>
+</html>

BIN
doc/event-handling-uml.png


+ 2 - 0
doc/check-list.txt → doc/internal/check-list.txt

@@ -8,3 +8,5 @@ New Version (after merge back to development branch)
 - LibraryVersion:
     - increase version in method
     - adjust test
+- Base 64 CLI
+    - increase version

+ 31 - 0
doc/internal/coding-guidelines.md

@@ -0,0 +1,31 @@
+# Coding Guidelines
+
+This document describes the rules to be followed when contributing to this code base.
+
+## Code Format
+
+The code format for this library is defined via ClangFormat configured in the __.clang-format__ file.  
+This format must be used for the code.
+
+## Clean Code
+
+Clean code rules are defined via ClangTidy configured in the __.clang-tidy__ file. This rules must be followed.
+
+## Naming Convention
+
+The following naming conventions must be met for code contribution:
+
+1. Class names follow the CamelCase convention, where the first letter is an upper case letter.
+2. Class methods follow the CamelCase convention, where the first letter is a lower case letter, when the method is public.
+3. Class methods follow the CamelCase convention, where the first letter is an underscore letter, followed by a lower case letter, when the method is private.
+4. Method and function parameter follow the CamelCase convention, where the first letter is an underscore letter, followed by a lower case letter.
+5. Private class members follow the CamelCase convention, where the first letter starts with a lower case letter.
+6. Header or source files of classes must meet the same naming convention as for class names, followed by the class extension (.cpp for source files, .hpp for header files).
+7. Class methods with a return type other than void must be declared with __[[nodiscard]]__.
+8. Class methods with an optional return type other than void must be declared with __[[maybe_unused]]__.
+
+## Source Code Creation
+
+The following source code creation guidelines must be followed:
+
+1. In source code (.cpp files) namespaces must not be used throughout the code and must be announced through the __using__ keyword after the imports (e.g. using ls::std::boxing::Integer). The only exception is when the same class name is being used in more than one namespace.

+ 0 - 0
doc/section-pair-2023-standard.odt → doc/internal/section-pair-2023-standard.odt


BIN
doc/internal/section-pair-2023-standard.pdf


BIN
doc/state-machine-test.png


+ 6 - 1
include/ls-std/boxing/Boolean.hpp

@@ -3,7 +3,7 @@
  * Company:         Lynar Studios
  * E-Mail:          webmaster@lynarstudios.com
  * Created:         2020-08-09
- * Changed:         2023-05-17
+ * Changed:         2024-09-09
  *
  * */
 
@@ -16,6 +16,11 @@
 #include <memory>
 #include <sstream>
 
+/*
+ * @doc: class(name: 'Boolean', package: 'boxing')
+ * @doc: boxing.Boolean.description('This class represents the primitive datatype bool and provides functionalities for boolean expressions and string representation.')
+ * */
+
 namespace ls::std::boxing
 {
   class LS_STD_DYNAMIC_GOAL Boolean : public ls::std::core::Class, public ls::std::core::interface_type::IBoxing

+ 6 - 1
include/ls-std/boxing/Double.hpp

@@ -3,7 +3,7 @@
  * Company:         Lynar Studios
  * E-Mail:          webmaster@lynarstudios.com
  * Created:         2020-08-14
- * Changed:         2023-05-17
+ * Changed:         2024-09-09
  *
  * */
 
@@ -15,6 +15,11 @@
 #include <ls-std/os/dynamic-goal.hpp>
 #include <memory>
 
+/*
+ * @doc: class(name: 'Double', package: 'boxing')
+ * @doc: boxing.Double.description('This class represents the primitive datatype double and provides functionalities for arithmetic operations, accuracy and string representation.')
+ * */
+
 namespace ls::std::boxing
 {
   class LS_STD_DYNAMIC_GOAL Double : public ls::std::core::Class, public ls::std::core::interface_type::IBoxing

+ 6 - 1
include/ls-std/boxing/Float.hpp

@@ -3,7 +3,7 @@
  * Company:         Lynar Studios
  * E-Mail:          webmaster@lynarstudios.com
  * Created:         2020-08-14
- * Changed:         2023-05-17
+ * Changed:         2024-09-11
  *
  * */
 
@@ -16,6 +16,11 @@
 #include <memory>
 #include <string>
 
+/*
+ * @doc: class(name: 'Float', package: 'boxing')
+ * @doc: boxing.Float.description('This class represents the primitive datatype float and provides functionalities for arithmetic operations, accuracy and string representation.')
+ * */
+
 namespace ls::std::boxing
 {
   class LS_STD_DYNAMIC_GOAL Float : public ls::std::core::Class, public ls::std::core::interface_type::IBoxing

+ 6 - 1
include/ls-std/boxing/Integer.hpp

@@ -3,7 +3,7 @@
  * Company:         Lynar Studios
  * E-Mail:          webmaster@lynarstudios.com
  * Created:         2020-08-07
- * Changed:         2023-05-17
+ * Changed:         2024-09-11
  *
  * */
 
@@ -15,6 +15,11 @@
 #include <ls-std/os/dynamic-goal.hpp>
 #include <memory>
 
+/*
+ * @doc: class(name: 'Integer', package: 'boxing')
+ * @doc: boxing.Integer.description('This class represents the primitive datatype int and provides functionalities for arithmetic operations and string representation.')
+ * */
+
 namespace ls::std::boxing
 {
   class LS_STD_DYNAMIC_GOAL Integer : public ls::std::core::Class, public ls::std::core::interface_type::IBoxing

+ 6 - 1
include/ls-std/boxing/Long.hpp

@@ -3,7 +3,7 @@
  * Company:         Lynar Studios
  * E-Mail:          webmaster@lynarstudios.com
  * Created:         2020-08-17
- * Changed:         2023-05-17
+ * Changed:         2024-09-11
  *
  * */
 
@@ -16,6 +16,11 @@
 #include <ls-std/os/dynamic-goal.hpp>
 #include <memory>
 
+/*
+ * @doc: class(name: 'Long', package: 'boxing')
+ * @doc: boxing.Long.description('This class represents the primitive datatype long and provides functionalities for arithmetic operations and string representation.')
+ * */
+
 namespace ls::std::boxing
 {
   class LS_STD_DYNAMIC_GOAL Long : public ls::std::core::Class, public ls::std::core::interface_type::IBoxing

+ 6 - 1
include/ls-std/boxing/String.hpp

@@ -3,7 +3,7 @@
  * Company:         Lynar Studios
  * E-Mail:          webmaster@lynarstudios.com
  * Created:         2020-08-14
- * Changed:         2023-05-17
+ * Changed:         2024-09-11
  *
  * */
 
@@ -19,6 +19,11 @@
 #include <string_view>
 #include <vector>
 
+/*
+ * @doc: class(name: 'String', package: 'boxing')
+ * @doc: boxing.String.description('This class represents a string and provides operations, like filling and searching.')
+ * */
+
 namespace ls::std::boxing
 {
   class LS_STD_DYNAMIC_GOAL String : public ls::std::core::Class, public ls::std::core::interface_type::IBoxing

+ 6 - 1
include/ls-std/core/Class.hpp

@@ -3,7 +3,7 @@
  * Company:         Lynar Studios
  * E-Mail:          webmaster@lynarstudios.com
  * Created:         2020-08-07
- * Changed:         2023-05-15
+ * Changed:         2024-09-11
  *
  * */
 
@@ -13,6 +13,11 @@
 #include <ls-std/os/dynamic-goal.hpp>
 #include <string>
 
+/*
+ * @doc: class(name: 'Class', package: 'core')
+ * @doc: core.Class.description('This class represents a base class offering minimal reflection on the class name.')
+ * */
+
 namespace ls::std::core
 {
   class LS_STD_DYNAMIC_GOAL Class

+ 6 - 1
include/ls-std/core/ConditionalFunctionExecutor.hpp

@@ -3,7 +3,7 @@
 * Company:         Lynar Studios
 * E-Mail:          webmaster@lynarstudios.com
 * Created:         2023-02-13
-* Changed:         2023-02-21
+* Changed:         2024-09-11
 *
 * */
 
@@ -13,6 +13,11 @@
 #include <functional>
 #include <ls-std/os/dynamic-goal.hpp>
 
+/*
+ * @doc: class(name: 'ConditionalFunctionExecutor', package: 'core')
+ * @doc: core.ConditionalFunctionExecutor.description('This class can execute any method matching a specific signature based on a specific condition.')
+ * */
+
 namespace ls::std::core
 {
   class LS_STD_DYNAMIC_GOAL ConditionalFunctionExecutor

+ 6 - 1
include/ls-std/core/LibraryVersion.hpp

@@ -3,7 +3,7 @@
  * Company:         Lynar Studios
  * E-Mail:          webmaster@lynarstudios.com
  * Created:         2021-05-02
- * Changed:         2023-02-06
+ * Changed:         2024-09-11
  *
  * */
 
@@ -13,6 +13,11 @@
 #include <ls-std/os/dynamic-goal.hpp>
 #include <string>
 
+/*
+ * @doc: class(name: 'LibraryVersion', package: 'core')
+ * @doc: core.LibraryVersion.description('This class provides the version information of this library.')
+ * */
+
 namespace ls::std::core
 {
   class LS_STD_DYNAMIC_GOAL LibraryVersion

+ 6 - 1
include/ls-std/core/Version.hpp

@@ -3,7 +3,7 @@
  * Company:         Lynar Studios
  * E-Mail:          webmaster@lynarstudios.com
  * Created:         2020-09-27
- * Changed:         2023-05-16
+ * Changed:         2024-09-11
  *
  * */
 
@@ -16,6 +16,11 @@
 #include <ls-std/os/dynamic-goal.hpp>
 #include <string_view>
 
+/*
+ * @doc: class(name: 'Version', package: 'core')
+ * @doc: core.Version.description('This class represents a semantic versioning scheme.')
+ * */
+
 namespace ls::std::core
 {
   class LS_STD_DYNAMIC_GOAL Version : public ls::std::core::interface_type::ISerializable

+ 6 - 1
include/ls-std/core/evaluator/EmptyStringArgumentEvaluator.hpp

@@ -3,7 +3,7 @@
 * Company:         Lynar Studios
 * E-Mail:          webmaster@lynarstudios.com
 * Created:         2023-02-08
-* Changed:         2023-02-22
+* Changed:         2024-09-11
 *
 * */
 
@@ -14,6 +14,11 @@
 #include <ls-std/os/dynamic-goal.hpp>
 #include <string>
 
+/*
+ * @doc: class(name: 'EmptyStringArgumentEvaluator', package: 'core')
+ * @doc: core.EmptyStringArgumentEvaluator.description('This class evaluates whether a passed string is empty.')
+ * */
+
 namespace ls::std::core
 {
   class LS_STD_DYNAMIC_GOAL EmptyStringArgumentEvaluator : public ls::std::core::interface_type::IEvaluator

+ 6 - 1
include/ls-std/core/evaluator/IndexOutOfBoundsEvaluator.hpp

@@ -3,7 +3,7 @@
 * Company:         Lynar Studios
 * E-Mail:          webmaster@lynarstudios.com
 * Created:         2023-02-10
-* Changed:         2023-02-22
+* Changed:         2024-09-11
 *
 * */
 
@@ -14,6 +14,11 @@
 #include <ls-std/os/dynamic-goal.hpp>
 #include <string>
 
+/*
+ * @doc: class(name: 'IndexOutOfBoundsEvaluator', package: 'core')
+ * @doc: core.IndexOutOfBoundsEvaluator.description('This class evaluates whether a passed index is out of bounds.')
+ * */
+
 namespace ls::std::core
 {
   class LS_STD_DYNAMIC_GOAL IndexOutOfBoundsEvaluator : public ls::std::core::interface_type::IEvaluator

+ 6 - 1
include/ls-std/core/evaluator/NullPointerArgumentEvaluator.hpp

@@ -3,7 +3,7 @@
 * Company:         Lynar Studios
 * E-Mail:          webmaster@lynarstudios.com
 * Created:         2023-02-08
-* Changed:         2023-05-23
+* Changed:         2024-09-11
 *
 * */
 
@@ -16,6 +16,11 @@
 #include <memory>
 #include <string>
 
+/*
+ * @doc: class(name: 'NullPointerArgumentEvaluator', package: 'core')
+ * @doc: core.NullPointerArgumentEvaluator.description('This class evaluates whether a passed shared pointer argument is null.')
+ * */
+
 namespace ls::std::core
 {
   class LS_STD_DYNAMIC_GOAL NullPointerArgumentEvaluator : public ls::std::core::interface_type::IEvaluator

+ 6 - 1
include/ls-std/core/evaluator/NullPointerEvaluator.hpp

@@ -3,7 +3,7 @@
 * Company:         Lynar Studios
 * E-Mail:          webmaster@lynarstudios.com
 * Created:         2023-02-08
-* Changed:         2023-05-24
+* Changed:         2024-09-11
 *
 * */
 
@@ -15,6 +15,11 @@
 #include <memory>
 #include <string>
 
+/*
+ * @doc: class(name: 'NullPointerEvaluator', package: 'core')
+ * @doc: core.NullPointerEvaluator.description('This class evaluates whether a passed shared pointer reference is null.')
+ * */
+
 namespace ls::std::core
 {
   class LS_STD_DYNAMIC_GOAL NullPointerEvaluator : public ls::std::core::interface_type::IEvaluator

+ 6 - 1
include/ls-std/core/evaluator/RawNullPointerArgumentEvaluator.hpp

@@ -3,7 +3,7 @@
 * Company:         Lynar Studios
 * E-Mail:          webmaster@lynarstudios.com
 * Created:         2023-05-23
-* Changed:         2023-05-24
+* Changed:         2024-09-11
 *
 * */
 
@@ -15,6 +15,11 @@
 #include <ls-std/core/type/RawPointer.hpp>
 #include <string>
 
+/*
+ * @doc: class(name: 'RawNullPointerArgumentEvaluator', package: 'core')
+ * @doc: core.RawNullPointerArgumentEvaluator.description('This class evaluates whether a passed raw pointer argument is null.')
+ * */
+
 namespace ls::std::core
 {
   template<typename T>

+ 6 - 1
include/ls-std/core/evaluator/RawNullPointerEvaluator.hpp

@@ -3,7 +3,7 @@
 * Company:         Lynar Studios
 * E-Mail:          webmaster@lynarstudios.com
 * Created:         2023-05-24
-* Changed:         2023-05-24
+* Changed:         2024-09-11
 *
 * */
 
@@ -15,6 +15,11 @@
 #include <ls-std/core/type/RawPointer.hpp>
 #include <string>
 
+/*
+ * @doc: class(name: 'RawNullPointerEvaluator', package: 'core')
+ * @doc: core.RawNullPointerEvaluator.description('This class evaluates whether a passed raw pointer reference is null.')
+ * */
+
 namespace ls::std::core
 {
   template<typename T>

+ 6 - 1
include/ls-std/core/exception/EventNotHandledException.hpp

@@ -3,7 +3,7 @@
  * Company:         Lynar Studios
  * E-Mail:          webmaster@lynarstudios.com
  * Created:         2021-05-27
- * Changed:         2023-05-19
+ * Changed:         2024-09-11
  *
  * */
 
@@ -14,6 +14,11 @@
 #include <ls-std/os/dynamic-goal.hpp>
 #include <string>
 
+/*
+ * @doc: class(name: 'EventNotHandledException', package: 'core')
+ * @doc: core.EventNotHandledException.description('This exception can be thrown in case an event is not handled.')
+ * */
+
 namespace ls::std::core
 {
   class LS_STD_DYNAMIC_GOAL EventNotHandledException : public ls::std::core::Exception

+ 0 - 31
include/ls-std/core/exception/EventNotSubscribedException.hpp

@@ -1,31 +0,0 @@
-/*
- * Author:          Patrick-Christopher Mattulat
- * Company:         Lynar Studios
- * E-Mail:          webmaster@lynarstudios.com
- * Created:         2021-05-27
- * Changed:         2023-05-19
- *
- * */
-
-#ifndef LS_STD_EVENT_NOT_SUBSCRIBED_EXCEPTION_HPP
-#define LS_STD_EVENT_NOT_SUBSCRIBED_EXCEPTION_HPP
-
-#include <ls-std/core/exception/Exception.hpp>
-#include <ls-std/os/dynamic-goal.hpp>
-#include <string>
-
-namespace ls::std::core
-{
-  class LS_STD_DYNAMIC_GOAL EventNotSubscribedException : public ls::std::core::Exception
-  {
-    public:
-
-      EventNotSubscribedException();
-      explicit EventNotSubscribedException(const ::std::string &_message);
-      ~EventNotSubscribedException() noexcept override;
-
-      [[nodiscard]] const char *what() const noexcept override;
-  };
-}
-
-#endif

+ 6 - 1
include/ls-std/core/exception/Exception.hpp

@@ -3,7 +3,7 @@
 * Company:         Lynar Studios
 * E-Mail:          webmaster@lynarstudios.com
 * Created:         2023-02-22
-* Changed:         2023-05-19
+* Changed:         2024-09-11
 *
 * */
 
@@ -15,6 +15,11 @@
 #include <string>
 #include <string_view>
 
+/*
+ * @doc: class(name: 'Exception', package: 'core')
+ * @doc: core.Exception.description('This a base exception that can be thrown in any scenario.')
+ * */
+
 namespace ls::std::core
 {
   class LS_STD_DYNAMIC_GOAL Exception : public ::std::exception

+ 6 - 1
include/ls-std/core/exception/ExceptionMessage.hpp

@@ -3,7 +3,7 @@
 * Company:         Lynar Studios
 * E-Mail:          webmaster@lynarstudios.com
 * Created:         2023-02-07
-* Changed:         2023-02-07
+* Changed:         2024-09-13
 *
 * */
 
@@ -13,6 +13,11 @@
 #include <ls-std/os/dynamic-goal.hpp>
 #include <string>
 
+/*
+ * @doc: class(name: 'ExceptionMessage', package: 'core')
+ * @doc: core.ExceptionMessage.description('This is the message container being used by these libraries provided exceptions.')
+ * */
+
 namespace ls::std::core
 {
   class LS_STD_DYNAMIC_GOAL ExceptionMessage

+ 6 - 1
include/ls-std/core/exception/FileNotFoundException.hpp

@@ -3,7 +3,7 @@
  * Company:         Lynar Studios
  * E-Mail:          webmaster@lynarstudios.com
  * Created:         2020-08-17
- * Changed:         2023-05-19
+ * Changed:         2024-09-11
  *
  * */
 
@@ -14,6 +14,11 @@
 #include <ls-std/os/dynamic-goal.hpp>
 #include <string>
 
+/*
+ * @doc: class(name: 'FileNotFoundException', package: 'core')
+ * @doc: core.FileNotFoundException.description('This exception can be thrown in case a file could not be found.')
+ * */
+
 namespace ls::std::core
 {
   class LS_STD_DYNAMIC_GOAL FileNotFoundException : public ls::std::core::Exception

+ 6 - 1
include/ls-std/core/exception/FileOperationException.hpp

@@ -3,7 +3,7 @@
  * Company:         Lynar Studios
  * E-Mail:          webmaster@lynarstudios.com
  * Created:         2020-08-15
- * Changed:         2023-05-19
+ * Changed:         2024-09-11
  *
  * */
 
@@ -14,6 +14,11 @@
 #include <ls-std/os/dynamic-goal.hpp>
 #include <string>
 
+/*
+ * @doc: class(name: 'FileOperationException', package: 'core')
+ * @doc: core.FileOperationException.description('This exception can be thrown in case a file could not be processed, like opened or being read.')
+ * */
+
 namespace ls::std::core
 {
   class LS_STD_DYNAMIC_GOAL FileOperationException : public ls::std::core::Exception

+ 6 - 1
include/ls-std/core/exception/IllegalArgumentException.hpp

@@ -3,7 +3,7 @@
  * Company:         Lynar Studios
  * E-Mail:          webmaster@lynarstudios.com
  * Created:         2020-08-09
- * Changed:         2023-05-19
+ * Changed:         2024-09-11
  *
  * */
 
@@ -14,6 +14,11 @@
 #include <ls-std/os/dynamic-goal.hpp>
 #include <string>
 
+/*
+ * @doc: class(name: 'IllegalArgumentException', package: 'core')
+ * @doc: core.IllegalArgumentException.description('This exception can be thrown in case a passed argument is illegal, which can be individually interpreted.')
+ * */
+
 namespace ls::std::core
 {
   class LS_STD_DYNAMIC_GOAL IllegalArgumentException : public ls::std::core::Exception

+ 6 - 1
include/ls-std/core/exception/IllegalArithmeticOperationException.hpp

@@ -3,7 +3,7 @@
  * Company:         Lynar Studios
  * E-Mail:          webmaster@lynarstudios.com
  * Created:         2020-08-07
- * Changed:         2023-05-19
+ * Changed:         2024-09-11
  *
  * */
 
@@ -14,6 +14,11 @@
 #include <ls-std/os/dynamic-goal.hpp>
 #include <string>
 
+/*
+ * @doc: class(name: 'IllegalArithmeticOperationException', package: 'core')
+ * @doc: core.IllegalArithmeticOperationException.description('This exception can be thrown in case an arithmetic operation is illegal. One example would be the division by zero.')
+ * */
+
 namespace ls::std::core
 {
   class LS_STD_DYNAMIC_GOAL IllegalArithmeticOperationException : public ls::std::core::Exception

+ 6 - 1
include/ls-std/core/exception/IncompleteJsonException.hpp

@@ -3,7 +3,7 @@
  * Company:         Lynar Studios
  * E-Mail:          webmaster@lynarstudios.com
  * Created:         2021-04-30
- * Changed:         2023-05-19
+ * Changed:         2024-09-11
  *
  * */
 
@@ -14,6 +14,11 @@
 #include <ls-std/os/dynamic-goal.hpp>
 #include <string>
 
+/*
+ * @doc: class(name: 'IncompleteJsonException', package: 'core')
+ * @doc: core.IncompleteJsonException.description('This exception can be thrown when a passed JSON is incomplete - e.g. if a key is missing.')
+ * */
+
 namespace ls::std::core
 {
   class LS_STD_DYNAMIC_GOAL IncompleteJsonException : public ls::std::core::Exception

+ 6 - 1
include/ls-std/core/exception/IndexOutOfBoundsException.hpp

@@ -3,7 +3,7 @@
 * Company:         Lynar Studios
 * E-Mail:          webmaster@lynarstudios.com
 * Created:         2023-02-10
-* Changed:         2023-05-19
+* Changed:         2024-09-11
 *
 * */
 
@@ -14,6 +14,11 @@
 #include <ls-std/os/dynamic-goal.hpp>
 #include <string>
 
+/*
+ * @doc: class(name: 'IndexOutOfBoundsException', package: 'core')
+ * @doc: core.IndexOutOfBoundsException.description('This exception can be thrown in case an index of an array like structure is out of bounds.')
+ * */
+
 namespace ls::std::core
 {
   class LS_STD_DYNAMIC_GOAL IndexOutOfBoundsException : public ls::std::core::Exception

+ 6 - 1
include/ls-std/core/exception/NotImplementedException.hpp

@@ -3,7 +3,7 @@
 * Company:         Lynar Studios
 * E-Mail:          webmaster@lynarstudios.com
 * Created:         2023-03-27
-* Changed:         2023-05-19
+* Changed:         2024-09-11
 *
 * */
 
@@ -14,6 +14,11 @@
 #include <ls-std/os/dynamic-goal.hpp>
 #include <string>
 
+/*
+ * @doc: class(name: 'NotImplementedException', package: 'core')
+ * @doc: core.NotImplementedException.description('This exception can be thrown in case a called method is not implemented.')
+ * */
+
 namespace ls::std::core
 {
   class LS_STD_DYNAMIC_GOAL NotImplementedException : public ls::std::core::Exception

+ 6 - 1
include/ls-std/core/exception/NullPointerException.hpp

@@ -3,7 +3,7 @@
  * Company:         Lynar Studios
  * E-Mail:          webmaster@lynarstudios.com
  * Created:         2020-11-06
- * Changed:         2023-05-19
+ * Changed:         2024-09-11
  *
  * */
 
@@ -14,6 +14,11 @@
 #include <ls-std/os/dynamic-goal.hpp>
 #include <string>
 
+/*
+ * @doc: class(name: 'NullPointerException', package: 'core')
+ * @doc: core.NullPointerException.description('This exception can be thrown in case a called reference is null.')
+ * */
+
 namespace ls::std::core
 {
   class LS_STD_DYNAMIC_GOAL NullPointerException : public ls::std::core::Exception

+ 0 - 32
include/ls-std/core/interface/IEventSubscriber.hpp

@@ -1,32 +0,0 @@
-/*
- * Author:          Patrick-Christopher Mattulat
- * Company:         Lynar Studios
- * E-Mail:          webmaster@lynarstudios.com
- * Created:         2020-11-27
- * Changed:         2023-02-08
- *
- * */
-
-#ifndef LS_STD_I_EVENT_SUBSCRIBER_HPP
-#define LS_STD_I_EVENT_SUBSCRIBER_HPP
-
-#include "IListener.hpp"
-#include <ls-std/core/type/EventTypes.hpp>
-#include <ls-std/os/dynamic-goal.hpp>
-#include <memory>
-
-namespace ls::std::core::interface_type
-{
-  class LS_STD_DYNAMIC_GOAL IEventSubscriber
-  {
-    public:
-
-      IEventSubscriber();
-      virtual ~IEventSubscriber();
-
-      virtual void subscribe(const ls::std::core::type::event_id &_id, const ::std::shared_ptr<ls::std::core::interface_type::IListener> &_listener) = 0;
-      virtual void unsubscribe(const ls::std::core::type::event_id &_id, const ::std::shared_ptr<ls::std::core::interface_type::IListener> &_listener) = 0;
-  };
-}
-
-#endif

+ 6 - 1
include/ls-std/core/jni/JniApi.hpp

@@ -3,7 +3,7 @@
 * Company:         Lynar Studios
 * E-Mail:          webmaster@lynarstudios.com
 * Created:         2023-04-07
-* Changed:         2023-04-11
+* Changed:         2024-09-11
 *
 * */
 
@@ -13,6 +13,11 @@
 #include <ls-std/core/interface/IJniApi.hpp>
 #include <ls-std/os/dynamic-goal.hpp>
 
+/*
+ * @doc: class(name: 'JniApi', package: 'core')
+ * @doc: core.JniApi.description('This class represents an API for the Java Native Interface (JNI) wrapping basic JNI end points.')
+ * */
+
 namespace ls::std::core::experimental
 {
   class LS_STD_DYNAMIC_GOAL JniApi : public ls::std::core::experimental::interface_type::IJniApi

+ 6 - 1
include/ls-std/core/jni/JniClass.hpp

@@ -3,7 +3,7 @@
 * Company:         Lynar Studios
 * E-Mail:          webmaster@lynarstudios.com
 * Created:         2023-04-07
-* Changed:         2023-05-16
+* Changed:         2024-09-11
 *
 * */
 
@@ -20,6 +20,11 @@
 #include <string>
 #include <unordered_map>
 
+/*
+ * @doc: class(name: 'JniClass', package: 'core')
+ * @doc: core.JniClass.description('This class represents a Java class within the Java Native Interface (JNI).')
+ * */
+
 namespace ls::std::core::experimental
 {
   class LS_STD_DYNAMIC_GOAL JniClass

+ 6 - 1
include/ls-std/core/jni/JniClassParameter.hpp

@@ -3,7 +3,7 @@
 * Company:         Lynar Studios
 * E-Mail:          webmaster@lynarstudios.com
 * Created:         2023-04-07
-* Changed:         2023-05-16
+* Changed:         2024-09-11
 *
 * */
 
@@ -16,6 +16,11 @@
 #include <memory>
 #include <string>
 
+/*
+ * @doc: class(name: 'JniClassParameter', package: 'core')
+ * @doc: core.JniClassParameter.description('This class holds important information for the usage of the Java Native Interface (JNI), like Java environment or a specific Java object.')
+ * */
+
 namespace ls::std::core::experimental
 {
   class LS_STD_DYNAMIC_GOAL JniClassParameter

+ 6 - 1
include/ls-std/core/jni/JniMethod.hpp

@@ -3,7 +3,7 @@
 * Company:         Lynar Studios
 * E-Mail:          webmaster@lynarstudios.com
 * Created:         2023-04-08
-* Changed:         2023-05-16
+* Changed:         2024-09-11
 *
 * */
 
@@ -15,6 +15,11 @@
 #include <string>
 #include <string_view>
 
+/*
+ * @doc: class(name: 'JniMethod', package: 'core')
+ * @doc: core.JniMethod.description('This class represents a class method within Java Native Interface (JNI) context.')
+ * */
+
 namespace ls::std::core::experimental
 {
   class LS_STD_DYNAMIC_GOAL JniMethod

+ 6 - 1
include/ls-std/core/jni/JniReturnValue.hpp

@@ -3,7 +3,7 @@
 * Company:         Lynar Studios
 * E-Mail:          webmaster@lynarstudios.com
 * Created:         2023-04-08
-* Changed:         2023-04-11
+* Changed:         2024-09-11
 *
 * */
 
@@ -13,6 +13,11 @@
 #include <jni.h>
 #include <ls-std/os/dynamic-goal.hpp>
 
+/*
+ * @doc: class(name: 'JniReturnValue', package: 'core')
+ * @doc: core.JniReturnValue.description('This class represents a method return value of a Java class within Java Native Interface (JNI) context.')
+ * */
+
 namespace ls::std::core::experimental
 {
   class LS_STD_DYNAMIC_GOAL JniReturnValue

+ 0 - 27
include/ls-std/core/type/EventTypes.hpp

@@ -1,27 +0,0 @@
-/*
- * Author:          Patrick-Christopher Mattulat
- * Company:         Lynar Studios
- * E-Mail:          webmaster@lynarstudios.com
- * Created:         2020-11-26
- * Changed:         2023-05-17
- *
- * */
-
-#ifndef LS_STD_EVENT_TYPES_HPP
-#define LS_STD_EVENT_TYPES_HPP
-
-#include <functional>
-#include <map>
-#include <string>
-#include <vector>
-
-namespace ls::std::core::type
-{
-  using event_id = ::std::string;
-  using event_parameter_id = ::std::string;
-  using event_parameter_value = ::std::string;
-  using event_parameter = ::std::pair<::std::string, ::std::string>;
-  using event_parameter_list = ::std::map<ls::std::core::type::event_parameter_id, ls::std::core::type::event_parameter_value, ::std::less<>>;
-}
-
-#endif

+ 7 - 1
include/ls-std/encoding/Base64.hpp

@@ -3,7 +3,7 @@
  * Company:         Lynar Studios
  * E-Mail:          webmaster@lynarstudios.com
  * Created:         2022-01-03
- * Changed:         2023-05-15
+ * Changed:         2024-09-11
  *
  * */
 
@@ -11,12 +11,18 @@
 #define LS_STD_BASE64_HPP
 
 #include <bitset>
+#include <cstdint>
 #include <ls-std/core/interface/IEncoding.hpp>
 #include <ls-std/os/dynamic-goal.hpp>
 #include <string_view>
 #include <unordered_map>
 #include <vector>
 
+/*
+ * @doc: class(name: 'Base64', package: 'encoding')
+ * @doc: encoding.Base64.description('This class can encode and decode the Base64 format.')
+ * */
+
 namespace ls::std::encoding
 {
   class LS_STD_DYNAMIC_GOAL Base64 : public ls::std::core::interface_type::IEncoding

+ 18 - 23
include/ls-std/event/Event.hpp

@@ -1,20 +1,24 @@
 /*
- * Author:          Patrick-Christopher Mattulat
- * Company:         Lynar Studios
- * E-Mail:          webmaster@lynarstudios.com
- * Created:         2020-11-26
- * Changed:         2023-05-16
- *
- * */
+* Author:          Patrick-Christopher Mattulat
+* Company:         Lynar Studios
+* E-Mail:          webmaster@lynarstudios.com
+* Created:         2024-05-16
+* Changed:         2024-09-11
+*
+* */
 
 #ifndef LS_STD_EVENT_HPP
 #define LS_STD_EVENT_HPP
 
 #include <ls-std/core/Class.hpp>
-#include <ls-std/core/interface/ISerializable.hpp>
-#include <ls-std/core/type/EventTypes.hpp>
 #include <ls-std/os/dynamic-goal.hpp>
 #include <memory>
+#include <string>
+
+/*
+ * @doc: class(name: 'Event', package: 'event')
+ * @doc: event.Event.description('This class represents an event that can be invoked.')
+ * */
 
 namespace ls::std::event
 {
@@ -22,25 +26,16 @@ namespace ls::std::event
   {
     public:
 
-      explicit Event(const ls::std::core::type::event_id &_id);
+      explicit Event(const ::std::string &_name);
       ~Event() noexcept override;
 
-      // additional functionality
-
-      bool addParameter(const ls::std::core::type::event_parameter &_eventParameter); // nodiscard is optional here
-      void clearParameterList();
-      [[nodiscard]] ls::std::core::type::event_id getId() const;
-      [[nodiscard]] ls::std::core::type::event_parameter_list getParameterList() const;
-      bool removeParameter(const ls::std::core::type::event_parameter_id &_id); // nodiscard is optional here
-      void setId(const ls::std::core::type::event_id &_id);
+      [[nodiscard]] ::std::shared_ptr<ls::std::core::Class> getManager() const;
+      void setManager(const ::std::shared_ptr<ls::std::core::Class> &_manager);
+      [[nodiscard]] ls::std::event::Event supervisedBy(const ::std::shared_ptr<ls::std::core::Class> &_manager) const;
 
     private:
 
-      ls::std::core::type::event_id id{};
-      ls::std::core::type::event_parameter_list parameterList{};
-
-      void _assignId(const ls::std::core::type::event_id &_id);
-      [[nodiscard]] bool _hasParameter(const ls::std::core::type::event_id &_id);
+      ::std::shared_ptr<ls::std::core::Class> manager{};
   };
 }
 

+ 0 - 40
include/ls-std/event/EventHandler.hpp

@@ -1,40 +0,0 @@
-/*
- * Author:          Patrick-Christopher Mattulat
- * Company:         Lynar Studios
- * E-Mail:          webmaster@lynarstudios.com
- * Created:         2020-11-27
- * Changed:         2023-05-17
- *
- * */
-
-#ifndef LS_STD_EVENT_HANDLER_HPP
-#define LS_STD_EVENT_HANDLER_HPP
-
-#include "Event.hpp"
-#include "Narrator.hpp"
-#include <list>
-#include <ls-std/core/Class.hpp>
-#include <ls-std/core/interface/IListener.hpp>
-#include <ls-std/os/dynamic-goal.hpp>
-#include <memory>
-
-namespace ls::std::event
-{
-  class LS_STD_DYNAMIC_GOAL EventHandler : public ls::std::event::Narrator
-  {
-    public:
-
-      explicit EventHandler(const ls::std::core::type::event_id &_id);
-      ~EventHandler() noexcept override;
-
-      [[nodiscard]] ls::std::core::type::event_id getId() const;
-
-    private:
-
-      ls::std::core::type::event_id id{};
-
-      void _assignId(const ls::std::core::type::event_id &_id);
-  };
-}
-
-#endif

+ 53 - 0
include/ls-std/event/EventListener.hpp

@@ -0,0 +1,53 @@
+/*
+* Author:          Patrick-Christopher Mattulat
+* Company:         Lynar Studios
+* E-Mail:          webmaster@lynarstudios.com
+* Created:         2024-05-16
+* Changed:         2024-09-11
+*
+* */
+
+#ifndef LS_STD_EVENT_LISTENER_HPP
+#define LS_STD_EVENT_LISTENER_HPP
+
+#include "Event.hpp"
+#include "EventParameter.hpp"
+#include <ls-std/core/Class.hpp>
+#include <ls-std/event/type/EventTypes.hpp>
+#include <ls-std/os/dynamic-goal.hpp>
+
+/*
+ * @doc: class(name: 'EventListener', package: 'event')
+ * @doc: event.EventListener.description('An instance of this class can listen to any event. Usually, this class is used as base class of any class that must listen to an event.')
+ * */
+
+namespace ls::std::event
+{
+  class LS_STD_DYNAMIC_GOAL EventListener : public ::std::enable_shared_from_this<EventListener>, public ls::std::core::Class
+  {
+    public:
+
+      explicit EventListener();
+      ~EventListener() noexcept override;
+
+      [[nodiscard]] ls::std::event::type::listener_id getId() const;
+      void setId(ls::std::event::type::listener_id _id);
+      void setParameter(const ls::std::event::EventParameter &_parameter);
+      [[maybe_unused]] bool subscribe(const ls::std::event::Event &_event, const ls::std::event::type::event_action &_action);
+      [[maybe_unused]] bool unsubscribe(const ls::std::event::Event &_event);
+
+    protected:
+
+      ls::std::event::EventParameter parameter{};
+
+    private:
+
+      ls::std::event::type::listener_id id{};
+
+      void _requestListenerId(const ::std::shared_ptr<ls::std::core::Class> &_manager);
+      [[nodiscard]] bool _subscribe(const ls::std::event::Event &_event, const ls::std::event::type::event_action &_action);
+      [[nodiscard]] bool _unsubscribe(const ls::std::event::Event &_event);
+  };
+}
+
+#endif

+ 38 - 26
include/ls-std/event/EventManager.hpp

@@ -1,50 +1,62 @@
 /*
- * Author:          Patrick-Christopher Mattulat
- * Company:         Lynar Studios
- * E-Mail:          webmaster@lynarstudios.com
- * Created:         2020-11-27
- * Changed:         2023-05-17
- *
- * */
+* Author:          Patrick-Christopher Mattulat
+* Company:         Lynar Studios
+* E-Mail:          webmaster@lynarstudios.com
+* Created:         2024-05-16
+* Changed:         2024-09-11
+*
+* */
 
 #ifndef LS_STD_EVENT_MANAGER_HPP
 #define LS_STD_EVENT_MANAGER_HPP
 
-#include "EventHandler.hpp"
+#include "Event.hpp"
+#include "EventListener.hpp"
+#include "EventParameter.hpp"
+
+#include <list>
 #include <ls-std/core/Class.hpp>
-#include <ls-std/core/interface/IEventSubscriber.hpp>
-#include <ls-std/core/type/EventTypes.hpp>
+#include <ls-std/event/type/EventTypes.hpp>
 #include <ls-std/os/dynamic-goal.hpp>
-#include <map>
 #include <memory>
+#include <unordered_map>
+
+namespace ls::std::event::type
+{
+  using event_listeners = ::std::list<::std::pair<::std::shared_ptr<ls::std::event::EventListener>, ls::std::event::type::event_action>>;
+  using event_observability_inventory = ::std::unordered_map<::std::string, ls::std::event::type::event_listeners>;
+}
+
+/*
+ * @doc: class(name: 'EventManager', package: 'event')
+ * @doc: event.EventManager.description('This class can invoke all events known by subscribed listeners.')
+ * */
 
 namespace ls::std::event
 {
-  class LS_STD_DYNAMIC_GOAL EventManager : public ls::std::core::Class, public ls::std::core::interface_type::IEventSubscriber
+  class LS_STD_DYNAMIC_GOAL EventManager : public ls::std::core::Class
   {
     public:
 
       explicit EventManager();
       ~EventManager() noexcept override;
 
-      // implementation
-
-      void subscribe(const ls::std::core::type::event_id &_id, const ::std::shared_ptr<ls::std::core::interface_type::IListener> &_listener) override;
-      void unsubscribe(const ls::std::core::type::event_id &_id, const ::std::shared_ptr<ls::std::core::interface_type::IListener> &_listener) override;
-
-      // additional functionality
-
-      bool addEventHandler(const ::std::shared_ptr<ls::std::event::EventHandler> &_eventHandler); // nodiscard is optional here
-      void fire(const ls::std::event::Event &_event);
-      [[nodiscard]] bool hasEventHandler(const ls::std::core::type::event_id &_id);
-      bool removeEventHandler(const ::std::shared_ptr<ls::std::event::EventHandler> &_eventHandler); // nodiscard is optional here
+      [[nodiscard]] ls::std::event::type::listener_id getNextProvisionId() const;
+      [[nodiscard]] bool holdsListenerForEvent(ls::std::event::type::listener_id _id, const ls::std::event::Event &_event);
+      void invoke(const ls::std::event::Event &_event);
+      void invoke(const ls::std::event::Event &_event, const ls::std::event::EventParameter &_parameter);
+      [[nodiscard]] ls::std::event::type::listener_id requestListenerId();
+      void subscribeListenerForEvent(::std::shared_ptr<ls::std::event::EventListener> _listener, const ls::std::event::Event &_event, ls::std::event::type::event_action _action);
+      void unsubscribeListenerForEvent(const ::std::shared_ptr<ls::std::event::EventListener> &_listener, const ls::std::event::Event &_event);
 
     private:
 
-      ::std::map<ls::std::core::type::event_id, ::std::shared_ptr<ls::std::event::EventHandler>, ::std::less<>> eventHandlers{};
+      ls::std::event::type::event_observability_inventory inventory{};
+      ls::std::event::type::listener_id provisionId = 1;
 
-      [[nodiscard]] bool _hasEventHandler(const ls::std::core::type::event_id &_id);
-      [[nodiscard]] bool _removeEventHandler(const ::std::shared_ptr<ls::std::event::EventHandler> &_eventHandler);
+      static void _giveListenersParameter(const ls::std::event::type::event_listeners &_listeners, const ls::std::event::EventParameter &_parameter);
+      static void _notifyListeners(const ls::std::event::type::event_listeners &_listeners);
+      bool _observesEvent(const ls::std::event::Event &_event) const;
   };
 }
 

+ 40 - 0
include/ls-std/event/EventParameter.hpp

@@ -0,0 +1,40 @@
+/*
+* Author:          Patrick-Christopher Mattulat
+* Company:         Lynar Studios
+* E-Mail:          webmaster@lynarstudios.com
+* Created:         2024-05-30
+* Changed:         2024-09-11
+*
+* */
+
+#ifndef EVENT_PARAMETER_HPP
+#define EVENT_PARAMETER_HPP
+
+#include <list>
+#include <ls-std/os/dynamic-goal.hpp>
+#include <string>
+
+/*
+ * @doc: class(name: 'EventParameter', package: 'event')
+ * @doc: event.EventParameter.description('This class holds parameters which can be sent during event invocation.')
+ * */
+
+namespace ls::std::event
+{
+  class LS_STD_DYNAMIC_GOAL EventParameter
+  {
+    public:
+
+      EventParameter();
+      ~EventParameter();
+
+      void addParameter(const ::std::string &_parameter);
+      [[nodiscard]] ::std::list<::std::string> get() const;
+
+    private:
+
+      ::std::list<::std::string> parameters{};
+  };
+}
+
+#endif

+ 0 - 42
include/ls-std/event/Narrator.hpp

@@ -1,42 +0,0 @@
-/*
- * Author:          Patrick-Christopher Mattulat
- * Company:         Lynar Studios
- * E-Mail:          webmaster@lynarstudios.com
- * Created:         2020-11-14
- * Changed:         2023-05-16
- *
- * */
-
-#ifndef LS_STD_NARRATOR_HPP
-#define LS_STD_NARRATOR_HPP
-
-#include <list>
-#include <ls-std/core/Class.hpp>
-#include <ls-std/core/interface/IListener.hpp>
-#include <ls-std/os/dynamic-goal.hpp>
-#include <memory>
-
-namespace ls::std::event
-{
-  class LS_STD_DYNAMIC_GOAL Narrator : public ls::std::core::Class
-  {
-    public:
-
-      Narrator();
-      ~Narrator() noexcept override;
-
-      bool addListener(const ::std::shared_ptr<ls::std::core::interface_type::IListener> &_listener); // nodiscard is optional here
-      void clear();
-      [[nodiscard]] ::std::list<::std::shared_ptr<ls::std::core::interface_type::IListener>> getListeners() const;
-      bool removeListener(const ::std::shared_ptr<ls::std::core::interface_type::IListener> &_listener); // nodiscard is optional here
-      void tell(const ls::std::core::Class &_info) const;
-
-    private:
-
-      ::std::list<::std::shared_ptr<ls::std::core::interface_type::IListener>> listeners{};
-
-      [[nodiscard]] bool _hasListener(const ::std::shared_ptr<ls::std::core::interface_type::IListener> &_listener);
-  };
-}
-
-#endif

+ 0 - 51
include/ls-std/event/serialization/SerializableJsonEvent.hpp

@@ -1,51 +0,0 @@
-/*
- * Author:          Patrick-Christopher Mattulat
- * Company:         Lynar Studios
- * E-Mail:          webmaster@lynarstudios.com
- * Created:         2020-12-07
- * Changed:         2023-05-19
- *
- * */
-
-#ifndef LS_STD_SERIALIZABLE_JSON_EVENT_HPP
-#define LS_STD_SERIALIZABLE_JSON_EVENT_HPP
-
-#include <ls-std/core/Class.hpp>
-#include <ls-std/core/interface/ISerializable.hpp>
-#include <ls-std/core/type/Types.hpp>
-#include <ls-std/event/Event.hpp>
-#include <ls-std/os/dynamic-goal.hpp>
-#include <memory>
-
-namespace ls::std::event
-{
-  class LS_STD_DYNAMIC_GOAL SerializableJsonEvent : public ls::std::core::Class, public ls::std::core::interface_type::ISerializable
-  {
-    public:
-
-      explicit SerializableJsonEvent(const ::std::shared_ptr<ls::std::event::Event> &_value);
-      ~SerializableJsonEvent() noexcept override;
-
-      // implementation
-
-      [[nodiscard]] ls::std::core::type::byte_field marshal() override;
-      void unmarshal(const ls::std::core::type::byte_field &_data) override;
-
-      // additional functionality
-
-      [[nodiscard]] ::std::shared_ptr<ls::std::event::Event> getValue() const;
-      void setValue(const ::std::shared_ptr<ls::std::event::Event> &_value);
-
-    private:
-
-      ls::std::core::type::json jsonObject{};
-      ::std::shared_ptr<ls::std::event::Event> value{};
-
-      void _assignValue(const ::std::shared_ptr<ls::std::event::Event> &_value);
-      void _unmarshalParameterList();
-      void _update();
-      void _updateEventParameterList();
-  };
-}
-
-#endif

+ 22 - 0
include/ls-std/event/type/EventTypes.hpp

@@ -0,0 +1,22 @@
+/*
+* Author:          Patrick-Christopher Mattulat
+* Company:         Lynar Studios
+* E-Mail:          webmaster@lynarstudios.com
+* Created:         2024-05-16
+* Changed:         2024-05-17
+*
+* */
+
+#ifndef LS_STD_EVENT_TYPES_HPP
+#define LS_STD_EVENT_TYPES_HPP
+
+#include <cstdint>
+#include <functional>
+
+namespace ls::std::event::type
+{
+  using event_action = ::std::function<void()>;
+  using listener_id = uint32_t;
+}
+
+#endif

+ 6 - 1
include/ls-std/io/File.hpp

@@ -3,7 +3,7 @@
  * Company:         Lynar Studios
  * E-Mail:          webmaster@lynarstudios.com
  * Created:         2020-08-15
- * Changed:         2023-05-16
+ * Changed:         2024-09-13
  *
  * */
 
@@ -23,6 +23,11 @@
   #include <windows.h>
 #endif
 
+/*
+ * @doc: class(name: 'File', package: 'io')
+ * @doc: io.File.description('This class represents a file in the file system and provides functionalities for location, operations and fetching property information.')
+ * */
+
 namespace ls::std::io
 {
   class LS_STD_DYNAMIC_GOAL File : public ls::std::core::Class

+ 6 - 1
include/ls-std/io/FileOutputStream.hpp

@@ -3,7 +3,7 @@
  * Company:         Lynar Studios
  * E-Mail:          webmaster@lynarstudios.com
  * Created:         2020-08-20
- * Changed:         2023-05-16
+ * Changed:         2024-09-13
  *
  * */
 
@@ -16,6 +16,11 @@
 #include <ls-std/core/interface/IWriter.hpp>
 #include <ls-std/os/dynamic-goal.hpp>
 
+/*
+ * @doc: class(name: 'FileOutputStream', package: 'io')
+ * @doc: io.FileOutputStream.description('This class can be used for writing to a file stream.')
+ * */
+
 namespace ls::std::io
 {
   class LS_STD_DYNAMIC_GOAL FileOutputStream : public ls::std::core::Class, public ls::std::core::interface_type::IWriter

+ 6 - 1
include/ls-std/io/FilePathSeparator.hpp

@@ -3,7 +3,7 @@
  * Company:         Lynar Studios
  * E-Mail:          webmaster@lynarstudios.com
  * Created:         2020-08-15
- * Changed:         2023-02-22
+ * Changed:         2024-09-13
  *
  * */
 
@@ -13,6 +13,11 @@
 #include <ls-std/os/dynamic-goal.hpp>
 #include <string>
 
+/*
+ * @doc: class(name: 'FilePathSeparator', package: 'io')
+ * @doc: io.FilePathSeparator.description('This class represents the OS specific separator withing file paths on either Windows- or Unix-like operating systems.')
+ * */
+
 namespace ls::std::io
 {
   class LS_STD_DYNAMIC_GOAL FilePathSeparator

+ 6 - 1
include/ls-std/io/FilePathSeparatorMatch.hpp

@@ -3,7 +3,7 @@
  * Company:         Lynar Studios
  * E-Mail:          webmaster@lynarstudios.com
  * Created:         2020-08-15
- * Changed:         2023-02-22
+ * Changed:         2024-09-13
  *
  * */
 
@@ -12,6 +12,11 @@
 
 #include <ls-std/os/dynamic-goal.hpp>
 
+/*
+ * @doc: class(name: 'FilePathSeparatorMatch', package: 'io')
+ * @doc: io.FilePathSeparatorMatch.description('This class can filter file path separators.')
+ * */
+
 namespace ls::std::io
 {
   class LS_STD_DYNAMIC_GOAL FilePathSeparatorMatch

+ 6 - 1
include/ls-std/io/FileReader.hpp

@@ -3,7 +3,7 @@
  * Company:         Lynar Studios
  * E-Mail:          webmaster@lynarstudios.com
  * Created:         2020-08-17
- * Changed:         2023-05-16
+ * Changed:         2024-09-13
  *
  * */
 
@@ -15,6 +15,11 @@
 #include <ls-std/core/interface/IReader.hpp>
 #include <ls-std/os/dynamic-goal.hpp>
 
+/*
+ * @doc: class(name: 'FileReader', package: 'io')
+ * @doc: io.FileReader.description('This class can read the content of a file and return it as byte field.')
+ * */
+
 namespace ls::std::io
 {
   class LS_STD_DYNAMIC_GOAL FileReader : public ls::std::core::Class, public ls::std::core::interface_type::IReader

+ 6 - 1
include/ls-std/io/FileWriter.hpp

@@ -3,7 +3,7 @@
  * Company:         Lynar Studios
  * E-Mail:          webmaster@lynarstudios.com
  * Created:         2020-08-17
- * Changed:         2023-05-16
+ * Changed:         2024-09-13
  *
  * */
 
@@ -15,6 +15,11 @@
 #include <ls-std/core/interface/IWriter.hpp>
 #include <ls-std/os/dynamic-goal.hpp>
 
+/*
+ * @doc: class(name: 'FileWriter', package: 'io')
+ * @doc: io.FileWriter.description('This class can write to a file.')
+ * */
+
 namespace ls::std::io
 {
   class LS_STD_DYNAMIC_GOAL FileWriter : public ls::std::core::Class, public ls::std::core::interface_type::IWriter

+ 6 - 1
include/ls-std/io/NewLine.hpp

@@ -3,7 +3,7 @@
  * Company:         Lynar Studios
  * E-Mail:          webmaster@lynarstudios.com
  * Created:         2020-08-18
- * Changed:         2023-02-06
+ * Changed:         2024-09-13
  *
  * */
 
@@ -13,6 +13,11 @@
 #include <ls-std/os/dynamic-goal.hpp>
 #include <string>
 
+/*
+ * @doc: class(name: 'NewLine', package: 'io')
+ * @doc: io.NewLine.description('This class can be used as new line based on the preferred operating system. Currently, Windows and Unix-like operating systems are supported.')
+ * */
+
 namespace ls::std::io
 {
   class LS_STD_DYNAMIC_GOAL NewLine

+ 6 - 1
include/ls-std/io/StandardOutputWriter.hpp

@@ -3,7 +3,7 @@
  * Company:         Lynar Studios
  * E-Mail:          webmaster@lynarstudios.com
  * Created:         2020-11-06
- * Changed:         2023-02-22
+ * Changed:         2024-09-13
  *
  * */
 
@@ -13,6 +13,11 @@
 #include <ls-std/core/interface/IWriter.hpp>
 #include <ls-std/os/dynamic-goal.hpp>
 
+/*
+ * @doc: class(name: 'StandardOutputWriter', package: 'io')
+ * @doc: io.StandardOutputWriter.description('This class can be used to write a string to stdout.')
+ * */
+
 namespace ls::std::io
 {
   class LS_STD_DYNAMIC_GOAL StandardOutputWriter : public ls::std::core::interface_type::IWriter

+ 6 - 1
include/ls-std/io/StorableFile.hpp

@@ -3,7 +3,7 @@
  * Company:         Lynar Studios
  * E-Mail:          webmaster@lynarstudios.com
  * Created:         2020-08-19
- * Changed:         2023-05-19
+ * Changed:         2024-09-13
  *
  * */
 
@@ -16,6 +16,11 @@
 #include <memory>
 #include <string>
 
+/*
+ * @doc: class(name: 'StorableFile', package: 'io')
+ * @doc: io.StorableFile.description('This class can be used to store any serialized information to a file.')
+ * */
+
 namespace ls::std::io
 {
   class LS_STD_DYNAMIC_GOAL StorableFile : public ls::std::core::interface_type::IStorable

+ 6 - 1
include/ls-std/io/evaluator/FileExistenceEvaluator.hpp

@@ -3,7 +3,7 @@
 * Company:         Lynar Studios
 * E-Mail:          webmaster@lynarstudios.com
 * Created:         2023-02-21
-* Changed:         2023-02-22
+* Changed:         2024-09-13
 *
 * */
 
@@ -15,6 +15,11 @@
 #include <ls-std/os/dynamic-goal.hpp>
 #include <string>
 
+/*
+ * @doc: class(name: 'FileExistenceEvaluator', package: 'io')
+ * @doc: io.FileExistenceEvaluator.description('This class evaluates whether a file exists and throws an exception in case it does not.')
+ * */
+
 namespace ls::std::io
 {
   class LS_STD_DYNAMIC_GOAL FileExistenceEvaluator : public ls::std::core::Class, public ls::std::core::interface_type::IEvaluator

+ 6 - 1
include/ls-std/io/logging/LogLevel.hpp

@@ -3,7 +3,7 @@
  * Company:         Lynar Studios
  * E-Mail:          webmaster@lynarstudios.com
  * Created:         2020-08-20
- * Changed:         2023-05-19
+ * Changed:         2024-09-13
  *
  * */
 
@@ -16,6 +16,11 @@
 #include <string_view>
 #include <unordered_map>
 
+/*
+ * @doc: class(name: 'LogLevel', package: 'io')
+ * @doc: io.LogLevel.description('This class represents the log level controlling how noisy a log should be.')
+ * */
+
 namespace ls::std::io
 {
   class LS_STD_DYNAMIC_GOAL LogLevel : public ls::std::core::Class

+ 6 - 1
include/ls-std/io/logging/Logger.hpp

@@ -3,7 +3,7 @@
  * Company:         Lynar Studios
  * E-Mail:          webmaster@lynarstudios.com
  * Created:         2020-08-20
- * Changed:         2023-05-18
+ * Changed:         2024-09-13
  *
  * */
 
@@ -19,6 +19,11 @@
 #include <string>
 #include <string_view>
 
+/*
+ * @doc: class(name: 'Logger', package: 'io')
+ * @doc: io.Logger.description('This is a logger which can log to any implemented target.')
+ * */
+
 namespace ls::std::io
 {
   class LS_STD_DYNAMIC_GOAL Logger : public ls::std::core::Class

+ 6 - 1
include/ls-std/io/section-pair/SectionPairMessageFormatter.hpp

@@ -3,7 +3,7 @@
 * Company:         Lynar Studios
 * E-Mail:          webmaster@lynarstudios.com
 * Created:         2023-02-22
-* Changed:         2023-02-22
+* Changed:         2024-09-13
 *
 * */
 
@@ -13,6 +13,11 @@
 #include <ls-std/os/dynamic-goal.hpp>
 #include <string>
 
+/*
+ * @doc: class(name: 'SectionPairMessageFormatter', package: 'io')
+ * @doc: io.SectionPairMessageFormatter.description('This message formatter replaces new line sequences, which are OS specific, to a readable tag for error message formatting.')
+ * */
+
 namespace ls::std::io
 {
   class LS_STD_DYNAMIC_GOAL SectionPairMessageFormatter

+ 6 - 1
include/ls-std/io/section-pair/evaluator/SectionPairIdentifierArgumentEvaluator.hpp

@@ -3,7 +3,7 @@
 * Company:         Lynar Studios
 * E-Mail:          webmaster@lynarstudios.com
 * Created:         2023-02-09
-* Changed:         2023-02-22
+* Changed:         2024-09-13
 *
 * */
 
@@ -15,6 +15,11 @@
 #include <ls-std/io/section-pair/SectionPairTypes.hpp>
 #include <ls-std/os/dynamic-goal.hpp>
 
+/*
+ * @doc: class(name: 'SectionPairIdentifierArgumentEvaluator', package: 'io')
+ * @doc: io.SectionPairIdentifierArgumentEvaluator.description('This class checks whether an identifier argument is valid and throws an exception if that is not the case.')
+ * */
+
 namespace ls::std::io
 {
   class LS_STD_DYNAMIC_GOAL SectionPairIdentifierArgumentEvaluator : public ls::std::core::interface_type::IEvaluator, public ls::std::core::Class

+ 6 - 1
include/ls-std/io/section-pair/evaluator/SectionPairRowArgumentEvaluator.hpp

@@ -3,7 +3,7 @@
 * Company:         Lynar Studios
 * E-Mail:          webmaster@lynarstudios.com
 * Created:         2023-02-20
-* Changed:         2023-02-22
+* Changed:         2024-09-13
 *
 * */
 
@@ -15,6 +15,11 @@
 #include <ls-std/os/dynamic-goal.hpp>
 #include <string>
 
+/*
+ * @doc: class(name: 'SectionPairRowArgumentEvaluator', package: 'io')
+ * @doc: io.SectionPairRowArgumentEvaluator.description('This class checks whether a row argument is valid and throws an exception if that is not the case.')
+ * */
+
 namespace ls::std::io
 {
   class LS_STD_DYNAMIC_GOAL SectionPairRowArgumentEvaluator : public ls::std::core::Class, public ls::std::core::interface_type::IEvaluator

+ 6 - 1
include/ls-std/io/section-pair/evaluator/SectionPairRowListValueArgumentEvaluator.hpp

@@ -3,7 +3,7 @@
 * Company:         Lynar Studios
 * E-Mail:          webmaster@lynarstudios.com
 * Created:         2023-02-20
-* Changed:         2023-02-22
+* Changed:         2024-09-13
 *
 * */
 
@@ -15,6 +15,11 @@
 #include <ls-std/os/dynamic-goal.hpp>
 #include <string>
 
+/*
+ * @doc: class(name: 'SectionPairRowListValueArgumentEvaluator', package: 'io')
+ * @doc: io.SectionPairRowListValueArgumentEvaluator.description('This class checks whether a row list value argument is valid and throws an exception if that is not the case.')
+ * */
+
 namespace ls::std::io
 {
   class LS_STD_DYNAMIC_GOAL SectionPairRowListValueArgumentEvaluator : public ls::std::core::Class, public ls::std::core::interface_type::IEvaluator

+ 6 - 1
include/ls-std/io/section-pair/evaluator/SectionPairRowSingleValueArgumentEvaluator.hpp

@@ -3,7 +3,7 @@
 * Company:         Lynar Studios
 * E-Mail:          webmaster@lynarstudios.com
 * Created:         2023-02-19
-* Changed:         2023-02-22
+* Changed:         2024-09-13
 *
 * */
 
@@ -15,6 +15,11 @@
 #include <ls-std/os/dynamic-goal.hpp>
 #include <string>
 
+/*
+ * @doc: class(name: 'SectionPairRowSingleValueArgumentEvaluator', package: 'io')
+ * @doc: io.SectionPairRowSingleValueArgumentEvaluator.description('This class checks whether a single row value argument is valid and throws an exception if that is not the case.')
+ * */
+
 namespace ls::std::io
 {
   class LS_STD_DYNAMIC_GOAL SectionPairRowSingleValueArgumentEvaluator : public ls::std::core::Class, public ls::std::core::interface_type::IEvaluator

+ 6 - 1
include/ls-std/io/section-pair/evaluator/SectionPairSectionArgumentEvaluator.hpp

@@ -3,7 +3,7 @@
 * Company:         Lynar Studios
 * E-Mail:          webmaster@lynarstudios.com
 * Created:         2023-02-20
-* Changed:         2023-02-22
+* Changed:         2024-09-13
 *
 * */
 
@@ -15,6 +15,11 @@
 #include <ls-std/os/dynamic-goal.hpp>
 #include <string>
 
+/*
+ * @doc: class(name: 'SectionPairSectionArgumentEvaluator', package: 'io')
+ * @doc: io.SectionPairSectionArgumentEvaluator.description('This class checks whether a whole section argument is valid and throws an exception if that is not the case.')
+ * */
+
 namespace ls::std::io
 {
   class LS_STD_DYNAMIC_GOAL SectionPairSectionArgumentEvaluator : public ls::std::core::Class, public ls::std::core::interface_type::IEvaluator

+ 6 - 1
include/ls-std/io/section-pair/evaluator/SectionPairValueArgumentEvaluator.hpp

@@ -3,7 +3,7 @@
 * Company:         Lynar Studios
 * E-Mail:          webmaster@lynarstudios.com
 * Created:         2023-02-10
-* Changed:         2023-02-22
+* Changed:         2024-09-13
 *
 * */
 
@@ -16,6 +16,11 @@
 #include <ls-std/os/dynamic-goal.hpp>
 #include <string>
 
+/*
+ * @doc: class(name: 'SectionPairValueArgumentEvaluator', package: 'io')
+ * @doc: io.SectionPairValueArgumentEvaluator.description('This class checks whether a value argument is valid and throws an exception if that is not the case.')
+ * */
+
 namespace ls::std::io
 {
   class LS_STD_DYNAMIC_GOAL SectionPairValueArgumentEvaluator : public ls::std::core::interface_type::IEvaluator, public ls::std::core::Class

+ 6 - 1
include/ls-std/io/section-pair/model/SectionPairDocument.hpp

@@ -3,7 +3,7 @@
 * Company:         Lynar Studios
 * E-Mail:          webmaster@lynarstudios.com
 * Created:         2023-02-15
-* Changed:         2023-05-16
+* Changed:         2024-09-13
 *
 * */
 
@@ -18,6 +18,11 @@
 #include <memory>
 #include <string_view>
 
+/*
+ * @doc: class(name: 'SectionPairDocument', package: 'io')
+ * @doc: io.SectionPairDocument.description('This class represents a whole Section Pair document.')
+ * */
+
 namespace ls::std::io
 {
   class LS_STD_DYNAMIC_GOAL SectionPairDocument : public ::std::enable_shared_from_this<SectionPairDocument>, public ls::std::core::Class, public ls::std::core::interface_type::ISerializable

+ 6 - 1
include/ls-std/io/section-pair/model/SectionPairRow.hpp

@@ -3,7 +3,7 @@
 * Company:         Lynar Studios
 * E-Mail:          webmaster@lynarstudios.com
 * Created:         2023-02-08
-* Changed:         2023-05-18
+* Changed:         2024-09-13
 *
 * */
 
@@ -20,6 +20,11 @@
 #include <string>
 #include <string_view>
 
+/*
+ * @doc: class(name: 'SectionPairRow', package: 'io')
+ * @doc: io.SectionPairRow.description('This class represents a Section Pair row.')
+ * */
+
 namespace ls::std::io
 {
   class LS_STD_DYNAMIC_GOAL SectionPairRow : public ::std::enable_shared_from_this<SectionPairRow>, public ls::std::core::Class, public ls::std::core::interface_type::ISerializable

+ 6 - 1
include/ls-std/io/section-pair/model/SectionPairRowListValue.hpp

@@ -3,7 +3,7 @@
 * Company:         Lynar Studios
 * E-Mail:          webmaster@lynarstudios.com
 * Created:         2023-02-10
-* Changed:         2023-05-18
+* Changed:         2024-09-13
 *
 * */
 
@@ -16,6 +16,11 @@
 #include <ls-std/io/section-pair/SectionPairTypes.hpp>
 #include <ls-std/os/dynamic-goal.hpp>
 
+/*
+ * @doc: class(name: 'SectionPairRowListValue', package: 'io')
+ * @doc: io.SectionPairRowListValue.description('This class represents a Section Pair row list value.')
+ * */
+
 namespace ls::std::io
 {
   class LS_STD_DYNAMIC_GOAL SectionPairRowListValue : public ::std::enable_shared_from_this<SectionPairRowListValue>, public ls::std::core::Class, public ls::std::io::SectionPairRowValue

+ 6 - 1
include/ls-std/io/section-pair/model/SectionPairRowSingleValue.hpp

@@ -3,7 +3,7 @@
 * Company:         Lynar Studios
 * E-Mail:          webmaster@lynarstudios.com
 * Created:         2023-02-10
-* Changed:         2023-05-18
+* Changed:         2024-09-13
 *
 * */
 
@@ -17,6 +17,11 @@
 #include <ls-std/os/dynamic-goal.hpp>
 #include <memory>
 
+/*
+ * @doc: class(name: 'SectionPairRowSingleValue', package: 'io')
+ * @doc: io.SectionPairRowSingleValue.description('This class represents a Section Pair row single value.')
+ * */
+
 namespace ls::std::io
 {
   class LS_STD_DYNAMIC_GOAL SectionPairRowSingleValue : public ::std::enable_shared_from_this<SectionPairRowSingleValue>, public ls::std::core::Class, public ls::std::io::SectionPairRowValue

+ 6 - 1
include/ls-std/io/section-pair/model/SectionPairRowValue.hpp

@@ -3,7 +3,7 @@
 * Company:         Lynar Studios
 * E-Mail:          webmaster@lynarstudios.com
 * Created:         2023-02-10
-* Changed:         2023-05-22
+* Changed:         2024-09-13
 *
 * */
 
@@ -15,6 +15,11 @@
 #include <ls-std/os/dynamic-goal.hpp>
 #include <string_view>
 
+/*
+ * @doc: class(name: 'SectionPairRowValue', package: 'io')
+ * @doc: io.SectionPairRowValue.description('This class represents a Section Pair row value.')
+ * */
+
 namespace ls::std::io
 {
   class LS_STD_DYNAMIC_GOAL SectionPairRowValue : public ls::std::core::interface_type::ISerializable

+ 6 - 1
include/ls-std/io/section-pair/model/SectionPairSection.hpp

@@ -3,7 +3,7 @@
 * Company:         Lynar Studios
 * E-Mail:          webmaster@lynarstudios.com
 * Created:         2023-02-13
-* Changed:         2023-05-18
+* Changed:         2024-09-13
 *
 * */
 
@@ -20,6 +20,11 @@
 #include <string>
 #include <string_view>
 
+/*
+ * @doc: class(name: 'SectionPairSection', package: 'io')
+ * @doc: io.SectionPairSection.description('This class represents a Section Pair section.')
+ * */
+
 namespace ls::std::io
 {
   class LS_STD_DYNAMIC_GOAL SectionPairSection : public ::std::enable_shared_from_this<SectionPairSection>, public ls::std::core::Class, public ls::std::core::interface_type::ISerializable

+ 6 - 1
include/ls-std/io/section-pair/reader/SectionPairFileReader.hpp

@@ -3,7 +3,7 @@
 * Company:         Lynar Studios
 * E-Mail:          webmaster@lynarstudios.com
 * Created:         2023-02-21
-* Changed:         2023-05-18
+* Changed:         2024-09-13
 *
 * */
 
@@ -16,6 +16,11 @@
 #include <ls-std/os/dynamic-goal.hpp>
 #include <memory>
 
+/*
+ * @doc: class(name: 'SectionPairFileReader', package: 'io')
+ * @doc: io.SectionPairFileReader.description('This class reads a Section Pair file and writes it to a Section Pair document instance.')
+ * */
+
 namespace ls::std::io
 {
   class LS_STD_DYNAMIC_GOAL SectionPairFileReader : public ls::std::core::Class, public ls::std::core::interface_type::IReader

+ 6 - 1
include/ls-std/io/section-pair/reader/SectionPairFileReaderParameter.hpp

@@ -3,7 +3,7 @@
 * Company:         Lynar Studios
 * E-Mail:          webmaster@lynarstudios.com
 * Created:         2023-02-21
-* Changed:         2023-05-18
+* Changed:         2024-09-13
 *
 * */
 
@@ -18,6 +18,11 @@
 #include <string>
 #include <string_view>
 
+/*
+ * @doc: class(name: 'SectionPairFileReaderParameter', package: 'io')
+ * @doc: io.SectionPairFileReaderParameter.description('This class holds evaluators and the document instance for Section Pair file reading.')
+ * */
+
 namespace ls::std::io
 {
   class LS_STD_DYNAMIC_GOAL SectionPairFileReaderParameter

+ 6 - 1
include/ls-std/io/section-pair/serialization/SerializableSectionPairDocument.hpp

@@ -3,7 +3,7 @@
 * Company:         Lynar Studios
 * E-Mail:          webmaster@lynarstudios.com
 * Created:         2023-02-16
-* Changed:         2023-05-19
+* Changed:         2024-09-13
 *
 * */
 
@@ -17,6 +17,11 @@
 #include <memory>
 #include <string_view>
 
+/*
+ * @doc: class(name: 'SerializableSectionPairDocument', package: 'io')
+ * @doc: io.SerializableSectionPairDocument.description('This class can serialize a Section Pair document for file persistence.')
+ * */
+
 namespace ls::std::io
 {
   class LS_STD_DYNAMIC_GOAL SerializableSectionPairDocument : public ls::std::core::interface_type::ISerializable, public ls::std::core::Class

+ 6 - 1
include/ls-std/io/section-pair/serialization/SerializableSectionPairParameter.hpp

@@ -3,7 +3,7 @@
 * Company:         Lynar Studios
 * E-Mail:          webmaster@lynarstudios.com
 * Created:         2023-02-17
-* Changed:         2023-05-18
+* Changed:         2024-09-13
 *
 * */
 
@@ -16,6 +16,11 @@
 #include <string>
 #include <string_view>
 
+/*
+ * @doc: class(name: 'SerializableSectionPairParameter', package: 'io')
+ * @doc: io.SerializableSectionPairParameter.description('This class is holding information for Section Pair serialization.')
+ */
+
 namespace ls::std::io
 {
   class LS_STD_DYNAMIC_GOAL SerializableSectionPairParameter

+ 6 - 1
include/ls-std/io/section-pair/serialization/SerializableSectionPairRow.hpp

@@ -3,7 +3,7 @@
 * Company:         Lynar Studios
 * E-Mail:          webmaster@lynarstudios.com
 * Created:         2023-02-11
-* Changed:         2023-05-18
+* Changed:         2024-09-13
 *
 * */
 
@@ -17,6 +17,11 @@
 #include <memory>
 #include <string>
 
+/*
+ * @doc: class(name: 'SerializableSectionPairRow', package: 'io')
+ * @doc: io.SerializableSectionPairRow.description('This class can serialize a Section Pair row for file persistence.')
+ * */
+
 namespace ls::std::io
 {
   class LS_STD_DYNAMIC_GOAL SerializableSectionPairRow : public ls::std::core::interface_type::ISerializable, public ls::std::core::Class

+ 6 - 1
include/ls-std/io/section-pair/serialization/SerializableSectionPairRowListValue.hpp

@@ -3,7 +3,7 @@
 * Company:         Lynar Studios
 * E-Mail:          webmaster@lynarstudios.com
 * Created:         2023-02-11
-* Changed:         2023-05-18
+* Changed:         2024-09-13
 *
 * */
 
@@ -17,6 +17,11 @@
 #include <memory>
 #include <string_view>
 
+/*
+ * @doc: class(name: 'SerializableSectionPairRowListValue', package: 'io')
+ * @doc: io.SerializableSectionPairRowListValue.description('This class can serialize a Section Pair row list value for file persistence.')
+ * */
+
 namespace ls::std::io
 {
   class LS_STD_DYNAMIC_GOAL SerializableSectionPairRowListValue : public ls::std::core::interface_type::ISerializable, public ls::std::core::Class

+ 6 - 1
include/ls-std/io/section-pair/serialization/SerializableSectionPairRowSingleValue.hpp

@@ -3,7 +3,7 @@
 * Company:         Lynar Studios
 * E-Mail:          webmaster@lynarstudios.com
 * Created:         2023-02-11
-* Changed:         2023-05-18
+* Changed:         2024-09-13
 *
 * */
 
@@ -16,6 +16,11 @@
 #include <ls-std/os/dynamic-goal.hpp>
 #include <memory>
 
+/*
+ * @doc: class(name: 'SerializableSectionPairRowSingleValue', package: 'io')
+ * @doc: io.SerializableSectionPairRowSingleValue.description('This class can serialize a Section Pair single value for file persistence.')
+ * */
+
 namespace ls::std::io
 {
   class LS_STD_DYNAMIC_GOAL SerializableSectionPairRowSingleValue : public ls::std::core::interface_type::ISerializable, public ls::std::core::Class

+ 6 - 1
include/ls-std/io/section-pair/serialization/SerializableSectionPairSection.hpp

@@ -3,7 +3,7 @@
 * Company:         Lynar Studios
 * E-Mail:          webmaster@lynarstudios.com
 * Created:         2023-02-14
-* Changed:         2023-05-19
+* Changed:         2024-09-13
 *
 * */
 
@@ -17,6 +17,11 @@
 #include <ls-std/os/dynamic-goal.hpp>
 #include <string_view>
 
+/*
+ * @doc: class(name: 'SerializableSectionPairSection', package: 'io')
+ * @doc: io.SerializableSectionPairSection.description('This class can serialize a Section Pair section for file persistence.')
+ * */
+
 namespace ls::std::io
 {
   class LS_STD_DYNAMIC_GOAL SerializableSectionPairSection : public ls::std::core::interface_type::ISerializable, public ls::std::core::Class

+ 6 - 1
include/ls-std/io/section-pair/validator/SectionPairDocumentValidator.hpp

@@ -3,7 +3,7 @@
 * Company:         Lynar Studios
 * E-Mail:          webmaster@lynarstudios.com
 * Created:         2023-02-21
-* Changed:         2023-02-22
+* Changed:         2024-09-13
 *
 * */
 
@@ -15,6 +15,11 @@
 #include <ls-std/os/dynamic-goal.hpp>
 #include <string>
 
+/*
+ * @doc: class(name: 'SectionPairDocumentValidator', package: 'io')
+ * @doc: io.SectionPairDocumentValidator.description('This validator checks whether a content is a valid Section Pair document.')
+ * */
+
 namespace ls::std::io
 {
   class LS_STD_DYNAMIC_GOAL SectionPairDocumentValidator : public ls::std::core::Class, public ls::std::core::interface_type::IValidator

+ 6 - 1
include/ls-std/io/section-pair/validator/SectionPairFileExtensionValidator.hpp

@@ -3,7 +3,7 @@
 * Company:         Lynar Studios
 * E-Mail:          webmaster@lynarstudios.com
 * Created:         2023-02-21
-* Changed:         2023-02-22
+* Changed:         2024-09-13
 *
 * */
 
@@ -15,6 +15,11 @@
 #include <ls-std/os/dynamic-goal.hpp>
 #include <string>
 
+/*
+ * @doc: class(name: 'SectionPairFileExtensionValidator', package: 'io')
+ * @doc: io.SectionPairFileExtensionValidator.description('This validator checks whether a file name has a valid Section Pair file extension.')
+ * */
+
 namespace ls::std::io
 {
   class LS_STD_DYNAMIC_GOAL SectionPairFileExtensionValidator : public ls::std::core::Class, public ls::std::core::interface_type::IValidator

+ 6 - 1
include/ls-std/io/section-pair/validator/SectionPairIdentifierValidator.hpp

@@ -3,7 +3,7 @@
 * Company:         Lynar Studios
 * E-Mail:          webmaster@lynarstudios.com
 * Created:         2023-02-09
-* Changed:         2023-02-22
+* Changed:         2024-09-13
 *
 * */
 
@@ -16,6 +16,11 @@
 #include <ls-std/os/dynamic-goal.hpp>
 #include <string>
 
+/*
+ * @doc: class(name: 'SectionPairIdentifierValidator', package: 'io')
+ * @doc: io.SectionPairIdentifierValidator.description('This validator checks whether a string is a valid Section Pair identifier.')
+ * */
+
 namespace ls::std::io
 {
   class LS_STD_DYNAMIC_GOAL SectionPairIdentifierValidator : public ls::std::core::Class, public ls::std::core::interface_type::IValidator

+ 6 - 1
include/ls-std/io/section-pair/validator/SectionPairRowListValueValidator.hpp

@@ -3,7 +3,7 @@
 * Company:         Lynar Studios
 * E-Mail:          webmaster@lynarstudios.com
 * Created:         2023-02-19
-* Changed:         2023-02-22
+* Changed:         2024-09-13
 *
 * */
 
@@ -15,6 +15,11 @@
 #include <ls-std/os/dynamic-goal.hpp>
 #include <string>
 
+/*
+ * @doc: class(name: 'SectionPairRowListValueValidator', package: 'io')
+ * @doc: io.SectionPairRowListValueValidator.description('This validator checks whether a content is a valid Section Pair row list value.')
+ * */
+
 namespace ls::std::io
 {
   class LS_STD_DYNAMIC_GOAL SectionPairRowListValueValidator : public ls::std::core::Class, public ls::std::core::interface_type::IValidator

+ 6 - 1
include/ls-std/io/section-pair/validator/SectionPairRowSingleValueValidator.hpp

@@ -3,7 +3,7 @@
 * Company:         Lynar Studios
 * E-Mail:          webmaster@lynarstudios.com
 * Created:         2023-02-19
-* Changed:         2023-02-22
+* Changed:         2024-09-13
 *
 * */
 
@@ -14,6 +14,11 @@
 #include <ls-std/core/interface/IValidator.hpp>
 #include <ls-std/os/dynamic-goal.hpp>
 
+/*
+ * @doc: class(name: 'SectionPairRowSingleValueValidator', package: 'io')
+ * @doc: io.SectionPairRowSingleValueValidator.description('This validator checks whether a content is a valid Section Pair row single value.')
+ * */
+
 namespace ls::std::io
 {
   class LS_STD_DYNAMIC_GOAL SectionPairRowSingleValueValidator : public ls::std::core::Class, public ls::std::core::interface_type::IValidator

+ 6 - 1
include/ls-std/io/section-pair/validator/SectionPairRowValidator.hpp

@@ -3,7 +3,7 @@
 * Company:         Lynar Studios
 * E-Mail:          webmaster@lynarstudios.com
 * Created:         2023-02-20
-* Changed:         2023-02-22
+* Changed:         2024-09-13
 *
 * */
 
@@ -15,6 +15,11 @@
 #include <ls-std/os/dynamic-goal.hpp>
 #include <string>
 
+/*
+ * @doc: class(name: 'SectionPairRowValidator', package: 'io')
+ * @doc: io.SectionPairRowValidator.description('This validator checks whether a content is a valid Section Pair row.')
+ * */
+
 namespace ls::std::io
 {
   class LS_STD_DYNAMIC_GOAL SectionPairRowValidator : public ls::std::core::Class, public ls::std::core::interface_type::IValidator

+ 6 - 1
include/ls-std/io/section-pair/validator/SectionPairSectionValidator.hpp

@@ -3,7 +3,7 @@
 * Company:         Lynar Studios
 * E-Mail:          webmaster@lynarstudios.com
 * Created:         2023-02-20
-* Changed:         2023-02-22
+* Changed:         2024-09-13
 *
 * */
 
@@ -15,6 +15,11 @@
 #include <ls-std/os/dynamic-goal.hpp>
 #include <string>
 
+/*
+ * @doc: class(name: 'SectionPairSectionValidator', package: 'io')
+ * @doc: io.SectionPairSectionValidator.description('This validator checks whether a content is a valid Section Pair section.')
+ * */
+
 namespace ls::std::io
 {
   class LS_STD_DYNAMIC_GOAL SectionPairSectionValidator : public ls::std::core::Class, public ls::std::core::interface_type::IValidator

Niektóre pliki nie zostały wyświetlone z powodu dużej ilości zmienionych plików