From 130b228a2f66152b29dbe84e954d59a8cf08c1bd Mon Sep 17 00:00:00 2001 From: Hugo LAMY Date: Mon, 28 Feb 2022 20:37:24 +0100 Subject: [PATCH] commit before leaving school, what did i do ? i don't know --- d05/ex02/Makefile | 73 +++++++++++++++ d05/ex02/headers/Bureaucrat.hpp | 47 ++++++++++ d05/ex02/headers/Form.hpp | 46 ++++++++++ d05/ex02/headers/ShrubberyCreationForm.hpp | 34 +++++++ d05/ex02/headers/color.h | 25 ++++++ d05/ex02/larves | Bin 0 -> 30848 bytes d05/ex02/main.cpp | 66 ++++++++++++++ d05/ex02/srcs/Bureaucrat.cpp | 98 +++++++++++++++++++++ d05/ex02/srcs/Form.cpp | 90 +++++++++++++++++++ d05/ex02/srcs/ShrubberyCreationForm.cpp | 73 +++++++++++++++ 10 files changed, 552 insertions(+) create mode 100644 d05/ex02/Makefile create mode 100644 d05/ex02/headers/Bureaucrat.hpp create mode 100644 d05/ex02/headers/Form.hpp create mode 100644 d05/ex02/headers/ShrubberyCreationForm.hpp create mode 100644 d05/ex02/headers/color.h create mode 100755 d05/ex02/larves create mode 100644 d05/ex02/main.cpp create mode 100644 d05/ex02/srcs/Bureaucrat.cpp create mode 100644 d05/ex02/srcs/Form.cpp create mode 100644 d05/ex02/srcs/ShrubberyCreationForm.cpp diff --git a/d05/ex02/Makefile b/d05/ex02/Makefile new file mode 100644 index 0000000..cb65767 --- /dev/null +++ b/d05/ex02/Makefile @@ -0,0 +1,73 @@ +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # +# . name = value \ . += append to a variable # +# VARIABLES . value . != set result of command # +# . name is case sensitive . ?= set if not already set # +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # + +NAME = larves + +#CC = gcc +CXX = c++ + +#CFLAGS = -Wall -Wextra -Werror $(INCLUDES) +CXXFLAGS = -Wall -Wextra -Werror $(INCLUDES) -std=c++98 + +#EXT = c +EXT = cpp + +VPATH = $(D_SRCS) + +LIBS = + +INCLUDES = -I$(D_HEADERS) + +D_SRCS = srcs +SRCS = main.cpp \ + Bureaucrat.cpp \ + Form.cpp + +D_HEADERS = headers +HEADERS = Bureaucrat.hpp \ + Form.hpp + +D_OBJS = builds +OBJS = $(SRCS:%.$(EXT)=$(D_OBJS)/%.o) + +ifeq "$(D_OBJS)" "." + RM_OBJS = rm -f $(OBJS) +else + RM_OBJS = rm -rf $(D_OBJS) +endif + + +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # +# . target: prerequisites . $@ : target # +# RULES . recipe . $< : 1st prerequisite # +# . recipe . $^ : all prerequisites # +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # + +all: $(NAME) + +$(D_OBJS)/%.o: %.$(EXT) | $(D_OBJS) +# $(CC) $(CFLAGS) -c $< -o $@ + $(CXX) $(CXXFLAGS) -c $< -o $@ + +$(D_OBJS): + mkdir $@ + +$(OBJS): $(HEADERS:%=$(D_HEADERS)/%) + +$(NAME): $(OBJS) +# $(CC) $(OBJS) -o $@ $(LIBS) + $(CXX) $(OBJS) -o $@ $(LIBS) + +clean: + $(RM_OBJS) + +fclean: clean + rm -f $(NAME) + +re: fclean all + +.PHONY : all clean fclean re + diff --git a/d05/ex02/headers/Bureaucrat.hpp b/d05/ex02/headers/Bureaucrat.hpp new file mode 100644 index 0000000..01d4e9f --- /dev/null +++ b/d05/ex02/headers/Bureaucrat.hpp @@ -0,0 +1,47 @@ +#ifndef BUREAUCRAT_HPP +# define BUREAUCRAT_HPP + +# include "color.h" +# include +# include +# include + +class Form; +# include "Form.hpp" + +class Bureaucrat { + +public: + + Bureaucrat(std::string name, int grade); + Bureaucrat( Bureaucrat const & src ); + ~Bureaucrat(); + Bureaucrat & operator=( Bureaucrat const & rhs ); + + std::string getName() const; + int getGrade() const; + + void gradeUp(); + void gradeDown(); + + void signForm( Form & f ); + +protected: + + std::string const _name; + int _grade; + +private: + + Bureaucrat(); + + class GradeTooHighException : public std::exception { + const char * what() const throw();}; + class GradeTooLowException : public std::exception { + const char * what() const throw();}; +}; + +std::ostream & operator<<(std::ostream & o, Bureaucrat const & rhs); + +#endif + diff --git a/d05/ex02/headers/Form.hpp b/d05/ex02/headers/Form.hpp new file mode 100644 index 0000000..ea436b2 --- /dev/null +++ b/d05/ex02/headers/Form.hpp @@ -0,0 +1,46 @@ +#ifndef AFORM_HPP +# define AFORM_HPP + +# include "color.h" +# include +# include + +class Bureaucrat; +# include "Bureaucrat.hpp" + +class AForm { + +public: + + Form( std::string name, int signedGrade, int executeGrade ); + Form( Form const & src ); + virtual ~Form() = 0; + Form & operator=( Form const & rhs ); + + std::string getName() const; + bool getSigned() const; + int getSignedGrade() const; + int getExecuteGrade() const; + + virtual void beSigned( Bureaucrat const & b ) = 0; + +private: + + Form(); + + class GradeTooHighException : public std::exception { + const char * what() const throw();}; + class GradeTooLowException : public std::exception { + const char * what() const throw();}; + + std::string const _name; + bool _signed; + int const _signedGrade; + int const _executeGrade; + +}; + +std::ostream & operator<<(std::ostream & o, Form const & rhs); + +#endif + diff --git a/d05/ex02/headers/ShrubberyCreationForm.hpp b/d05/ex02/headers/ShrubberyCreationForm.hpp new file mode 100644 index 0000000..c4d1ab8 --- /dev/null +++ b/d05/ex02/headers/ShrubberyCreationForm.hpp @@ -0,0 +1,34 @@ +#ifndef SHRUBBERYCREATIONFORM_HPP +# define SHRUBBERYCREATIONFORM_HPP + +# include "color.h" +# include +# include + +# include "AForm.hpp" + +class ShrubberyCreationForm : public AForm { + +public: + + ShrubberyCreationForm(); + ShrubberyCreationForm( ShrubberyCreationForm const & src ); + ~ShrubberyCreationForm(); + ShrubberyCreationForm & operator=( ShrubberyCreationForm const & rhs ); + +// std::string getFoo() const; + +protected: + +// std::string const _foo; + +private: + +// static std::string const ShrubberyCreationForm::_bar; + +}; + +//std::ostream & operator<<(std::ostream & o, ShrubberyCreationForm const & rhs); + +#endif + diff --git a/d05/ex02/headers/color.h b/d05/ex02/headers/color.h new file mode 100644 index 0000000..f40596b --- /dev/null +++ b/d05/ex02/headers/color.h @@ -0,0 +1,25 @@ +#ifndef COLOR_H +# define COLOR_H + +# define GRAY "\e[0;30m" +# define RED "\e[0;31m" +# define GREEN "\e[0;32m" +# define YELLOW "\e[0;33m" +# define BLUE "\e[0;34m" +# define PURPLE "\e[0;35m" +# define CYAN "\e[0;36m" +# define WHITE "\e[0;37m" + +# define B_GRAY "\e[1;30m" +# define B_RED "\e[1;31m" +# define B_GREEN "\e[1;32m" +# define B_YELLOW "\e[1;33m" +# define B_BLUE "\e[1;34m" +# define B_PURPLE "\e[1;35m" +# define B_CYAN "\e[1;36m" +# define B_WHITE "\e[1;37m" + +# define RESET "\e[0m" + +#endif + diff --git a/d05/ex02/larves b/d05/ex02/larves new file mode 100755 index 0000000000000000000000000000000000000000..922ce6347ece6106cec31ea6a5fb77f6a3c4791c GIT binary patch literal 30848 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 literal 0 HcmV?d00001 diff --git a/d05/ex02/main.cpp b/d05/ex02/main.cpp new file mode 100644 index 0000000..2747ad5 --- /dev/null +++ b/d05/ex02/main.cpp @@ -0,0 +1,66 @@ +#include "Bureaucrat.hpp" +#define N_TEST "5" + +int main() { + + std::cout << B_YELLOW "\n[1/" N_TEST "] test too high :" RESET "\n"; + { + try { + Bureaucrat b("clarence", 151); + } + catch (std::exception& e) { + std::cout << e.what() << "\n"; + } + } + + std::cout << B_YELLOW "\n[2/" N_TEST "] test signe ko :" RESET "\n"; + { + { + Bureaucrat b("mikel", 50); + Form f("serpa_hell", 30, 100); + + 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 << B_YELLOW "\n[3/" N_TEST "] test signe ok :" RESET "\n"; + { + { + Bureaucrat b("coran", 50); + Form f("serpa_death", 70, 100); + + 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 << B_YELLOW "\n[4/" N_TEST "] test form too high :" RESET "\n"; + { + try { + Form f("serpa_horror", 155, 100); + } + catch (std::exception& e) { + std::cout << e.what() << "\n"; + } + } + + std::cout << B_YELLOW "\n[5/" N_TEST "] test form too low :" RESET "\n"; + { + try { + Form f("serpa_starvation", 70, 0); + } + catch (std::exception& e) { + std::cout << e.what() << "\n"; + } + } + + std::cout << "\n"; + return 0; +} diff --git a/d05/ex02/srcs/Bureaucrat.cpp b/d05/ex02/srcs/Bureaucrat.cpp new file mode 100644 index 0000000..8332551 --- /dev/null +++ b/d05/ex02/srcs/Bureaucrat.cpp @@ -0,0 +1,98 @@ +#include "Bureaucrat.hpp" + +#define COPLIEN_COLOR B_CYAN + +/********************************************* + * CONSTRUCTORS + *********************************************/ + +Bureaucrat::Bureaucrat( std::string name, int grade ) +: _name(name) +, _grade(grade) { + if (grade > 150) + throw GradeTooLowException(); + if (grade < 1) + throw GradeTooHighException(); + std::cout << COPLIEN_COLOR "Bureaucrat constructor" RESET "\n"; + return; +} + +Bureaucrat::Bureaucrat( Bureaucrat const & src ) { + std::cout << COPLIEN_COLOR "Bureaucrat copy constructor" RESET "\n"; + *this = src; + return; +} + +/********************************************* + * DESTRUCTORS + *********************************************/ + +Bureaucrat::~Bureaucrat() { + std::cout << COPLIEN_COLOR "Bureaucrat destructor" RESET "\n"; + return; +} + +/********************************************* + * OPERATORS + *********************************************/ + +Bureaucrat & Bureaucrat::operator=( Bureaucrat const & rhs ) { + if ( this != &rhs ) + _grade = rhs.getGrade(); + return *this; +} + +std::ostream & operator<<(std::ostream & o, Bureaucrat const & rhs) +{ + o + << rhs.getName() << ", bureaucrat grade " + << rhs.getGrade(); + return (o); +} + +/********************************************* + * ACCESSORS + *********************************************/ + +std::string Bureaucrat::getName() const {return _name;} +int Bureaucrat::getGrade() const {return _grade;} + +/********************************************* + * PUBLIC MEMBER FUNCTIONS + *********************************************/ + +void Bureaucrat::gradeUp() { + if (_grade > 1) + _grade--; + else + throw GradeTooHighException(); +} + +void Bureaucrat::gradeDown() { + if (_grade < 150) + _grade++; + else + throw GradeTooLowException(); +} + +void Bureaucrat::signForm( Form & f) { + try { + f.beSigned( *this ); + std::cout << _name << " signed " << f.getName() << "\n"; + } + catch (std::exception & e) { + std::cout << _name << " couldn't sign " << f.getName() + << " because [" << e.what() << "]\n"; + } +} + +/********************************************* + * NESTED CLASS + *********************************************/ + +const char * Bureaucrat::GradeTooHighException::what() const throw() { + return (B_RED "grade higher than 1" RESET); +} +const char * Bureaucrat::GradeTooLowException::what() const throw() { + return (B_RED "grade lower than 150" RESET); +} diff --git a/d05/ex02/srcs/Form.cpp b/d05/ex02/srcs/Form.cpp new file mode 100644 index 0000000..e29a7f8 --- /dev/null +++ b/d05/ex02/srcs/Form.cpp @@ -0,0 +1,90 @@ +#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 new file mode 100644 index 0000000..82fd33e --- /dev/null +++ b/d05/ex02/srcs/ShrubberyCreationForm.cpp @@ -0,0 +1,73 @@ +#include "ShrubberyCreationForm.hpp" + +#define COPLIEN_COLOR B_CYAN + +/********************************************* + * CONSTRUCTORS + *********************************************/ + +ShrubberyCreationForm::ShrubberyCreationForm( std::string foo = ShrubberyCreationForm::_bar ) +: _foo(foo) { + std::cout << COPLIEN_COLOR "ShrubberyCreationForm constructor" RESET "\n"; + return; +} + +ShrubberyCreationForm::ShrubberyCreationForm( ShrubberyCreationForm const & src ) { + std::cout << COPLIEN_COLOR "ShrubberyCreationForm copy constructor" RESET "\n"; + *this = src; + return; +} + +/********************************************* + * DESTRUCTORS + *********************************************/ + +ShrubberyCreationForm::~ShrubberyCreationForm() { + std::cout << COPLIEN_COLOR "ShrubberyCreationForm destructor" RESET "\n"; + return; +} + +/********************************************* + * OPERATORS + *********************************************/ + +ShrubberyCreationForm & ShrubberyCreationForm::operator=( ShrubberyCreationForm const & rhs ) { +// Base::operator=(rhs); + if ( this != &rhs ) + { +// _foo = rhs.getFoo(); + } + 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) {} + +/********************************************* + * NESTED CLASS + *********************************************/ + +//void ShrubberyCreationForm::Class::function() {} + +/********************************************* + * STATICS + *********************************************/ + +//std::string const ShrubberyCreationForm::_bar = "bar"; + +