From 0a5827f3a1280703fe7d9aa93b6e3a0e53d4e9fc Mon Sep 17 00:00:00 2001 From: hugogogo Date: Fri, 4 Mar 2022 20:58:15 +0100 Subject: [PATCH] d05 ex02 ok pour Shrubbery form --- d04/ex02/main.cpp | 43 +++++++-- d04/ex02/pure | Bin 29336 -> 44528 bytes d05/ex02/28b_28c | Bin 0 -> 37296 bytes d05/ex02/Makefile | 8 +- d05/ex02/Shrubbery.txt | 17 ++++ d05/ex02/headers/{Form.hpp => AForm.hpp} | 22 +++-- d05/ex02/headers/Bureaucrat.hpp | 7 +- d05/ex02/headers/ShrubberyCreationForm.hpp | 14 ++- d05/ex02/larves | Bin 30848 -> 0 bytes d05/ex02/main.cpp | 100 ++++++++++++-------- d05/ex02/srcs/AForm.cpp | 103 +++++++++++++++++++++ d05/ex02/srcs/Bureaucrat.cpp | 25 ++++- d05/ex02/srcs/Form.cpp | 90 ------------------ d05/ex02/srcs/ShrubberyCreationForm.cpp | 62 ++++++------- 14 files changed, 297 insertions(+), 194 deletions(-) create mode 100755 d05/ex02/28b_28c create mode 100644 d05/ex02/Shrubbery.txt rename d05/ex02/headers/{Form.hpp => AForm.hpp} (52%) delete mode 100755 d05/ex02/larves create mode 100644 d05/ex02/srcs/AForm.cpp delete mode 100644 d05/ex02/srcs/Form.cpp diff --git a/d04/ex02/main.cpp b/d04/ex02/main.cpp index 5166e80..b443872 100644 --- a/d04/ex02/main.cpp +++ b/d04/ex02/main.cpp @@ -9,7 +9,9 @@ #define N_TEST "7" int main() { - std::cout << B_YELLOW "\n[1/" N_TEST "] test subject :" RESET "\n"; + int i = 0; + + std::cout << B_YELLOW "\n[" << ++i << "/" N_TEST "] test subject :" RESET "\n"; { const Animal* j = new Dog(); const Animal* i = new Cat(); @@ -17,7 +19,7 @@ int main() { delete i; } - std::cout << B_YELLOW "\n[2/" N_TEST "] test with brain :" RESET "\n"; + std::cout << B_YELLOW "\n[" << ++i << "/" N_TEST "] test with brain :" RESET "\n"; { Dog * dog; Cat * cat1; @@ -64,7 +66,7 @@ int main() { delete brain2; } - std::cout << B_YELLOW "\n[3/" N_TEST "] array animal test :" RESET "\n"; + std::cout << B_YELLOW "\n[" << ++i << "/" N_TEST "] array animal test :" RESET "\n"; { Animal *animals[10]; int i; @@ -79,7 +81,7 @@ int main() { delete animals[i]; } - std::cout << B_YELLOW "\n[4/" N_TEST "] copy constructor test1/2 :" RESET "\n"; + std::cout << B_YELLOW "\n[" << ++i << "/" N_TEST "] copy constructor test1/2 :" RESET "\n"; { std::cout << B_BLUE "Cat a_cat :" RESET "\n"; Cat a_cat; @@ -87,7 +89,7 @@ int main() { Cat a_cpy_cat(a_cat); } - std::cout << B_YELLOW "\n[5/" N_TEST "] copy constructor test2/2 :" RESET "\n"; + std::cout << B_YELLOW "\n[" << ++i << "/" N_TEST "] copy constructor test2/2 :" RESET "\n"; { std::cout << B_BLUE "Cat a_cat :" RESET "\n"; Cat a_cat; @@ -95,7 +97,7 @@ int main() { Cat a_cpy_cat = a_cat; } - std::cout << B_YELLOW "\n[6/" N_TEST "] assignation operator test1 :" RESET "\n"; + std::cout << B_YELLOW "\n[" << ++i << "/" N_TEST "] assignation operator test1 :" RESET "\n"; { std::cout << B_BLUE "Cat a_cat :" RESET "\n"; Cat a_cat; @@ -105,7 +107,7 @@ int main() { a_cpy_cat = a_cat; } - std::cout << B_YELLOW "\n[7/" N_TEST "] assignation operator test2 :" RESET "\n"; + std::cout << B_YELLOW "\n[" << ++i << "/" N_TEST "] assignation operator test2 :" RESET "\n"; { std::cout << B_BLUE "const Cat *a_cat :" RESET "\n"; const Cat *a_cat = new Cat(); @@ -117,7 +119,32 @@ int main() { delete a_cat; } - return 0; } +/* +#include +#include +#include + +int main() +{ + std::vector> tests; + tests.push_back( + [](){ + std::cout << "hello test\n"; + } + ); + tests.push_back( + [](){ + std::cout << "hello another test.\n"; + } + ); + + int counter = 0; + for (const auto& test : tests){ + std::cout << ++counter << "/" << tests.size() << " "; + test(); + } +} +*/ diff --git a/d04/ex02/pure b/d04/ex02/pure index fe31b467434b3ae7d03327ad6d881123bfcf6613..52f64802ecf9969e72432d28eb65d97845eb429e 100755 GIT binary patch literal 44528 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 literal 29336 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 Ci@){& diff --git a/d05/ex02/28b_28c b/d05/ex02/28b_28c new file mode 100755 index 0000000000000000000000000000000000000000..4298f09715576e29cd3c4edb2c787d081cb4bb27 GIT binary patch literal 37296 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%0AI7H_BQ_pL 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 literal 0 HcmV?d00001 diff --git a/d05/ex02/Makefile b/d05/ex02/Makefile index cb65767..53d7be2 100644 --- a/d05/ex02/Makefile +++ b/d05/ex02/Makefile @@ -4,7 +4,7 @@ # . name is case sensitive . ?= set if not already set # # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # -NAME = larves +NAME = 28b_28c #CC = gcc CXX = c++ @@ -24,11 +24,13 @@ INCLUDES = -I$(D_HEADERS) D_SRCS = srcs SRCS = main.cpp \ Bureaucrat.cpp \ - Form.cpp + AForm.cpp \ + ShrubberyCreationForm.cpp D_HEADERS = headers HEADERS = Bureaucrat.hpp \ - Form.hpp + AForm.hpp \ + ShrubberyCreationForm.hpp D_OBJS = builds OBJS = $(SRCS:%.$(EXT)=$(D_OBJS)/%.o) diff --git a/d05/ex02/Shrubbery.txt b/d05/ex02/Shrubbery.txt new file mode 100644 index 0000000..5a1591f --- /dev/null +++ b/d05/ex02/Shrubbery.txt @@ -0,0 +1,17 @@ + * * + * * * + * * * * * + * * * * * + * * * * * * * + * * * * * .# * * + * * * #. .# * * + * "#. #: #" * * * + * * * "#. ##" * + * "### + "## + ##. + .##: + :### + ;### + ,####. + /\/\/\/\/\/.######.\/\/\/\/\ diff --git a/d05/ex02/headers/Form.hpp b/d05/ex02/headers/AForm.hpp similarity index 52% rename from d05/ex02/headers/Form.hpp rename to d05/ex02/headers/AForm.hpp index ea436b2..00646af 100644 --- a/d05/ex02/headers/Form.hpp +++ b/d05/ex02/headers/AForm.hpp @@ -12,35 +12,43 @@ class AForm { public: - Form( std::string name, int signedGrade, int executeGrade ); - Form( Form const & src ); - virtual ~Form() = 0; - Form & operator=( Form const & rhs ); + AForm( std::string name, std::string target, int signedGrade, int executeGrade ); + AForm( AForm const & src ); + virtual ~AForm() = 0; + AForm & operator=( AForm const & rhs ); std::string getName() const; + std::string getTarget() const; bool getSigned() const; int getSignedGrade() const; int getExecuteGrade() const; - virtual void beSigned( Bureaucrat const & b ) = 0; + void beSigned( Bureaucrat const & b ); + void execute(Bureaucrat const & executor) const; + virtual void formAction() const = 0; private: - Form(); + AForm(); + +protected: class GradeTooHighException : public std::exception { const char * what() const throw();}; class GradeTooLowException : public std::exception { const char * what() const throw();}; + class NotSignedException : public std::exception { + const char * what() const throw();}; std::string const _name; + std::string const _target; bool _signed; int const _signedGrade; int const _executeGrade; }; -std::ostream & operator<<(std::ostream & o, Form const & rhs); +std::ostream & operator<<(std::ostream & o, AForm const & rhs); #endif diff --git a/d05/ex02/headers/Bureaucrat.hpp b/d05/ex02/headers/Bureaucrat.hpp index 01d4e9f..8bafb48 100644 --- a/d05/ex02/headers/Bureaucrat.hpp +++ b/d05/ex02/headers/Bureaucrat.hpp @@ -6,8 +6,8 @@ # include # include -class Form; -# include "Form.hpp" +class AForm; +# include "AForm.hpp" class Bureaucrat { @@ -24,7 +24,8 @@ public: void gradeUp(); void gradeDown(); - void signForm( Form & f ); + void signForm( AForm & f ); + void executeForm( AForm const & form ); protected: diff --git a/d05/ex02/headers/ShrubberyCreationForm.hpp b/d05/ex02/headers/ShrubberyCreationForm.hpp index c4d1ab8..5b5c84e 100644 --- a/d05/ex02/headers/ShrubberyCreationForm.hpp +++ b/d05/ex02/headers/ShrubberyCreationForm.hpp @@ -4,6 +4,7 @@ # include "color.h" # include # include +# include # include "AForm.hpp" @@ -11,24 +12,21 @@ class ShrubberyCreationForm : public AForm { public: - ShrubberyCreationForm(); + ShrubberyCreationForm( std::string target ); ShrubberyCreationForm( ShrubberyCreationForm const & src ); ~ShrubberyCreationForm(); ShrubberyCreationForm & operator=( ShrubberyCreationForm const & rhs ); -// std::string getFoo() const; + void formAction() const; -protected: - -// std::string const _foo; +// std::string getTarget() const; private: -// static std::string const ShrubberyCreationForm::_bar; + ShrubberyCreationForm(); +// std::string const _target; }; -//std::ostream & operator<<(std::ostream & o, ShrubberyCreationForm const & rhs); - #endif diff --git a/d05/ex02/larves b/d05/ex02/larves deleted file mode 100755 index 922ce6347ece6106cec31ea6a5fb77f6a3c4791c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 30848 zcmeHw4R}=5o%flU00BZW0krtZsGukiCm~?`z5xb@N-zcFr78}SWJt0mnQSt_V4H1d z{Ky!fd0SN4Qq9(`rC-~uRTfzj!-|5seKuCxvemZHqTaF8o%MUwn*IIHIsZF%Zf1bm z=Xsxf-iMPXbI$pHpa1#1_nv$1R{|@Rxm_;7!7Z*5l=)DrmRBY%hoGCj{C_0 z2qRn=Z5O$N_>!70srfh-+Fu;AKS>PzAJF&%ZUZ^W8x)D9@;4O|ErrV0Vl|X*E|pot zhD>n0Lpz>h=KBKp$j%cD?Dkb!UpBuS()M$#)r*T8>Z=x&UffVKzoEXVt$lub*`oQ2 zN{d>fMJ2M_(_sj?^qQ5|i)hKLbI;vb{@htl{rZu`AN=9HSp(bmlig$k$s-yHM9=P| z^lA7fJeAA4wAXizE5}7J3TNPdSM|VClehGS?){{?cKXh|CGE>^*>hpwmn$SemYMyKby?`|%3|k7S?s(mi~P|na%N_MFUul7FAMzP zEPC^^lka^A~g&!Q}HF3zI&k6Glrm_=`O7WvdRefW2VA3@GJ;uO)X$ANX4U=w13 zk7zjeFKXEY-=N`hG<^>A7K+n_2pbaOgvH)E4VmYkyR`j%4!A%+Y>m}a&z(zs zZ;=RvY8#_Xq1ITqB^C;a&<(3&4Xw*p$BK)q>%uLeSWCD**1Ehp5LgA+f~s(9eRU|> z8f%G!8<$tF2?bU!3{`_`&DzzmOC#;ok>*%^v`LD&G!|)TtZxd(BAbW+G93iaQ$1GE z>TniqYeH-M(055_)wL^E$1Vwls@vO(i;GK?O)#mxsdoA5(hw|KQydBepmgQxXhUnD z%1YJC6e(C*93ZQ*3(9KQlD~$t^4jWE*REbbeunC@`ev8P*tS1zA024 zj#bw|TunnIBfMTb+e!+uK9Uk(SnIQ@Ei%wmG!PFYP3M{Z*w#kxM^Y(}KS; zx$3i9qw9Tjth74X7SmpeG}UMyp>s5XKaebcS=pjs7aZEK8BAFAf= zL-hqmw%5l*W2CV)LP80zyHsPizDZoOWJzd2kzZW1V)^1Fp^~DKqJ=8GZXMvIMJ2^z z$+~sri#O8>&=6T_#w?L^!?9}<#g# z#w{My{K=3(Y;sQioJ^^o4{h)nHaL%aR1%uAIq>*NaGui%$Kxl#F*>F~*pO+0^IDVu zGd36$i3#}EL#WLAY;f`$hdDO5E|Ns~ZE#*w5u(fnC*2$j8{EF`3fkag6NgG0oY#ni zTW5o#qO7pN2A^a>g{ZT^QSnx2w!!l(s1WToxL%4&Y^M#LZ=>(F!SzyFVtZ|Hp4$kq z(*{4wCa2E^FSNmT+u-(fQojv8%|^f12B$S8hansM6b2$bWP_h-gAd!_XWQT>lP5j! zzsUpd6rBB0ud@aXI#_$`=eAVv8)!X-vV z5oZ5}@-!4ChGqU2ly_5pNamlVJPmz`ewqJQ%F~dS=#%+gK5SB1x{%*?C(3SAZ{8uSYLsr5k^S4o+ zhN^^D=36LFLsUY@{NGT%fbz*t0hnDyc^Z-uBQk#jhi0$$iVUu^m3CNqq z@_yow#|WFeNyn5&?X&n#%j3`A9E`sj>^hRHT(kV((9k?X1P|`7l+nT7X=sD{l=#4r9x5@pZEj;Mn^XGKDjYPOznG6(r&MO~X2}Nzwq_b~>v!5RKARw;wPma+?^nbiNWrM7b zEl05;5(fjHkiAdPCEH+*-w+qAwoUmGDWx^TGJj z!FXF=ykeJBb|uSU(Ywvt2t@tM&fXK)^%#v2mmVs(!T*F{ zkKx786MtHk*gThviti7`w>4WO>KUN);8VqLhMQHJ>yT1j@{^YmBzD^X^?o?24h-g< zB&+8hN)N787ZkNZPX;){F>5aQX`KKY#>c% zDovCg{G!s71lqja#!KT2G!c9stqmTlA$6}7q|`~4S3XJ^M=DGoWXN)YnPixwQ>B;T zqIJ-xZ0#AK^dJp@<|s>GE-It>*hJ>4v~f{daXpj9HCTgEnD;OYj@6Em7Bq5$VGR;m zYuOdFX`r;yP-~MW86Lv;$*z_*-T~jMD(xWkr-A{RcPd945M=(0Kt16g^`8WX7c$B6x(zIM@qV(WHN>h+D{gaKiPH7_e zzGYUG7UZYYNtS#Y3#l+G0ASaV409elp<2Bk`nXCdtz0*cB{0_zalMZDQE|<&aZy@v zz5k(>rF<%@^j{f<;*t$J&!&OWO2ZDDG|BLStvO2@ABOLh z`iH4Xmw*A9O-MlBnSsb0AyCgflpg$za&(g5L7Qx^vXtQazHK@BA&fU%uae~-K49l5 z73L8DppMwhGBz#oWjB?|HmI3-tSd1NYZR0?H3FUob!o(qC&z^{R>mgC!J&nqLm0=8 zD@6A8ciz_)vk;R^olipO*1S`(>^4zqUuZDtD&$%UKwkCRLp~|%WM9h(mqW3+gi>Y-z zOVDG@SD#?w3etS#1!XXP#|XHBJp(Fo&RPwUhGs1<$W&eS3{YClS}WKF^Sel?{_qC% zhXusAZJ?Wk#|Lr|nZpF?xrfq&`Iz#6?j?8`%K)IC=(jyea5?Z4KVyD#qIM0_?|hdn zQS!}S1E6`$x!iRUFFKoo(pXK_s>!_c~kA-4VI{?c%WCMrItq`d+ zEG7+CS{kT4J#9(zTBu{4epC#~pI**q|4SQ{GUq;3LNn?xhp%tCj`~ve1jrCGczGaM zaQjp$TTe&QyaNd|sGfj{+Mx&~_N{+%W3Mic;_s2XBg+22A^SVn7)Tj0FGfx=Qr0p% z8Lv2MPGd?oJ86y(IlQyCkTmZ5N8tXU=BpNr!n2F_JU74m8{P z&Y^h40g1l=c*)LU51H>uT?fs7!}>T?B)flAwa8|oTMk;oPySPC($!HgliQcQK9XJS zK3BnZRhNNePte!3e-zc2xCU-eoof?`k)6wggGP$q-zWQAR7yw1-AVIePlp+l9Rh43 zD0>B^%+ttp*&MRy-_q`ry?I-j39fV#-gzsd2}cP`ZRbIn#-s_<+bINPm#36@FBvLL z(AS6kgtxj_8##!PKntyeZw^D(KJ8bCMKNB3YKHGn59OsB@kMl@uuD zcH$ax$c!=RwstfSO+7$qHRKXrLAP}bndfsZ;it({ucFL&;7GzJE!Rsf8o1D6hRpZ= zWN$G&fg{${VwswKP4nv@L4)o^@7=2kHbM|}g=n*>nQZz26)%OSWstpuJIxrcAA&vl zf~IY!`87-6h7`j9r3W7)fhqjD6ux6`>e>|-UqIjz)~vBaRi;P>C_Q+9L@foL{k7A4 z|ESKHTZwPW0jgi>S!$J))p0w`$C*oEE^UWt-X<+MXs*JQgYIwCaP}UA85Hb8 zj2-`ac6`@SuWWp3a!Z;MWE};P!N+pB?RM=4NiN!~H-mf|zd4!AlVtYsEnU7E&q#jr zUo8JeaM1DO*HWcX@45evDdO9ucl7w5ZqI#8-;|kNkKe(^_-Ry7xdZoqv^<0ShxI|c zf@jFX=KeRyiooHg4WE$9gjqcm$#`%MFBZN=Hz~JtB%LdVZxUbn%7OYX3N$?U;R0GY z%teD+4O0_4AOY~h*3?8D&}@f*L^V)y<*=1*9dvah)7B6REgjYxVwKWyXmDLAtszLq zf07_S*wqYq7?ow-NHBoLtRY@iBF%lc97xRw+CP=4!A&lphSmDvkX$0rO*l9Tcd3VF zVKl(H0af<`fHZH7=$0PfS1|0L9ZcjbNEPH24^%o02 zCo?|l`iE{iORwC6M7Lc3biU&1PFn(HTz|lRwMKzo^?K-YXliC7>}Ma0m@}y~a@vBD z5v$S3^^k`tnLKF@6FJsHyRp{Jv>v+K@Xc}+>>08bQqPBdR1h*rFF6MnkTt)5g9HX> z9h6!e-G)UX%pqXE`5j5&SR7qOyboF!+v2DR9lv{jcf|v2bl=^92MYEiyIyyhCDM8l z)yvr4!L=l6oh8befRpBVFoW9b?UJ~s?RMDIZ4NN$*l9LMqNZ4Qn&wzf(tHm~NJ!h( zz|fvYDT&FA=**24+n9;1j>PVHorTfzt`0f5yxVes{F-Tn7hnc9;gC61>Nse=iN$!T z!R!9)PgRaye^Z|=kQcZW=H=zH3bxVc2CXKBKbLLk_Ajqd9ny6X8c@e!Ub;O(V2otu zEs_mLIo2UV>!!H|C4_l1m89zct|P{@r@fm|a0>R;WS{@OksWWFzhD#QKY53c=BIwm zqz8O8@ua+At#_^Y#GI^5#59@e&rbQ@$J7niK)x4aErk=8|08nLapu=r*;Hu$JCY(k zq4{qNJw4AT|353XUHKB`f%3J>R7Zzxh4}y^X3zwtAVHOlIHoU zQhI7z!Zi_}@Ja91Ab|~s4K+;{#3Tgysz`OXtu^AiQLLY&%2(W|n5g0+ExuS?xXD*c zMy8`tUJJX>FY&1s!Z#o2ZX<=Hj=eg@hSHQXO8nQ5m20BW713J*yn8o5d^`32V?S2Z z6nLMV%;1M^JW`;0j}&~fRh&Fe#p!yASx*o}OH;&pb~^OvT9K_STa{_#F)B+^IID?T z+hsm6&sX27YX>>>n<%P81LpafB9R&&noC0@jP8Uw()dVwq`EB@sY$OAZo6YEi!i7# zM=c3K7j_hQsgu-89fVCIlW6#4B7oJjgB5h+W770C~Y?FMC?P{i?|!{Fk;#%G=jJiSDU`yjgI;!;1wLi z{ovbx_yA(x??*>BfPMrk@NS~V)mT5`W?X{N-qn7@hmrTu)jIM9Vr)?rUfdd>ok<4b zZp1@~cT*m>B<29$iMwuxknclm5+3nx=n+Z45&ICEh&Le41-_GF=;=p1hwMNcL@aRg zv=Vmvurh8(EO7Tc3Hg4+-tl+`2eBVq7_6L?tIi`a*_AMpmn!-zW(CqdVb*b6x$lt*0o;pk`?-3UdPt|H;OZIy7f zdtGPbO~~zqZ@qxi{@3=GM@KIvnxzxG1oPv62VkU@!YuqR#sBbszy|P%eDAXS8J{nh zd~0r}xccvTFPSpF6$&+eE8=y)V{btUzbu6(u=PwBuK#@Gk=2hdwdi zj;~AM-vz!O_zpYX-7X2J&Znbod(oFV)9_!i@TI`_qc6#}!~VH0C4bFv@G;<<(dXva z6&SScm@J!G>j&Rr$m6L~bU(PeGoq6J|ad~_4#7E;U6XKEag|Fs`XUETYCr`XFJ`d^pClr2vig;wg zS$n65UroqE`ke{SxQT5pYdX1mT1YlK)+P$xEzd(-9mJ51aE=sK@X zJnuRu_5RAJ=QNj>TF9((Dn)qQX4gi@L!DBPxakF#i1TJ+5E-|@Rbj`SMBy(>8L+DBaDqVu0}dH&ut5y@Y;Chp0Z@RDn;5O=zl{mCPq zcQ5$VBX0McC&c$Xvypt>GZEn5cp$tdX9kEL%*j^93tclslMqb>Uv-IZxW;XFyLP(Z z_g}cq1K_>%a-QXyE?Y|YdoJ;)YuwLWu6=2?!Vg)?I@@(R-i;SmZFRrq7SFoTncsF# z-0pFG>`s+d`RwHHNe`U#z)26B^uS3Eobu-6mnH0-urYkD)SygLik>ff4s`$7LW`3FSyK{|ZA;Qo>hpCB@| zGY@(nx6gF?iGtgCI((AVAJXCIeY#%L;d#QB5k5uqXQ(fa$hXFmbU6j+h=v^`(;nO% z=JN{eNDodt%UzU-eyX6yg3jO((*%!OcAN)KM|r$Tho{b2ONXB-GW9Eu_?+PLjMC{b zTIlg89e$cPoDq&uG;G*OW!jT=;*mn1izo*Vpq<1n2^i~#X@I-M6v6WvkEe41cVYA{ ztTK>F%@erOD(Sf%aUWiWAK>>`dg*bSJygofR6&o!?4er2>G796Y|?Og9A^*R8cvVj z?BQF;P`P-Xc9v^ul_ANMUxeUt2|b^4x&8#IW0i{@zu3cGnVBl+F^WArr{VP2#2&a@ z^mxV|euoU%&+7}P{nM%pN$#}2(qaGmpvq`J7)kz!rkBF-t4LWbp zCC2t&de$y5J~+pLr!?F-ZqU9K7p+1Z{r4@vr^0W(nFa||C+Q$|yA^!o0)xP!T>b*4 z;r-_r5<<^{DU@hER@2(YxvL{L+0t3CWYTgxJui9 z>6v*ZIeAc&sk}ExIL6hB3@L{F{8hloPTttf<@yIrPiNaupuH>`HQVf8eVypg1@cdS7X6Xey%)Q!MAAmS`F{l?f-y=H)weC1&W^A{}3)zrn<+j zEAAqC_Y^U#$32)K!vk85v!DJ9aPnvKEG3_>Z+lNve5s% zrtkNua&>6>&m*4d#;oO4a19p!qUrrwew{`f0-V|*@9R8Y!`}v+{MM`e&we`#{X_ae z*E^3(mjX`h+&L}h?UK>G^!gbz0QhlDQjX0KoxDfO zcedN_W}$x!aPq^jZnx}*BU;Xg9^bCg@;}ya=Xkh;#<8*Hh#LVX`AIFG>-UZ<^bcf# z?~(8+f=*bYz~kZ5EMM0n%THvHGbul_ofiV0>D=mT0QX6a=|5|woU!A7Bj8kC-j~ew z{9j3rohXj>AkWZMhZTon;i`rR4&}XO#dV9zSKv(KwyMzb5S_GJRNdT+1A|w`R+NQ8 z_0f79t1Qp>Z4cEpM61FLp-ni`T0-ea-ZXK=V>RHAUI*1BV<4A0%}DL8m&Q0H6qk$< zQC#YjL0i8icXdmwHP(hB?y5yiqy>jLx8hLkP^=MWKu4P*tteYfl#5n_HyT<);kI^B z9c^rGh+vaCjvUTN5!whJgu*Q?;mx5)Q>!aN+S)0maQtU z2!sMFm(qdZA)Lk^3IsJUxO9~WE&bxk@`~k4fFoC1%r)r%dE~fN^6Qo@TOGg=-{p%} z1myA9_V*OjiPkr$J?r7s0URhjhNg^PP6@1%Tj%NA=xgml%4#Dq`5J;c`8y4F32-an zfyE2uq2d`RGVjDMy|peJ%S4@dUww*v&GHj_L4pb)i&MN1CI-~Y2UaN}HQ`uTws+fM z>xLnZnN~+jlNanx$Xtvi^2G2P)~r6xTLDgCnM=9UPaau*9ZtZm!Rh08#|1U7D-W7< zn?=f!G#vF*AR*bKB)PG1SS?vp0rO!m)ED}j1>CcnLjURq1 zU;3SdtTme1VAU+;w*=BS$pxw*e8xJG4MDZ;%pEap7Rb_BwRL~_M=bEAficBV!@{K) zcvsUak~OM5$`4eG=?cykaEWZi*EcI3SuEWsFv_Mii_C?UUGxO#bb)!6D7B2WCW+9R ziX}W*f0nO%INg%|sShVse_6o^KCv%Zqz#eu&5+}aw{pb%OGhybRQwr^G%Mv?Kp)p= zs>RnJ8X7{@_e(H6(L}4h=s*>n_46ZH`zd{~Vyrgxfe+hgowY55s_@AVy5wtf zVX^!MMRjYNTJCb^EUSv>w!A8B0c7>w%$;6$J?E+=%j=_R2DHAak*!vB3MZig1nEh)d7(n+2aCNB3dqRvsQ}$gtaO=vYSb{V|nNzxuYH1v(EY z+-kM>54a8FQs3d5C3C4C+;&e3i;%PPn{Gqm>AhkKKKYyaaq=$(3a|f0*?!(9K<^_{ zxI#tNeVkmK=V&DoxP@lf&-)32nxE|$4;m^v^Yi_;wSW;R>*sw3equo2eK{(pWN@0| zoAFP3Vwj)zCye0!DFwbC#`mF^j^kTELwjsE&-)mBxUWf}Q~s*&2a%m@zXprjkRYEj zKks+w)BL@fko7Y^m;ZLnzgW}pJ|RCj6~WMgiJy3!{M!K|ziM}-?vHx`MBw{`DyMAa zG{tfJ+xdO^{<=@|%XhJD3>u7k$13b_@bh#0etiS|6o&!K$0F&ux?Ml-13NTNQQ-Dq zS|DHBLmx84&;IA_4Dn*o|L1KkozK?^*63q%Anai9NvC`FX!cE_Fv;IE-oLt2Gyzhm-U&y$!^PU~lWj>kFpt>^8Pis7*4L0hAmCW)3koS1J3;G9B>wAj~z`+au{DwjJv6EAe@E&#rWrP^Y}%>tYtgW9Lx18$cp~~(@qSu diff --git a/d05/ex02/main.cpp b/d05/ex02/main.cpp index 2747ad5..07d22ec 100644 --- a/d05/ex02/main.cpp +++ b/d05/ex02/main.cpp @@ -1,64 +1,82 @@ #include "Bureaucrat.hpp" +#include "AForm.hpp" +#include "ShrubberyCreationForm.hpp" + #define N_TEST "5" int main() { + int i = 0; - std::cout << B_YELLOW "\n[1/" N_TEST "] test too high :" RESET "\n"; + std::cout << B_YELLOW "\n[" << ++i << "/" N_TEST "] " + << "Shrubbery ok :" RESET "\n"; { - try { - Bureaucrat b("clarence", 151); - } - catch (std::exception& e) { - std::cout << e.what() << "\n"; - } + Bureaucrat b("natasha", 50); + ShrubberyCreationForm s("sekoia"); + + std::cout << s << '\n'; + std::cout << b << '\n'; + std::cout << B_BLUE "b.signForm :" RESET "\n"; + b.signForm(s); + b.executeForm(s); + std::cout << s << '\n'; } - std::cout << B_YELLOW "\n[2/" N_TEST "] test signe ko :" RESET "\n"; + std::cout << B_YELLOW "\n[" << ++i << "/" N_TEST "] " + << "Shrubbery too low signe and execute :" RESET "\n"; { - { - Bureaucrat b("mikel", 50); - Form f("serpa_hell", 30, 100); + Bureaucrat b("jordan", 150); + ShrubberyCreationForm s("chemney"); - std::cout << f << '\n'; - std::cout << b << '\n'; - std::cout << B_BLUE "b.signForm :" RESET "\n"; - b.signForm(f); - std::cout << f << '\n'; - } + std::cout << s << '\n'; + std::cout << b << '\n'; + std::cout << B_BLUE "b.signForm :" RESET "\n"; + b.signForm(s); + b.executeForm(s); + std::cout << s << '\n'; } - std::cout << B_YELLOW "\n[3/" N_TEST "] test signe ok :" RESET "\n"; + std::cout << B_YELLOW "\n[" << ++i << "/" N_TEST "] " + << "Shrubbery too low execute only :" RESET "\n"; { - { - Bureaucrat b("coran", 50); - Form f("serpa_death", 70, 100); + Bureaucrat b("bernadette", 140); + ShrubberyCreationForm s("rutabaga"); - std::cout << f << '\n'; - std::cout << b << '\n'; - std::cout << B_BLUE "b.signForm :" RESET "\n"; - b.signForm(f); - std::cout << f << '\n'; - } + std::cout << s << '\n'; + std::cout << b << '\n'; + std::cout << B_BLUE "b.signForm :" RESET "\n"; + b.signForm(s); + b.executeForm(s); + std::cout << s << '\n'; } - std::cout << B_YELLOW "\n[4/" N_TEST "] test form too high :" RESET "\n"; + std::cout << B_YELLOW "\n[" << ++i << "/" N_TEST "] " + << "Bureaucrat copy test :" RESET "\n"; { - try { - Form f("serpa_horror", 155, 100); - } - catch (std::exception& e) { - std::cout << e.what() << "\n"; - } + Bureaucrat b1("pantoufle", 14); + Bureaucrat b2(b1); + + std::cout << b1 << "\n"; + std::cout << b2 << "\n"; } - std::cout << B_YELLOW "\n[5/" N_TEST "] test form too low :" RESET "\n"; + std::cout << B_YELLOW "\n[" << ++i << "/" N_TEST "] " + << "Shrubbery copy test :" RESET "\n"; + { + ShrubberyCreationForm s1("rutabaga"); + ShrubberyCreationForm s2(s1); + + std::cout << s1 << "\n"; + std::cout << s2 << "\n"; + } + + std::cout << B_YELLOW "\n[" << ++i << "/" N_TEST "] " + << "Robotomy :" RESET "\n"; + { + } + + std::cout << B_YELLOW "\n[" << ++i << "/" N_TEST "] " + << "Presidential :" RESET "\n"; { - try { - Form f("serpa_starvation", 70, 0); - } - catch (std::exception& e) { - std::cout << e.what() << "\n"; - } } std::cout << "\n"; diff --git a/d05/ex02/srcs/AForm.cpp b/d05/ex02/srcs/AForm.cpp new file mode 100644 index 0000000..0d6fa3b --- /dev/null +++ b/d05/ex02/srcs/AForm.cpp @@ -0,0 +1,103 @@ +#include "AForm.hpp" +#define COPLIEN_COLOR B_CYAN + +/********************************************* + * CONSTRUCTORS + *********************************************/ + +AForm::AForm( std::string name, std::string target, int signedGrade, int executeGrade ) +: _name(name) +, _target(target) +, _signed(false) +, _signedGrade(signedGrade) +, _executeGrade(executeGrade) { + if (signedGrade > 150 || executeGrade > 150) + throw AForm::GradeTooLowException(); + if (signedGrade < 1 || executeGrade < 1) + throw AForm::GradeTooHighException(); + std::cout << COPLIEN_COLOR "AForm constructor" RESET "\n"; + return; +} + +AForm::AForm( AForm const & src ) +: _name(src.getName()) +, _signedGrade(src.getSignedGrade()) +, _executeGrade(src.getExecuteGrade()) { + std::cout << COPLIEN_COLOR "AForm copy constructor" RESET "\n"; + *this = src; + return; +} + +/********************************************* + * DESTRUCTORS + *********************************************/ + +AForm::~AForm() { + std::cout << COPLIEN_COLOR "AForm destructor" RESET "\n"; + return; +} + +/********************************************* + * OPERATORS + *********************************************/ + +AForm & AForm::operator=( AForm const & rhs ) { + if ( this != &rhs ) { + _signed = rhs.getSigned(); + } + return *this; +} + +std::ostream & operator<<(std::ostream & o, AForm const & rhs) +{ + o << "[form name]" + << rhs.getName() << ", [target]" + << rhs.getTarget() << ", [signed]" + << rhs.getSigned() << ", [sign grade]" + << rhs.getSignedGrade() << ", [exec grade]" + << rhs.getExecuteGrade(); + return (o); +} + +/********************************************* + * ACCESSORS + *********************************************/ + +std::string AForm::getName() const {return _name;} +std::string AForm::getTarget() const {return _target;} +bool AForm::getSigned() const {return _signed;} +int AForm::getSignedGrade() const {return _signedGrade;} +int AForm::getExecuteGrade() const {return _executeGrade;} + +/********************************************* + * PUBLIC MEMBER FUNCTIONS + *********************************************/ + +void AForm::beSigned( Bureaucrat const & b) { + if (b.getGrade() < _signedGrade) + _signed = true; + else + throw AForm::GradeTooLowException(); +} + +void AForm::execute(Bureaucrat const & executor) const { + if (!_signed) + throw NotSignedException(); + if (executor.getGrade() > _executeGrade) + throw GradeTooLowException(); + formAction(); +} + +/********************************************* + * NESTED CLASS + *********************************************/ + +const char * AForm::GradeTooHighException::what() const throw() { + return (B_RED "grade too high" RESET); +} +const char * AForm::GradeTooLowException::what() const throw() { + return (B_RED "grade too low" RESET); +} +const char * AForm::NotSignedException::what() const throw() { + return (B_RED "form is not signed" RESET); +} diff --git a/d05/ex02/srcs/Bureaucrat.cpp b/d05/ex02/srcs/Bureaucrat.cpp index 8332551..83c2b2c 100644 --- a/d05/ex02/srcs/Bureaucrat.cpp +++ b/d05/ex02/srcs/Bureaucrat.cpp @@ -17,7 +17,8 @@ Bureaucrat::Bureaucrat( std::string name, int grade ) return; } -Bureaucrat::Bureaucrat( Bureaucrat const & src ) { +Bureaucrat::Bureaucrat( Bureaucrat const & src ) +: _name(src.getName()) { std::cout << COPLIEN_COLOR "Bureaucrat copy constructor" RESET "\n"; *this = src; return; @@ -75,13 +76,31 @@ void Bureaucrat::gradeDown() { throw GradeTooLowException(); } -void Bureaucrat::signForm( Form & f) { +void Bureaucrat::signForm( AForm & f) { try { f.beSigned( *this ); - std::cout << _name << " signed " << f.getName() << "\n"; + std::cout << _name << " signed " + << f.getName() << "(" + << f.getTarget() << ")\n"; } catch (std::exception & e) { std::cout << _name << " couldn't sign " << f.getName() + << f.getName() << "(" + << f.getTarget() << ")" + << " because [" << e.what() << "]\n"; + } +} +void Bureaucrat::executeForm( AForm const & f ) { + try { + f.execute( *this ); + std::cout << _name << " executed " + << f.getName() << "(" + << f.getTarget() << ")\n"; + } + catch (std::exception & e) { + std::cout << _name << " couldn't execute " + << f.getName() << "(" + << f.getTarget() << ")" << " because [" << e.what() << "]\n"; } } diff --git a/d05/ex02/srcs/Form.cpp b/d05/ex02/srcs/Form.cpp deleted file mode 100644 index e29a7f8..0000000 --- a/d05/ex02/srcs/Form.cpp +++ /dev/null @@ -1,90 +0,0 @@ -#include "Form.hpp" - -#define COPLIEN_COLOR B_CYAN - -/********************************************* - * CONSTRUCTORS - *********************************************/ - -Form::Form( std::string name, int signedGrade, int executeGrade ) -: _name(name) -, _signed(false) -, _signedGrade(signedGrade) -, _executeGrade(executeGrade) { - if (signedGrade > 150 || executeGrade > 150) - throw Form::GradeTooLowException(); - if (signedGrade < 1 || executeGrade < 1) - throw Form::GradeTooHighException(); - std::cout << COPLIEN_COLOR "Form constructor" RESET "\n"; - return; -} - -Form::Form( Form const & src ) -: _name(src.getName()) -, _signedGrade(src.getSignedGrade()) -, _executeGrade(src.getExecuteGrade()) { - std::cout << COPLIEN_COLOR "Form copy constructor" RESET "\n"; - *this = src; - return; -} - -/********************************************* - * DESTRUCTORS - *********************************************/ - -Form::~Form() { - std::cout << COPLIEN_COLOR "Form destructor" RESET "\n"; - return; -} - -/********************************************* - * OPERATORS - *********************************************/ - -Form & Form::operator=( Form const & rhs ) { - if ( this != &rhs ) { - _signed = rhs.getSigned(); - } - return *this; -} - -std::ostream & operator<<(std::ostream & o, Form const & rhs) -{ - o << "form: " - << rhs.getName() << ", is signed: " - << rhs.getSigned() << ", need at least [" - << rhs.getSignedGrade() << "] to be signed, need at least [" - << rhs.getExecuteGrade() << "] to be executed"; - return (o); -} - -/********************************************* - * ACCESSORS - *********************************************/ - -std::string Form::getName() const {return _name;} -bool Form::getSigned() const {return _signed;} -int Form::getSignedGrade() const {return _signedGrade;} -int Form::getExecuteGrade() const {return _executeGrade;} - -/********************************************* - * PUBLIC MEMBER FUNCTIONS - *********************************************/ - -void Form::beSigned( Bureaucrat const & b) { - if (b.getGrade() < _signedGrade) - _signed = true; - else - throw Form::GradeTooLowException(); -} - -/********************************************* - * NESTED CLASS - *********************************************/ - -const char * Form::GradeTooHighException::what() const throw() { - return (B_RED "grade too high" RESET); -} -const char * Form::GradeTooLowException::what() const throw() { - return (B_RED "grade too low" RESET); -} diff --git a/d05/ex02/srcs/ShrubberyCreationForm.cpp b/d05/ex02/srcs/ShrubberyCreationForm.cpp index 82fd33e..576083d 100644 --- a/d05/ex02/srcs/ShrubberyCreationForm.cpp +++ b/d05/ex02/srcs/ShrubberyCreationForm.cpp @@ -6,13 +6,14 @@ * CONSTRUCTORS *********************************************/ -ShrubberyCreationForm::ShrubberyCreationForm( std::string foo = ShrubberyCreationForm::_bar ) -: _foo(foo) { +ShrubberyCreationForm::ShrubberyCreationForm( std::string target ) +: AForm("shrubbery_creation", target, 145, 137){ std::cout << COPLIEN_COLOR "ShrubberyCreationForm constructor" RESET "\n"; return; } -ShrubberyCreationForm::ShrubberyCreationForm( ShrubberyCreationForm const & src ) { +ShrubberyCreationForm::ShrubberyCreationForm( ShrubberyCreationForm const & src ) +: AForm("shrubbery_creation", this->getTarget(), 145, 137) { std::cout << COPLIEN_COLOR "ShrubberyCreationForm copy constructor" RESET "\n"; *this = src; return; @@ -32,42 +33,41 @@ ShrubberyCreationForm::~ShrubberyCreationForm() { *********************************************/ ShrubberyCreationForm & ShrubberyCreationForm::operator=( ShrubberyCreationForm const & rhs ) { -// Base::operator=(rhs); - if ( this != &rhs ) - { -// _foo = rhs.getFoo(); - } + AForm::operator=(rhs); return *this; } -//std::ostream & operator<<(std::ostream & o, ShrubberyCreationForm const & rhs) -//{ -// o << rhs.getFoo(); -// return (o); -//} - -/********************************************* - * ACCESSORS - *********************************************/ - -//std::string ShrubberyCreationForm::getFoo() const {return _foo;} - /********************************************* * PUBLIC MEMBER FUNCTIONS *********************************************/ -//void ShrubberyCreationForm::function(const std::string & foo) {} +void ShrubberyCreationForm::formAction() const { + std::ofstream ofs("Shrubbery.txt", std::ofstream::out); -/********************************************* - * NESTED CLASS - *********************************************/ + if (!ofs) + { + std::cout << "opening Shrubbery.txt file failed\n"; + return ; + } -//void ShrubberyCreationForm::Class::function() {} - -/********************************************* - * STATICS - *********************************************/ - -//std::string const ShrubberyCreationForm::_bar = "bar"; + ofs << " * *\n"; + ofs << " * * *\n"; + ofs << " * * * * *\n"; + ofs << " * * * * *\n"; + ofs << " * * * * * * *\n"; + ofs << " * * * * * .# * *\n"; + ofs << " * * * #. .# * *\n"; + ofs << " * \"#. #: #\" * * *\n"; + ofs << " * * * \"#. ##\" *\n"; + ofs << " * \"###\n"; + ofs << " \"##\n"; + ofs << " ##.\n"; + ofs << " .##:\n"; + ofs << " :###\n"; + ofs << " ;###\n"; + ofs << " ,####.\n"; + ofs << " /\\/\\/\\/\\/\\/.######.\\/\\/\\/\\/\\\n"; + ofs.close(); +}