Browse Source

Add ConditionalFunctionExecutor class

This class executes any function with the
signature void(), when a given condition is true.
Patrick-Christopher Mattulat 1 year ago
parent
commit
c7b6b64582

+ 4 - 1
CMakeLists.txt

@@ -153,6 +153,7 @@ set(SOURCE_FILES_CORE
         ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/core/interface/IValidator.cpp
         ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/core/interface/IWriter.cpp
         ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/core/Class.cpp
+        ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/core/ConditionalFunctionExecutor.cpp
         ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/core/LibraryVersion.cpp
         ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/core/Version.cpp)
 
@@ -239,9 +240,11 @@ if (${LS_STD_BUILD_WITH_TESTS})
             ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/core/exception/NullPointerExceptionTest.cpp
             ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/core/exception/WrongCallExceptionTest.cpp
             ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/core/ClassTest.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/core/ConditionalFunctionExecutorTest.cpp
             ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/core/LibraryVersionTest.cpp
             ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/core/VersionTest.cpp
-            ${CMAKE_CURRENT_SOURCE_DIR}/test/classes/core/ClassWrapper.cpp)
+            ${CMAKE_CURRENT_SOURCE_DIR}/test/classes/core/ClassWrapper.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/test/classes/core/MathOddValidator.cpp)
 
     set(TEST_FILES_ENCODING
             ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/encoding/Base64Test.cpp)

+ 33 - 0
include/ls-std/core/ConditionalFunctionExecutor.hpp

@@ -0,0 +1,33 @@
+/*
+* Author:          Patrick-Christopher Mattulat
+* Company:         Lynar Studios
+* E-Mail:          webmaster@lynarstudios.com
+* Created:         2023-02-13
+* Changed:         2023-02-13
+*
+* */
+
+#ifndef LS_STD_CONDITIONAL_FUNCTION_EXECUTOR_HPP
+#define LS_STD_CONDITIONAL_FUNCTION_EXECUTOR_HPP
+
+#include <functional>
+#include <ls-std/os/dynamic-goal.hpp>
+
+namespace ls::std::core
+{
+  class LS_STD_DYNAMIC_GOAL ConditionalFunctionExecutor
+  {
+    public:
+
+      explicit ConditionalFunctionExecutor(bool _condition);
+      ~ConditionalFunctionExecutor();
+
+      void execute(const ::std::function<void()> &_function);
+
+    private:
+
+      bool condition{};
+  };
+}
+
+#endif

+ 2 - 1
include/ls-std/ls-std-core.hpp

@@ -3,7 +3,7 @@
  * Company:         Lynar Studios
  * E-Mail:          webmaster@lynarstudios.com
  * Created:         2022-05-13
- * Changed:         2023-02-10
+ * Changed:         2023-02-13
  *
  * */
 
@@ -42,6 +42,7 @@
 #include <ls-std/core/type/Types.hpp>
 
 #include <ls-std/core/Class.hpp>
+#include <ls-std/core/ConditionalFunctionExecutor.hpp>
 #include <ls-std/core/LibraryVersion.hpp>
 #include <ls-std/core/Version.hpp>
 

+ 23 - 0
source/ls-std/core/ConditionalFunctionExecutor.cpp

@@ -0,0 +1,23 @@
+/*
+* Author:          Patrick-Christopher Mattulat
+* Company:         Lynar Studios
+* E-Mail:          webmaster@lynarstudios.com
+* Created:         2023-02-13
+* Changed:         2023-02-13
+*
+* */
+
+#include <ls-std/core/ConditionalFunctionExecutor.hpp>
+
+ls::std::core::ConditionalFunctionExecutor::ConditionalFunctionExecutor(bool _condition) : condition(_condition)
+{}
+
+ls::std::core::ConditionalFunctionExecutor::~ConditionalFunctionExecutor() = default;
+
+void ls::std::core::ConditionalFunctionExecutor::execute(const ::std::function<void()> &_function)
+{
+  if (this->condition)
+  {
+    _function();
+  }
+}

+ 51 - 0
test/cases/core/ConditionalFunctionExecutorTest.cpp

@@ -0,0 +1,51 @@
+/*
+* Author:          Patrick-Christopher Mattulat
+* Company:         Lynar Studios
+* E-Mail:          webmaster@lynarstudios.com
+* Created:         2023-02-13
+* Changed:         2023-02-13
+*
+* */
+
+#include <gtest/gtest.h>
+#include <ls-std-core-test.hpp>
+#include <ls-std/ls-std-core.hpp>
+
+using namespace ls::std::core;
+using namespace test::core;
+using namespace ::std;
+
+namespace
+{
+  class ConditionalFunctionExecutorTest : public ::testing::Test
+  {
+    protected:
+
+      ConditionalFunctionExecutorTest() = default;
+      ~ConditionalFunctionExecutorTest() override = default;
+
+      void SetUp() override
+      {}
+
+      void TearDown() override
+      {}
+  };
+
+  TEST_F(ConditionalFunctionExecutorTest, execute)
+  {
+    shared_ptr<MathOddValidator> validator = make_shared<MathOddValidator>();
+    int inputNumber = 3;
+    ConditionalFunctionExecutor{true}.execute([validator, inputNumber] { validator->validate(inputNumber); });
+
+    ASSERT_TRUE(validator->isOdd());
+  }
+
+  TEST_F(ConditionalFunctionExecutorTest, execute_no_execution)
+  {
+    shared_ptr<MathOddValidator> validator = make_shared<MathOddValidator>();
+    int inputNumber = 3;
+    ConditionalFunctionExecutor{false}.execute([validator, inputNumber] { validator->validate(inputNumber); });
+
+    ASSERT_FALSE(validator->isOdd());
+  }
+}

+ 29 - 0
test/classes/core/MathOddValidator.cpp

@@ -0,0 +1,29 @@
+/*
+* Author:          Patrick-Christopher Mattulat
+* Company:         Lynar Studios
+* E-Mail:          webmaster@lynarstudios.com
+* Created:         2023-02-13
+* Changed:         2023-02-13
+*
+* */
+
+#include "MathOddValidator.hpp"
+
+test::core::MathOddValidator::MathOddValidator() = default;
+
+test::core::MathOddValidator::~MathOddValidator() = default;
+
+bool test::core::MathOddValidator::isEven() const
+{
+  return !this->isOddNumber;
+}
+
+bool test::core::MathOddValidator::isOdd() const
+{
+  return this->isOddNumber;
+}
+
+void test::core::MathOddValidator::validate(int _number)
+{
+  this->isOddNumber = _number % 2 != 0;
+}

+ 32 - 0
test/classes/core/MathOddValidator.hpp

@@ -0,0 +1,32 @@
+/*
+* Author:          Patrick-Christopher Mattulat
+* Company:         Lynar Studios
+* E-Mail:          webmaster@lynarstudios.com
+* Created:         2023-02-13
+* Changed:         2023-02-13
+*
+* */
+
+#ifndef LS_STD_MATH_ODD_VALIDATOR_HPP
+#define LS_STD_MATH_ODD_VALIDATOR_HPP
+
+namespace test::core
+{
+  class MathOddValidator
+  {
+    public:
+
+      MathOddValidator();
+      ~MathOddValidator();
+
+      [[nodiscard]] bool isEven() const;
+      [[nodiscard]] bool isOdd() const;
+      void validate(int _number);
+
+    private:
+
+      bool isOddNumber{};
+  };
+}
+
+#endif

+ 2 - 1
test/ls-std-core-test.hpp

@@ -3,7 +3,7 @@
  * Company:         Lynar Studios
  * E-Mail:          webmaster@lynarstudios.com
  * Created:         2022-05-16
- * Changed:         2023-02-05
+ * Changed:         2023-02-13
  *
  * */
 
@@ -11,5 +11,6 @@
 #define LS_STD_LS_STD_CORE_TEST_HPP
 
 #include <classes/core/ClassWrapper.hpp>
+#include <classes/core/MathOddValidator.hpp>
 
 #endif