104 lines
2.8 KiB
C++
104 lines
2.8 KiB
C++
#include "AForm.hpp"
|
|
#define COPLIEN_COLOR B_CYAN
|
|
|
|
/*********************************************
|
|
* CONSTRUCTORS
|
|
*********************************************/
|
|
|
|
AForm::AForm( std::string name, std::string target, int signedGrade, int executeGrade )
|
|
: _name(name)
|
|
, _target(target)
|
|
, _signed(false)
|
|
, _signedGrade(signedGrade)
|
|
, _executeGrade(executeGrade) {
|
|
if (signedGrade > 150 || executeGrade > 150)
|
|
throw AForm::GradeTooLowException();
|
|
if (signedGrade < 1 || executeGrade < 1)
|
|
throw AForm::GradeTooHighException();
|
|
std::cout << COPLIEN_COLOR "AForm constructor" RESET "\n";
|
|
return;
|
|
}
|
|
|
|
AForm::AForm( AForm const & src )
|
|
: _name(src.getName())
|
|
, _signedGrade(src.getSignedGrade())
|
|
, _executeGrade(src.getExecuteGrade()) {
|
|
std::cout << COPLIEN_COLOR "AForm copy constructor" RESET "\n";
|
|
*this = src;
|
|
return;
|
|
}
|
|
|
|
/*********************************************
|
|
* DESTRUCTORS
|
|
*********************************************/
|
|
|
|
AForm::~AForm() {
|
|
std::cout << COPLIEN_COLOR "AForm destructor" RESET "\n";
|
|
return;
|
|
}
|
|
|
|
/*********************************************
|
|
* OPERATORS
|
|
*********************************************/
|
|
|
|
AForm & AForm::operator=( AForm const & rhs ) {
|
|
if ( this != &rhs ) {
|
|
_signed = rhs.getSigned();
|
|
}
|
|
return *this;
|
|
}
|
|
|
|
std::ostream & operator<<(std::ostream & o, AForm const & rhs)
|
|
{
|
|
o << "[form name]"
|
|
<< rhs.getName() << ", [target]"
|
|
<< rhs.getTarget() << ", [signed]"
|
|
<< rhs.getSigned() << ", [sign grade]"
|
|
<< rhs.getSignedGrade() << ", [exec grade]"
|
|
<< rhs.getExecuteGrade();
|
|
return (o);
|
|
}
|
|
|
|
/*********************************************
|
|
* ACCESSORS
|
|
*********************************************/
|
|
|
|
std::string AForm::getName() const {return _name;}
|
|
std::string AForm::getTarget() const {return _target;}
|
|
bool AForm::getSigned() const {return _signed;}
|
|
int AForm::getSignedGrade() const {return _signedGrade;}
|
|
int AForm::getExecuteGrade() const {return _executeGrade;}
|
|
|
|
/*********************************************
|
|
* PUBLIC MEMBER FUNCTIONS
|
|
*********************************************/
|
|
|
|
void AForm::beSigned( Bureaucrat const & b) {
|
|
if (b.getGrade() < _signedGrade)
|
|
_signed = true;
|
|
else
|
|
throw AForm::GradeTooLowException();
|
|
}
|
|
|
|
void AForm::execute(Bureaucrat const & executor) const {
|
|
if (!_signed)
|
|
throw NotSignedException();
|
|
if (executor.getGrade() > _executeGrade)
|
|
throw GradeTooLowException();
|
|
formAction();
|
|
}
|
|
|
|
/*********************************************
|
|
* NESTED CLASS
|
|
*********************************************/
|
|
|
|
const char * AForm::GradeTooHighException::what() const throw() {
|
|
return (B_RED "grade too high" RESET);
|
|
}
|
|
const char * AForm::GradeTooLowException::what() const throw() {
|
|
return (B_RED "grade too low" RESET);
|
|
}
|
|
const char * AForm::NotSignedException::what() const throw() {
|
|
return (B_RED "form is not signed" RESET);
|
|
}
|