/* ************************************************************************** */ /* */ /* ::: :::::::: */ /* Bureaucrat.cpp :+: :+: :+: */ /* +:+ +:+ +:+ */ /* By: narnaud +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2022/06/24 13:06:55 by narnaud #+# #+# */ /* Updated: 2022/06/27 15:03:06 by narnaud ### ########.fr */ /* */ /* ************************************************************************** */ #include "Bureaucrat.hpp" Bureaucrat::Bureaucrat(void) { } Bureaucrat::Bureaucrat(const string name, int grade) throw(Bureaucrat::GradeTooHighException, Bureaucrat::GradeTooLowException) : _name(name) { if (grade < 1) throw Bureaucrat::GradeTooHighException(); if (grade > 150) throw Bureaucrat::GradeTooLowException(); _grade = grade; } Bureaucrat::Bureaucrat(Bureaucrat const &src) { (void)src; } Bureaucrat &Bureaucrat::operator=(Bureaucrat const &src) { (void)src; return (*this); } Bureaucrat::~Bureaucrat(void) { } const string Bureaucrat::getName(void) const { return (_name); } int Bureaucrat::getGrade(void) const { return (_grade); } void Bureaucrat::incrGrade(int diff) throw(Bureaucrat::GradeTooHighException) { int new_grade = _grade - diff; if (new_grade < 1) throw Bureaucrat::GradeTooHighException(); _grade = new_grade; } void Bureaucrat::decrGrade(int diff) throw(Bureaucrat::GradeTooLowException) { int new_grade = _grade + diff; if (new_grade > 150) throw Bureaucrat::GradeTooLowException(); _grade = new_grade; } const char *Bureaucrat::GradeTooHighException::what(void) const throw() { return ("Grade was too high for a bureaucrat"); } const char *Bureaucrat::GradeTooLowException::what(void) const throw() { return ("Grade was too low for a bureaucrat"); } void Bureaucrat::signForm(Form &form) const { try { if (!form.beSigned(*this)) cout << _name << " succesfully signed " << form.getName() << endl; else cout << _name << " failed to sign " << form.getName() << ": form is already signed." << endl; } catch (std::exception &e) { cout << _name << " failed to sign " << form.getName() << ": " << e.what() << endl; } } void Bureaucrat::executeForm(const Form &form) const { try { if (!form.execute(*this)) cout << _name << " succesfully executed " << form.getName() << endl; else cout << _name << " failed to execute " << form.getName() << ": form is not signed" << endl; } catch (std::exception &e) { cout << _name << " failed to execute " << form.getName() << ": " << e.what() << endl; } } std::ostream &operator<<(std::ostream &out, Bureaucrat const &b) { out << b.getName() << ", bureaucrat grade " << b.getGrade() << endl; return (out); }