You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
93 lines
2.7 KiB
93 lines
2.7 KiB
3 years ago
|
/* ************************************************************************** */
|
||
|
/* */
|
||
|
/* ::: :::::::: */
|
||
|
/* Form.cpp :+: :+: :+: */
|
||
|
/* +:+ +:+ +:+ */
|
||
|
/* By: narnaud <narnaud@student.42.fr> +#+ +:+ +#+ */
|
||
|
/* +#+#+#+#+#+ +#+ */
|
||
|
/* Created: 2022/06/26 16:12:05 by narnaud #+# #+# */
|
||
|
/* Updated: 2022/06/27 14:56:54 by narnaud ### ########.fr */
|
||
|
/* */
|
||
|
/* ************************************************************************** */
|
||
|
|
||
|
#include "Form.hpp"
|
||
|
|
||
|
std::ostream &operator<< (std::ostream &out, const Form &f) {
|
||
|
out << "Form: " << f.getName() << " - Required grade to sign: " << f.getSignGrade() << " - Required grade to execute: " << f.getExeGrade() << endl;
|
||
|
return (out);
|
||
|
};
|
||
|
|
||
|
/* Defaults */
|
||
|
|
||
|
Form & Form::operator=(Form const &f) {
|
||
|
(void)f;
|
||
|
cout << "Form assignement called" << endl;
|
||
|
return (*this);
|
||
|
}
|
||
|
|
||
|
Form::Form(Form const &f)
|
||
|
: _name(f.getName()), _signGrade(f.getSignGrade()), _exeGrade(f.getExeGrade())
|
||
|
{
|
||
|
(void)f;
|
||
|
cout << "Form copy called" << endl;
|
||
|
}
|
||
|
|
||
|
Form::~Form(void) {
|
||
|
cout << "Form destructor called" << endl;
|
||
|
}
|
||
|
|
||
|
/* 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();
|
||
|
}
|
||
|
|
||
|
/* Getters */
|
||
|
|
||
|
const string Form::getName(void) const {
|
||
|
return (_name);
|
||
|
}
|
||
|
|
||
|
int Form::getSignGrade(void) const {
|
||
|
return (_signGrade);
|
||
|
}
|
||
|
|
||
|
int Form::getExeGrade(void) const {
|
||
|
return (_exeGrade);
|
||
|
}
|
||
|
|
||
|
/* Seter */
|
||
|
|
||
|
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 was too high for a form");
|
||
|
}
|
||
|
|
||
|
const char *Form::GradeTooLowException::what(void) const throw (){
|
||
|
return ("Grade was too low for a form");
|
||
|
}
|