Use root controller with factory pattern
This commit is contained in:
		
							parent
							
								
									cea3710c76
								
							
						
					
					
						commit
						23694c755d
					
				
							
								
								
									
										3
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							@ -1,2 +1,5 @@
 | 
				
			|||||||
link/
 | 
					link/
 | 
				
			||||||
.vscode/
 | 
					.vscode/
 | 
				
			||||||
 | 
					earn/
 | 
				
			||||||
 | 
					*.swp
 | 
				
			||||||
 | 
					*.swo
 | 
				
			||||||
 | 
				
			|||||||
@ -0,0 +1 @@
 | 
				
			|||||||
 | 
					apt install -y libx11-dev
 | 
				
			||||||
@ -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;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -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;
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
				
			|||||||
@ -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;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -1,3 +1,3 @@
 | 
				
			|||||||
main.cpp
 | 
					main.cpp
 | 
				
			||||||
act/root.cpp
 | 
					act/root.cpp
 | 
				
			||||||
platform/linux/draw/window.cpp
 | 
					target/linux/draw/window.cpp
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										
											BIN
										
									
								
								earn/executable
									
									
									
									
									
								
							
							
						
						
									
										
											BIN
										
									
								
								earn/executable
									
									
									
									
									
								
							
										
											Binary file not shown.
										
									
								
							
		Loading…
	
		Reference in New Issue
	
	Block a user