/* ************************************************************************** */ /* */ /* ::: :::::::: */ /* Bureaucrat.cpp :+: :+: :+: */ /* +:+ +:+ +:+ */ /* By: mmoussou void _log(std::string emoji, std::string what, std::string who, std::string str) { #ifdef VERBOSE if (who.empty()) std::cout << "「" << emoji << "」" << what << ": " << str << std::endl; else std::cout << "「" << emoji << "」" << what << "(" << who << "): " << str << std::endl; #else (void)emoji, (void)what, (void)who, (void)str; #endif } Bureaucrat::Bureaucrat(void) : _name("kanel"), _grade(69) { _log("➕", "Bureaucrat", "", "default constructor called"); } Bureaucrat::Bureaucrat(const Bureaucrat &cpy) { _log("➕", "Bureaucrat", "", "copy constructor called"); if (&cpy != this) { _name = cpy.getName(); _grade = cpy.getGrade(); } } Bureaucrat::Bureaucrat(std::string name, uint8_t grade) : _name(name), _grade(grade) { _log("➕", "Bureaucrat", "", "constructor called"); } const std::string &Bureaucrat::getName(void) const { return _name; } uint8_t Bureaucrat::getGrade(void) const { return _grade; } Bureaucrat::~Bureaucrat(void) { _log("➖", "Bureaucrat", "", "destructor called"); } Bureaucrat &Bureaucrat::operator=(Bureaucrat const &cpy) { if (&cpy == this) return *this; _grade = cpy._grade; return *this; } void Bureaucrat::IncrementGrade(void) { if (_grade - 1 < MAXGRADE) throw GradeTooHighException(); _grade--; } void Bureaucrat::DecrementGrade(void) { if (_grade + 1 > MINGRADE) throw GradeTooLowException(); _grade++; } std::ostream &operator<<(std::ostream &os, Bureaucrat &val) { os << val.getName() << ", bureaucrat grade " << (int)val.getGrade(); return os; } const char *Bureaucrat::GradeTooHighException::what() const throw() { return ("Grade is too high"); } const char *Bureaucrat::GradeTooLowException::what() const throw() { return ("Grade is too low"); }