From c91d23a5d452ae7ec6c1be25bb5d1f86fd0a2131 Mon Sep 17 00:00:00 2001 From: hugogogo Date: Thu, 1 Dec 2022 15:47:19 +0100 Subject: [PATCH] one implementation of the exam --- cpp_module_00/Warlock.cpp | 2 + cpp_module_00/Warlock.hpp | 35 +++++++++++ cpp_module_00/a.out | Bin 0 -> 18304 bytes cpp_module_00/main.cpp | 17 ++++++ cpp_module_00/subject.en.txt | 81 +++++++++++++++++++++++++ cpp_module_00/test | Bin 0 -> 18304 bytes cpp_module_01/ASpell.cpp | 5 ++ cpp_module_01/ASpell.hpp | 45 ++++++++++++++ cpp_module_01/ATarget.cpp | 5 ++ cpp_module_01/ATarget.hpp | 38 ++++++++++++ cpp_module_01/Dummy.cpp | 2 + cpp_module_01/Dummy.hpp | 16 +++++ cpp_module_01/Fwoosh.cpp | 2 + cpp_module_01/Fwoosh.hpp | 16 +++++ cpp_module_01/Warlock.cpp | 2 + cpp_module_01/Warlock.hpp | 67 +++++++++++++++++++++ cpp_module_01/a.out | Bin 0 -> 57744 bytes cpp_module_01/main.cpp | 20 +++++++ cpp_module_01/subject.en.txt | 94 ++++++++++++++++++++++++++++++ cpp_module_01/testt | Bin 0 -> 57744 bytes cpp_module_02/ASpell.cpp | 5 ++ cpp_module_02/ASpell.hpp | 45 ++++++++++++++ cpp_module_02/ATarget.cpp | 5 ++ cpp_module_02/ATarget.hpp | 40 +++++++++++++ cpp_module_02/BrickWall.cpp | 2 + cpp_module_02/BrickWall.hpp | 16 +++++ cpp_module_02/Dummy.cpp | 2 + cpp_module_02/Dummy.hpp | 16 +++++ cpp_module_02/Fireball.cpp | 2 + cpp_module_02/Fireball.hpp | 16 +++++ cpp_module_02/Fwoosh.cpp | 2 + cpp_module_02/Fwoosh.hpp | 16 +++++ cpp_module_02/Polymorph.cpp | 2 + cpp_module_02/Polymorph.hpp | 16 +++++ cpp_module_02/SpellBook.cpp | 2 + cpp_module_02/SpellBook.hpp | 50 ++++++++++++++++ cpp_module_02/TargetGenerator.cpp | 2 + cpp_module_02/TargetGenerator.hpp | 50 ++++++++++++++++ cpp_module_02/Warlock.cpp | 2 + cpp_module_02/Warlock.hpp | 71 ++++++++++++++++++++++ cpp_module_02/a.out | Bin 0 -> 87864 bytes cpp_module_02/main.cpp | 30 ++++++++++ cpp_module_02/subject.en.txt | 86 +++++++++++++++++++++++++++ 43 files changed, 925 insertions(+) create mode 100644 cpp_module_00/Warlock.cpp create mode 100644 cpp_module_00/Warlock.hpp create mode 100755 cpp_module_00/a.out create mode 100644 cpp_module_00/main.cpp create mode 100644 cpp_module_00/subject.en.txt create mode 100755 cpp_module_00/test create mode 100644 cpp_module_01/ASpell.cpp create mode 100644 cpp_module_01/ASpell.hpp create mode 100644 cpp_module_01/ATarget.cpp create mode 100644 cpp_module_01/ATarget.hpp create mode 100644 cpp_module_01/Dummy.cpp create mode 100644 cpp_module_01/Dummy.hpp create mode 100644 cpp_module_01/Fwoosh.cpp create mode 100644 cpp_module_01/Fwoosh.hpp create mode 100644 cpp_module_01/Warlock.cpp create mode 100644 cpp_module_01/Warlock.hpp create mode 100755 cpp_module_01/a.out create mode 100644 cpp_module_01/main.cpp create mode 100644 cpp_module_01/subject.en.txt create mode 100755 cpp_module_01/testt create mode 100644 cpp_module_02/ASpell.cpp create mode 100644 cpp_module_02/ASpell.hpp create mode 100644 cpp_module_02/ATarget.cpp create mode 100644 cpp_module_02/ATarget.hpp create mode 100644 cpp_module_02/BrickWall.cpp create mode 100644 cpp_module_02/BrickWall.hpp create mode 100644 cpp_module_02/Dummy.cpp create mode 100644 cpp_module_02/Dummy.hpp create mode 100644 cpp_module_02/Fireball.cpp create mode 100644 cpp_module_02/Fireball.hpp create mode 100644 cpp_module_02/Fwoosh.cpp create mode 100644 cpp_module_02/Fwoosh.hpp create mode 100644 cpp_module_02/Polymorph.cpp create mode 100644 cpp_module_02/Polymorph.hpp create mode 100644 cpp_module_02/SpellBook.cpp create mode 100644 cpp_module_02/SpellBook.hpp create mode 100644 cpp_module_02/TargetGenerator.cpp create mode 100644 cpp_module_02/TargetGenerator.hpp create mode 100644 cpp_module_02/Warlock.cpp create mode 100644 cpp_module_02/Warlock.hpp create mode 100755 cpp_module_02/a.out create mode 100644 cpp_module_02/main.cpp create mode 100644 cpp_module_02/subject.en.txt diff --git a/cpp_module_00/Warlock.cpp b/cpp_module_00/Warlock.cpp new file mode 100644 index 0000000..bc6fd84 --- /dev/null +++ b/cpp_module_00/Warlock.cpp @@ -0,0 +1,2 @@ +#include "Warlock.hpp" + diff --git a/cpp_module_00/Warlock.hpp b/cpp_module_00/Warlock.hpp new file mode 100644 index 0000000..c6e36a6 --- /dev/null +++ b/cpp_module_00/Warlock.hpp @@ -0,0 +1,35 @@ +#ifndef WARLOCK_HPP +# define WARLOCK_HPP + +# include +# include + +class Warlock { + private: + Warlock(); + Warlock(Warlock const & other); + Warlock & operator=(Warlock const & other); + + std::string name; + std::string title; + + public: + Warlock(std::string const & name, std::string const & title) { + this->name = name; + this->title = title; + std::cout << this->name << ": This looks like another boring day.\n"; + }; + ~Warlock() { + std::cout << this->name << ": My job here is done!\n"; + }; + + std::string const & getName() const {return (this->name);}; + std::string const & getTitle() const {return (this->title);}; + void setTitle(std::string const & title) {this->title = title;}; + + void introduce() const { + std::cout << this->name << ": I am " << this->name << ", " << this->title << "!\n"; + }; +}; + +#endif diff --git a/cpp_module_00/a.out b/cpp_module_00/a.out new file mode 100755 index 0000000000000000000000000000000000000000..7213813319effbc50d86af7a72a4bbcbb6cce5f8 GIT binary patch literal 18304 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 + jack->setTitle("the Mighty"); + jack->introduce(); + + delete jack; + + return (0); +} diff --git a/cpp_module_00/subject.en.txt b/cpp_module_00/subject.en.txt new file mode 100644 index 0000000..0a1b0ed --- /dev/null +++ b/cpp_module_00/subject.en.txt @@ -0,0 +1,81 @@ +Assignment name : cpp_module_00 +Expected files : Warlock.cpp Warlock.hpp +-------------------------------------------------------------------------------- + +Make a Warlock class. It has to be in Coplien's form. + +It has the following private attributes : +* name (string) +* title (string) + +Since they're private, you will write the following getters : +* getName, returns a reference to constant string +* getTitle, returns a reference to constant string + +Both these functions will have to be callable on a constant Warlock. + +Create the following setter: +* setTitle, returns void and takes a reference to constant string + +Your Warlock will also have, in addition to whatever's required by Coplien's +form, a constructor that takes, in this order, its name and title. Your Warlock +will not be able to be copied, instantiated by copy, or instantiated without a +name and a title. + +For example : + +Warlock bob; //Does not compile +Warlock bob("Bob", "the magnificent"); //Compiles +Warlock jim("Jim", "the nauseating"); //Compiles +bob = jim; //Does not compile +Warlock jack(jim); //Does not compile + +Upon creation, the Warlock says : + +: This looks like another boring day. + +Of course, whenever we use placeholders like , , etc... +in outputs, you will replace them by the appropriate value. Without the < and >. + +When he dies, he says: + +<NAME>: My job here is done! + +Our Warlock must also be able to introduce himself, while boasting with all its +might. + +So you will write the following function: +* void introduce() const; + +It must display: + +<NAME>: I am <NAME>, <TITLE>! + +Here's an example of a test main function and its associated output: + +int main() +{ + Warlock const richard("Richard", "Mistress of Magma"); + richard.introduce(); + std::cout << richard.getName() << " - " << richard.getTitle() << std::endl; + + Warlock* jack = new Warlock("Jack", "the Long"); + jack->introduce(); + jack->setTitle("the Mighty"); + jack->introduce(); + + delete jack; + + return (0); +} + +~$ ./a.out | cat -e +Richard: This looks like another boring day.$ +Richard: I am Richard, Mistress of Magma!$ +Richard - Mistress of Magma$ +Jack: This looks like another boring day.$ +Jack: I am Jack, the Long!$ +Jack: I am Jack, the Mighty!$ +Jack: My job here is done!$ +Richard: My job here is done!$ +~$ diff --git a/cpp_module_00/test b/cpp_module_00/test new file mode 100755 index 0000000000000000000000000000000000000000..7213813319effbc50d86af7a72a4bbcbb6cce5f8 GIT binary patch literal 18304 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 LBv!f<T%`DK7SceB literal 0 HcmV?d00001 diff --git a/cpp_module_01/ASpell.cpp b/cpp_module_01/ASpell.cpp new file mode 100644 index 0000000..2cb07c0 --- /dev/null +++ b/cpp_module_01/ASpell.cpp @@ -0,0 +1,5 @@ +#include "ASpell.hpp" + +void ASpell::launch(ATarget const & atarget) const { + atarget.getHitBySpell(*this); +}; diff --git a/cpp_module_01/ASpell.hpp b/cpp_module_01/ASpell.hpp new file mode 100644 index 0000000..be0a66c --- /dev/null +++ b/cpp_module_01/ASpell.hpp @@ -0,0 +1,45 @@ +#ifndef ASPELL_HPP +# define ASPELL_HPP + +# include <iostream> +# include <string> + +class ATarget; + +class ASpell { + private: + std::string name; + std::string effects; + + public: + ASpell() { + }; + ASpell(ASpell const & other) { + *this = other; + }; + ASpell & operator=(ASpell const & other) { + this->name = other.name; + this->effects = other.effects; + return (*this); + }; + ASpell(std::string const & name, std::string const & effects) { + this->name = name; + this->effects = effects; + }; + virtual ~ASpell() { + }; + + std::string const & getName() const { + return (this->name); + }; + std::string const & getEffects() const { + return (this->effects); + }; + void launch(ATarget const & atarget) const; + + virtual ASpell * clone() const = 0; +}; + +#include "ATarget.hpp" + +#endif diff --git a/cpp_module_01/ATarget.cpp b/cpp_module_01/ATarget.cpp new file mode 100644 index 0000000..3685615 --- /dev/null +++ b/cpp_module_01/ATarget.cpp @@ -0,0 +1,5 @@ +#include "ATarget.hpp" + +void ATarget::getHitBySpell(ASpell const & aspell) const { + std::cout << this->type << " has been " << aspell.getEffects() << "!\n"; +}; diff --git a/cpp_module_01/ATarget.hpp b/cpp_module_01/ATarget.hpp new file mode 100644 index 0000000..86669a1 --- /dev/null +++ b/cpp_module_01/ATarget.hpp @@ -0,0 +1,38 @@ +#ifndef ATARGET_HPP +# define ATARGET_HPP + +# include <iostream> +# include <string> + +class ASpell; + +class ATarget { + private: + + std::string type; + + public: + ATarget() { + }; + ATarget(ATarget const & other) { + *this = other; + }; + ATarget & operator=(ATarget const & other) { + this->type = other.type; + return (*this); + }; + ATarget(std::string const & type) { + this->type = type; + }; + ~ATarget() {}; + + std::string const & getType() const {return (this->type);}; + + void getHitBySpell(ASpell const & aspell) const; + + virtual ATarget * clone() const = 0; +}; + +#include "ASpell.hpp" + +#endif diff --git a/cpp_module_01/Dummy.cpp b/cpp_module_01/Dummy.cpp new file mode 100644 index 0000000..6eb8744 --- /dev/null +++ b/cpp_module_01/Dummy.cpp @@ -0,0 +1,2 @@ +#include "Dummy.hpp" + diff --git a/cpp_module_01/Dummy.hpp b/cpp_module_01/Dummy.hpp new file mode 100644 index 0000000..9d4167f --- /dev/null +++ b/cpp_module_01/Dummy.hpp @@ -0,0 +1,16 @@ +#ifndef DUMMY_HPP +# define DUMMY_HPP + +# include "ATarget.hpp" + +class Dummy: public ATarget { + public: + Dummy(): ATarget("Target Practice Dummy") {}; + ~Dummy() {}; + + virtual ATarget * clone() const { + return (new Dummy()); + }; +}; + +#endif diff --git a/cpp_module_01/Fwoosh.cpp b/cpp_module_01/Fwoosh.cpp new file mode 100644 index 0000000..06e9776 --- /dev/null +++ b/cpp_module_01/Fwoosh.cpp @@ -0,0 +1,2 @@ +#include "Fwoosh.hpp" + diff --git a/cpp_module_01/Fwoosh.hpp b/cpp_module_01/Fwoosh.hpp new file mode 100644 index 0000000..d49fbbc --- /dev/null +++ b/cpp_module_01/Fwoosh.hpp @@ -0,0 +1,16 @@ +#ifndef FWOOSH_HPP +#define FWOOSH_HPP + +# include "ASpell.hpp" + +class Fwoosh: public ASpell { + public: + Fwoosh(): ASpell("Fwoosh", "fwooshed") {}; + ~Fwoosh() {}; + + virtual ASpell * clone() const { + return (new Fwoosh()); + }; +}; + +#endif diff --git a/cpp_module_01/Warlock.cpp b/cpp_module_01/Warlock.cpp new file mode 100644 index 0000000..bc6fd84 --- /dev/null +++ b/cpp_module_01/Warlock.cpp @@ -0,0 +1,2 @@ +#include "Warlock.hpp" + diff --git a/cpp_module_01/Warlock.hpp b/cpp_module_01/Warlock.hpp new file mode 100644 index 0000000..a0324fd --- /dev/null +++ b/cpp_module_01/Warlock.hpp @@ -0,0 +1,67 @@ +#ifndef WARLOCK_HPP +# define WARLOCK_HPP + +# include <iostream> +# include <string> +# include "ASpell.hpp" +# include "ATarget.hpp" +# include <map> + +class Warlock { + private: + Warlock(); + Warlock(Warlock const & other); + Warlock & operator=(Warlock const & other); + + std::string name; + std::string title; + std::map<std::string, ASpell *> arr; + + public: + Warlock(std::string const & name, std::string const & title) { + this->name = name; + this->title = title; + std::cout << this->name << ": This looks like another boring day.\n"; + }; + ~Warlock() { + std::cout << this->name << ": My job here is done!\n"; + std::map<std::string, ASpell *>::iterator it_begin = this->arr.begin(); + std::map<std::string, ASpell *>::iterator it_end = this->arr.end(); + while (it_begin != it_end) { + delete it_begin->second; + ++it_begin; + } + this->arr.clear(); + }; + + std::string const & getName() const {return (this->name);}; + std::string const & getTitle() const {return (this->title);}; + + void setTitle(std::string const & title) {this->title = title;}; + + void introduce() const { + std::cout << this->name << ": I am " << this->name << ", " << this->title << "!\n"; + }; + + void learnSpell(ASpell * aspell) { + if (aspell) + arr.insert(std::pair<std::string, ASpell *>( + aspell->getName(), + aspell->clone() + )); + }; + void forgetSpell(std::string name) { + std::map<std::string, ASpell *>::iterator it = arr.find(name); + if (it == arr.end()) + return; + delete it->second; + arr.erase(name); + }; + void launchSpell(std::string name, ATarget const & target) { + ASpell * spell = arr[name]; + if (spell) + spell->launch(target); + }; +}; + +#endif diff --git a/cpp_module_01/a.out b/cpp_module_01/a.out new file mode 100755 index 0000000000000000000000000000000000000000..470ccacc10204bf71360ce87b3590eff0fd98dd4 GIT binary patch literal 57744 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 literal 0 HcmV?d00001 diff --git a/cpp_module_01/main.cpp b/cpp_module_01/main.cpp new file mode 100644 index 0000000..3d12dfe --- /dev/null +++ b/cpp_module_01/main.cpp @@ -0,0 +1,20 @@ +#include "Warlock.hpp" +#include "Fwoosh.hpp" +#include "Dummy.hpp" + +int main() +{ + Warlock richard("Richard", "the Titled"); + + Dummy bob; + Fwoosh* fwoosh = new Fwoosh(); + + richard.learnSpell(fwoosh); + + richard.introduce(); + richard.launchSpell("Fwoosh", bob); + + richard.forgetSpell("Fwoosh"); + richard.launchSpell("Fwoosh", bob); + delete fwoosh; +} diff --git a/cpp_module_01/subject.en.txt b/cpp_module_01/subject.en.txt new file mode 100644 index 0000000..15bc9e8 --- /dev/null +++ b/cpp_module_01/subject.en.txt @@ -0,0 +1,94 @@ +Assignment name : cpp01_02 +Expected files : Warlock.cpp Warlock.hpp + ASpell.hpp ASpell.cpp + ATarget.hpp ATarget.cpp + Fwoosh.hpp Fwoosh.cpp + Dummy.hpp Dummy.cpp +-------------------------------------------------------------------------------- + +In the Warlock class, the switch statement is FORBIDDEN and its use would +result in a -42. + +Create an abstract class called ASpell, in Coplien's form, that has the +following protected attributes: + +* name (string) +* effects (string) + +Both will have getters (getName and getEffects) that return strings. + +Also add a clone pure method that returns a pointer to ASpell. + +All these functions can be called on a constant object. + +ASpell has a constructor that takes its name and its effects, in that order. + +Now you will create an ATarget abstract class, in Coplien's form. It has a type +attribute, which is a string, and its associated getter, getType, that return a +reference to constant string. + +In much the same way as ASpell, it has a clone() pure method. + +All these functions can be called on a constant object. + +It has a constructor that takes its type. + +Now, add to your ATarget a getHitBySpell function that takes a reference to +constant ASpell. + +It will display : + +<TYPE> has been <EFFECTS>! + +<TYPE> is the ATarget's type, and <EFFECTS> is the return of the ASpell's +getEffects function. + +Finally, add to your ASpell class a launch function that takes a reference to +constant ATarget. + +This one will simply call the getHitBySpell of the passed object, passing the +current instance as parameter. + +When all this is done, create an implementation of ASpell called Fwoosh. Its +default constructor will set the name to "Fwoosh" and the effects to +"fwooshed". You will, of course, implement the clone() method. In the case of +Fwoosh, it will return a pointer to a new Fwoosh object. + +In the same way, create a concrete ATarget called Dummy, the type of which +is "Target Practice Dummy". You must also implement its clone() method. + +Add to the Warlock the following member functions: + +* learnSpell, takes a pointer to ASpell, that makes the Warlock learn a spell +* forgetSpell, takes a string corresponding a to a spell's name, and makes the + Warlock forget it. If it's not a known spell, does nothing. +* launchSpell, takes a string (a spell name) and a reference to ATarget, that + launches the spell on the selected target. If it's not a known spell, does + nothing. + +You will need a new attribute to store the spells your Warlock knows. Several +types fit the bill, it's up to you to choose the best one. + +Below is a possible test main and its expected output: + +int main() +{ + Warlock richard("Richard", "the Titled"); + + Dummy bob; + Fwoosh* fwoosh = new Fwoosh(); + + richard.learnSpell(fwoosh); + + richard.introduce(); + richard.launchSpell("Fwoosh", bob); + + richard.forgetSpell("Fwoosh"); + richard.launchSpell("Fwoosh", bob); +} + +~$ ./a.out | cat -e +Richard: This looks like another boring day.$ +Richard: I am Richard, the Titled!$ +Target Practice Dummy has been fwooshed!$ +Richard: My job here is done!$ diff --git a/cpp_module_01/testt b/cpp_module_01/testt new file mode 100755 index 0000000000000000000000000000000000000000..f634a067d4cb46d1dbc14d0d628be7f346ee7850 GIT binary patch literal 57744 zcmeHw4}4rzmH(Thp(zxSN|gvG)0RI0+K@@pHl+yDKhsWZQbPV<MD%r%Oq-F(ACgH) zfoj-L%#dacSTMVb8rMH$U0fp;2|`PN+D54wwPM`G-6)7R5;d+YMn&fLJ?Gy0-kZrx zE0q#|pHCl5&%5WGd+xdCo_p@O_q~~X)K{`G&E+!mm1bORP-%RLmr?Rx!zlX+7Zt9^ zIMeVNiww7M8ZdM4@iK*=ywh+jO%gQBRD9`xR4<2a7<%L2`CKv#4Yh^@sh)j#)vbhO z3uIA4BU_fKUIyK|=^tEfF9QvC7RsWA&U)P5R!KLudgYCR`_7d`4W0GKHsiNT`uH9% z-)NYxI?>Kbfu!^#b5XsqUCeHb^?3P4!)#)}rJ=SbiK9=EvS(4c7bPl7=%xZLH~(uG ziS?>gy=uj;;ReO8A+<qQ#V;atC(>S-s@D~ea=HRuzR@tO8qiR;cOB}HUH;ljnbRm& z?WGzAx9YcsF4e#l;ZV)W!Yjgc%fg|?w)SQ1MJt!BEX-?d$}3<F(u>-l;oG#O%1G-l zh6$(Z)BQqxNIcQse&y<K?kigEIp^VfKmF4mhJO0`i`(~V8B~XO=pueK#9StKUV_gB z_`DOJx8ZXRK5l##;Y041g^#{yT;GmQ4nB+VITIh6L+9ahtV_44Z9Gpg>;9af%G6)# z_gSh;`o0SvHSLUd<Nh6rHW%=8e8>)G<1-&0>N8!s9?7RR?^v7dUgR=dB#SQU@5mje z|KL-#`@gxcZ~prB;+wv1)MtG0Qs0kCm?6bKX=s3Klz26xgURsEf-xDM`j`y=1Qbq& ze?0~MKT@>&I1G?XPFV{4mK5^uPto6!6zvYA;CH9!FU6T;dQPUmUzkGw_oZm}&J^w5 zokGr;DeQ1h3OVai$hj;9ep3oPKb8W2O$s|eO~Z{(;&nd=i!g)TDy~;6h94<>M*@Bt zdM>~W_TJ-V&TJBl>oV2u;36-V^*`q*{CEQXBdAB?IF*1mOmllfQ={1$3A98^(=czS zh^&qTTN*-*fk<!%m&2{awG|PMr?x)OVn$j5p$HJZiU9ucm4mRnCeRwHHJe%^Ex|xT zaiv+AZ~7`$ndO_eR76&pW^H@B$KxrGTwn?{ZZEDVG%Hq^l^)aQLmOLI*anY}8cba& zr55XD&5B6DYO}lsItGJgsIfJOE(IFv%$8tHARK6{4c3%F-6D&nv8gU-Laks$zFA&D zoj<X*%Qn}RZ?0G_t>=&*YOHMuHUt|ZDVmiH7KNHxS&PEr#!y5Vq4N4Io_sc4peD4# z;~_JK1FfxQWM?z=ZCexB4ZQ&&Qs2^a3nbK;fpEB~mTZ_%y#S(GLrElHYyxIYaC@lH ztPMnJ>ru5XTm}hDXl`o>nma-*k+wjX9HqV8Y!0@xHZ=yqp~y~iM?QCe{J<W7qBwn8 zS^_)G#^5bxIM}#7Qh$QO8>sNXzJ(_~K)QBC1in1em6LgKZ6$nog^8g>CmU~R;I2mE z$4d5^P1O?QQIK3Id_JZ7sxgoAP1|=i$KfrXMN{y1+nFsVH@7vln86mfbqcqWu3ix- ztZizGkj7}?jjFt=wyB{x&=S-G!$t^Vu4y-lQ@SpAyopfNcuNSi%Y&_L4MF%C(yv+- zlo|q|M&*zQN$sJC0b*;UuJ-cFDIZ%&#RltcdoAiw$wT;BiQlw-y}3Lu-`G@Ayl%Z& zkXMkm!n$8xC~vE)!BUu4u-aH(UA=Z)vFXWM?xZ;H^9nqOrD^yto&TG|cT~ziHZ#}4 zODgfr0c{Sl?sQ~`b5x0NNO_F!Vr`*(!;Meb#XFH|Wg0I5N0$qApI7vJl-te?AvK$8 z{6^vS-E%+Erwrpy7XKXM5k;f=JEuR172z}^1Bn~8@x!m&gu6M$LRF4jdM{GObmIb5 zzM1*cjLT7`OMKkRka9Gg0}^7&f!BL9!s~U7s_R^i@OoV%JmrY`((4-GDd*EyPOq15 zDTh=`9+%w?JUV7wxeh#*OzX;b;FXD(R^-5|t}@>1!0TL?2!02ibkbLu1F!c~M5}h- zbuLZ#tqwfp#`>yv;3-emSF;08xxBvG9eACK6RpF6ckT<i9C-2ref2u<I)^7(p9B9k z%?#M@z*A1IuK@?1@_l^`I`FhF(btdzulEZ?8+PDnpQEo42cGse`WkiMX@8`zF$dnQ zk$~e4yxO`mRXFg@z0#BezsMnH+JRr}z@NH3Wr0%`IAwuT7C2>rQx-U7fm0SZWr0%` zIAwuT7C2>rzefxFKI`3o@^?;V`nxlJ)`Vk@-NTWz*r>nrVCFNdZfwQRfsS4DBL2;~ zz>7O7*As1GJcjF{|D-Y<(M*hT`3F>{qnU|eE`OWKbR;t|$mOT0Oh+*j{apSAmFWm( zqL<4LQ<;ulCOWwMB`VXA%S1Dm|CP#g)H1P^%l}MeI%1h9<MO>!rlXY!FPHD8G96t_ z<a7BSs7yyJ6K*cwN@Y4)naJjH3zg|eWy0X{hpC)J<*C<!xTuE8bc8Z7&gC1ZOh+dZ zqg*bh^4q99%;on|nT|>(2D!YB%5+3B(a+^8sZ2*B6TMt6pfVkaOmuMhGAh$i$V4-j z7gL#zKqj_w`CKZ~(Z@s?m)}NZI@*}<a`|*B(~-tRK9|#|Oh<MTZj`J1(O>wVyzX8v z5IF7Ig&z8!)DMaL2Q<O|jZF0bN_+{mKKM-51$S}{sxKZzEkbQD3@NW%%UhNpPZJ#S zZul$YRcLuX1+!B>O>oFN{jZQ$spa(~$kPOeyl?#F`2DTY^4^mmPZJ#SKKxh6yI#xt zHJF|K)dYvUbB`&H=C|k9#nJD7$RGW=zw^bZvPz$4*z+y_;lsTbVLHG4g_{iHm2G)? zJc<7qyVyIFjdAzChyIP6Jw!uJA!6Q>gourA>wRXM%}nv(0Q2AR8wSxS|5LxY#{blG zy5Duk|NYk^3oHq9m4w9l)PBc%9%(>BZD+G{-3k{vl<_%WTpxU9Mtj8n^4+!$?0=n; z+5YIRX@9hB%HQ2K?eE?-CC(<*I}c`m(9yfB3#7kxPP*gxI}c_0pVTMQ;#+^l7(@^I z56s!>g%He=A2Y@$Sny@Q;70hPhs38f>&G?gLxkx(=ti^l{2<-BebfHV;auQ*ZSA-9 zvi^5W4kMr*_Ps`}`Fr+Lpz}xfx5K%_d9UHV`#!oqkcC!2t_N9s0u4<l{#?mV@j|>z z3UuE`_Xp0A{1gX8t<Ary%ir?|3Gw&b$258fu4OUeu0O>K7a1f~wH$H~NmC(!0FlC{ zxC)V-MLp?<a^lNGiazC!_S8cm*+%z%y7x!_2rPv(F{bPIyBPueG;wr4!k}kYm&m|^ zpfp5j6P5$5?<mXKUrmC3ORaU^NB0L7%f62he!HzP_nnaFJ1cyfLl!gN{YR~6&wdgv z=E?32P^IYpGD4Ak&=B40h6V}$x?PtWVr0nC0wZ#5uKgrcJO~5~*nxYr;3w3DvIV-= zEp!q70lO}@KuFz{LEA|Cnfb|SyDKDITulvi@1CYg(cNAGozq6vowR)TyZ1AqJImi) zoEiH*8(3SJP35&af<Y)psoVFO|Bi#?ydQi9!yFyO&{e|?qPr{c??erWor%7b(ci}e z@<$(G_8ww~1=#uKX{~kR<ldqaSnYwo{DbP3=3qArP(8{_k~DdBa`Xa1Yky2sUyM>S zzj>p5U?=h=YB);ff0D4DdZPl_XI^<Vq00j#u#p7P`%y`{oZ8Cl8=p%Q$PV%@2-H*g zIwWOmU}a^D`G?|B-TP_uL_JlC9v1nqri#a9{wT&*h2&@{MNWk0T_Zf}ONYfT&^mA< z{?5Y`ibus!tq!omz<Pll5}&p_ny}q%Q{wjjQ+8m!?lwUZ#5Nn-Hq4P+q*DtNc}fSR z{@uF<4_u0%Am&+3bsj9U{I+yF>U(|y8I883M7Rmjy=#d31AlEBkCr|!F4lT!(W9b5 ztDsRM!kdU17w=)M4hzbEd3`7ozj_5G{3iaf*Ne`{t!%vRQW&jtfcoI?*@ejklbk^k zx~ql`lyQLDH726E8R$9S?`azoe?a=H2W?C|2HCnaD%OA-i_xI}u|5c(%isAFmd{MA zT3c;vj6{70C)`A(fuxR)L`x4si!l+>@@%0m0fp8_#0N<_T;U@4h25V!CVN>DErZ;p z4s;2N5O=9p6tPNGy(-Y5iLdJ>z|%)7A-UNCX1kB>4{Vd2?-zS4&hA|u)OmkTRlj)7 zVSs)y^n2R?ed0>emHP2n2YOU2;V$^P{Ery{FSNDoa>qf^KEX7l#2`akX-Zr5i}&a@ zw5|HYH-O^y7bVh0#ixlzc6>W&13Uf{$)24q===rw0ynSb7o`@_-OaFzzjN0V!ue?& z))Z#g3nI-^2%Zv4vGYNh0w$IH-E;lj-fZjuyB}d3&zL^w*AKJH9HFXDyn||WtDFJq zZA4l2NQM9yeni}ZO%_bz?Rw7J^~kl<K(wa}fEn-ZVNCZUghAM+QS2(kh(TJrV_oSN zmyvAeJnW77_QbnlZ?tp|*SuQS)aLCMFGCA1P0S-3VRZt);C1in6;J*zwS8E83^`TS z1sx#hc!dc-&WYTSa!5ND-2XeS;Xlx%CX0BMFo;AX=QEmmi>7|rrusV%xy3HcVI_#& zgyFo@o*z~|T7?0D9teNpbJ#NayJ1kIot?V`Miq9UP=r{DI5>wUgUmCnT%PiA6@T;5 zk1^RNa*|!+EYo}!OBjdHDMox3`%rG72d>c5CPV``23%RYd4JBCE-2z-T+izUD~<{% zVW9msbb;H<jg@6e>vyBYZq-s7)#yB!AD?~e{i4p-(O2<-CCrID-D!`lj`0|g0li>~ zhJph6sA_N5=z&{dcu@q3M$wAm6)Q<7^A6jDZr?CEAT9ADvMw_WDF)vVh=?BO0EN&x z?3gV>U<Zx7d)K)52(Yr6UQ`fByV)=U(lE4fhZP3=$<ioDcnCZ5iTh~|(CVjS>r}LK zk`@0Bs!v=mWyr4l%VOovT!A|GZ^VNSwL?5^@#Eh(3?RORQhYF<iuxue_=thdEzki< z)Jhqv^p$cxuH{(b#qEixDY5gnG!TcyS|pQl|Kc3a%c+GK{;lR0jW@-nW6%+~lhEBx zUlyBW=f}l|aHDmlfz1>*S{R-jFwwZPzalKFPKmFfV>+HX^}mT267)lCh}+LO_zxo! zz&^)k)pADbWd6R{;<WueQ9j2a1ogv|aYLP`7xwe!pzNlyb5ikqPpscLiTO|QjOYHC zILtz5>WnLEwT*)~CawlS+iy$^6B|!jBF35R3q+#z<Mv-W7bLZRwc;1;ziBa|S;i~T zRl44t@&<!(NQ_ALpAsLpkhHf(RQog|P(Xm1c#PP16m6T%^tYGOW{#I*e8g?M$)R(A zID506-QFChEv@*e?T?i)DLt;gY-6cDz0d|L$-=!<NKoIhmzT#!pI7wIX#y5PWsfQG z64i~1b!`Z>;P^5Ka==hW{EuwHYv(4E#3E7&aga!Ge(~(f&H;<JAGeP=xt-=DPCPIK z-@vUQF19AAT2I{2Z`>cHp(RxTX{gB`R68`T9ehvgRl@m)9uHmVW5mdFEM6bE_PNC| z=;Ai3?u_xoSjEfJ{i8YRY;Wd#vEx(s1bbaFf3f7xtWWllMu}Eo_;F7uLU)xAbP_8K zax8rl>raUasfRn>0p<EmZP7eS?Vob~tN!~B&z;6PN%0YCj){5_O*5RP+~q>A9gdl= zQhpIFeNo)18FZi!;uaEs72q1AtM=Tq`={d1ley@-_!8=qbJ2NE>6irLVxdlc(UEc3 zC!bR^knOcelu=D`vbkt4K40^u+Fu@?+l=&Gb#++mk|Jn%%SGQuMOgO+f=76eXw|s* zm)Zyt3l~0|E3z$Y=fQ+ICi78Bfb<g1`@$`{hPKtPSd)kv7e&${!azEz=9le%k6XU# zw5RkB8PCVXVMIpV!nn8;El3YTpT^@Xcovb!g5SiAQy%+=Jfb_DcxH^x2I!`mNI5=( zFDdEUS$YRF*ZF6hzVJUaD7j)O>R77NFo|<Xies@>zNb>6O!22*s2aN3l=uTxf&V>; z#4nluVSZ$t;W&Sl@fv}Pmpuy4<KhLfGnSdIDw<1EcLO8@YujFWzI6^~#!p8p-<JKQ z`KIST#Y>uB=Rtk;@oqW=ndguC-Krs5eya84e_rIes8@<$QjA6%m1#w_>}~tcvs5P` zf9afThV!fb^Xl41HsCGP8d^WQX_tLSu0NFHN2|uLfR7>3M+yUS8|?^(#TA;jo0cQ+ zbeE2o^!SFwN+LvkLx+5iy1+?$i6Lyn9~Eb&W4&4|WsHI{AT9^ykncgtr-=;*7F7?5 zmsqeKg=QF8KcC?FVVxh?Lm1uFC#LA!iB<QFiQh{VMi2SE=Tf@MT+fHTQrsy;x3ImZ za1-_QqTZOuf-blLvaQ!2eOi1EGA?v=`M&omgk;@G5A~Rj&KpswV?u4g#>68E192Uo zj7>y2r-50>PMaV{il~qx`otV+3Kk+dSw}nr9&3X^Z^%Oww8VZw8V0axRQv^86FZ4Y zaxWljqCmVDu-&wYhJvs^cZ82g=&+`{YFwnJkPm}fh94E5BKh<%5jqX~5BvIYtA+;0 zC?5qCP0>O&jh(bS260X}<^Ou^18dUxVbd|!;L1@<qxg8<4F3ck$9d5zj8ExU3ArIP z4T}uYfC{6__hi=Y50HL1$^(tYaX|c;5p+oQH27A3pSbQ^!ARILN~4c`DIGIhN7jn^ z`cZvc%;B!V?YrChY3Prl2CCledy*XhJZK*Kz#Ewl=WkKp@ZG-e0XIzM#hF>=g|4ix zPm4c~(-_b;(4Pye3v)D=xq6UTQGN{~g%&t<Tz+ZA3R=f$dLuMs;!fN>uj6N~E<c-S zhJBOU?~TVNw1?gP1xWL#7sE0lS^DXG4eO1#oO8oN<TWD8%BADyXWaOr!|2W$SJvKP zmhJS2xcm${kZU#PK=!man|+y0m7O^MwS11PiT08~mCc1<6~CT>mySBRi$oy}6EbRc zsZ1Rpm3^K4{j=3aXME0ve?k@~y%+<;^%wp-7Net(2V^g$#JK)}4|QmNo+SSyuRu4G z<g3)bB5op^yoW=%J?9+xxUCP?8nJ|3jn;nzcsdvFuA0*RhjfNA@}%Q?lRU9Kz<K}c zR*P}*w{x;=M!v;IWg{56aWQ7)ay>jLhtTmUv6zoAY128ZVirvuoTO7$T!rQ&mIRyw z)`{)Zwo3oTqQ0XO^p1oR!EH^VEl3#?U;8QFjIgCH)*6ThFf0?xxu!}a#-gQ1#TN(- ztT91vn!p@oGT#&rfk3H51UcCZ`#8qiGmIdSCF{=cPv`or*MAwi#s%;9+408xt4Ff# z;!r>Ik1rI_|LOkKzNxIc=(J4~phMz2&qJM?5DG;r^>0Q-V(0%uhi^Wg{>MXd+dC|O za$Ei?^^x;k=}&u#gz>fcWsXTMG$l;ZrknhU0#xe!<BrLGvW#<z$TNGEvYH}Dw_2Qh zLcE_N3Ot3jy*)_9hVXE?>#0H4t50F=?abP}l7z_$;zq7a>wrAYroAmc<LiE;ndAA> z5Hlv;P9l7rcl$c6HC1k=IopBXVdft8(E>)R8`e(wjJ>C-SKRGTulqiEFy1ySmavv^ z-=2E3qda&w-D8Hq>+qqO24P|dN4j!Dpf>|u(b7Aa^eG}yt9<+hln`Gc9Xf~ISWx?M z%YN7;E+kXK4=0f>rWjAyfTlH^gJSpDtRDpneAM)gkAL99H2kl4KJs11fpJ2-L>y-R z8Tq4(f7BFWsh>__Wn9wnE1zQ{=a^U=$z^E$#>ilRr^GKw2VPN$h*kBjc%||wHpS($ zwm<6mr1R-#f5JWqImgPUp^wTZ$X>MReFg_t6gZ&RxHvSe3X}y$pC(y?v%RQgP}a#> zAH0@4m7k!GkW0tmd^TT2gW64*Gx-Kad7o?nPD1I}n24ZEt|_0ivwhG7Fm{t(@FbmE zVt!~$KQD>Ukk-fFbF#~0jlF2%{LN<l$jj+n7UF-#=ARL-Fi}~A?Jwvb?OkY(z(WMs zM!|hdtl{U4v{zOgrtF9E|DMt@kw@LOZ3e}7eX;@pSySgWaqCZ6TzhmbAbn;~H8YGR zsNX~4U-+pX5<VIx%u7xH$;#0xGX5y`D2v(nloLYdZlGyff^1rRhSxUVw6ZPtXj=Rm z_lPZ77C#%bJ?@ws<&IH0N-HYuba-X!f=WWrZ|7j_x_JEMp!bSalFD(um*V{HE~!+P zxPiDSQ@BgzuBeBl+t(qsvYaB(&O?RAm&#ZC5M_n2i<KONuMylDf_}+@j3Lwb5%Hhk zp7^3nXS-m6F)_lAxoEhmrYH6=1sfj~KzWy;cMhZCH8#e6j-}oFRF1OYLol4B!C$ln zva1*x@^cP_Vn0czUdzactZz4cQ<|(JKC5+-j~m53Tvm@6S%2|v(*0K)9azI^@_5?m ztYEc@#0RB%j91pV%&FTZ+1RkS@K>lwR^H7E>|vjL^Q@<8SQ%<ad=(WZc2Q$J<i79| z%4x~JCinnUZUpf>ou1H9+DPUrwUsO5>4-C=5mfPa@8_~o>ON#Jmci%?%<Lc1VC2(e zFhA;xFwxjxRHQU{w_}6{&>chgnMaTCfS9KA=pgr$tyIK{&~9<Jmu`D@4T?%`vq&tJ zx=EHtn2hm!75R~+p0e4fm=dV$v{^qjuPp;B^^0B9bTMPw20_6GHrq~EPO`Mks%S~j zHdFh_QMhcMl!zGIgU85MpdL?fxu2v-7C!;4c$+Qb83v&{A5Bh+SIDR3Qb*y;TEeV& z!)uc_*GaSTIf_SIcNm%faNL=HTz#DHfId^cwLd`6Q2U9<52?c`_Y-c`-??6Yf{bW~ zN;ic=9dF{|C0qv~6OM7;arRHLPgswKcpUjvN4*}C{h+I3zw$$BKVdUrKmRI=)0YlP zKOqnI;JCgKaX(E7j;?g#Dc8%NPZN&HSWw&O#WLsf(-%>LJWl3vyf6-73=mN96qYvN zojjnsfW)={E?S`~P%b>7PF_aEyQJLdiA+*o24OXpl)_v2F6nRg7w^eH?38HYN+{3+ zDI^l&yLg>Ks>!R%s3;}*$U)VzIU=qi1n*K1Bf6_b#N%=@lk#JvyttcX(8v$_FCBqN z;}#M2r#mJ)sAcQOjUVsy2`?W7Quc|pX}z2=w1&|++d^)JPIc7TR4dW((t<wES&p(b zg{_mRWh9c$pS~yUL-jk9ov;{S{k~kv0kREiz|-PoJiWE#sBDBfhTekvFLZiH@@|## zh(b$0jWWiKO&~dcs5nt=M0}ACD!FIi#(9fcg~fi3-%Ow(0TBTi%d?DE_GuT+#i|Cy zZ()Q9I=hi6^Uq!<6Hu(ix#92WskSWii<hV%7r+73>=%zn^C4XDNmU1A%*Z#U;Q~`U zDD;RfilEuVPqNV|{nY<zT8R;E$R)%*klFQ=XPCDoIC^5w<aZ)){v<l7XJj0Di-}%; zNt1OE>Doqle=CoZEL+o83}CE55u#rDbT3tNQ{rBrE#^hU3`IPzia!BQ_2dX31NtYb z|4jsbxhatjn2<kv(LeOnK2O8gp^R~q`DzU-6F00F8{{^x$ut>*gu#NlJb|*M)r{oz zyFX_mIFi=~H0Be$NbxkA7Ask*mAqQfTg_iRcRAO0=8SL^k>q?w^K;CHab&za-g(nB zItU-Y`t|6~pf+y|4v97To}NW~WE=#w`MDD&Qs+s@+dEc#cEk4E7VJplFwSiwHy7u9 zhucOxLNKI_+?QAZ1Solc2&eMrLI++Tto0D`c1=awCe<*4ITHsf=uwfll?3ui1euv& zP}@Ol5%l_EtzYQ>kl5<wp3zF@kIv<1F!vwP{pR>3`7xPbtId-no(6>l$1RTb`T<Fh zP3MK(G-=s{z4Wd=f7i(Rb`dvx>Yq~<IAwuT7C2>rQx-U7fm0SZWr0%`IAwvi$O82H zlJ5FItGgx`Y;+stA^MTuIwMjabXSHV;b5Jy@s_5h)_UVgcV&I3)g5kXx(WY=ZVI{s zjZI){ao04_FZ#Oc0z30gH!1@y+k+8zSxcZc5~>ZlH?%c0>@>Eq3<$f@UF;4txQ(T5 z+?MWif4Hf}4H-c<MAtPn1{cv637prc+MR4I@-ljb6u4@wY{<y(k@!ayU#}_;s`9Xc zTBa^1{ywrlAm#L~mT*u(<4Rdxsm!o)ZAEi19Jboc*Y#ApxvE^Gpl(-}w<>w#8ZMIZ zUFW5*q2IjUg9?2IVzEKow-3i+V}L_|IXG<?0W1Q{d@2^}1Iz&&0;~oc1FQ#}1{?s) z!E@~)z#_nDz{uIC_jD|_6|epK0XqPz0lOf-3-AFz|1+ph?E+RqjsR>2%sd#2?L+;s zkyz|`z?^T#Vsr3?2?4kiun4=wO297cJgd=O=66vKuo|$B+6Np0%=um{c02e+Mxigt z0&p5I^ZU>j??mJRexBq27NI-<SPeJ?*bXQF`v5b40C|8pfMbAuz-hp0z#}9dFb4;O zML3f!0;~qC25bjx2kZmv0~`Vz0-OeX1@+pGLLSNkfYX2iFlQdx`w`>-<^om&`T^Sk zs{#7}+X06Fy8y=k2LPu5hX8Zn&?A6FfYX50fSJ#sK41}GA7C}$`FOiw3~&Qr(T`)X zFkt2w<bs|HxEJMiz$b_g@I}DtpP)U^>j7T@8~|K+2HFEG1kC(Tj0>P2FalT)xEC<@ zzc8MFBY4Jq6i@)Z0+@+c3>MCZo`8jbxp)_%63`DA0jvky3)ly^4{!wVDBv{UD}cHG zgZg+St{SiqunVvfZ~!m@I0m>Ea2jwQU?xsijsg||z5>_|xDdx;1Az14pM5`r9F#`@ zD*=ms4mp6;fO`SE0QV6cun_#YICVTqbih}L4!AH2@&F3~M*u4Ub8tu+0jvhxOLV|} zfPNft9|dd&d<C!za3Nm083QZ?oCd4}?8ED=5x^Y0O1~G-54aDo9`Gn&7vL*^1Aq(h z4Vy8*LcmNMom2uA0Y(6;0rvuS0qz6z<5cV@;27X5fb}?zT!^FHY8=@X0%raW^#O|j zBY^dQdjSUk_W_Op9tF((U(_c$;6lvTKEOgidJb3#NEh6lFW0T*hO0f>b>95BnY}nj zgxdV~B1ZPdViyy~hPl~<%g5(M;1CY@x)A?vz-RoiSZo~ijI**go|W_7tTS%O>@co5 zcg<zXFI-HF_=1!X#;5Ob%mG5IJuCaJwDo76)`|vEB>EnF{0CyOC4d(FLpJ>(ps7Aw z)TVE==|_O>I)?m7&~qUF!_N9?K^8#m&xii?pu=Rg{8C%~QlcND{SwftkI_Co<7+=g z{XI&4D*HSHI`uDQ|CRhy^(R5kJsgYO=ImeE4!i$pkPrGgCw-Tr|DX?nevgx$w#TYp z0(ueFhVz{C>+Sks(8ae>)9I1)vFHyShkgWfKh~mD?N2H?LZm&uK3l)}>Chkb7dh!S z+VrKMA4`6TqNkD{R`Pj1Y5xz{^7kC4{zIS-K);|<zqG9^fc*Ce=+npQ|8eN^vF20# zl>UDldWoVJI`wO^`$u_A-?On8#Sm+L-(=JGfIa~Fl}>t_O@9dV5zzVf!L|Kvu<1vR zL!VUiRQ@p^L5<{N$*}b+w&gDcedrkNmneG5@dusym#Y0eik_<dhd?L$rILRH^e)gZ zcj~{*)_+pfPbGgoaxkjD#97}Ff0u$z?WgjO643p~{gU-B2QtH;w<8CP(;s;9-7e6= zpn05ahi%;lK;Hv;s<uZIJ(ceW&>uqmRZjUWw){-wjYmLFraS4EtLTq9>!&@;0*LMh zJ&e4Tp4M5uo!;Xj2BO!4K8ZXxmHu6dPVY!q^($@t1{9svFpHk{ORN16(4Y7|@^B}8 zyIo&^egyPX@-wjr6FrrFxr&}jz901GQU4NW`!#m^^h<4%pkL^un>M`*^w*A2e*pCP zKS=G{BcPuTdMf<{=u1IQHNKh1(}|wv)GuV~mkat;pr?vGenn3;x9FGYNdCo6`HtA% zrRrbhq~Bt<KLGlTsGsYk*V^<EqGSJ(%KifMFzB_;`e|}<lYeGnQa%AX=Yu-7UTe$G zRrFNy{h%K~{Z#Xdeu=LH`<_&>sSETQK~EKX20#yko@)F?6rJAkvgXJ8ZT*F!`<?W( z^~}KiM^g0w<fn=sxu8D*dP!XUO;&wB=#!v-GLC+)MW<gL3}auH%6?s--wry|wDou7 zCIhN|nUkKj*^)m3`UA9obkg6)WR5>V(NpDane#D!u-|M!j$qj@y&;_>kjz}rZ^ynd zmH+xd-vfH8_(8w4NOWw^Z28yO`gI+LKA`AJo%J2@Z3OfOApdeF-Lduw&>sRlRs6}s zzVivtQ~6J>qNnmtKj=qL|A4dow8yORp<k8^|5q$_R~-Egi{1tL^Ptlnz_$O#to366 z^b+jHe;HT*=T`j@(9g&I`}1-1&scN;I(?@hm3=Z1xSjw#m3?wSKLUEHy@en2$z#-~ zU($RH^pZIJ?D^9L`cj++q?&&NpqGH2Dt8<K{YKDJjgJ6540@{gk%@i&?f;Q_Z$)am zZY?X}UGm&?`g3dPdaq12qfg0TEH*j^e^qB`yVoAWZ>C`o*3LgITk?SKm3<fojPsmf z2VdHkH5>Cqz&HQvvDmYKb0(d9x5e>20Qx@gttWX4ciQcy9g5>S2)^eZjm3(IZ-av` zeL4A<rQam@_I@K4`wH>3JNf)^eDq%0?N8trF-gCD4!&EpG-;Eoz;`Fk3+jk(*uj^! z)?y^v)q(G|1F={e@f~sUmB;bX{3ygZ=FP<Syo1j+3)^oW`1XMB{lquz;G^v>_g3on zJopZRZ<P2lZ*|zuW+eUSdx3kNj>R_9{Za>CeZ0J-;M)g2Znwz6XNzO~D#14iKJJI# z!AEPpL%-X>w-<Xd8kaeB4!*SKEJn%+K2Q1`!MP6lGiQ&3Fa2t3+`z`MoX(W`|2_3w zUWgz*4Eh;VLFWSMoP|)a^j??iF4xip-_9^@T=26DqvaeNH~*t+K5qZrH6Pd!*ZiZW z89#BI`SNK-XIjQT%r*Ws?Ht^Xr7idZ{$^F$IZw<r?oOYN`=`<uygJwTae8)7rZJg5 zANQY|v*2*1@z|Vm{yWq7(VY3X@5@L--Op!`%)yKg;O7NTdoX=up6lUxh}P(@)ag>! zyA5O?t1=#T8KoJ|xD3;O)Mfm_b@}JgT)k=MS)8Q*MXqx%J*&fITy-X1=G!t4cb|66 zd&cE@(1o#95{Yk_>!PJ+J?k>AKMQ^mTJUR^@zHs>yWcer$UnI*dOXebnKY|PEZyU} z#JB_X?{Lj~*=2m(^^VtE#`pMs%;hnRXxjNtrMbRf*Pu35yYd$9cTKpA*IgM8rbE>X z-2ZD@#&^<;eQ6mlq#2K;t;gI*%K>q3dR#wZuFQ9xbB$4WDdgaO;k!2)1qFOR-?+#y zE_(O-jP+Dbf2S*(PVVwEyvB7IA=mY`6x5q<ASt;dV~w$N8SyT1<rvo(#x)tY8CB<D zx_!!(GvabR;)<)2xiDjy@lM@VTz#~4LB>_ag%Fn57VQ463+6StRxkdj>jUpKj4!yd z9&;IoTp2IAT+g}|Y17mAoM()|j$^LOo-||Jg;n97)8-vXbA2uiX0!%K4*jWrPg&r& z78t(J%RJu2680)Mu3-KWiSJNwRKZ?V&-nlJaw)y(ZvoP!%Lfz6^tT6{boyI^bRlh) zm)pw_X(V6aN-sk`Pr#l2d*+A|d=)8pu7Wu|UcTe~3GT2R=SwwX^rw5d{C}^<n&_r| zjx6KIN?w_=e3~i_DLU_$fV)yL@|uNmj^e}PvA8Q;mwLT?hh>wmA$6mlhs;&@a}?}5 z%gc8f?^b2qk9Ng}Z8l%J{nul%KOJX!86Q(+tp^_IaDT5<bXohY|97lM>X+E^N;U2q z6}(=-Z3^yC@Gb@KSMZApeqF&s3O=XcOA5ZK;Au#x>3WBP7c00@!Ho)Dui!QXcPMz5 zg7+)<MFqdE;2{N{Q}87PUsaGBcl?9D6ndpQx2mSCG1BJt6y$mG@|P8~anbXUf`YvK z!b=s}P)zu<ym<Rz2mUT@sHu@?`FWmYp4GC>a);=ow=^&37{7}p63M^lFNNN&=7(D` zECNi%|2E*$@R#7di@mtB|5oQx+`Ewd=^yf^_UKxJ5Ahp|y|}~k5B?W_pAs;c{Of=x zejPvceADvv5Bn#|FI((IO<VqLxKAcO3_QsnU+l%*O#Sr_{U^%rU+g7zOaHyNPbPmi z@FZWy`$YZq5C131pIYoiO<O)aOG_sIGt9Nnpe>;D`l`aymdbe@RCwA#Ij<ipJZ%x3 z*M!C=@V}<;v~_Y`S=^C@25ljo*CK_dEtK;rRCwAlIj>C$Pg^ACb%Vmw*3)@~6`r<A z&g-KJPg^7B#pmXD8ckav=k*1}Pg_>!^{B$rmdJU1Tj6O7<h*_gJdL|v-xJ4O|A7Xs zj*4sWA%5=?FN-PSe=+81$;bWwlzg2xB+A!+upv=?Z-V^n6!Omlp7e1i<RkA=__73i zzQQNwFB^fUI8b)4?3dQ3obm54auU{ool1_*pOhJl-OT@XYu(rQRQl8Y)McD)<R<tb z)k`*y9tJ=CrTVUbmu{@<n=B{CNL;VJ%lLB*L#^w&!i&IDOia9r(h>4tcDO!6p( zF9V;9|4+a#G8P#6JukiPpN0g6<YZqV<=m#^TmXDBISq=xcctX#=Lx9uoWhSTmw27m zlpwF6cJ=#e*-HNVfv0x!*Gm38h5tP8*~WQB_B|4>(8j+5pG=>_N=~nmbFr$>ewviO zRoUleh5wksH!D5QQ}{{XNl*QLo7R)w>mogkRbJ-Q{dyGJLpSs^67>845-j2`+aUSr zJcF)pD|~iByH{W!7T`Z)tC#s;M!x75ph?cu8ZVb0m1yHR;7L#Yo}kXxUQqnT3dyf+ zbtf3~y%NFT-+*WPt8u(i5!axDgdg1`<y@lhPXV7y&VMU@L&?D|ov%&=5Rx;z%*$mu zx1;Oxz$cUQJI$}g@hZt~d~Cjy)4bHn7&<4U>wbmrRerlpqK)5Z{)@bf(QRcR@qZii zp+6Qw7oBs`wGepHbMPuJmt`C`jISwtz8ZHNzw)&ZHw$nYqyLPMLK};KCpqKF-?X3P zD|~;xms#mtk}j{pmnr#|OSJKv!Vj<aGG?K|S5t}u`BN1VukB2K(Mk7Fu`>9o;vX)T z{1+;s8;+ffKLk9<&sO^AdGV;imlaAmK_#aeE=&Bw3a|NJP<XHM!$QR$MWe)DcD0nF zb(mE6@#`f1^NRl~XDfX+O1zf81O_2Fy`>Vb`?UvnEmMhLFarD{;~eYnxmPRVAC;V` z5-EqD>wp%0JLIHg8+w1J*o}`9UKbqjA?AnOF7z@M;fSw;z>}W&O3$SVe<>Pb{a1S# zqx)5)@S|$JYy577->SyFM9C>UC%Hb`fhYN+s$W{?-zt2+!e6Z9&|lypez)>BJ>UPJ z@cGLA{9FljK8Ou7@n@@kX}e7-{MKu|ESb)^>G}wkG~(}2{?I1T#wF+=;rlQ5GUi!@ zU!m~BO1^IQUle{^;g=}>v#=p2IlZf-9F4zM;k^p4=i~n=d~<>1*LDuzhuule=t_yl zH00~g3O`jY@kI*X3B|ZyUWwOsI|B<M_e<GL$JKzs4;M-PQ6*;pcs)i6#o(zF_(Hdo zZ(QkRzW4LLcz;9T$Cdu5&evlKKdAak&pYU<S|sJ<E5Fk7=pgXP^!c&k*YB_Ec7LVt z<H`=&&#zr9<-66mYni`Q`22NVQp1?!e+}dDWz;U>=Mpbtw10jE14{NBze3{gQT)FK zp4LJAzB}BNuRj8>+fpb7??DHX;jaar<oB-eGT$my=_?BFu9SG~R~K9)`8)C@Ui;57 zh0ot4@t;(3rhre@?oxD+`a7!PhL-<c#;eK>PzyZUVZD^E{p~r0pSnikwf#4v?%UF^ zh`A*mMZT7xBCTJE`PCJ`C(|<wJhj`Q=8>Kk8M)H_TLWH}iy~hOaKrXgabAz_Zxnt| z>4|W`SLjm3pD-VPt?>QJz08Mh@|AU&<R4UitLN9P3SXxDQ2X->z%RglLH`xBY?qYt zN8o8)=;-k>qFSPjWmt$w|FQ&q{z>7Db&_BAHx~vces{6N^ZN&oH3@t&dtL=UUz`Si zQ*rMM@X}R5c(U_aFPF8Q9|4~7;lw=iX~jQPCi#EKwG1PYNBrj-)%QxgLK{1QPo~e) zz*D=UTO|KoszT`%65p%rf4agy1AH<$&ntef;zwBE>kkUwk>H>8`BMJY%e>5Yxf+*2 zg?FoQg!}PT=8^qM^xGSOr#PVhxQ!l{df=1kxrgytc(~+cxgVC|jfa8fao;HMeuZCK zAn}7fiH95T^|-<}C&b%JmMb}Gp4KY<2Z1L&^&cnF@#<m4Kd9vBcrvFjx&9X@JUzg7 zUe^Fm`sXi~cs*X9R`{)@60h~oULp0--%HZ^oCiF~(cc@|tQxsY;kPRP)a%P$jrU9W zSYG)$ccqjwUMTUpUtd@FK{dWwAEEHsN=})Q^H~IB(r0{?lykGfzohVGmGSbgFH&|; z@m%{rEAaYWiC}Pd3jF7koN;B(I#ubC)lz=8nlA?w{;R;#`0DR#%~kj(6n}^6*F6gV zMFcM5*S}hkqwrr-c>VpWOoe|Ec(#M`!zBv8Y>mX1ss8GC*a^H_@i@V~ia%S8qaK%n ztE8M}6}R81Djfoz?3VaFvlkWrxSB5|ihsv@lzldM8Kc+J5rsFD9ZpyLl~+st-g3#W z{o$~}536z4V^?{N)JOkmS0%=12cGORs^X01H)>lVp1dZ*Gy^puGZNTtn43zjUAMNx zG+Wzh%wki14=%5^x!EvpsECvlnP#Xd)EJ7ON^N_)xjo!e69}6-0xhP*CRCT--;?#@ zN&F4JWCZyYJf`57-VC<a2Ad<$ttK4w7&9<QP%CC|70kpepMhGQKLb@b6SHzAYSm0s z(G1i~rB=*rZ^g{steC0$Ocjb|iYi)}IFt>6P-8NCzc0`dZmPYBNpOeONE`mxYpqd- z?`v)kwMK$1W~9Na4dZK@tr+yWCOzhLk*1bbGtky<)HXFVhl7z|U0!~24s#ov!wj^v z1a_Li#z+gkD%uig2%2^LwNcY_l-P~pSWR<d`Px#S>D#iwG$DV}mMYWdS4jVca>Ly4 z{w-@ui`QEnzINlr3SXsJxprNN4>fMsvbiF%iv88&@f6eqT0^yFYlObeT3lNZ@p$OV zux6ws5Q?-G*ZL{~_{X=3Iu&RM`pP#~6q?>mCB^I3S67?M^9u6{JS4Lsvb-VCTnzX| zMf=Ls*GnrRh2dapYjMR2lUhZwIS^_o-i&g^D%0oltqe7`23sPe!+P$>8*eO7k*Wuk z75ZDQWT92c4OWLRK23FPwL#wwp7I5&&GH&pCm6)gkTzzZvCeD>V%i59YlAgquwaqJ z(%4iNG-2UjMZQ^H5ob4PG|%!lUc1wOiy?i!)n+MzP`EkL!fHd9XN74t25&I~VR&}{ zzKW(!Qscf21>9<7vGs*z3YOtWYWJ!s-<-O`aNT^f(gP2uSc_o~)&(K~9*fnOjSZp3 zKqR=s>5*hvxVSY6C*+h)@6!(IgURyEieNZc8}YP8ilGir@lFer&*L%Il9^2!{@O6} z`N%O62OG@gn=9FsmGddnZDIeP!LMgTYFnk8z}76oJhH~e;ql2mM9sjzt-bZq9U$c7 zhlo(Sue@TN3=R}RPL>H}pNg+V;H(QZnr*H4nm<RuS@gP<nDi<pwKaxrZsTB0Gv<cM z3dc;uILw}sMP`NB653uL;rU?c!83&eB~NS*){sbjOVcet)ya_ccQ(V9<M$rySgM1p z)t|RK<SY+1){z#-LIY+EGL=RXQNFg`i&c8<x?<Clw|v(9(*yr(Zj10(rwWIpq+WYH z`Qc!orICMn!U|uq7jHDjSno--?9b|K@D#!%wJkxcVA3kcY<R+MQNO&QL#JgDPdL!l zSX(b`aw1{5e6uqYY*s6PCm;Uo+qMl0TkE<N*vWW2@Fq%;XWMHE$V4>R;v$>b+|-Id zzlwqzg1iSCwz|3&B#%wo-mDa=tP&X;tt4h$Ym-@zEH4}+W9WrCUru^GGJ4@&ZJOH~ z+h{Y0!Icq0=h7#2O|RHs`aJn{L6zSj_E-4KGGH4>X{1AMWdeu+DK#4c?PhD}R+%_& z(O#$QR1qn#f~B23o7<XN%wP-h<rHaj`HUR8A`-kAvnEnt=T@~%jjiw(B!?=`eN(a+ zm{QJ#HyV33U@AG&Q)|QYW~imzZg$u7QaNbH3hJ}1Ag_tDzfOA!Ff-~}nwpQh3euE~ z+ibi!$$xE_RzkVR%;uQz(%079jPsP5rZyxmDfUMx0|Cc=3T!8TQ&DtNaHmNJAnZRC zk;WiJ93-jMNx(^oHE6<)k)cN92@N<cN?{OZgh8CDynYM3hn69nWbW`#LXB5;TU*V@ z&SpBf*w*CxdrA#yR`9l<p{X@OR;Cj&EWP1S4V_H|aLhu<i0q_Ukhi?hFzdotIQTFl zNG$l_HM2RyOY}({n`Y?+IzzJqungxXl9O5I3$`$8;NS9{1V<=dgXu66=NrdZS#f>= zU*omhxnJXhO*(7}2OGCX>JwJK)hZ#Gy)G8oX~|oWIp7QeSw1HvwE^kgH*A^BJh3P) zNwgBglNZnGR1!F=3l8O^;o!E24l#6QJ$pXr@dR&f!=s`We2;>Xb-A3)szxg)H3{NL zK-13SW+(C&DfRaB<gSLzydu0cj~G^P<g?EZ-`Z`HbN^O`XB<2=v6>}0yMHq_5BeY& z6XE11QF?8Iugu=8E1)1irwLo=!Ho4RWcK$3D{ASi>+e91xP8)_;be#r<rOPUWXwgp zfmY`ygg(YIpVZGWI8yR4Cr-`ULlG+{EXZ5I$w(MaEiq@3KE^BuVYz(bi9{0zZw<x# zbjb&)$5IE+Jn<BgpFuejZMBu(tWN7Nh<Gfl2GQ{V^KZ%ted`O7J;zv04@6<q06IWP z*z7K5_Tfti&%TRs^i)!l?}O@W483DIMke{@Y;NTlO<lMwF6HEWQ!ZF>BXlx%a19N! zKbKeGSqmjRytTGsE-&r+QOoRl%_^N2x3twB`>}v^WTB5+JsuntB9Nc>K{&jkvRMDX zH9w!mn+G$(24dHYh*66fhiFi?xz-sAAg}S3h6D`k`{u+@dMN?{l&8F@VwRlsCx7K$ z;aC&oG}3GNY%b+|fD~@J<!?Jc!syyF0}t!p$QjEP{q$s|d?<r(tWUXlXz0b6#KT`X zW+yG7Tg}@{nogMXYiZGyCw)k|<ZB8ivK0B`nIStM&SWY}*Xx&$=-G>HKKqD@_5(KF zdI@Ic<gl3D@?(x;WrCI0$GsRadrIO6&w8W}3vDvv-Yh`^06Qn!wc}hS#W7(;sdS2R z`PNB_`fp0mqSZfz7IGHMo?TU5g2{lHs1I@Lg8{tcR|JdWK_Z@p()(WEIO$0X4is_J ziK!$XWF;NYH)lX(dW29=+tjA=X88^unol?|F2Lb&Yv}lA#wUOEvBzrm{Dq%q(zcO8 znRblXQwQ%L#yu0S$4iQ)eC3B9j33i!>76s{wCRmL%fx#WNPDoXERTDak@rF5EREao z+DSNUS}*3YW5++Ar?p7F*m)w0k#$z?;|KKg9;it#1j?rba>~x$$h^VB^NM1qk2iOu z+9xm=ar+$W!Sd|&-#R|i$C=48os;`c9v=;~1o`!`8IQPTgnK)>NS{oxAezM|bXH+I zYYnZ2m^bUN{MOKL>x~SfPh=ukb9nYfdnGoQcr=QT0JGUg02CzoomWiF8a#63=XdBc z(kk`$gyeBWsHv6rp@qfx0tF&VoHLV+taRE#uiN=Uk##%eey?0--g4rc{6$E=d7i>O zkPu^R^*iY&UmcIfx$&`Hcs+Rs#jDhF0p3+eqra6i+kRlxP_~)!vdZh#pTr_hdectY z<hGUr2!e8w7bwl`_>K==S!iu)41`0Go#u}G86gIllg=phYXkV+1ih8UUv4;&scs#l zq4LRhu0lL}uhUOJDvNDHtJ%9jz4?}G(!V(?`^;}Iob)7IM(32fDe3aF7ik^QHSU1b zK8TUaSBm{s1-?8Xd+0H7ls)Ucp@YBp_c@RIo`H3gp^sQjc;S@2Kl$^>`AA2vSF5m& zZNXQ)?00O<s>WL|-^}u0Yg<FmOJC?)PTw2jxK`^+wk*!(shjO^vo{%ZfZ`mpvce8f zvuPM?+Y^2I4W8H>ch^RTdGg$*@_IcB;3)Xwnlr6B`Hro>Ye1(XGVGklqGsjBGBDvB zX0v>>x4ogMQN8mu>yauh!?isA@8}VV^P6U5NSqNO>!vS(G`F<`%^jhZ2;MT8k)&8% zdCSjT6H`~cQG7Fw1f(aeX0JhZGJBnje__;`CMk9gfAi)NyGm<&iAS%rc+6_|DSvBl zJT$^k#O?KxKNOk0;i50j$?s1Yd96De@ZEaANQ;E^`VNO|!Iowt4}SnSn1}Cp<Tc|p zZhQfFrvp{f77Eub3)LwUzInBbeno)U@%M)7jl8;@jc7u`NQ<PXpV5sgn4sbH)&Nyd zcg^95k;gwPkcT%PaL+Hv=Hctf^o7{GV7>a{czqq}>Jo(3*2ev6fRrJ>Q!Zubdy+$q zLL@5~Xb9D!eiNF)KY84~Yzy0ZBM)yx(+kP^M-~1CNWUvVKk1UDWaOlK`7S42BF<NM z4T#ry(eGQ(Z)oWHMXEmi?j>Dr{@4CT|4xR+;O9i*>Q}4!)vCV!eIU(0N8cz|oKRo? ze(~)o+E1+i0o2dHN9*6O+V5BO$5cD|cS5xOTF(1Ge-*#2t?TRG6K_`x`1uXK66-6p z5x~tE_~`oj_r`}*eZSI!+I8Wh+t<HC5(17`bbTY!ixMuysDH0qBBcy{Pmq46g?=ks z*Vn%fe&v~xYoi1_Ms%zBH2er~^xNaQ+;OIt*o+QUzn@D|9nw?luh2#hZm6rezW%*) zxB6kFcEy-zKi&UNs`~2`pZ@*yK2=};-a6Gk7a!feuK!u!$gZd1!<XBupalANS7b@* zs_zLtfRD4jTh({FiHhH2A)@2TR`(h{h_bW3vDhm)7E2H=kWl}t>*?~BapSD7e-ANS zDLK?IXm+->Rlv>H@S*x?8oAXg@3u<NMMTG??Wa+X<HlKE|Bh}~KyrljL{SwIipIAR z>Q4u~%sCyD6$-5%h>_*Q_J0Vpvwi)0*h`h;bXgsf^%L9w1<>RwYMNQUGdzB~<S&xI z`d7EF;qO4fuT)v}_3s+z?2=V9pBA9Y8vX?Y(qFgl?(s6KTh$-plKqd{zU8~qQJH*K z*Vn&SJf`Z??<CWu+tX0{(b=f)Y+rob%lzV_4DcIe@t3ZzVNODQ>vxemR6P>zxO6=Y z7bVue$1Az-kRVn2TI40DPqK9Xt>2GR^+`YH<#iTtzZ7(0$xpy%tNPa^;I%j>OmH!- zQLpL`zC#M2-{GR)eA4~a@n;@zT6f7Q|IO)>(B*YvrLIoQ0u++ff9IIwTA>wHl@f}^ F{{w>QSoZ(` literal 0 HcmV?d00001 diff --git a/cpp_module_02/ASpell.cpp b/cpp_module_02/ASpell.cpp new file mode 100644 index 0000000..2cb07c0 --- /dev/null +++ b/cpp_module_02/ASpell.cpp @@ -0,0 +1,5 @@ +#include "ASpell.hpp" + +void ASpell::launch(ATarget const & atarget) const { + atarget.getHitBySpell(*this); +}; diff --git a/cpp_module_02/ASpell.hpp b/cpp_module_02/ASpell.hpp new file mode 100644 index 0000000..be0a66c --- /dev/null +++ b/cpp_module_02/ASpell.hpp @@ -0,0 +1,45 @@ +#ifndef ASPELL_HPP +# define ASPELL_HPP + +# include <iostream> +# include <string> + +class ATarget; + +class ASpell { + private: + std::string name; + std::string effects; + + public: + ASpell() { + }; + ASpell(ASpell const & other) { + *this = other; + }; + ASpell & operator=(ASpell const & other) { + this->name = other.name; + this->effects = other.effects; + return (*this); + }; + ASpell(std::string const & name, std::string const & effects) { + this->name = name; + this->effects = effects; + }; + virtual ~ASpell() { + }; + + std::string const & getName() const { + return (this->name); + }; + std::string const & getEffects() const { + return (this->effects); + }; + void launch(ATarget const & atarget) const; + + virtual ASpell * clone() const = 0; +}; + +#include "ATarget.hpp" + +#endif diff --git a/cpp_module_02/ATarget.cpp b/cpp_module_02/ATarget.cpp new file mode 100644 index 0000000..3685615 --- /dev/null +++ b/cpp_module_02/ATarget.cpp @@ -0,0 +1,5 @@ +#include "ATarget.hpp" + +void ATarget::getHitBySpell(ASpell const & aspell) const { + std::cout << this->type << " has been " << aspell.getEffects() << "!\n"; +}; diff --git a/cpp_module_02/ATarget.hpp b/cpp_module_02/ATarget.hpp new file mode 100644 index 0000000..4a31b0c --- /dev/null +++ b/cpp_module_02/ATarget.hpp @@ -0,0 +1,40 @@ +#ifndef ATARGET_HPP +# define ATARGET_HPP + +# include <iostream> +# include <string> + +class ASpell; + +class ATarget { + private: + + std::string type; + + public: + ATarget() { + }; + ATarget(std::string const & type) { + this->type = type; + }; + ATarget(ATarget const & other) { + *this = other; + }; + ATarget & operator=(ATarget const & other) { + this->type = other.type; + return (*this); + }; + virtual ~ATarget() {}; + + std::string const & getType() const { + return (this->type); + }; + + void getHitBySpell(ASpell const & aspell) const; + + virtual ATarget * clone() const = 0; +}; + +#include "ASpell.hpp" + +#endif diff --git a/cpp_module_02/BrickWall.cpp b/cpp_module_02/BrickWall.cpp new file mode 100644 index 0000000..2ce84b3 --- /dev/null +++ b/cpp_module_02/BrickWall.cpp @@ -0,0 +1,2 @@ +#include "BrickWall.hpp" + diff --git a/cpp_module_02/BrickWall.hpp b/cpp_module_02/BrickWall.hpp new file mode 100644 index 0000000..01afd84 --- /dev/null +++ b/cpp_module_02/BrickWall.hpp @@ -0,0 +1,16 @@ +#ifndef BRICKWALL_HPP +# define BRICKWALL_HPP + +# include "ATarget.hpp" + +class BrickWall: public ATarget { + public: + BrickWall(): ATarget("Inconspicuous Red-brick Wall") {}; + ~BrickWall() {}; + + virtual ATarget * clone() const { + return (new BrickWall()); + }; +}; + +#endif diff --git a/cpp_module_02/Dummy.cpp b/cpp_module_02/Dummy.cpp new file mode 100644 index 0000000..6eb8744 --- /dev/null +++ b/cpp_module_02/Dummy.cpp @@ -0,0 +1,2 @@ +#include "Dummy.hpp" + diff --git a/cpp_module_02/Dummy.hpp b/cpp_module_02/Dummy.hpp new file mode 100644 index 0000000..9d4167f --- /dev/null +++ b/cpp_module_02/Dummy.hpp @@ -0,0 +1,16 @@ +#ifndef DUMMY_HPP +# define DUMMY_HPP + +# include "ATarget.hpp" + +class Dummy: public ATarget { + public: + Dummy(): ATarget("Target Practice Dummy") {}; + ~Dummy() {}; + + virtual ATarget * clone() const { + return (new Dummy()); + }; +}; + +#endif diff --git a/cpp_module_02/Fireball.cpp b/cpp_module_02/Fireball.cpp new file mode 100644 index 0000000..fc1a0ed --- /dev/null +++ b/cpp_module_02/Fireball.cpp @@ -0,0 +1,2 @@ +#include "Fireball.hpp" + diff --git a/cpp_module_02/Fireball.hpp b/cpp_module_02/Fireball.hpp new file mode 100644 index 0000000..c961156 --- /dev/null +++ b/cpp_module_02/Fireball.hpp @@ -0,0 +1,16 @@ +#ifndef FIREBALL_HPP +#define FIREBALL_HPP + +# include "ASpell.hpp" + +class Fireball: public ASpell { + public: + Fireball(): ASpell("Fireball", "burnt to a crisp") {}; + ~Fireball() {}; + + virtual ASpell * clone() const { + return (new Fireball()); + }; +}; + +#endif diff --git a/cpp_module_02/Fwoosh.cpp b/cpp_module_02/Fwoosh.cpp new file mode 100644 index 0000000..06e9776 --- /dev/null +++ b/cpp_module_02/Fwoosh.cpp @@ -0,0 +1,2 @@ +#include "Fwoosh.hpp" + diff --git a/cpp_module_02/Fwoosh.hpp b/cpp_module_02/Fwoosh.hpp new file mode 100644 index 0000000..d49fbbc --- /dev/null +++ b/cpp_module_02/Fwoosh.hpp @@ -0,0 +1,16 @@ +#ifndef FWOOSH_HPP +#define FWOOSH_HPP + +# include "ASpell.hpp" + +class Fwoosh: public ASpell { + public: + Fwoosh(): ASpell("Fwoosh", "fwooshed") {}; + ~Fwoosh() {}; + + virtual ASpell * clone() const { + return (new Fwoosh()); + }; +}; + +#endif diff --git a/cpp_module_02/Polymorph.cpp b/cpp_module_02/Polymorph.cpp new file mode 100644 index 0000000..ac17197 --- /dev/null +++ b/cpp_module_02/Polymorph.cpp @@ -0,0 +1,2 @@ +#include "Polymorph.hpp" + diff --git a/cpp_module_02/Polymorph.hpp b/cpp_module_02/Polymorph.hpp new file mode 100644 index 0000000..1f104ce --- /dev/null +++ b/cpp_module_02/Polymorph.hpp @@ -0,0 +1,16 @@ +#ifndef POLYMORPH_HPP +#define POLYMORPH_HPP + +# include "ASpell.hpp" + +class Polymorph: public ASpell { + public: + Polymorph(): ASpell("Polymorph", "turned into a critter") {}; + ~Polymorph() {}; + + virtual ASpell * clone() const { + return (new Polymorph()); + }; +}; + +#endif diff --git a/cpp_module_02/SpellBook.cpp b/cpp_module_02/SpellBook.cpp new file mode 100644 index 0000000..bc6fd84 --- /dev/null +++ b/cpp_module_02/SpellBook.cpp @@ -0,0 +1,2 @@ +#include "Warlock.hpp" + diff --git a/cpp_module_02/SpellBook.hpp b/cpp_module_02/SpellBook.hpp new file mode 100644 index 0000000..e6c964c --- /dev/null +++ b/cpp_module_02/SpellBook.hpp @@ -0,0 +1,50 @@ +#ifndef SPELLBOOK_HPP +#define SPELLBOOK_HPP + +# include <iostream> +# include <string> +# include "ASpell.hpp" +# include <map> + +class SpellBook { + private: + SpellBook(SpellBook const & other); + SpellBook & operator=(SpellBook const & other); + + std::map<std::string, ASpell *> arr; + + public: + SpellBook() {}; + ~SpellBook() { + std::map<std::string, ASpell *>::iterator it_begin = this->arr.begin(); + std::map<std::string, ASpell *>::iterator it_end = this->arr.end(); + while (it_begin != it_end) { + delete it_begin->second; + ++it_begin; + } + this->arr.clear(); + }; + + void learnSpell(ASpell *aspell) { + if (aspell) + arr.insert(std::pair<std::string, ASpell *>( + aspell->getName(), + aspell->clone() + )); + }; + void forgetSpell(std::string & name) { + std::map<std::string, ASpell *>::iterator it = arr.find(name); + if (it == arr.end()) + return; + delete it->second; + arr.erase(name); + }; + ASpell * createSpell(std::string & name) { + std::map<std::string, ASpell *>::iterator it = arr.find(name); + if (it == arr.end()) + return NULL; + return arr[name]; + }; +}; + +#endif diff --git a/cpp_module_02/TargetGenerator.cpp b/cpp_module_02/TargetGenerator.cpp new file mode 100644 index 0000000..7ae789b --- /dev/null +++ b/cpp_module_02/TargetGenerator.cpp @@ -0,0 +1,2 @@ +#include "TargetGenerator.hpp" + diff --git a/cpp_module_02/TargetGenerator.hpp b/cpp_module_02/TargetGenerator.hpp new file mode 100644 index 0000000..c1e12d0 --- /dev/null +++ b/cpp_module_02/TargetGenerator.hpp @@ -0,0 +1,50 @@ +#ifndef TARGETGENERATOR_HPP +#define TARGETGENERATOR_HPP + +# include <iostream> +# include <string> +# include "ATarget.hpp" +# include <map> + +class TargetGenerator { + private: + TargetGenerator(TargetGenerator const & other); + TargetGenerator & operator=(TargetGenerator const & other); + + std::map<std::string, ATarget *> arr; + + public: + TargetGenerator() { + }; + ~TargetGenerator() { + std::map<std::string, ATarget *>::iterator it_begin = this->arr.begin(); + std::map<std::string, ATarget *>::iterator it_end = this->arr.end(); + while (it_begin != it_end) { + delete it_begin->second; + ++it_begin; + } + this->arr.clear(); + }; + + void learnTargetType(ATarget * atarget) { + if (atarget) + arr.insert(std::pair<std::string, ATarget *>( + atarget->getType(), + atarget->clone() + )); + }; + void forgetTargetType(std::string const & name) { + std::map<std::string, ATarget *>::iterator it = arr.find(name); + if (it != arr.end()) + delete it->second; + arr.erase(name); + }; + ATarget * createTarget(std::string const & name) { + std::map<std::string, ATarget *>::iterator it = arr.find(name); + if (it != arr.end()) + return arr[name]; + return NULL; + }; +}; + +#endif diff --git a/cpp_module_02/Warlock.cpp b/cpp_module_02/Warlock.cpp new file mode 100644 index 0000000..7faf59b --- /dev/null +++ b/cpp_module_02/Warlock.cpp @@ -0,0 +1,2 @@ +#include "SpellBook.hpp" + diff --git a/cpp_module_02/Warlock.hpp b/cpp_module_02/Warlock.hpp new file mode 100644 index 0000000..0a40262 --- /dev/null +++ b/cpp_module_02/Warlock.hpp @@ -0,0 +1,71 @@ +#ifndef WARLOCK_HPP +# define WARLOCK_HPP + +# include <iostream> +# include <string> +# include "ASpell.hpp" +# include "ATarget.hpp" +# include "SpellBook.hpp" + +class Warlock { + private: + Warlock(); + Warlock(Warlock const & other); + Warlock & operator=(Warlock const & other); + + std::string name; + std::string title; + SpellBook book; + + public: + Warlock(std::string const & name, std::string const & title) + { + this->name = name; + this->title = title; + std::cout << this->name << ": This looks like another boring day.\n"; + }; + ~Warlock() + { + std::cout << this->name << ": My job here is done!\n"; + }; + + std::string const & getName() const + { + return (this->name); + }; + std::string const & getTitle() const + { + return (this->title); + }; + + void setTitle(std::string const & title) + { + this->title = title; + }; + + void introduce() const + { + std::cout << this->name << ": I am " << this->name << ", " << this->title << "!\n"; + }; + + void learnSpell(ASpell *aspell) + { + book.learnSpell(aspell); + }; + void forgetSpell(std::string name) + { + book.forgetSpell(name); + }; + void launchSpell(std::string name, ATarget const & atarget) + { + //ATarget const * test = 0; + //if (test == & atarget) + // return; + + ASpell * spell = book.createSpell(name); + if (spell) + spell->launch(atarget); + }; +}; + +#endif diff --git a/cpp_module_02/a.out b/cpp_module_02/a.out new file mode 100755 index 0000000000000000000000000000000000000000..fd928af5547dde06bf37d94d0d1dad76b0d3c10d GIT binary patch literal 87864 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 awjuGV%2n8DcuALkPm$!DpOhgfsr`Q%52^3~ literal 0 HcmV?d00001 diff --git a/cpp_module_02/main.cpp b/cpp_module_02/main.cpp new file mode 100644 index 0000000..a492eae --- /dev/null +++ b/cpp_module_02/main.cpp @@ -0,0 +1,30 @@ +#include "Warlock.hpp" +#include "Fwoosh.hpp" +#include "Dummy.hpp" +#include "BrickWall.hpp" +#include "Polymorph.hpp" +#include "TargetGenerator.hpp" +#include "Fireball.hpp" + +int main() +{ + Warlock richard("Richard", "foo"); + richard.setTitle("Hello, I'm Richard the Warlock!"); + BrickWall model1; + + Polymorph* polymorph = new Polymorph(); + TargetGenerator tarGen; + + tarGen.learnTargetType(&model1); + richard.learnSpell(polymorph); + + Fireball* fireball = new Fireball(); + + richard.learnSpell(fireball); + + ATarget* wall = tarGen.createTarget("Inconspicuous Red-brick Wall"); + + richard.introduce(); + richard.launchSpell("Polymorph", *wall); + richard.launchSpell("Fireball", *wall); +} diff --git a/cpp_module_02/subject.en.txt b/cpp_module_02/subject.en.txt new file mode 100644 index 0000000..8ab660d --- /dev/null +++ b/cpp_module_02/subject.en.txt @@ -0,0 +1,86 @@ +Assignment name : cpp_module_02 +Expected files : Warlock.cpp Warlock.hpp + ASpell.hpp ASpell.cpp + ATarget.hpp ATarget.cpp + Fwoosh.hpp Fwoosh.cpp + Dummy.hpp Dummy.cpp + Fireball.hpp Fireball.cpp + Polymorph.hpp Polymorph.cpp + BrickWall.hpp BrickWall.cpp + SpellBook.hpp SpellBook.cpp + TargetGenerator.hpp TargetGenerator.cpp +-------------------------------------------------------------------------------- + +In the Warlock, SpellBook and TargetGenerator classes, the switch statement is +FORBIDDEN and its use would result in a -42. + +Create the following two spells, on the same model as Fwoosh: + +* Fireball (Name: "Fireball", Effects: "burnt to a crisp") +* Polymorph (Name: "Polymorph", Effects: "turned into a critter") + +In addition to this, just so he won't have only dummy to attack, let's make a +new target for him, which will be the BrickWall (Type: "Inconspicuous Red-brick Wall"). + +Now, make a SpellBook class, in canonical form, that can't be copied or instantiated +by copy. It will have the following functions: + +* void learnSpell(ASpell*), that COPIES a spell in the book +* void forgetSpell(string const &), that deletes a spell from the book, except + if it isn't there +* ASpell* createSpell(string const &), that receives a string corresponding to + the name of a spell, creates it, and returns it. + +Modify the Warlock, now, make it have a spell book that will be created with +him and destroyed with him. Also make his learnSpell and forgetSpell functions +call those of the spell book. + +The launchSpell function will have to use the SpellBook to create the spell +it's attempting to launch. + +Make a TargetGenerator class, in canonical form, and as before, +non-copyable. + +It will have the following functions: + +* void learnTargetType(ATarget*), teaches a target to the generator + +* void forgetTargetType(string const &), that makes the generator forget a + target type if it's known + +* ATarget* createTarget(string const &), that creates a target of the + specified type + +Phew, that's done. Now here's a test main. It's not very thorough, so make sure +to use your own aswell. + +int main() +{ + Warlock richard("Richard", "foo"); + richard.setTitle("Hello, I'm Richard the Warlock!"); + BrickWall model1; + + Polymorph* polymorph = new Polymorph(); + TargetGenerator tarGen; + + tarGen.learnTargetType(&model1); + richard.learnSpell(polymorph); + + Fireball* fireball = new Fireball(); + + richard.learnSpell(fireball); + + ATarget* wall = tarGen.createTarget("Inconspicuous Red-brick Wall"); + + richard.introduce(); + richard.launchSpell("Polymorph", *wall); + richard.launchSpell("Fireball", *wall); +} + +~$ ./a.out | cat -e +Richard: This looks like another boring day.$ +Richard: I am Richard, Hello, I'm Richard the Warlock!!$ +Inconspicuous Red-brick Wall has been turned into a critter!$ +Inconspicuous Red-brick Wall has been burnt to a crisp!$ +Richard: My job here is done!$ +~$