From 4946eb3b8cedbc088c101c3b6280aaca9a2383df Mon Sep 17 00:00:00 2001 From: Hugo LAMY Date: Mon, 28 Feb 2022 17:56:20 +0100 Subject: [PATCH] d05 ex01 form ok --- d05/ex00/bureaucrat | Bin 24744 -> 24744 bytes d05/ex00/headers/Bureaucrat.hpp | 14 ++--- d05/ex00/srcs/Bureaucrat.cpp | 4 +- d05/ex01/Makefile | 73 ++++++++++++++++++++++++ d05/ex01/headers/Bureaucrat.hpp | 47 +++++++++++++++ d05/ex01/headers/Form.hpp | 46 +++++++++++++++ d05/ex01/headers/color.h | 25 ++++++++ d05/ex01/larves | Bin 0 -> 30848 bytes d05/ex01/main.cpp | 66 +++++++++++++++++++++ d05/ex01/srcs/Bureaucrat.cpp | 98 ++++++++++++++++++++++++++++++++ d05/ex01/srcs/Form.cpp | 90 +++++++++++++++++++++++++++++ 11 files changed, 452 insertions(+), 11 deletions(-) create mode 100644 d05/ex01/Makefile create mode 100644 d05/ex01/headers/Bureaucrat.hpp create mode 100644 d05/ex01/headers/Form.hpp create mode 100644 d05/ex01/headers/color.h create mode 100755 d05/ex01/larves create mode 100644 d05/ex01/main.cpp create mode 100644 d05/ex01/srcs/Bureaucrat.cpp create mode 100644 d05/ex01/srcs/Form.cpp diff --git a/d05/ex00/bureaucrat b/d05/ex00/bureaucrat index 7a8a4e82e043beac0035820abe4d39e3247e497e..64ea8f4766e0779634f392db68633b1fd8ee3148 100755 GIT binary patch delta 1008 zcmYk5O-vI(6vt<_)NUhaAta<}Lzjez;DLTXt1-kD%4ad`v3%(^kx*kW3(?qvMC-xy zfJ8E$j3&ik!p)lXpz&avc);iZZyKYP1eJnHF$sNr$hn&mB7NpO z3Mya%RKYx$0kbATvY-fE1f6<+p7W=ATmf+yS2rW`VT;WMxY6FA&#d>s8qvaN3AW&CqFEMdbC~C#^X$FvRC5uL4{*N~av(@T zhio^6uBrnjRjjm#p~?d`;zZUXtleBk_Gd5s>Ugt4PR)JT2d z{1?V66gJ?m_bOjGPwFyt{Qp*j$lgwjw0lSszi}Sd}_Wqm9;{rg;JUAbX~D4C|+)|A!=}k z$#9)rUvarz-W^@i9)|;z4zfabE5$?W*~UY%_6|{+)`t5YQR>#L0~U(s!)hXD@UEsK oy>vx;7CBsv@K3w^O&f?0)LA5Y?Qq;1?kx;4nB0 z#=#7j0%r}3r9m^aIU_{5o(HFOUlu;p<7=oFFlJvDVpL)*0#-w(zy$Ov7=fPtf%S9^ zW+c|mqCbUTSYQ=YK=UslRPZ>+V2pwa7}xV)3hdGs&Ql8V^d-Mb8PI zqL}B%(UoN(j61up0PFD^r%6vG-uj})$^X!n=j;J9w)h;!S`effuY)I0Dl?W~j|z== zoj9h6T%1Adq9w#}+D24J_Br_`o$@&)wnptf2g)Nz&C*0J&LED`5+WubCP?`zXsqSE*^r6UP4iyzz8PnSx#CC_j2@%tMee?*^lh($ diff --git a/d05/ex00/headers/Bureaucrat.hpp b/d05/ex00/headers/Bureaucrat.hpp index 40359b4..5db8c17 100644 --- a/d05/ex00/headers/Bureaucrat.hpp +++ b/d05/ex00/headers/Bureaucrat.hpp @@ -15,15 +15,6 @@ public: ~Bureaucrat(); Bureaucrat & operator=( Bureaucrat const & rhs ); - class GradeTooHighException : public std::exception { - public: - const char * what() const throw(); - }; - class GradeTooLowException : public std::exception { - public: - const char * what() const throw(); - }; - std::string getName() const; int getGrade() const; @@ -38,6 +29,11 @@ protected: 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); diff --git a/d05/ex00/srcs/Bureaucrat.cpp b/d05/ex00/srcs/Bureaucrat.cpp index 8d683d8..75fe978 100644 --- a/d05/ex00/srcs/Bureaucrat.cpp +++ b/d05/ex00/srcs/Bureaucrat.cpp @@ -80,8 +80,8 @@ void Bureaucrat::gradeDown() { *********************************************/ const char * Bureaucrat::GradeTooHighException::what() const throw() { - return ("grade higher than 1"); + return (B_RED "grade higher than 1" RESET); } const char * Bureaucrat::GradeTooLowException::what() const throw() { - return ("grade lower than 150"); + return (B_RED "grade lower than 150" RESET); } diff --git a/d05/ex01/Makefile b/d05/ex01/Makefile new file mode 100644 index 0000000..cb65767 --- /dev/null +++ b/d05/ex01/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/ex01/headers/Bureaucrat.hpp b/d05/ex01/headers/Bureaucrat.hpp new file mode 100644 index 0000000..01d4e9f --- /dev/null +++ b/d05/ex01/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/ex01/headers/Form.hpp b/d05/ex01/headers/Form.hpp new file mode 100644 index 0000000..9aa97e6 --- /dev/null +++ b/d05/ex01/headers/Form.hpp @@ -0,0 +1,46 @@ +#ifndef FORM_HPP +# define FORM_HPP + +# include "color.h" +# include +# include + +class Bureaucrat; +# include "Bureaucrat.hpp" + +class Form { + +public: + + Form( std::string name, int signedGrade, int executeGrade ); + Form( Form const & src ); + ~Form(); + Form & operator=( Form const & rhs ); + + std::string getName() const; + bool getSigned() const; + int getSignedGrade() const; + int getExecuteGrade() const; + + void beSigned( Bureaucrat const & b ); + +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/ex01/headers/color.h b/d05/ex01/headers/color.h new file mode 100644 index 0000000..f40596b --- /dev/null +++ b/d05/ex01/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/ex01/larves b/d05/ex01/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/ex01/main.cpp b/d05/ex01/main.cpp new file mode 100644 index 0000000..2747ad5 --- /dev/null +++ b/d05/ex01/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/ex01/srcs/Bureaucrat.cpp b/d05/ex01/srcs/Bureaucrat.cpp new file mode 100644 index 0000000..8332551 --- /dev/null +++ b/d05/ex01/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/ex01/srcs/Form.cpp b/d05/ex01/srcs/Form.cpp new file mode 100644 index 0000000..e29a7f8 --- /dev/null +++ b/d05/ex01/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); +}