Use root controller with factory pattern

This commit is contained in:
James Whiteman 2022-01-26 11:53:02 -08:00
parent cea3710c76
commit 23694c755d
7 changed files with 23 additions and 31 deletions

3
.gitignore vendored
View File

@ -1,2 +1,5 @@
link/ link/
.vscode/ .vscode/
earn/
*.swp
*.swo

View File

@ -0,0 +1 @@
apt install -y libx11-dev

View File

@ -1,22 +1,10 @@
#include "act/root.h" #include "act/root.h"
#include "allocate/factory.h"
#include "draw/window.h" #include "draw/window.h"
#include <stdlib.h> root_controller_t::root_controller_t(root_controller_t::configuration_t* configuration_p) {
root_controller_t::configuration_t::configuration_t(std::vector<root_controller_t::mode_t> modes_p) { mode_m = configuration_p->mode_m;
modes_m = modes_p;
}
root_controller_t::root_controller_t(root_controller_t::configuration_t configuration_p) {
configuration_m = configuration_p;
}
root_controller_t* root_controller_factory_t::create(root_controller_t::configuration_t configuration_p) {
void* ptr = malloc(sizeof(root_controller_t));
return static_cast<root_controller_t*>(ptr);
}
factory_t::status_t root_controller_factory_t::dispose(root_controller_t* root_controller_p) {
free(root_controller_p);
return factory_t::status_t::ok;
} }
controller_t::status_t root_controller_t::on_event(controller_t::event_t event_p) { controller_t::status_t root_controller_t::on_event(controller_t::event_t event_p) {
if (
window_service_t* window_service = new window_service_t(); window_service_t* window_service = new window_service_t();
window_service_t::status_t window_status = window_service->create_window(); window_service_t::status_t window_status = window_service->create_window();
controller_t::status_t controller_status; controller_t::status_t controller_status;
@ -31,3 +19,10 @@ controller_t::status_t root_controller_t::on_event(controller_t::event_t event_p
} }
return controller_status; return controller_status;
} }
root_controller_t* root_controller_factory_t::create(root_controller_t::configuration_t* configuration_p) {
return new root_controller_t(configuration_p);
}
factory_t<root_controller_t::configuration_t, root_controller_t>::status_t root_controller_factory_t::dispose(root_controller_t* root_controller_p) {
delete root_controller_p;
return factory_t<root_controller_t::configuration_t, root_controller_t>::status_t::ok;
}

View File

@ -10,20 +10,15 @@ class root_controller_t : public controller_t {
app, app,
game game
}; };
class configuration_t { struct configuration_t {
private: mode_t mode_m;
std::vector<mode_t> modes_m;
public:
configuration_t(std::vector<mode_t> modes_p);
}; };
root_controller_t(configuration_t* configuration_p);
controller_t::status_t on_event(event_t event_p) override; controller_t::status_t on_event(event_t event_p) override;
private: private:
configuration_t configuration_m; mode_t mode_m;
root_controller_t(configuration_t configuration_p);
friend class root_controller_factory_t;
}; };
class root_controller_factory_t : public factory_t<root_controller_t::configuration_t, root_controller_t> { class root_controller_factory_t : public factory_t<root_controller_t::configuration_t, root_controller_t> {
public:
root_controller_t* create(root_controller_t::configuration_t* configuration_p) override; root_controller_t* create(root_controller_t::configuration_t* configuration_p) override;
factory_t::status_t dispose(root_controller_t* root_controller_p) override; factory_t::status_t dispose(root_controller_t* root_controller_p) override;
}; };

View File

@ -2,12 +2,10 @@
#include "act/root.h" #include "act/root.h"
#include <vector> #include <vector>
int main(int argc, char *argv[]) { int main(int argc, char *argv[]) {
root_controller_factory_t factory_l; root_controller_t::configuration_t configuration_l;
std::vector<root_controller_t::mode_t> modes_l; configuration_l.mode_m = root_controller_t::mode_t::app;
modes_l.push_back(root_controller_t::mode_t::app); root_controller_t* controller_l = new root_controller_t(&configuration_l);
root_controller_t::configuration_t configuration_l(modes_l);
root_controller_t* controller_l = factory_l.create(&configuration_l);
controller_t::status_t status_l = controller_l->on_event(controller_t::event_t::start); controller_t::status_t status_l = controller_l->on_event(controller_t::event_t::start);
factory_l.dispose(controller_l); delete controller_l;
return status_l; return status_l;
} }

View File

@ -1,3 +1,3 @@
main.cpp main.cpp
act/root.cpp act/root.cpp
platform/linux/draw/window.cpp target/linux/draw/window.cpp

Binary file not shown.