From af0d9b895cddd1effc5e4153495b0f9f8107bc53 Mon Sep 17 00:00:00 2001 From: James Whiteman Date: Wed, 22 Dec 2021 16:57:28 -0800 Subject: [PATCH] Multiplatform design patterns rev 1 --- .gitignore | 1 + compile/act/controller.h | 15 +++++++++++ compile/act/root.cpp | 24 ++++++++++++++++++ compile/act/root.h | 22 ++++++++++++++++ compile/allocate/factory.h | 6 +++++ compile/controller/event.h | 7 ----- compile/controller/root.h | 11 -------- compile/controller/status.h | 7 ----- compile/draw/window.h | 11 ++++++++ compile/main.cpp | 8 +++--- compile/project_files.txt | 1 + .../linux/service/window.cpp} | 13 +++------- earn/executable | Bin 16984 -> 17824 bytes link/controller/root.cpp.o | Bin 2320 -> 0 bytes link/library_options.txt | 2 -- link/main.cpp.o | Bin 1232 -> 0 bytes link/project_files.txt | 3 --- 17 files changed, 88 insertions(+), 43 deletions(-) create mode 100644 compile/act/controller.h create mode 100644 compile/act/root.cpp create mode 100644 compile/act/root.h create mode 100644 compile/allocate/factory.h delete mode 100644 compile/controller/event.h delete mode 100644 compile/controller/root.h delete mode 100644 compile/controller/status.h create mode 100644 compile/draw/window.h rename compile/{controller/root.cpp => target/linux/service/window.cpp} (78%) delete mode 100644 link/controller/root.cpp.o delete mode 100644 link/library_options.txt delete mode 100644 link/main.cpp.o delete mode 100644 link/project_files.txt diff --git a/.gitignore b/.gitignore index e69de29..1d23d3a 100644 --- a/.gitignore +++ b/.gitignore @@ -0,0 +1 @@ +link/ diff --git a/compile/act/controller.h b/compile/act/controller.h new file mode 100644 index 0000000..c3b47d0 --- /dev/null +++ b/compile/act/controller.h @@ -0,0 +1,15 @@ +#ifndef ACT_CONTROLLER +#define ACT_CONTROLLER +class controller_t { + public: + enum event_t { + start, + stop + }; + enum status_t { + ok, + error + }; + virtual status_t on_event(event_t event_p) = 0; +}; +#endif diff --git a/compile/act/root.cpp b/compile/act/root.cpp new file mode 100644 index 0000000..d7b5c76 --- /dev/null +++ b/compile/act/root.cpp @@ -0,0 +1,24 @@ +#include "controller/root.h" +#include "service/window.h" +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) { + return new root_controller_t(configuration_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::status_t window_status = window_service->create_window(); + controller_t::status_t controller_status; + switch (window_status) { + case window_service_t::status_t::ok: + controller_status = controller_t::status_t::ok; + break; + case window_service_t::status_t::error: + default: + controller_status = controller_t::status_t::error; + break; + } + return controller_status; +} diff --git a/compile/act/root.h b/compile/act/root.h new file mode 100644 index 0000000..4b921c0 --- /dev/null +++ b/compile/act/root.h @@ -0,0 +1,22 @@ +#ifndef ACT_ROOT +#define ACT_ROOT +#include "controller/controller.h" +#include "allocate/factory.h" +class root_controller_t : public controller_t { + public: + class configuration_t { + private: + mode_t mode_m; + public: + configuration_t(mode_t mode_p); + }; + controller_t::status_t on_event(event_t event_p) override; + private: + root_controller_t(configuration_t configuration_p); + friend class root_controller_factory_t; +}; +class root_controller_factory_t : public factory_t { + public: + root_controller_t create(root_controller_t::configuration_t configuration_p) override; +}; +#endif diff --git a/compile/allocate/factory.h b/compile/allocate/factory.h new file mode 100644 index 0000000..a908b79 --- /dev/null +++ b/compile/allocate/factory.h @@ -0,0 +1,6 @@ +#ifndef ALLOCATE_FACTORY +#define ALLOCATE_FACTORY +template class factory_t { + virtual O* create(I*) = 0; +}; +#endif diff --git a/compile/controller/event.h b/compile/controller/event.h deleted file mode 100644 index 7764354..0000000 --- a/compile/controller/event.h +++ /dev/null @@ -1,7 +0,0 @@ -#ifndef CONTROLLER_EVENT -#define CONTROLLER_EVENT -enum controller_event_t { - start, - stop -}; -#endif diff --git a/compile/controller/root.h b/compile/controller/root.h deleted file mode 100644 index e5d8205..0000000 --- a/compile/controller/root.h +++ /dev/null @@ -1,11 +0,0 @@ -#ifndef CONTROLLER_ROOT -#define CONTROLLER_ROOT -#include "controller/status.h" -#include "controller/event.h" - -class root_controller_t { - public: - - controller_status_t on_event(controller_event_t event); -}; -#endif diff --git a/compile/controller/status.h b/compile/controller/status.h deleted file mode 100644 index 7610fe7..0000000 --- a/compile/controller/status.h +++ /dev/null @@ -1,7 +0,0 @@ -#ifndef CONTROLLER_STATUS -#define CONTROLLER_STATUS -enum controller_status_t { - ok, - error -}; -#endif diff --git a/compile/draw/window.h b/compile/draw/window.h new file mode 100644 index 0000000..c603d95 --- /dev/null +++ b/compile/draw/window.h @@ -0,0 +1,11 @@ +#ifndef SERVICE_WINDOW +#define SERVICE_WINDOW +class window_service_t { + public: + enum status_t { + ok, + error + }; + status_t create_window(); +}; +#endif diff --git a/compile/main.cpp b/compile/main.cpp index af1c4c2..9759f82 100644 --- a/compile/main.cpp +++ b/compile/main.cpp @@ -1,8 +1,8 @@ +#include "controller/controller.h" #include "controller/root.h" -#include "controller/status.h" - int main(int argc, char *argv[]) { - root_controller_t* controller = new root_controller_t(); - controller_status_t status = controller->on_event(controller_event_t::start); + controller_t* controller = new root_controller_t(); + controller_t::status_t status = controller->on_event(controller_t::event_t::start); + delete controller; return status; } diff --git a/compile/project_files.txt b/compile/project_files.txt index 24b0fd7..f625b3c 100644 --- a/compile/project_files.txt +++ b/compile/project_files.txt @@ -1,2 +1,3 @@ main.cpp controller/root.cpp +platform/linux/service/window.cpp diff --git a/compile/controller/root.cpp b/compile/target/linux/service/window.cpp similarity index 78% rename from compile/controller/root.cpp rename to compile/target/linux/service/window.cpp index cb9438c..34250d4 100644 --- a/compile/controller/root.cpp +++ b/compile/target/linux/service/window.cpp @@ -1,26 +1,22 @@ -#include "controller/root.h" +#include "service/window.h" #include #include #include #include - -controller_status_t root_controller_t::on_event(controller_event_t event) { +window_service_t::status_t window_service_t::create_window() { Display *d; Window w; XEvent e; const char *msg = "Hello, World!"; int s; - d = XOpenDisplay(NULL); if (d == NULL) { - return controller_status_t::error; + return window_service_t::status_t::error; } - s = DefaultScreen(d); w = XCreateSimpleWindow(d, RootWindow(d, s), 10, 10, 100, 100, 1, BlackPixel(d, s), WhitePixel(d, s)); XSelectInput(d, w, ExposureMask | KeyPressMask); XMapWindow(d, w); - while (true) { XNextEvent(d, &e); if (e.type == Expose) { @@ -30,7 +26,6 @@ controller_status_t root_controller_t::on_event(controller_event_t event) { if (e.type == KeyPress) break; } - XCloseDisplay(d); - return controller_status_t::ok; + return window_service_t::status_t::ok; } diff --git a/earn/executable b/earn/executable index b35282eafb535e1e2e7d535ee9f1b5053c2d5c6f..a700a52dccc5c88cddd1b95c1f12cb721b594d71 100755 GIT binary patch literal 17824 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 delta 3185 zcmaJ@eN0=|6~FgA^BD*>*ckGGZ5D0N6x)2Hp`nELFisv3&B)i{Rc#&!oWSH@LQF%a zF`x-uUtFq$qe$zdZP}zs(bQ>78C8hZH7wPrx=yvaFR%H>OikrVY=JhdvJK{)d*6F$ zg0@}h-E+_HeB5)+yZ5|zIZl)3=!LScB&-r)L!SvLYvL@QB+^JWpkyoAa^Bd0m@QTo6FZ%w=fx^nYcaFV!zUdeHe(D<7dPs$|;Lc+)@drG) zKIjz7;Bu=44vTge$MuZpr{9G|QKbuTKy*UL;)jIgd+=^n&2)Cf*xruz)__{)t@G~C zV>0$6q7kCWvpp!$5M`xs;}ff%&Lyb#7hJQ!d z24-XQ-UEUSu$Fy?7F=C%H04cO6R>P8?YV51h_W#6=ValAO(Ge`CtgDCUih@A;-5E< zdy8D>xW5b6MkG{iW^=6M8pD*y8?n4M8IVaGzi{*T7s^F0iTsM|PyBrZ`fVOM0&&~s zlE0y6GF);*(Qc=|naN~+lXVN`Y~C^VLU5IN)JE?q+VJw5tmNs-|ITD;KUcJ1T8WRQ z(<~h=_+dQwp>p;u_cJ$(T==G$CuL%(6Afx_X!D9Tx~vT^Dc3D-3Dq$~?UEJuQMC8c zr_dcbODShZQ>19J0HwGq+v(%6BoZYaOvPVJA+JppFq`;jieXB8JdL2zbBUw#f6Y;7 zLWvJr|Bq1WQsPI@a++Co^h`3#_W4v!2mQ4YKNy;0uLwgU2y5@ibMQ$?=@?@at!+V5jV>F#xlm!q5WB# zT;gS(O>uH5$>FI4l5~ta=bB1fSBP^3UJm(M9T~%7#ksO(*_IwgeLWkYXfg{!{FqO? zPMBBvRg@d&CLUZ>Cf;JF;F+7p`N@@!c1$%xH6ilX+O{4#}hyTKq=hwuTtM=B_R~#quuljTSblPn>sDvYt=%enV(V;UngLz@WR6$;4AnPu!I?L- z#q;j(^ss(DNoB$NwR>m+Xr05dkzBDuU7eTOp}WpWLpVFcV$AmGKfBOdd8n)n*x zEdTWx=EKTk&hiwhSxFfgUzdfGN!u%NFD6~@lhu|*%f8)gg!xR!ZUbkZb~eoH_A_r; zCsFDKStz03V*K>uKY`iD!}U+?uiZHmjmFfT=s;{J8i|C5)L3J5Kn*_|9*6~N8y~4#kH02Tl<6sev;mC5itmg+gk*w}FJ7>>fPYKhPUJLsa$flL0ljzfDyk z)f9jOPc*}lWg`?ce*m90N1$tWif#e9#b+~{O_lL?)d&-ank}iz!fQcRU}ComQY}`S z*)$Fs_1Oee^4ZLmF=(I?$cUP)X~sbPFd_N2nhh*vpv(Feyx^tqJLxo?0a^AHo5v}^ z+C7dxitxPb%{Naawwdel9{j1aLSnZS+^trdd2h{s+%}L~eYTKW;`SjoCnOgpT77xu z-Auq->&`s$1}EVkt=pkD@C03i9|c|>uI99E#H z^%<^MD>i>t&Eq#>XyNXxlA^`Id>J6F^f3Z+Z7q(s4fuxfMc9nON1-sdJ^#g>y54yK RT7!?}74Onn5$0Q5{{cZTAmac4 diff --git a/link/controller/root.cpp.o b/link/controller/root.cpp.o deleted file mode 100644 index 7526cf17d74567558eb3101f5bdcdcaa19bbaa6f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2320 zcmbuAU1%d!6vyu**`~Yw3MyDoBtk(&cW6YgB1pqF^%i0+EoFnCaW=Wuu#=f#GU@J$ z#V$+4VJL{uw|(%%H(wWa7Z;2QTSRc#2MzcVg#{P-P(kp)U_Aeux!Z9}eDQ?2_uSt- z=ghfh&P+Zi6qgg4#*}F66?VK*l(Dt3V|`Joi)?}{H@Sb0Up`zTpWK&zoBKOQe)Evu zRMyu+s(O!7f~R zWna?vFKMpb;enI+kIlumd9X>IpTM(NX~A=)-Axy@uXwOtx^W5t{e4E*|2BW4O3Q+O za62`JY`DKPH_n3=cA;lf=AA)G&CX42m$3nrNj5uvtM^yGe~k97&62lVU%3T!a;Ehi zVu$ws$bE3!_Rn;%10JmL{Pjo3bjfe$WulZ8@;we7G%1tF@nm6Es4zwCE**~-gFV!| z7=)$2bws%p{U80-At~Iy)|JzKN8-IZG=;&XB@YG$fi#dQv3YZAbNs^{B-8S#F?qFogrU_)?kk(I);9rd3_eOA>ZCLz`5gd&>%zk+U-y;4{55q9-B(B((8_}mTC>hG%m5y z8Pjfv2dmc%=WNZY+81cU6^17^YIVmHA=6!98oDPgdaSe|Oi}SxET>6}RYHYrVR=li z*!4P;@*AtU7hT)-$`#x4T-!8-TlN-gt1Mtx$Sp*;L}ib`UavR~Yk00HET&twC-hfW zH%~V_qjH{=mR#e)hUeC-EvB31cD-y=tMn4mN~R{>Ex+R$b-_x@HPc+D1nE6B1=A^> zXPl$?QeDojT{S!dIH%`iz5eg;I|YdLmx}iinuz4#@Hq}vgML&x=0&<-68XEL)qrDG zeGVNGe`j7MhCYbP(;++xH_+?o3-zT@??;Mmj{D<#85JvRB78TZqK>2Hw`ddkeAI~a z_e1||j4MAie@^>KkD6W${i6(e-1esdbK>TohF~EUK%HOVA4nNizuEBlsXC#4cyE=z r;s?Z%#lB6`E?o~~KJ>>o00MtVJpUfCc%Q1pI%rV>LEygxzV4}-zpuv`}Y;lMu( z_P@H1zCfHta>MN>d3Q@m*IN|$Te#X=>q*`7T*?NxI3{qO-vei->0FvUb@~9SUq+n< z;W|xA=bLY8H_y%VF@V-5;122y_&u8Du0!RJCSVS^IVJeP3Hp81FI4K3y`jdvHqfSV zG#cXy+62<-I9PYlCQwJ!t{Qa^d6Gs#Cp#KMtgtD$n6Y-R5}s2S5_CgI*OlyNYj26M(gW%NgHPCWHWq{ zM_B@*t8*Q#AwSEA{{seCgT8}}Pv%j+w;c9cok2fo#8tG-g71TU_T5r0-Gz-!v(ch) zoI$30;kPz#^jTyIAT?r!<0ww H#NPiOfs}#X diff --git a/link/project_files.txt b/link/project_files.txt deleted file mode 100644 index 53ecc27..0000000 --- a/link/project_files.txt +++ /dev/null @@ -1,3 +0,0 @@ - -/home/cogentleman/main/art/cpp_launchpad/command/linux/../.././link/main.cpp.o -/home/cogentleman/main/art/cpp_launchpad/command/linux/../.././link/controller/root.cpp.o