Browse Source

Make AStatusCode a base class

Patrick-Christopher Mattulat 5 days ago
parent
commit
b24c536007

+ 1 - 1
cmake/ls-atlantis-interface-tests.cmake

@@ -9,7 +9,6 @@
 ################################
 
 set(ATLANTIS_INTERFACE_TEST_SOURCES
-        ${CMAKE_CURRENT_SOURCE_DIR}/test/interface/mock/StatusCodeMock.cpp
         ${CMAKE_CURRENT_SOURCE_DIR}/test/interface/AStatusCodeTest.cpp
 )
 
@@ -21,6 +20,7 @@ add_executable(${MODULE_NAME_INTERFACE}-tests ${ATLANTIS_INTERFACE_TEST_SOURCES}
 
 target_link_libraries(${MODULE_NAME_INTERFACE}-tests PRIVATE
     ${MODULE_NAME_INTERFACE}
+    ${MODULE_NAME_MESSAGING}
     GTest::gtest_main
 )
 

+ 4 - 5
include/cycle/Engine.hpp

@@ -10,7 +10,6 @@
 #include <cycle/EngineParameter.hpp>
 #include <cycle/EngineRuntimeData.hpp>
 #include <interface/AStatusCode.hpp>
-#include <memory>
 
 namespace ls::atlantis::cycle
 {
@@ -24,7 +23,7 @@ namespace ls::atlantis::cycle
       void beginFrame() const;
       void endFrame() const;
       [[nodiscard]] ::std::shared_ptr<ls::atlantis::cycle::EngineRuntimeData> getData() const;
-      [[nodiscard]] ::std::shared_ptr<ls::atlantis::interfaces::AStatusCode> init() const;
+      [[nodiscard]] ls::atlantis::interfaces::AStatusCode init() const;
       [[nodiscard]] bool isRunning() const;
       void quit() const;
 
@@ -33,9 +32,9 @@ namespace ls::atlantis::cycle
       ::std::shared_ptr<ls::atlantis::cycle::EngineRuntimeData> data{};
       ls::atlantis::cycle::EngineParameter parameter{};
 
-      [[nodiscard]] ::std::shared_ptr<ls::atlantis::interfaces::AStatusCode> _initEventManager() const;
-      [[nodiscard]] ::std::shared_ptr<ls::atlantis::interfaces::AStatusCode> _initKeyboard() const;
-      [[nodiscard]] ::std::shared_ptr<ls::atlantis::interfaces::AStatusCode> _initWindowApi() const;
+      [[nodiscard]] ls::atlantis::interfaces::AStatusCode _initEventManager() const;
+      [[nodiscard]] ls::atlantis::interfaces::AStatusCode _initKeyboard() const;
+      [[nodiscard]] ls::atlantis::interfaces::AStatusCode _initWindowApi() const;
   };
 }
 

+ 7 - 4
include/interface/AStatusCode.hpp

@@ -17,13 +17,16 @@ namespace ls::atlantis::interfaces
   {
     public:
 
-      explicit AStatusCode(const ls::atlantis::glossary::StatusCodes &_statusCode, ::std::string _statusText);
       virtual ~AStatusCode();
 
-      virtual void addHint(const ::std::string &_hint);
-      [[nodiscard]] virtual ls::atlantis::glossary::StatusCodes getCode() const;
+      void addHint(const ::std::string &_hint);
+      [[nodiscard]] ls::atlantis::glossary::StatusCodes getCode() const;
       [[nodiscard]] ::std::vector<::std::string> getHints() const;
-      [[nodiscard]] virtual ::std::string getText() const;
+      [[nodiscard]] ::std::string getText() const;
+
+    protected:
+
+      explicit AStatusCode(const ls::atlantis::glossary::StatusCodes &_statusCode, ::std::string _statusText);
 
     private:
 

+ 1 - 2
include/interface/IWindowApi.hpp

@@ -9,7 +9,6 @@
 #include <Export.hpp>
 #include <glossary/WindowApiTypes.hpp>
 #include <interface/AStatusCode.hpp>
-#include <memory>
 
 namespace ls::atlantis::interfaces
 {
@@ -21,7 +20,7 @@ namespace ls::atlantis::interfaces
       virtual ~IWindowApi();
 
       virtual ls::atlantis::glossary::WindowApiTypes getWindowApiType() = 0;
-      virtual ::std::shared_ptr<AStatusCode> init() = 0;
+      virtual AStatusCode init() = 0;
   };
 }
 

+ 3 - 3
include/window/SdlWindowApi.hpp

@@ -24,12 +24,12 @@ namespace ls::atlantis::window
       ~SdlWindowApi() override;
 
       [[nodiscard]] ls::atlantis::glossary::WindowApiTypes getWindowApiType() override;
-      [[nodiscard]] ::std::shared_ptr<ls::atlantis::interfaces::AStatusCode> init() override;
+      [[nodiscard]] ls::atlantis::interfaces::AStatusCode init() override;
 
     private:
 
-      [[nodiscard]] ::std::shared_ptr<ls::atlantis::interfaces::AStatusCode> _createWindow();
-      [[nodiscard]] ::std::shared_ptr<ls::atlantis::interfaces::AStatusCode> _initApi() const;
+      [[nodiscard]] ls::atlantis::interfaces::AStatusCode _createWindow();
+      [[nodiscard]] ls::atlantis::interfaces::AStatusCode _initApi() const;
 
       ::std::shared_ptr<ls::atlantis::interfaces::ISdlApi> sdlApi{};
       ::std::unique_ptr<SDL_Window, ::std::function<void(SDL_Window *)>> window{nullptr, [](SDL_Window *) {}};

+ 3 - 4
output/BasicSdlWindowExample.cpp

@@ -15,7 +15,6 @@ using ls::atlantis::glossary::KeyboardKeys;
 using ls::atlantis::glossary::StatusCodes;
 using ls::atlantis::glossary::WindowApiTypes;
 using ls::atlantis::interfaces::AStatusCode;
-using ::std::shared_ptr;
 
 /*
  * This example application opens a fullscreen window, which can be closed via Escape-Keyboard-Key.
@@ -26,8 +25,8 @@ int main()
   EngineParameter parameter{};
   parameter.setWindowApiType(WindowApiTypes::SDL_WINDOW_API);
 
-  Engine engine{parameter};
-  const shared_ptr<AStatusCode> statusCode = engine.init();
+  const Engine engine{parameter};
+  const AStatusCode statusCode = engine.init();
 
   while (engine.isRunning())
   {
@@ -41,5 +40,5 @@ int main()
     engine.endFrame();
   }
 
-  return statusCode->getCode() == StatusCodes::OK ? EXIT_SUCCESS : EXIT_FAILURE;
+  return statusCode.getCode() == StatusCodes::OK ? EXIT_SUCCESS : EXIT_FAILURE;
 }

+ 9 - 9
source/cycle/Engine.cpp

@@ -44,16 +44,16 @@ shared_ptr<EngineRuntimeData> Engine::getData() const
   return this->data;
 }
 
-shared_ptr<AStatusCode> Engine::init() const
+AStatusCode Engine::init() const
 {
-  shared_ptr<AStatusCode> result = _initWindowApi();
+  AStatusCode result = _initWindowApi();
 
-  if (result->getCode() == StatusCodeOk().getCode())
+  if (result.getCode() == StatusCodeOk{}.getCode())
   {
     result = this->_initKeyboard();
   }
 
-  if (result->getCode() == StatusCodeOk().getCode())
+  if (result.getCode() == StatusCodeOk{}.getCode())
   {
     result = this->_initEventManager();
   }
@@ -71,23 +71,23 @@ void Engine::quit() const
   this->data->setIsUp(false);
 }
 
-shared_ptr<AStatusCode> Engine::_initEventManager() const
+AStatusCode Engine::_initEventManager() const
 {
   const auto eventManager = WindowApiEventManagerFactory::build(this->parameter.getWindowApiType());
   this->data->setWindowApiEventManager(eventManager);
 
-  return make_shared<StatusCodeOk>();
+  return StatusCodeOk{};
 }
 
-shared_ptr<AStatusCode> Engine::_initKeyboard() const
+AStatusCode Engine::_initKeyboard() const
 {
   const auto keyboard = KeyboardFactory::build(this->parameter.getWindowApiType());
   this->data->setKeyboard(keyboard);
 
-  return make_shared<StatusCodeOk>();
+  return StatusCodeOk{};
 }
 
-shared_ptr<AStatusCode> Engine::_initWindowApi() const
+AStatusCode Engine::_initWindowApi() const
 {
   const auto windowApi = WindowApiFactory::build(this->parameter.getWindowApiType());
   this->data->setWindowApi(windowApi);

+ 15 - 15
source/window/SdlWindowApi.cpp

@@ -4,19 +4,19 @@
  */
 
 #include <SDL3/SDL.h>
+#include <ls-std/core/evaluator/NullPointerArgumentEvaluator.hpp>
 #include <messaging/StatusCodeOk.hpp>
 #include <messaging/StatusCodeWindowApiLoadingFailed.hpp>
 #include <messaging/StatusCodeWindowCreationFailed.hpp>
-#include <ls-std/core/evaluator/NullPointerArgumentEvaluator.hpp>
 #include <window/SdlApi.hpp>
 #include <window/SdlWindowApi.hpp>
 
-using ls::atlantis::messaging::StatusCodeOk;
-using ls::atlantis::messaging::StatusCodeWindowApiLoadingFailed;
-using ls::atlantis::messaging::StatusCodeWindowCreationFailed;
 using ls::atlantis::glossary::WindowApiTypes;
 using ls::atlantis::interfaces::AStatusCode;
 using ls::atlantis::interfaces::ISdlApi;
+using ls::atlantis::messaging::StatusCodeOk;
+using ls::atlantis::messaging::StatusCodeWindowApiLoadingFailed;
+using ls::atlantis::messaging::StatusCodeWindowCreationFailed;
 using ls::atlantis::window::SdlApi;
 using ls::atlantis::window::SdlWindowApi;
 using ls::std::core::NullPointerArgumentEvaluator;
@@ -44,11 +44,11 @@ WindowApiTypes SdlWindowApi::getWindowApiType()
   return this->windowApiType;
 }
 
-shared_ptr<AStatusCode> SdlWindowApi::init()
+AStatusCode SdlWindowApi::init()
 {
-  shared_ptr<AStatusCode> statusCode = this->_initApi();
+  AStatusCode statusCode = this->_initApi();
 
-  if (statusCode->getCode() == StatusCodeOk{}.getCode())
+  if (statusCode.getCode() == StatusCodeOk{}.getCode())
   {
     statusCode = this->_createWindow();
   }
@@ -56,28 +56,28 @@ shared_ptr<AStatusCode> SdlWindowApi::init()
   return statusCode;
 }
 
-shared_ptr<AStatusCode> SdlWindowApi::_createWindow()
+AStatusCode SdlWindowApi::_createWindow()
 {
-  shared_ptr<AStatusCode> statusCode = make_shared<StatusCodeOk>();
+  AStatusCode statusCode = StatusCodeOk{};
   window.reset(sdlApi->CreateWindow("", 0, 0, SDL_WINDOW_FULLSCREEN));
 
   if (window == nullptr)
   {
-    statusCode = make_shared<StatusCodeWindowCreationFailed>();
-    statusCode->addHint(sdlApi->GetError());
+    statusCode = StatusCodeWindowCreationFailed{};
+    statusCode.addHint(sdlApi->GetError());
   }
 
   return statusCode;
 }
 
-shared_ptr<AStatusCode> SdlWindowApi::_initApi() const
+AStatusCode SdlWindowApi::_initApi() const
 {
-  shared_ptr<AStatusCode> statusCode = make_shared<StatusCodeOk>();
+  AStatusCode statusCode = StatusCodeOk{};
 
   if (!sdlApi->Init(SDL_INIT_VIDEO))
   {
-    statusCode = make_shared<StatusCodeWindowApiLoadingFailed>();
-    statusCode->addHint(sdlApi->GetError());
+    statusCode = StatusCodeWindowApiLoadingFailed{};
+    statusCode.addHint(sdlApi->GetError());
   }
 
   return statusCode;

+ 2 - 4
test/cycle/mock/WindowApiMock.cpp

@@ -10,8 +10,6 @@ using ls::atlantis::messaging::StatusCodeOk;
 using ls::atlantis::cycle::test::WindowApiMock;
 using ls::atlantis::glossary::WindowApiTypes;
 using ls::atlantis::interfaces::AStatusCode;
-using ::std::make_shared;
-using ::std::shared_ptr;
 
 WindowApiMock::WindowApiMock() = default;
 
@@ -22,7 +20,7 @@ WindowApiTypes WindowApiMock::getWindowApiType()
   return WindowApiTypes::NONE_SELECTED;
 }
 
-shared_ptr<AStatusCode> WindowApiMock::init()
+AStatusCode WindowApiMock::init()
 {
-  return make_shared<StatusCodeOk>();
+  return StatusCodeOk{};
 }

+ 1 - 1
test/cycle/mock/WindowApiMock.hpp

@@ -18,7 +18,7 @@ namespace ls::atlantis::cycle::test
       ~WindowApiMock() override;
 
       [[nodiscard]] ls::atlantis::glossary::WindowApiTypes getWindowApiType() override;
-      [[nodiscard]] ::std::shared_ptr<ls::atlantis::interfaces::AStatusCode> init() override;
+      [[nodiscard]] ls::atlantis::interfaces::AStatusCode init() override;
   };
 }
 

+ 5 - 3
test/interface/AStatusCodeTest.cpp

@@ -4,10 +4,12 @@
  */
 
 #include <gtest/gtest.h>
-#include <test/interface/mock/StatusCodeMock.hpp>
+#include <interface/AStatusCode.hpp>
 #include <ls-std/core/exception/IllegalArgumentException.hpp>
+#include <messaging/StatusCodeOk.hpp>
 
-using ls::atlantis::interfaces::test::StatusCodeMock;
+using ls::atlantis::interfaces::AStatusCode;
+using ls::atlantis::messaging::StatusCodeOk;
 using ls::std::core::IllegalArgumentException;
 using ::testing::Test;
 
@@ -23,6 +25,6 @@ namespace
 
   TEST_F(AStatusCodeTest, addHint_emptyString)
   {
-    ASSERT_THROW(StatusCodeMock().addHint(""), IllegalArgumentException);
+    ASSERT_THROW(StatusCodeOk().addHint(""), IllegalArgumentException);
   }
 }

+ 0 - 15
test/interface/mock/StatusCodeMock.cpp

@@ -1,15 +0,0 @@
-/*
- * author: Patrick-Christopher Mattulat
- * e-mail: webmaster@lynarstudios.com
- */
-
-#include <test/interface/mock/StatusCodeMock.hpp>
-
-using ls::atlantis::glossary::StatusCodes;
-using ls::atlantis::interfaces::AStatusCode;
-using ls::atlantis::interfaces::test::StatusCodeMock;
-
-StatusCodeMock::StatusCodeMock() : AStatusCode(StatusCodes::OK, "mocked a code")
-{}
-
-StatusCodeMock::~StatusCodeMock() = default;

+ 0 - 22
test/interface/mock/StatusCodeMock.hpp

@@ -1,22 +0,0 @@
-/*
- * author: Patrick-Christopher Mattulat
- * e-mail: webmaster@lynarstudios.com
- */
-
-#ifndef LS_ATLANTIS_ENGINE_INTERFACE_TEST_STATUS_CODE_MOCK_HPP
-#define LS_ATLANTIS_ENGINE_INTERFACE_TEST_STATUS_CODE_MOCK_HPP
-
-#include <interface/AStatusCode.hpp>
-
-namespace ls::atlantis::interfaces::test
-{
-  class StatusCodeMock : public ls::atlantis::interfaces::AStatusCode
-  {
-    public:
-
-      StatusCodeMock();
-      ~StatusCodeMock() override;
-  };
-}
-
-#endif

+ 9 - 9
test/window/SdlWindowApiTest.cpp

@@ -52,7 +52,7 @@ namespace
     EXPECT_CALL(*sdlApiMock, DestroyWindow(fakeWindow));
     EXPECT_CALL(*sdlApiMock, Quit());
 
-    ASSERT_EQ(StatusCodes::OK, SdlWindowApi(sdlApiMock).init()->getCode());
+    ASSERT_EQ(StatusCodes::OK, SdlWindowApi(sdlApiMock).init().getCode());
   }
 
   TEST_F(SdlWindowApiTest, init_failed)
@@ -63,11 +63,11 @@ namespace
     EXPECT_CALL(*sdlApiMock, GetError()).WillOnce(Return(hint.c_str()));
     EXPECT_CALL(*sdlApiMock, Quit());
 
-    const shared_ptr<AStatusCode> statusCode = SdlWindowApi(sdlApiMock).init();
+    const AStatusCode statusCode = SdlWindowApi(sdlApiMock).init();
 
-    ASSERT_EQ(StatusCodes::WINDOW_API_LOADING_FAILED, statusCode->getCode());
-    ASSERT_EQ(1, statusCode->getHints().size());
-    ASSERT_STREQ(hint.c_str(), statusCode->getHints()[0].c_str());
+    ASSERT_EQ(StatusCodes::WINDOW_API_LOADING_FAILED, statusCode.getCode());
+    ASSERT_EQ(1, statusCode.getHints().size());
+    ASSERT_STREQ(hint.c_str(), statusCode.getHints()[0].c_str());
   }
 
   TEST_F(SdlWindowApiTest, init_windowCreationFailed)
@@ -79,10 +79,10 @@ namespace
     EXPECT_CALL(*sdlApiMock, GetError()).WillOnce(Return(hint.c_str()));
     EXPECT_CALL(*sdlApiMock, Quit());
 
-    const shared_ptr<AStatusCode> statusCode = SdlWindowApi(sdlApiMock).init();
+    const AStatusCode statusCode = SdlWindowApi(sdlApiMock).init();
 
-    ASSERT_EQ(StatusCodes::WINDOW_CREATION_FAILED, statusCode->getCode());
-    ASSERT_EQ(1, statusCode->getHints().size());
-    ASSERT_STREQ(hint.c_str(), statusCode->getHints()[0].c_str());
+    ASSERT_EQ(StatusCodes::WINDOW_CREATION_FAILED, statusCode.getCode());
+    ASSERT_EQ(1, statusCode.getHints().size());
+    ASSERT_STREQ(hint.c_str(), statusCode.getHints()[0].c_str());
   }
 }