aboutsummaryrefslogtreecommitdiff
path: root/cpp05/ex03/Intern.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'cpp05/ex03/Intern.cpp')
-rw-r--r--cpp05/ex03/Intern.cpp27
1 files changed, 23 insertions, 4 deletions
diff --git a/cpp05/ex03/Intern.cpp b/cpp05/ex03/Intern.cpp
index bb3e188..3328957 100644
--- a/cpp05/ex03/Intern.cpp
+++ b/cpp05/ex03/Intern.cpp
@@ -6,18 +6,37 @@
/* By: cacharle <me@cacharle.xyz> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2020/11/17 13:41:09 by cacharle #+# #+# */
-/* Updated: 2020/11/17 13:48:01 by cacharle ### ########.fr */
+/* Updated: 2020/11/17 18:08:56 by charles ### ########.fr */
/* */
/* ************************************************************************** */
#include "Intern.hpp"
Intern::Intern() {}
-Intern::Intern(const Intern& other) {}
-Intern& Intern::operator=(const Intern& other) {}
+Intern::Intern(const Intern& other) { (void)other; }
+Intern& Intern::operator=(const Intern& other) { (void)other; return *this; }
Intern::~Intern() {}
-Form *Intern::makeForm(std::string const& name, std::string const& target)
+Form *Intern::makeShrubberyCreationForm(std::string const& target)
+ { return new ShrubberyCreationForm(target); }
+
+Form *Intern::makePresidentialPardonForm(std::string const& target)
+ { return new PresidentialPardonForm(target); }
+
+Form *Intern::makeRobotomyRequestForm(std::string const& target)
+ { return new RobotomyRequestForm(target); }
+
+Intern::makeFormEntry Intern::makeFormDispatch[] =
{
+ {"shrubbery creation", &Intern::makeShrubberyCreationForm},
+ {"presidential pardon", &Intern::makePresidentialPardonForm},
+ {"robotomy request", &Intern::makeRobotomyRequestForm},
+};
+Form *Intern::makeForm(std::string const& name, std::string const& target)
+{
+ for (size_t i = 0; i < sizeof(Intern::makeFormDispatch) / sizeof(Intern::makeFormEntry); i++)
+ if ((this->makeFormDispatch[i]).name == name)
+ return (this->*(makeFormDispatch[i].func))(target);
+ return NULL;
}