/* ************************************************************************** */ /* */ /* ::: :::::::: */ /* Bureaucrat.cpp :+: :+: :+: */ /* +:+ +:+ +:+ */ /* By: narnaud +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2022/06/24 13:06:55 by narnaud #+# #+# */ /* Updated: 2022/06/27 09:13:57 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); } /* Setters */ void Bureaucrat::incrGrade(int diff) throw(Bureaucrat::GradeTooHighException) { int new_grade = _grade - diff; if (new_grade < 1) throw Bureaucrat::GradeTooHighException(); _grade = new_grade; cout << _name << " grade increased." << endl; } void Bureaucrat::decrGrade(int diff) throw(Bureaucrat::GradeTooLowException) { int new_grade = _grade + diff; if (new_grade > 150) throw Bureaucrat::GradeTooLowException(); _grade = new_grade; cout << _name << " grade decreased." << endl; } /* Exceptions */ const char *Bureaucrat::GradeTooHighException::what(void) const throw() { return ("error: grade is too high for a bureaucrat"); } const char *Bureaucrat::GradeTooLowException::what(void) const throw() { return ("error: grade is too low for a bureaucrat"); } /* Externs */ 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\tbureaucrat grade is too low." << endl; } } /* Stream */ std::ostream &operator<<(std::ostream &out, Bureaucrat const &b) { out << b.getName() << "(" << b.getGrade() << ")"; return (out); }