/* ************************************************************************** */ /* */ /* ::: :::::::: */ /* 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" /* Constructors */ 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; } /* copy const. */ Bureaucrat::Bureaucrat(Bureaucrat const &src) { (void)src; } /* assign const. */ Bureaucrat &Bureaucrat::operator=(Bureaucrat const &src) { (void)src; return (*this); } /* destructor */ Bureaucrat::~Bureaucrat(void) { } /* Getters */ const string Bureaucrat::getName(void) const { return (_name); } int Bureaucrat::getGrade(void) const { return (_grade); } /* Exception */ const char *Bureaucrat::GradeTooHighException::what(void) const throw() { return ("grade is too high for a bureaucrat"); } const char *Bureaucrat::GradeTooLowException::what(void) const throw() { return ("grade is too low for a bureaucrat"); } /* Methods */ 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; } void Bureaucrat::signForm(Form &form) const { cout << *this << " sign " << form << ":"; try { if (!form.beSigned(*this)) cout << " success." << endl; else cout << "error.\n\tform is already signed." << endl; } catch (std::exception &e) { cout << "error.\n\t" << e.what() << endl; } } void Bureaucrat::executeForm(const Form &form) const { cout << *this << " execute " << form << ":"; try { if (!form.execute(*this)) cout << " success." << endl; else cout << *this << " execute " << form.getName() << "error.\n\tform is not signed" << endl; } catch (std::exception &e) { cout << "error.\n\t" << e.what() << endl; } } /* Stream */ std::ostream &operator<<(std::ostream &out, Bureaucrat const &b) { out << b.getName() << "(" << b.getGrade() << ")"; return (out); }