/* ************************************************************************** */ /* */ /* ::: :::::::: */ /* AForm.cpp :+: :+: :+: */ /* +:+ +:+ +:+ */ /* By: adjoly +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/03/09 17:38:19 by adjoly #+# #+# */ /* Updated: 2025/04/03 14:33:17 by adjoly ### ########.fr */ /* */ /* ************************************************************************** */ #include "AForm.hpp" #include "Bureaucrat.hpp" AForm::AForm(void) : _name(""), _signed(false), _minForSign(1), _minForExec(1) { _log("➕", "AForm", "", "default constructor called"); } AForm::AForm(std::string name, uint8_t minForSign, uint8_t minForExec) : _name(name), _signed(false), _minForSign(minForSign), _minForExec(minForExec) { _log("➕", "AForm", "", "constructor called"); _gradeCheck(); } AForm::AForm(const AForm &f) : _name(f.getName()), _signed(f.getSigned()), _minForSign(f.getMinForSign()), _minForExec(f.getMinForExec()) { _log("➕", "AForm", "", "copy constructor called"); _gradeCheck(); } AForm::~AForm(void) { _log("➖", "AForm", "", "destructor called"); } AForm &AForm::operator=(const AForm &f) { if (this == &f) return *this; _name = f.getName(); _signed = f.getSigned(); return *this; } const char *AForm::GradeTooHighException::what() const throw() { return ("grade is too high"); } const char *AForm::GradeTooLowException::what() const throw() { return ("grade is too low"); } const char *AForm::NotSigned::what() const throw() { return ("not yet signed"); } std::string AForm::getName(void) const { return _name; } bool AForm::getSigned(void) const { return _signed; } uint8_t AForm::getMinForSign(void) const { return _minForSign; } uint8_t AForm::getMinForExec(void) const { return _minForExec; } void AForm::beSigned(Bureaucrat b) { if (_minForSign < b.getGrade()) { throw GradeTooLowException(); } _signed = true; } void AForm::execute(const Bureaucrat &b) const { if (_signed == false) { throw NotSigned(); } if (b.getGrade() > _minForExec) { throw GradeTooLowException(); } _exec(b); } void AForm::_gradeCheck(void) const { if (_minForExec < MAXGRADE || _minForSign < MAXGRADE) throw GradeTooHighException(); if (_minForExec > MINGRADE || _minForExec > MINGRADE) throw GradeTooLowException(); } std::ostream &operator<<(std::ostream &os, AForm &val) { os << "AForm: " << val.getName() << ", minGrade to sign: " << val.getMinForSign() << ", min grade to execute: " << val.getMinForExec() << std::endl; return (os); }