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