/* ************************************************************************** */ /* */ /* ::: :::::::: */ /* Form.cpp :+: :+: :+: */ /* +:+ +:+ +:+ */ /* By: narnaud +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2022/06/26 16:12:05 by narnaud #+# #+# */ /* Updated: 2022/06/27 14:56:54 by narnaud ### ########.fr */ /* */ /* ************************************************************************** */ #include "Form.hpp" /* Defaults */ Form & Form::operator=(Form const &f) { (void)f; return (*this); } Form::Form(Form const &f) : _name(f.getName()), _signGrade(f.getSignGrade()), _exeGrade(f.getExeGrade()) { (void)f; } Form::~Form(void) { } /* Custom constructor */ Form::Form(const string name, const int signGrade, const int exeGrade, const string target) throw (Form::GradeTooHighException, Form::GradeTooLowException) : _name(name), _signGrade(signGrade), _exeGrade(exeGrade), _target(target){ if (signGrade < 1 || exeGrade < 1) throw Form::GradeTooHighException(); if (signGrade > 150 || exeGrade > 150) throw Form::GradeTooLowException(); _isSigned = 0; } /* Getters */ const string Form::getName(void) const { return (_name); } int Form::getSignGrade(void) const { return (_signGrade); } int Form::getExeGrade(void) const { return (_exeGrade); } /* Setters */ int Form::beSigned(const Bureaucrat &signer) throw (Form::GradeTooLowException) { if (_isSigned) return (-1); if (signer.getGrade() > _signGrade) throw GradeTooLowException(); _isSigned = 1; return (0); } int Form::execute(Bureaucrat const &executor) const throw (GradeTooLowException) { if (executor.getGrade() > _exeGrade) throw Form::GradeTooLowException(); if (!_isSigned) return (-1); this->run(); return (0); } /* Except */ const char *Form::GradeTooHighException::what(void) const throw (){ return ("grade is too high for a form"); } const char *Form::GradeTooLowException::what(void) const throw (){ return ("grade is too low for a form"); } std::ostream &operator<<(std::ostream &out, const Form &f) { out << f.getName() << "(s:" << f.getSignGrade() << "|e:" << f.getExeGrade() << ")"; return (out); };