diff --git a/.gitignore b/.gitignore index 325429b..b4d5a4c 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,4 @@ .vscode/settings.json Bureaucrat *.o - +.cache diff --git a/common.mk b/common.mk index 6b13ef1..59b4c71 100644 --- a/common.mk +++ b/common.mk @@ -12,13 +12,16 @@ INC = -I./inc VPATH = src -# SRC = $(wildcard *.cpp) +SRC = $(notdir $(wildcard src/*.cpp)) OBJ = $(SRC:.cpp=.o) CC = c++ CFLAGS = -Wall -Wextra -Werror -std=c++11 all: $(NAME) +run: all + ./$(NAME) + $(NAME): $(OBJ) $(CC) $(CFLAGS) $(OBJ) -o $(NAME) @@ -33,4 +36,4 @@ fclean: clean re: fclean all -.PHONY: all clean fclean re +.PHONY: all clean fclean re run diff --git a/ex00/Makefile b/ex00/Makefile index 1bd9e2f..0d10af0 100644 --- a/ex00/Makefile +++ b/ex00/Makefile @@ -1,4 +1,5 @@ NAME = Bureaucrat -SRC = main.cpp Bureaucrat.cpp + +# SRC = main.cpp Bureaucrat.cpp -include ../common.mk diff --git a/ex00/compile_commands.json b/ex00/compile_commands.json new file mode 100644 index 0000000..144eef2 --- /dev/null +++ b/ex00/compile_commands.json @@ -0,0 +1,19 @@ +[ + { + "arguments": [ + "/usr/bin/c++", + "-Wall", + "-Wextra", + "-Werror", + "-std=c++11", + "-I./inc", + "-c", + "-o", + "main.o", + "src/main.cpp" + ], + "directory": "/home/willem/projects/CPP05/ex00", + "file": "/home/willem/projects/CPP05/ex00/src/main.cpp", + "output": "/home/willem/projects/CPP05/ex00/main.o" + } +] diff --git a/ex00/inc/Bureaucrat.hpp b/ex00/inc/Bureaucrat.hpp index 9e4c7f5..63e61f0 100644 --- a/ex00/inc/Bureaucrat.hpp +++ b/ex00/inc/Bureaucrat.hpp @@ -1,43 +1,45 @@ #pragma once -#include #include #include +#include #define HIGHEST_GRADE 1 #define LOWEST_GRADE 150 -class Bureaucrat +class Bureaucrat { -private: - const std::string _name; - int _grade; + private: + const std::string _name; + int _grade; -public: - Bureaucrat() = delete; - Bureaucrat(std::string name, int grade); - Bureaucrat(Bureaucrat &other); - ~Bureaucrat(); - - Bureaucrat &operator=(Bureaucrat &other) = delete; - - Bureaucrat &operator++(); // Pre-increment - Bureaucrat operator++(int); // Post-increment - Bureaucrat &operator--(); // Pre-decrement - Bureaucrat operator--(int); // Post-decrement - Bureaucrat &operator+=(int value); - Bureaucrat &operator-=(int value); + public: + Bureaucrat() = delete; + Bureaucrat(std::string name, int grade); + Bureaucrat(Bureaucrat &other); + ~Bureaucrat(); - int getGrade() const; - const std::string getName() const; + Bureaucrat &operator=(Bureaucrat &other) = delete; - class GradeTooHighException: public std::exception { - const char * what() const throw(); - }; + Bureaucrat &operator++(); // Pre-increment + Bureaucrat operator++(int); // Post-increment + Bureaucrat &operator--(); // Pre-decrement + Bureaucrat operator--(int); // Post-decrement - class GradeTooLowException: public std::exception { - const char *what() const throw(); - }; + int getGrade() const; + const std::string getName() const; + + class GradeTooHighException : public std::exception + { + public: + const char *what() const throw(); + }; + + class GradeTooLowException : public std::exception + { + public: + const char *what() const throw(); + }; }; std::ostream &operator<<(std::ostream &os, const Bureaucrat &bureaucrat); \ No newline at end of file diff --git a/ex00/inc/colors.h b/ex00/inc/colors.h new file mode 100644 index 0000000..461f384 --- /dev/null +++ b/ex00/inc/colors.h @@ -0,0 +1,554 @@ +#ifndef COLORS_H +#define COLORS_H + +#define RESET "\033[m" + +#define BOLD_UNDERLINE "\033[1;4m" +#define BOLD_UNDERLINE_OFF "\033[22;24m" + +#define BOLD "\033[1m" +#define UNDERLINE "\033[4m" +#define ITALIC "\033[3m" +#define BLINK "\033[5m" +#define INVERSE "\033[7m" +#define STRIKETHROUGH "\033[9m" + +#define BOLD_OFF "\033[22m" +#define UNDERLINE_OFF "\033[24m" +#define ITALIC_OFF "\033[23m" +#define BLINK_OFF "\033[25m" +#define INVERSE_OFF "\033[27m" +#define STRIKETHROUGH_OFF "\033[29m" + +#define REVERSE "\033[7m" + +#define BLACK "\033[30m" +#define RED "\033[31m" +#define GREEN "\033[32m" +#define YELLOW "\033[33m" +#define BLUE "\033[34m" +#define MAGENTA "\033[35m" +#define CYAN "\033[36m" +#define WHITE "\033[37m" + +#define COLOR0 "\033[38;5;0m" +#define COLOR1 "\033[38;5;1m" +#define COLOR2 "\033[38;5;2m" +#define COLOR3 "\033[38;5;3m" +#define COLOR4 "\033[38;5;4m" +#define COLOR5 "\033[38;5;5m" +#define COLOR6 "\033[38;5;6m" +#define COLOR7 "\033[38;5;7m" +#define COLOR8 "\033[38;5;8m" +#define COLOR9 "\033[38;5;9m" +#define COLOR10 "\033[38;5;10m" +#define COLOR11 "\033[38;5;11m" +#define COLOR12 "\033[38;5;12m" +#define COLOR13 "\033[38;5;13m" +#define COLOR14 "\033[38;5;14m" +#define COLOR15 "\033[38;5;15m" + +#define BACKGROUND0 "\033[48;5;0m" +#define BACKGROUND1 "\033[48;5;1m" +#define BACKGROUND2 "\033[48;5;2m" +#define BACKGROUND3 "\033[48;5;3m" +#define BACKGROUND4 "\033[48;5;4m" +#define BACKGROUND5 "\033[48;5;5m" +#define BACKGROUND6 "\033[48;5;6m" +#define BACKGROUND7 "\033[48;5;7m" +#define BACKGROUND8 "\033[48;5;8m" +#define BACKGROUND9 "\033[48;5;9m" +#define BACKGROUND10 "\033[48;5;10m" +#define BACKGROUND11 "\033[48;5;11m" +#define BACKGROUND12 "\033[48;5;12m" +#define BACKGROUND13 "\033[48;5;13m" +#define BACKGROUND14 "\033[48;5;14m" +#define BACKGROUND15 "\033[48;5;15m" + +// #define COLOR16 "\033[38;5;16m" +// #define COLOR17 "\033[38;5;17m" +// #define COLOR18 "\033[38;5;18m" +// #define COLOR19 "\033[38;5;19m" +// #define COLOR20 "\033[38;5;20m" +// #define COLOR21 "\033[38;5;21m" +// #define COLOR22 "\033[38;5;22m" +// #define COLOR23 "\033[38;5;23m" +// #define COLOR24 "\033[38;5;24m" +// #define COLOR25 "\033[38;5;25m" +// #define COLOR26 "\033[38;5;26m" +// #define COLOR27 "\033[38;5;27m" +// #define COLOR28 "\033[38;5;28m" +// #define COLOR29 "\033[38;5;29m" +// #define COLOR30 "\033[38;5;30m" +// #define COLOR31 "\033[38;5;31m" +// #define COLOR32 "\033[38;5;32m" +// #define COLOR33 "\033[38;5;33m" +// #define COLOR34 "\033[38;5;34m" +// #define COLOR35 "\033[38;5;35m" +// #define COLOR36 "\033[38;5;36m" +// #define COLOR37 "\033[38;5;37m" +// #define COLOR38 "\033[38;5;38m" +// #define COLOR39 "\033[38;5;39m" +// #define COLOR40 "\033[38;5;40m" +// #define COLOR41 "\033[38;5;41m" +// #define COLOR42 "\033[38;5;42m" +// #define COLOR43 "\033[38;5;43m" +// #define COLOR44 "\033[38;5;44m" +// #define COLOR45 "\033[38;5;45m" +// #define COLOR46 "\033[38;5;46m" +// #define COLOR47 "\033[38;5;47m" +// #define COLOR48 "\033[38;5;48m" +// #define COLOR49 "\033[38;5;49m" +// #define COLOR50 "\033[38;5;50m" +// #define COLOR51 "\033[38;5;51m" +// #define COLOR52 "\033[38;5;52m" +// #define COLOR53 "\033[38;5;53m" +// #define COLOR54 "\033[38;5;54m" +// #define COLOR55 "\033[38;5;55m" +// #define COLOR56 "\033[38;5;56m" +// #define COLOR57 "\033[38;5;57m" +// #define COLOR58 "\033[38;5;58m" +// #define COLOR59 "\033[38;5;59m" +// #define COLOR60 "\033[38;5;60m" +// #define COLOR61 "\033[38;5;61m" +// #define COLOR62 "\033[38;5;62m" +// #define COLOR63 "\033[38;5;63m" +// #define COLOR64 "\033[38;5;64m" +// #define COLOR65 "\033[38;5;65m" +// #define COLOR66 "\033[38;5;66m" +// #define COLOR67 "\033[38;5;67m" +// #define COLOR68 "\033[38;5;68m" +// #define COLOR69 "\033[38;5;69m" +// #define COLOR70 "\033[38;5;70m" +// #define COLOR71 "\033[38;5;71m" +// #define COLOR72 "\033[38;5;72m" +// #define COLOR73 "\033[38;5;73m" +// #define COLOR74 "\033[38;5;74m" +// #define COLOR75 "\033[38;5;75m" +// #define COLOR76 "\033[38;5;76m" +// #define COLOR77 "\033[38;5;77m" +// #define COLOR78 "\033[38;5;78m" +// #define COLOR79 "\033[38;5;79m" +// #define COLOR80 "\033[38;5;80m" +// #define COLOR81 "\033[38;5;81m" +// #define COLOR82 "\033[38;5;82m" +// #define COLOR83 "\033[38;5;83m" +// #define COLOR84 "\033[38;5;84m" +// #define COLOR85 "\033[38;5;85m" +// #define COLOR86 "\033[38;5;86m" +// #define COLOR87 "\033[38;5;87m" +// #define COLOR88 "\033[38;5;88m" +// #define COLOR89 "\033[38;5;89m" +// #define COLOR90 "\033[38;5;90m" +// #define COLOR91 "\033[38;5;91m" +// #define COLOR92 "\033[38;5;92m" +// #define COLOR93 "\033[38;5;93m" +// #define COLOR94 "\033[38;5;94m" +// #define COLOR95 "\033[38;5;95m" +// #define COLOR96 "\033[38;5;96m" +// #define COLOR97 "\033[38;5;97m" +// #define COLOR98 "\033[38;5;98m" +// #define COLOR99 "\033[38;5;99m" +// #define COLOR100 "\033[38;5;100m" +// #define COLOR101 "\033[38;5;101m" +// #define COLOR102 "\033[38;5;102m" +// #define COLOR103 "\033[38;5;103m" +// #define COLOR104 "\033[38;5;104m" +// #define COLOR105 "\033[38;5;105m" +// #define COLOR106 "\033[38;5;106m" +// #define COLOR107 "\033[38;5;107m" +// #define COLOR108 "\033[38;5;108m" +// #define COLOR109 "\033[38;5;109m" +// #define COLOR110 "\033[38;5;110m" +// #define COLOR111 "\033[38;5;111m" +// #define COLOR112 "\033[38;5;112m" +// #define COLOR113 "\033[38;5;113m" +// #define COLOR114 "\033[38;5;114m" +// #define COLOR115 "\033[38;5;115m" +// #define COLOR116 "\033[38;5;116m" +// #define COLOR117 "\033[38;5;117m" +// #define COLOR118 "\033[38;5;118m" +// #define COLOR119 "\033[38;5;119m" +// #define COLOR120 "\033[38;5;120m" +// #define COLOR121 "\033[38;5;121m" +// #define COLOR122 "\033[38;5;122m" +// #define COLOR123 "\033[38;5;123m" +// #define COLOR124 "\033[38;5;124m" +// #define COLOR125 "\033[38;5;125m" +// #define COLOR126 "\033[38;5;126m" +// #define COLOR127 "\033[38;5;127m" +// #define COLOR128 "\033[38;5;128m" +// #define COLOR129 "\033[38;5;129m" +// #define COLOR130 "\033[38;5;130m" +// #define COLOR131 "\033[38;5;131m" +// #define COLOR132 "\033[38;5;132m" +// #define COLOR133 "\033[38;5;133m" +// #define COLOR134 "\033[38;5;134m" +// #define COLOR135 "\033[38;5;135m" +// #define COLOR136 "\033[38;5;136m" +// #define COLOR137 "\033[38;5;137m" +// #define COLOR138 "\033[38;5;138m" +// #define COLOR139 "\033[38;5;139m" +// #define COLOR140 "\033[38;5;140m" +// #define COLOR141 "\033[38;5;141m" +// #define COLOR142 "\033[38;5;142m" +// #define COLOR143 "\033[38;5;143m" +// #define COLOR144 "\033[38;5;144m" +// #define COLOR145 "\033[38;5;145m" +// #define COLOR146 "\033[38;5;146m" +// #define COLOR147 "\033[38;5;147m" +// #define COLOR148 "\033[38;5;148m" +// #define COLOR149 "\033[38;5;149m" +// #define COLOR150 "\033[38;5;150m" +// #define COLOR151 "\033[38;5;151m" +// #define COLOR152 "\033[38;5;152m" +// #define COLOR153 "\033[38;5;153m" +// #define COLOR154 "\033[38;5;154m" +// #define COLOR155 "\033[38;5;155m" +// #define COLOR156 "\033[38;5;156m" +// #define COLOR157 "\033[38;5;157m" +// #define COLOR158 "\033[38;5;158m" +// #define COLOR159 "\033[38;5;159m" +// #define COLOR160 "\033[38;5;160m" +// #define COLOR161 "\033[38;5;161m" +// #define COLOR162 "\033[38;5;162m" +// #define COLOR163 "\033[38;5;163m" +// #define COLOR164 "\033[38;5;164m" +// #define COLOR165 "\033[38;5;165m" +// #define COLOR166 "\033[38;5;166m" +// #define COLOR167 "\033[38;5;167m" +// #define COLOR168 "\033[38;5;168m" +// #define COLOR169 "\033[38;5;169m" +// #define COLOR170 "\033[38;5;170m" +// #define COLOR171 "\033[38;5;171m" +// #define COLOR172 "\033[38;5;172m" +// #define COLOR173 "\033[38;5;173m" +// #define COLOR174 "\033[38;5;174m" +// #define COLOR175 "\033[38;5;175m" +// #define COLOR176 "\033[38;5;176m" +// #define COLOR177 "\033[38;5;177m" +// #define COLOR178 "\033[38;5;178m" +// #define COLOR179 "\033[38;5;179m" +// #define COLOR180 "\033[38;5;180m" +// #define COLOR181 "\033[38;5;181m" +// #define COLOR182 "\033[38;5;182m" +// #define COLOR183 "\033[38;5;183m" +// #define COLOR184 "\033[38;5;184m" +// #define COLOR185 "\033[38;5;185m" +// #define COLOR186 "\033[38;5;186m" +// #define COLOR187 "\033[38;5;187m" +// #define COLOR188 "\033[38;5;188m" +// #define COLOR189 "\033[38;5;189m" +// #define COLOR190 "\033[38;5;190m" +// #define COLOR191 "\033[38;5;191m" +// #define COLOR192 "\033[38;5;192m" +// #define COLOR193 "\033[38;5;193m" +// #define COLOR194 "\033[38;5;194m" +// #define COLOR195 "\033[38;5;195m" +// #define COLOR196 "\033[38;5;196m" +// #define COLOR197 "\033[38;5;197m" +// #define COLOR198 "\033[38;5;198m" +// #define COLOR199 "\033[38;5;199m" +// #define COLOR200 "\033[38;5;200m" +// #define COLOR201 "\033[38;5;201m" +// #define COLOR202 "\033[38;5;202m" +// #define COLOR203 "\033[38;5;203m" +// #define COLOR204 "\033[38;5;204m" +// #define COLOR205 "\033[38;5;205m" +// #define COLOR206 "\033[38;5;206m" +// #define COLOR207 "\033[38;5;207m" +// #define COLOR208 "\033[38;5;208m" +// #define COLOR209 "\033[38;5;209m" +// #define COLOR210 "\033[38;5;210m" +// #define COLOR211 "\033[38;5;211m" +// #define COLOR212 "\033[38;5;212m" +// #define COLOR213 "\033[38;5;213m" +// #define COLOR214 "\033[38;5;214m" +// #define COLOR215 "\033[38;5;215m" +// #define COLOR216 "\033[38;5;216m" +// #define COLOR217 "\033[38;5;217m" +// #define COLOR218 "\033[38;5;218m" +// #define COLOR219 "\033[38;5;219m" +// #define COLOR220 "\033[38;5;220m" +// #define COLOR221 "\033[38;5;221m" +// #define COLOR222 "\033[38;5;222m" +// #define COLOR223 "\033[38;5;223m" +// #define COLOR224 "\033[38;5;224m" +// #define COLOR225 "\033[38;5;225m" +// #define COLOR226 "\033[38;5;226m" +// #define COLOR227 "\033[38;5;227m" +// #define COLOR228 "\033[38;5;228m" +// #define COLOR229 "\033[38;5;229m" +// #define COLOR230 "\033[38;5;230m" +// #define COLOR231 "\033[38;5;231m" +// #define COLOR232 "\033[38;5;232m" +// #define COLOR233 "\033[38;5;233m" +// #define COLOR234 "\033[38;5;234m" +// #define COLOR235 "\033[38;5;235m" +// #define COLOR236 "\033[38;5;236m" +// #define COLOR237 "\033[38;5;237m" +// #define COLOR238 "\033[38;5;238m" +// #define COLOR239 "\033[38;5;239m" +// #define COLOR240 "\033[38;5;240m" +// #define COLOR241 "\033[38;5;241m" +// #define COLOR242 "\033[38;5;242m" +// #define COLOR243 "\033[38;5;243m" +// #define COLOR244 "\033[38;5;244m" +// #define COLOR245 "\033[38;5;245m" +// #define COLOR246 "\033[38;5;246m" +// #define COLOR247 "\033[38;5;247m" +// #define COLOR248 "\033[38;5;248m" +// #define COLOR249 "\033[38;5;249m" +// #define COLOR250 "\033[38;5;250m" +// #define COLOR251 "\033[38;5;251m" +// #define COLOR252 "\033[38;5;252m" +// #define COLOR253 "\033[38;5;253m" +// #define COLOR254 "\033[38;5;254m" +// #define COLOR255 "\033[38;5;255m" + + +// #define BACKGROUND16 "\033[48;5;16m" +// #define BACKGROUND17 "\033[48;5;17m" +// #define BACKGROUND18 "\033[48;5;18m" +// #define BACKGROUND19 "\033[48;5;19m" +// #define BACKGROUND20 "\033[48;5;20m" +// #define BACKGROUND21 "\033[48;5;21m" +// #define BACKGROUND22 "\033[48;5;22m" +// #define BACKGROUND23 "\033[48;5;23m" +// #define BACKGROUND24 "\033[48;5;24m" +// #define BACKGROUND25 "\033[48;5;25m" +// #define BACKGROUND26 "\033[48;5;26m" +// #define BACKGROUND27 "\033[48;5;27m" +// #define BACKGROUND28 "\033[48;5;28m" +// #define BACKGROUND29 "\033[48;5;29m" +// #define BACKGROUND30 "\033[48;5;30m" +// #define BACKGROUND31 "\033[48;5;31m" +// #define BACKGROUND32 "\033[48;5;32m" +// #define BACKGROUND33 "\033[48;5;33m" +// #define BACKGROUND34 "\033[48;5;34m" +// #define BACKGROUND35 "\033[48;5;35m" +// #define BACKGROUND36 "\033[48;5;36m" +// #define BACKGROUND37 "\033[48;5;37m" +// #define BACKGROUND38 "\033[48;5;38m" +// #define BACKGROUND39 "\033[48;5;39m" +// #define BACKGROUND40 "\033[48;5;40m" +// #define BACKGROUND41 "\033[48;5;41m" +// #define BACKGROUND42 "\033[48;5;42m" +// #define BACKGROUND43 "\033[48;5;43m" +// #define BACKGROUND44 "\033[48;5;44m" +// #define BACKGROUND45 "\033[48;5;45m" +// #define BACKGROUND46 "\033[48;5;46m" +// #define BACKGROUND47 "\033[48;5;47m" +// #define BACKGROUND48 "\033[48;5;48m" +// #define BACKGROUND49 "\033[48;5;49m" +// #define BACKGROUND50 "\033[48;5;50m" +// #define BACKGROUND51 "\033[48;5;51m" +// #define BACKGROUND52 "\033[48;5;52m" +// #define BACKGROUND53 "\033[48;5;53m" +// #define BACKGROUND54 "\033[48;5;54m" +// #define BACKGROUND55 "\033[48;5;55m" +// #define BACKGROUND56 "\033[48;5;56m" +// #define BACKGROUND57 "\033[48;5;57m" +// #define BACKGROUND58 "\033[48;5;58m" +// #define BACKGROUND59 "\033[48;5;59m" +// #define BACKGROUND60 "\033[48;5;60m" +// #define BACKGROUND61 "\033[48;5;61m" +// #define BACKGROUND62 "\033[48;5;62m" +// #define BACKGROUND63 "\033[48;5;63m" +// #define BACKGROUND64 "\033[48;5;64m" +// #define BACKGROUND65 "\033[48;5;65m" +// #define BACKGROUND66 "\033[48;5;66m" +// #define BACKGROUND67 "\033[48;5;67m" +// #define BACKGROUND68 "\033[48;5;68m" +// #define BACKGROUND69 "\033[48;5;69m" +// #define BACKGROUND70 "\033[48;5;70m" +// #define BACKGROUND71 "\033[48;5;71m" +// #define BACKGROUND72 "\033[48;5;72m" +// #define BACKGROUND73 "\033[48;5;73m" +// #define BACKGROUND74 "\033[48;5;74m" +// #define BACKGROUND75 "\033[48;5;75m" +// #define BACKGROUND76 "\033[48;5;76m" +// #define BACKGROUND77 "\033[48;5;77m" +// #define BACKGROUND78 "\033[48;5;78m" +// #define BACKGROUND79 "\033[48;5;79m" +// #define BACKGROUND80 "\033[48;5;80m" +// #define BACKGROUND81 "\033[48;5;81m" +// #define BACKGROUND82 "\033[48;5;82m" +// #define BACKGROUND83 "\033[48;5;83m" +// #define BACKGROUND84 "\033[48;5;84m" +// #define BACKGROUND85 "\033[48;5;85m" +// #define BACKGROUND86 "\033[48;5;86m" +// #define BACKGROUND87 "\033[48;5;87m" +// #define BACKGROUND88 "\033[48;5;88m" +// #define BACKGROUND89 "\033[48;5;89m" +// #define BACKGROUND90 "\033[48;5;90m" +// #define BACKGROUND91 "\033[48;5;91m" +// #define BACKGROUND92 "\033[48;5;92m" +// #define BACKGROUND93 "\033[48;5;93m" +// #define BACKGROUND94 "\033[48;5;94m" +// #define BACKGROUND95 "\033[48;5;95m" +// #define BACKGROUND96 "\033[48;5;96m" +// #define BACKGROUND97 "\033[48;5;97m" +// #define BACKGROUND98 "\033[48;5;98m" +// #define BACKGROUND99 "\033[48;5;99m" +// #define BACKGROUND100 "\033[48;5;100m" +// #define BACKGROUND101 "\033[48;5;101m" +// #define BACKGROUND102 "\033[48;5;102m" +// #define BACKGROUND103 "\033[48;5;103m" +// #define BACKGROUND104 "\033[48;5;104m" +// #define BACKGROUND105 "\033[48;5;105m" +// #define BACKGROUND106 "\033[48;5;106m" +// #define BACKGROUND107 "\033[48;5;107m" +// #define BACKGROUND108 "\033[48;5;108m" +// #define BACKGROUND109 "\033[48;5;109m" +// #define BACKGROUND110 "\033[48;5;110m" +// #define BACKGROUND111 "\033[48;5;111m" +// #define BACKGROUND112 "\033[48;5;112m" +// #define BACKGROUND113 "\033[48;5;113m" +// #define BACKGROUND114 "\033[48;5;114m" +// #define BACKGROUND115 "\033[48;5;115m" +// #define BACKGROUND116 "\033[48;5;116m" +// #define BACKGROUND117 "\033[48;5;117m" +// #define BACKGROUND118 "\033[48;5;118m" +// #define BACKGROUND119 "\033[48;5;119m" +// #define BACKGROUND120 "\033[48;5;120m" +// #define BACKGROUND121 "\033[48;5;121m" +// #define BACKGROUND122 "\033[48;5;122m" +// #define BACKGROUND123 "\033[48;5;123m" +// #define BACKGROUND124 "\033[48;5;124m" +// #define BACKGROUND125 "\033[48;5;125m" +// #define BACKGROUND126 "\033[48;5;126m" +// #define BACKGROUND127 "\033[48;5;127m" +// #define BACKGROUND128 "\033[48;5;128m" +// #define BACKGROUND129 "\033[48;5;129m" +// #define BACKGROUND130 "\033[48;5;130m" +// #define BACKGROUND131 "\033[48;5;131m" +// #define BACKGROUND132 "\033[48;5;132m" +// #define BACKGROUND133 "\033[48;5;133m" +// #define BACKGROUND134 "\033[48;5;134m" +// #define BACKGROUND135 "\033[48;5;135m" +// #define BACKGROUND136 "\033[48;5;136m" +// #define BACKGROUND137 "\033[48;5;137m" +// #define BACKGROUND138 "\033[48;5;138m" +// #define BACKGROUND139 "\033[48;5;139m" +// #define BACKGROUND140 "\033[48;5;140m" +// #define BACKGROUND141 "\033[48;5;141m" +// #define BACKGROUND142 "\033[48;5;142m" +// #define BACKGROUND143 "\033[48;5;143m" +// #define BACKGROUND144 "\033[48;5;144m" +// #define BACKGROUND145 "\033[48;5;145m" +// #define BACKGROUND146 "\033[48;5;146m" +// #define BACKGROUND147 "\033[48;5;147m" +// #define BACKGROUND148 "\033[48;5;148m" +// #define BACKGROUND149 "\033[48;5;149m" +// #define BACKGROUND150 "\033[48;5;150m" +// #define BACKGROUND151 "\033[48;5;151m" +// #define BACKGROUND152 "\033[48;5;152m" +// #define BACKGROUND153 "\033[48;5;153m" +// #define BACKGROUND154 "\033[48;5;154m" +// #define BACKGROUND155 "\033[48;5;155m" +// #define BACKGROUND156 "\033[48;5;156m" +// #define BACKGROUND157 "\033[48;5;157m" +// #define BACKGROUND158 "\033[48;5;158m" +// #define BACKGROUND159 "\033[48;5;159m" +// #define BACKGROUND160 "\033[48;5;160m" +// #define BACKGROUND161 "\033[48;5;161m" +// #define BACKGROUND162 "\033[48;5;162m" +// #define BACKGROUND163 "\033[48;5;163m" +// #define BACKGROUND164 "\033[48;5;164m" +// #define BACKGROUND165 "\033[48;5;165m" +// #define BACKGROUND166 "\033[48;5;166m" +// #define BACKGROUND167 "\033[48;5;167m" +// #define BACKGROUND168 "\033[48;5;168m" +// #define BACKGROUND169 "\033[48;5;169m" +// #define BACKGROUND170 "\033[48;5;170m" +// #define BACKGROUND171 "\033[48;5;171m" +// #define BACKGROUND172 "\033[48;5;172m" +// #define BACKGROUND173 "\033[48;5;173m" +// #define BACKGROUND174 "\033[48;5;174m" +// #define BACKGROUND175 "\033[48;5;175m" +// #define BACKGROUND176 "\033[48;5;176m" +// #define BACKGROUND177 "\033[48;5;177m" +// #define BACKGROUND178 "\033[48;5;178m" +// #define BACKGROUND179 "\033[48;5;179m" +// #define BACKGROUND180 "\033[48;5;180m" +// #define BACKGROUND181 "\033[48;5;181m" +// #define BACKGROUND182 "\033[48;5;182m" +// #define BACKGROUND183 "\033[48;5;183m" +// #define BACKGROUND184 "\033[48;5;184m" +// #define BACKGROUND185 "\033[48;5;185m" +// #define BACKGROUND186 "\033[48;5;186m" +// #define BACKGROUND187 "\033[48;5;187m" +// #define BACKGROUND188 "\033[48;5;188m" +// #define BACKGROUND189 "\033[48;5;189m" +// #define BACKGROUND190 "\033[48;5;190m" +// #define BACKGROUND191 "\033[48;5;191m" +// #define BACKGROUND192 "\033[48;5;192m" +// #define BACKGROUND193 "\033[48;5;193m" +// #define BACKGROUND194 "\033[48;5;194m" +// #define BACKGROUND195 "\033[48;5;195m" +// #define BACKGROUND196 "\033[48;5;196m" +// #define BACKGROUND197 "\033[48;5;197m" +// #define BACKGROUND198 "\033[48;5;198m" +// #define BACKGROUND199 "\033[48;5;199m" +// #define BACKGROUND200 "\033[48;5;200m" +// #define BACKGROUND201 "\033[48;5;201m" +// #define BACKGROUND202 "\033[48;5;202m" +// #define BACKGROUND203 "\033[48;5;203m" +// #define BACKGROUND204 "\033[48;5;204m" +// #define BACKGROUND205 "\033[48;5;205m" +// #define BACKGROUND206 "\033[48;5;206m" +// #define BACKGROUND207 "\033[48;5;207m" +// #define BACKGROUND208 "\033[48;5;208m" +// #define BACKGROUND209 "\033[48;5;209m" +// #define BACKGROUND210 "\033[48;5;210m" +// #define BACKGROUND211 "\033[48;5;211m" +// #define BACKGROUND212 "\033[48;5;212m" +// #define BACKGROUND213 "\033[48;5;213m" +// #define BACKGROUND214 "\033[48;5;214m" +// #define BACKGROUND215 "\033[48;5;215m" +// #define BACKGROUND216 "\033[48;5;216m" +// #define BACKGROUND217 "\033[48;5;217m" +// #define BACKGROUND218 "\033[48;5;218m" +// #define BACKGROUND219 "\033[48;5;219m" +// #define BACKGROUND220 "\033[48;5;220m" +// #define BACKGROUND221 "\033[48;5;221m" +// #define BACKGROUND222 "\033[48;5;222m" +// #define BACKGROUND223 "\033[48;5;223m" +// #define BACKGROUND224 "\033[48;5;224m" +// #define BACKGROUND225 "\033[48;5;225m" +// #define BACKGROUND226 "\033[48;5;226m" +// #define BACKGROUND227 "\033[48;5;227m" +// #define BACKGROUND228 "\033[48;5;228m" +// #define BACKGROUND229 "\033[48;5;229m" +// #define BACKGROUND230 "\033[48;5;230m" +// #define BACKGROUND231 "\033[48;5;231m" +// #define BACKGROUND232 "\033[48;5;232m" +// #define BACKGROUND233 "\033[48;5;233m" +// #define BACKGROUND234 "\033[48;5;234m" +// #define BACKGROUND235 "\033[48;5;235m" +// #define BACKGROUND236 "\033[48;5;236m" +// #define BACKGROUND237 "\033[48;5;237m" +// #define BACKGROUND238 "\033[48;5;238m" +// #define BACKGROUND239 "\033[48;5;239m" +// #define BACKGROUND240 "\033[48;5;240m" +// #define BACKGROUND241 "\033[48;5;241m" +// #define BACKGROUND242 "\033[48;5;242m" +// #define BACKGROUND243 "\033[48;5;243m" +// #define BACKGROUND244 "\033[48;5;244m" +// #define BACKGROUND245 "\033[48;5;245m" +// #define BACKGROUND246 "\033[48;5;246m" +// #define BACKGROUND247 "\033[48;5;247m" +// #define BACKGROUND248 "\033[48;5;248m" +// #define BACKGROUND249 "\033[48;5;249m" +// #define BACKGROUND250 "\033[48;5;250m" +// #define BACKGROUND251 "\033[48;5;251m" +// #define BACKGROUND252 "\033[48;5;252m" +// #define BACKGROUND253 "\033[48;5;253m" +// #define BACKGROUND254 "\033[48;5;254m" +// #define BACKGROUND255 "\033[48;5;255m" + + + + +#endif \ No newline at end of file diff --git a/ex00/src/Bureaucrat.cpp b/ex00/src/Bureaucrat.cpp index 6349119..6ce55ae 100644 --- a/ex00/src/Bureaucrat.cpp +++ b/ex00/src/Bureaucrat.cpp @@ -2,25 +2,36 @@ #include -Bureaucrat::Bureaucrat(std::string name, int grade): _name(name) +#include "colors.h" + +#define COLOR BOLD BACKGROUND4 +#define BUREAUCRAT COLOR " Bureaucrat: " RESET " " +#define CONSTRUCTOR BUREAUCRAT "constructor called" +#define PARAMETERIZED_CONSTRUCTOR BUREAUCRAT "parameterized constructor called" +#define DESTRUCTOR BUREAUCRAT "destructor called" +#define COPY_CONSTRUCTOR BUREAUCRAT "copy constructor called" +#define COPY_ASSIGNMENT BUREAUCRAT "copy assignment operator called" + +Bureaucrat::Bureaucrat(std::string name, int grade) : _name(name) { - std::cout << "Bureaucrat parameterized constructor called" << std::endl; + std::cout << PARAMETERIZED_CONSTRUCTOR << std::endl; if (grade < HIGHEST_GRADE) throw(Bureaucrat::GradeTooHighException()); if (grade > LOWEST_GRADE) throw(Bureaucrat::GradeTooLowException()); - _grade = grade; - std::cout << "Bureaucrat made with the name: " << _name << std::endl; + _grade = grade; + std::cout << BUREAUCRAT << *this << std::endl; } -Bureaucrat::Bureaucrat(Bureaucrat &other) :_name(other._name), _grade(other._grade) +Bureaucrat::Bureaucrat(Bureaucrat &other) : _name(other._name), _grade(other._grade) { - std::cout << "Bureaucrat copy constructor" << std::endl; + std::cout << COPY_CONSTRUCTOR << std::endl; + std::cout << BUREAUCRAT << *this << std::endl; } Bureaucrat::~Bureaucrat() { - std::cout << "Bureaucrat deconstructor called" << std::endl; + std::cout << DESTRUCTOR << std::endl; } Bureaucrat &Bureaucrat::operator++() // Pre-increment @@ -53,22 +64,6 @@ Bureaucrat Bureaucrat::operator--(int) // Post-decrement return temp; } -Bureaucrat &Bureaucrat::operator+=(int value) -{ - if (_grade - value < HIGHEST_GRADE) - throw(Bureaucrat::GradeTooHighException()); - _grade -= value; - return *this; -} - -Bureaucrat &Bureaucrat::operator-=(int value) -{ - if (_grade + value > LOWEST_GRADE) - throw(Bureaucrat::GradeTooLowException()); - _grade += value; - return *this; -} - int Bureaucrat::getGrade() const { return _grade; @@ -79,12 +74,12 @@ const std::string Bureaucrat::getName() const return _name; } -const char * Bureaucrat::GradeTooHighException::what() const throw() +const char *Bureaucrat::GradeTooHighException::what() const throw() { return "Grade too high!"; } -const char * Bureaucrat::GradeTooLowException::what() const throw() +const char *Bureaucrat::GradeTooLowException::what() const throw() { return "Grade too low!"; } diff --git a/ex00/src/main.cpp b/ex00/src/main.cpp index e3e9fe2..871172b 100644 --- a/ex00/src/main.cpp +++ b/ex00/src/main.cpp @@ -1,40 +1,108 @@ #include #include + #include "Bureaucrat.hpp" +#include "colors.h" -int main (void) +#define EXCEPTION_COLOR BOLD BACKGROUND1 +#define EXCEPTION EXCEPTION_COLOR " Exception: " RESET " " +#define INFO_COLOR ITALIC BOLD UNDERLINE GREEN +#define INFO INFO_COLOR "Info: " + +int main(void) { - Bureaucrat jan("jan", 3); - Bureaucrat copy(jan); + try + { + std::cout << INFO << "Creating Bureaucrat with name 'jan' and grade 3" << RESET << std::endl; + Bureaucrat jan("jan", 3); + std::cout << std::endl; - try + std::cout << INFO << "Creating a copy of Bureaucrat 'jan'" << RESET << std::endl; + Bureaucrat copy(jan); + std::cout << std::endl; + + std::cout << INFO << "Printing Bureaucrats..." << RESET << std::endl; + std::cout << jan << std::endl; + std::cout << copy << std::endl; + std::cout << std::endl; + + std::cout << INFO << "Destructing..." << RESET << std::endl; + } + catch (std::exception &e) + { + std::cerr << EXCEPTION << e.what() << std::endl; + } + std::cout << std::endl; + + std::cout << INFO << "Creating Bureaucrat which grade is too high" << RESET << std::endl; + try { Bureaucrat bob("bob", 0); // This should throw an exception } - catch (std::exception &e) + catch (std::exception &e) { - std::cerr << "Caught exception: " << e.what() << std::endl; + std::cerr << EXCEPTION << e.what() << std::endl; } + std::cout << std::endl; - try + std::cout << INFO << "Creating Bureaucrat which grade is too low" << RESET << std::endl; + try { Bureaucrat alice("alice", 151); // This should also throw an exception } - catch (std::exception &e) + catch (std::exception &e) { - std::cerr << "Caught exception: " << e.what() << std::endl; + std::cerr << EXCEPTION << e.what() << std::endl; } + std::cout << std::endl; - try + std::cout << INFO << "Prefix incrementing Bureaucrat's grade..." << RESET << std::endl; + try { Bureaucrat charlie("charlie", 1); ++charlie; // This should throw an exception } - catch (std::exception &e) + catch (std::exception &e) { - std::cerr << "Caught exception: " << e.what() << std::endl; + std::cerr << EXCEPTION << e.what() << std::endl; } - std::cout << jan << std::endl; - std::cout << copy << std::endl; + std::cout << std::endl; + + std::cout << INFO << "Prefix decrementing Bureaucrat's grade..." << RESET << std::endl; + try + { + Bureaucrat dave("dave", 150); + --dave; // This should throw an exception + } + catch (std::exception &e) + { + std::cerr << EXCEPTION << e.what() << std::endl; + } + std::cout << std::endl; + + std::cout << INFO << "Postfix incrementing Bureaucrat's grade..." << RESET << std::endl; + try + { + Bureaucrat charlie("charlie", 1); + charlie++; // This should throw an exception + } + catch (std::exception &e) + { + std::cerr << EXCEPTION << e.what() << std::endl; + } + std::cout << std::endl; + + std::cout << INFO << "Postfix decrementing Bureaucrat's grade..." << RESET << std::endl; + try + { + Bureaucrat dave("dave", 150); + dave--; // This should throw an exception + } + catch (std::exception &e) + { + std::cerr << EXCEPTION << e.what() << std::endl; + } + std::cout << std::endl; + } diff --git a/ex01/Makefile b/ex01/Makefile new file mode 100644 index 0000000..07cf10a --- /dev/null +++ b/ex01/Makefile @@ -0,0 +1,4 @@ +NAME = Bureaucrat +SRC = $(wildcard *.cpp)) + +-include ../common.mk \ No newline at end of file diff --git a/ex01/compile_commands.json b/ex01/compile_commands.json new file mode 100644 index 0000000..6b99c7f --- /dev/null +++ b/ex01/compile_commands.json @@ -0,0 +1,53 @@ +[ + { + "arguments": [ + "/usr/bin/c++", + "-Wall", + "-Wextra", + "-Werror", + "-std=c++11", + "-I./inc", + "-c", + "-o", + "Bureaucrat.o", + "src/Bureaucrat.cpp" + ], + "directory": "/home/willem/projects/CPP05/ex01", + "file": "/home/willem/projects/CPP05/ex01/src/Bureaucrat.cpp", + "output": "/home/willem/projects/CPP05/ex01/Bureaucrat.o" + }, + { + "arguments": [ + "/usr/bin/c++", + "-Wall", + "-Wextra", + "-Werror", + "-std=c++11", + "-I./inc", + "-c", + "-o", + "Form.o", + "src/Form.cpp" + ], + "directory": "/home/willem/projects/CPP05/ex01", + "file": "/home/willem/projects/CPP05/ex01/src/Form.cpp", + "output": "/home/willem/projects/CPP05/ex01/Form.o" + }, + { + "arguments": [ + "/usr/bin/c++", + "-Wall", + "-Wextra", + "-Werror", + "-std=c++11", + "-I./inc", + "-c", + "-o", + "main.o", + "src/main.cpp" + ], + "directory": "/home/willem/projects/CPP05/ex01", + "file": "/home/willem/projects/CPP05/ex01/src/main.cpp", + "output": "/home/willem/projects/CPP05/ex01/main.o" + } +] diff --git a/ex01/inc/Bureaucrat.hpp b/ex01/inc/Bureaucrat.hpp new file mode 100644 index 0000000..fb9e6df --- /dev/null +++ b/ex01/inc/Bureaucrat.hpp @@ -0,0 +1,44 @@ +#pragma once + +#include +#include +#include + +#define HIGHEST_GRADE 1 +#define LOWEST_GRADE 150 + +class Bureaucrat +{ + private: + const std::string _name; + int _grade; + + public: + Bureaucrat() = delete; + Bureaucrat(std::string name, int grade); + Bureaucrat(Bureaucrat &other); + ~Bureaucrat(); + + Bureaucrat &operator=(Bureaucrat &other) = delete; + + Bureaucrat &operator++(); // Pre-increment + Bureaucrat operator++(int); // Post-increment + Bureaucrat &operator--(); // Pre-decrement + Bureaucrat operator--(int); // Post-decrement + + int getGrade() const; + const std::string getName() const; + void signForm(class Form &form); + + class GradeTooHighException : public std::exception + { + const char *what() const throw(); + }; + + class GradeTooLowException : public std::exception + { + const char *what() const throw(); + }; +}; + +std::ostream &operator<<(std::ostream &os, const Bureaucrat &bureaucrat); \ No newline at end of file diff --git a/ex01/inc/Form.hpp b/ex01/inc/Form.hpp new file mode 100644 index 0000000..784c64c --- /dev/null +++ b/ex01/inc/Form.hpp @@ -0,0 +1,48 @@ +#pragma once + +#include +#include +#include + +#include "Bureaucrat.hpp" + +class Form +{ + private: + const std::string _name; + bool _isSigned; + const int _signGrade; + const int _executeGrade; + + public: + Form() = delete; + Form(std::string name, int signGrade, int executeGrade); + Form(const Form &other); + ~Form(); + Form &operator=(const Form &other) = delete; + const std::string &getName() const; + bool getIsSigned() const; + int getSignGrade() const; + int getExecuteGrade() const; + void beSigned(const Bureaucrat &bureaucrat); + + class GradeTooHighException : public std::exception + { + public: + const char *what() const throw(); + }; + + class GradeTooLowException : public std::exception + { + public: + const char *what() const throw(); + }; + + class FormAlreadySignedException : public std::exception + { + public: + const char *what() const throw(); + }; +}; + +std::ostream &operator<<(std::ostream &os, const Form &form); \ No newline at end of file diff --git a/ex01/inc/colors.h b/ex01/inc/colors.h new file mode 100644 index 0000000..461f384 --- /dev/null +++ b/ex01/inc/colors.h @@ -0,0 +1,554 @@ +#ifndef COLORS_H +#define COLORS_H + +#define RESET "\033[m" + +#define BOLD_UNDERLINE "\033[1;4m" +#define BOLD_UNDERLINE_OFF "\033[22;24m" + +#define BOLD "\033[1m" +#define UNDERLINE "\033[4m" +#define ITALIC "\033[3m" +#define BLINK "\033[5m" +#define INVERSE "\033[7m" +#define STRIKETHROUGH "\033[9m" + +#define BOLD_OFF "\033[22m" +#define UNDERLINE_OFF "\033[24m" +#define ITALIC_OFF "\033[23m" +#define BLINK_OFF "\033[25m" +#define INVERSE_OFF "\033[27m" +#define STRIKETHROUGH_OFF "\033[29m" + +#define REVERSE "\033[7m" + +#define BLACK "\033[30m" +#define RED "\033[31m" +#define GREEN "\033[32m" +#define YELLOW "\033[33m" +#define BLUE "\033[34m" +#define MAGENTA "\033[35m" +#define CYAN "\033[36m" +#define WHITE "\033[37m" + +#define COLOR0 "\033[38;5;0m" +#define COLOR1 "\033[38;5;1m" +#define COLOR2 "\033[38;5;2m" +#define COLOR3 "\033[38;5;3m" +#define COLOR4 "\033[38;5;4m" +#define COLOR5 "\033[38;5;5m" +#define COLOR6 "\033[38;5;6m" +#define COLOR7 "\033[38;5;7m" +#define COLOR8 "\033[38;5;8m" +#define COLOR9 "\033[38;5;9m" +#define COLOR10 "\033[38;5;10m" +#define COLOR11 "\033[38;5;11m" +#define COLOR12 "\033[38;5;12m" +#define COLOR13 "\033[38;5;13m" +#define COLOR14 "\033[38;5;14m" +#define COLOR15 "\033[38;5;15m" + +#define BACKGROUND0 "\033[48;5;0m" +#define BACKGROUND1 "\033[48;5;1m" +#define BACKGROUND2 "\033[48;5;2m" +#define BACKGROUND3 "\033[48;5;3m" +#define BACKGROUND4 "\033[48;5;4m" +#define BACKGROUND5 "\033[48;5;5m" +#define BACKGROUND6 "\033[48;5;6m" +#define BACKGROUND7 "\033[48;5;7m" +#define BACKGROUND8 "\033[48;5;8m" +#define BACKGROUND9 "\033[48;5;9m" +#define BACKGROUND10 "\033[48;5;10m" +#define BACKGROUND11 "\033[48;5;11m" +#define BACKGROUND12 "\033[48;5;12m" +#define BACKGROUND13 "\033[48;5;13m" +#define BACKGROUND14 "\033[48;5;14m" +#define BACKGROUND15 "\033[48;5;15m" + +// #define COLOR16 "\033[38;5;16m" +// #define COLOR17 "\033[38;5;17m" +// #define COLOR18 "\033[38;5;18m" +// #define COLOR19 "\033[38;5;19m" +// #define COLOR20 "\033[38;5;20m" +// #define COLOR21 "\033[38;5;21m" +// #define COLOR22 "\033[38;5;22m" +// #define COLOR23 "\033[38;5;23m" +// #define COLOR24 "\033[38;5;24m" +// #define COLOR25 "\033[38;5;25m" +// #define COLOR26 "\033[38;5;26m" +// #define COLOR27 "\033[38;5;27m" +// #define COLOR28 "\033[38;5;28m" +// #define COLOR29 "\033[38;5;29m" +// #define COLOR30 "\033[38;5;30m" +// #define COLOR31 "\033[38;5;31m" +// #define COLOR32 "\033[38;5;32m" +// #define COLOR33 "\033[38;5;33m" +// #define COLOR34 "\033[38;5;34m" +// #define COLOR35 "\033[38;5;35m" +// #define COLOR36 "\033[38;5;36m" +// #define COLOR37 "\033[38;5;37m" +// #define COLOR38 "\033[38;5;38m" +// #define COLOR39 "\033[38;5;39m" +// #define COLOR40 "\033[38;5;40m" +// #define COLOR41 "\033[38;5;41m" +// #define COLOR42 "\033[38;5;42m" +// #define COLOR43 "\033[38;5;43m" +// #define COLOR44 "\033[38;5;44m" +// #define COLOR45 "\033[38;5;45m" +// #define COLOR46 "\033[38;5;46m" +// #define COLOR47 "\033[38;5;47m" +// #define COLOR48 "\033[38;5;48m" +// #define COLOR49 "\033[38;5;49m" +// #define COLOR50 "\033[38;5;50m" +// #define COLOR51 "\033[38;5;51m" +// #define COLOR52 "\033[38;5;52m" +// #define COLOR53 "\033[38;5;53m" +// #define COLOR54 "\033[38;5;54m" +// #define COLOR55 "\033[38;5;55m" +// #define COLOR56 "\033[38;5;56m" +// #define COLOR57 "\033[38;5;57m" +// #define COLOR58 "\033[38;5;58m" +// #define COLOR59 "\033[38;5;59m" +// #define COLOR60 "\033[38;5;60m" +// #define COLOR61 "\033[38;5;61m" +// #define COLOR62 "\033[38;5;62m" +// #define COLOR63 "\033[38;5;63m" +// #define COLOR64 "\033[38;5;64m" +// #define COLOR65 "\033[38;5;65m" +// #define COLOR66 "\033[38;5;66m" +// #define COLOR67 "\033[38;5;67m" +// #define COLOR68 "\033[38;5;68m" +// #define COLOR69 "\033[38;5;69m" +// #define COLOR70 "\033[38;5;70m" +// #define COLOR71 "\033[38;5;71m" +// #define COLOR72 "\033[38;5;72m" +// #define COLOR73 "\033[38;5;73m" +// #define COLOR74 "\033[38;5;74m" +// #define COLOR75 "\033[38;5;75m" +// #define COLOR76 "\033[38;5;76m" +// #define COLOR77 "\033[38;5;77m" +// #define COLOR78 "\033[38;5;78m" +// #define COLOR79 "\033[38;5;79m" +// #define COLOR80 "\033[38;5;80m" +// #define COLOR81 "\033[38;5;81m" +// #define COLOR82 "\033[38;5;82m" +// #define COLOR83 "\033[38;5;83m" +// #define COLOR84 "\033[38;5;84m" +// #define COLOR85 "\033[38;5;85m" +// #define COLOR86 "\033[38;5;86m" +// #define COLOR87 "\033[38;5;87m" +// #define COLOR88 "\033[38;5;88m" +// #define COLOR89 "\033[38;5;89m" +// #define COLOR90 "\033[38;5;90m" +// #define COLOR91 "\033[38;5;91m" +// #define COLOR92 "\033[38;5;92m" +// #define COLOR93 "\033[38;5;93m" +// #define COLOR94 "\033[38;5;94m" +// #define COLOR95 "\033[38;5;95m" +// #define COLOR96 "\033[38;5;96m" +// #define COLOR97 "\033[38;5;97m" +// #define COLOR98 "\033[38;5;98m" +// #define COLOR99 "\033[38;5;99m" +// #define COLOR100 "\033[38;5;100m" +// #define COLOR101 "\033[38;5;101m" +// #define COLOR102 "\033[38;5;102m" +// #define COLOR103 "\033[38;5;103m" +// #define COLOR104 "\033[38;5;104m" +// #define COLOR105 "\033[38;5;105m" +// #define COLOR106 "\033[38;5;106m" +// #define COLOR107 "\033[38;5;107m" +// #define COLOR108 "\033[38;5;108m" +// #define COLOR109 "\033[38;5;109m" +// #define COLOR110 "\033[38;5;110m" +// #define COLOR111 "\033[38;5;111m" +// #define COLOR112 "\033[38;5;112m" +// #define COLOR113 "\033[38;5;113m" +// #define COLOR114 "\033[38;5;114m" +// #define COLOR115 "\033[38;5;115m" +// #define COLOR116 "\033[38;5;116m" +// #define COLOR117 "\033[38;5;117m" +// #define COLOR118 "\033[38;5;118m" +// #define COLOR119 "\033[38;5;119m" +// #define COLOR120 "\033[38;5;120m" +// #define COLOR121 "\033[38;5;121m" +// #define COLOR122 "\033[38;5;122m" +// #define COLOR123 "\033[38;5;123m" +// #define COLOR124 "\033[38;5;124m" +// #define COLOR125 "\033[38;5;125m" +// #define COLOR126 "\033[38;5;126m" +// #define COLOR127 "\033[38;5;127m" +// #define COLOR128 "\033[38;5;128m" +// #define COLOR129 "\033[38;5;129m" +// #define COLOR130 "\033[38;5;130m" +// #define COLOR131 "\033[38;5;131m" +// #define COLOR132 "\033[38;5;132m" +// #define COLOR133 "\033[38;5;133m" +// #define COLOR134 "\033[38;5;134m" +// #define COLOR135 "\033[38;5;135m" +// #define COLOR136 "\033[38;5;136m" +// #define COLOR137 "\033[38;5;137m" +// #define COLOR138 "\033[38;5;138m" +// #define COLOR139 "\033[38;5;139m" +// #define COLOR140 "\033[38;5;140m" +// #define COLOR141 "\033[38;5;141m" +// #define COLOR142 "\033[38;5;142m" +// #define COLOR143 "\033[38;5;143m" +// #define COLOR144 "\033[38;5;144m" +// #define COLOR145 "\033[38;5;145m" +// #define COLOR146 "\033[38;5;146m" +// #define COLOR147 "\033[38;5;147m" +// #define COLOR148 "\033[38;5;148m" +// #define COLOR149 "\033[38;5;149m" +// #define COLOR150 "\033[38;5;150m" +// #define COLOR151 "\033[38;5;151m" +// #define COLOR152 "\033[38;5;152m" +// #define COLOR153 "\033[38;5;153m" +// #define COLOR154 "\033[38;5;154m" +// #define COLOR155 "\033[38;5;155m" +// #define COLOR156 "\033[38;5;156m" +// #define COLOR157 "\033[38;5;157m" +// #define COLOR158 "\033[38;5;158m" +// #define COLOR159 "\033[38;5;159m" +// #define COLOR160 "\033[38;5;160m" +// #define COLOR161 "\033[38;5;161m" +// #define COLOR162 "\033[38;5;162m" +// #define COLOR163 "\033[38;5;163m" +// #define COLOR164 "\033[38;5;164m" +// #define COLOR165 "\033[38;5;165m" +// #define COLOR166 "\033[38;5;166m" +// #define COLOR167 "\033[38;5;167m" +// #define COLOR168 "\033[38;5;168m" +// #define COLOR169 "\033[38;5;169m" +// #define COLOR170 "\033[38;5;170m" +// #define COLOR171 "\033[38;5;171m" +// #define COLOR172 "\033[38;5;172m" +// #define COLOR173 "\033[38;5;173m" +// #define COLOR174 "\033[38;5;174m" +// #define COLOR175 "\033[38;5;175m" +// #define COLOR176 "\033[38;5;176m" +// #define COLOR177 "\033[38;5;177m" +// #define COLOR178 "\033[38;5;178m" +// #define COLOR179 "\033[38;5;179m" +// #define COLOR180 "\033[38;5;180m" +// #define COLOR181 "\033[38;5;181m" +// #define COLOR182 "\033[38;5;182m" +// #define COLOR183 "\033[38;5;183m" +// #define COLOR184 "\033[38;5;184m" +// #define COLOR185 "\033[38;5;185m" +// #define COLOR186 "\033[38;5;186m" +// #define COLOR187 "\033[38;5;187m" +// #define COLOR188 "\033[38;5;188m" +// #define COLOR189 "\033[38;5;189m" +// #define COLOR190 "\033[38;5;190m" +// #define COLOR191 "\033[38;5;191m" +// #define COLOR192 "\033[38;5;192m" +// #define COLOR193 "\033[38;5;193m" +// #define COLOR194 "\033[38;5;194m" +// #define COLOR195 "\033[38;5;195m" +// #define COLOR196 "\033[38;5;196m" +// #define COLOR197 "\033[38;5;197m" +// #define COLOR198 "\033[38;5;198m" +// #define COLOR199 "\033[38;5;199m" +// #define COLOR200 "\033[38;5;200m" +// #define COLOR201 "\033[38;5;201m" +// #define COLOR202 "\033[38;5;202m" +// #define COLOR203 "\033[38;5;203m" +// #define COLOR204 "\033[38;5;204m" +// #define COLOR205 "\033[38;5;205m" +// #define COLOR206 "\033[38;5;206m" +// #define COLOR207 "\033[38;5;207m" +// #define COLOR208 "\033[38;5;208m" +// #define COLOR209 "\033[38;5;209m" +// #define COLOR210 "\033[38;5;210m" +// #define COLOR211 "\033[38;5;211m" +// #define COLOR212 "\033[38;5;212m" +// #define COLOR213 "\033[38;5;213m" +// #define COLOR214 "\033[38;5;214m" +// #define COLOR215 "\033[38;5;215m" +// #define COLOR216 "\033[38;5;216m" +// #define COLOR217 "\033[38;5;217m" +// #define COLOR218 "\033[38;5;218m" +// #define COLOR219 "\033[38;5;219m" +// #define COLOR220 "\033[38;5;220m" +// #define COLOR221 "\033[38;5;221m" +// #define COLOR222 "\033[38;5;222m" +// #define COLOR223 "\033[38;5;223m" +// #define COLOR224 "\033[38;5;224m" +// #define COLOR225 "\033[38;5;225m" +// #define COLOR226 "\033[38;5;226m" +// #define COLOR227 "\033[38;5;227m" +// #define COLOR228 "\033[38;5;228m" +// #define COLOR229 "\033[38;5;229m" +// #define COLOR230 "\033[38;5;230m" +// #define COLOR231 "\033[38;5;231m" +// #define COLOR232 "\033[38;5;232m" +// #define COLOR233 "\033[38;5;233m" +// #define COLOR234 "\033[38;5;234m" +// #define COLOR235 "\033[38;5;235m" +// #define COLOR236 "\033[38;5;236m" +// #define COLOR237 "\033[38;5;237m" +// #define COLOR238 "\033[38;5;238m" +// #define COLOR239 "\033[38;5;239m" +// #define COLOR240 "\033[38;5;240m" +// #define COLOR241 "\033[38;5;241m" +// #define COLOR242 "\033[38;5;242m" +// #define COLOR243 "\033[38;5;243m" +// #define COLOR244 "\033[38;5;244m" +// #define COLOR245 "\033[38;5;245m" +// #define COLOR246 "\033[38;5;246m" +// #define COLOR247 "\033[38;5;247m" +// #define COLOR248 "\033[38;5;248m" +// #define COLOR249 "\033[38;5;249m" +// #define COLOR250 "\033[38;5;250m" +// #define COLOR251 "\033[38;5;251m" +// #define COLOR252 "\033[38;5;252m" +// #define COLOR253 "\033[38;5;253m" +// #define COLOR254 "\033[38;5;254m" +// #define COLOR255 "\033[38;5;255m" + + +// #define BACKGROUND16 "\033[48;5;16m" +// #define BACKGROUND17 "\033[48;5;17m" +// #define BACKGROUND18 "\033[48;5;18m" +// #define BACKGROUND19 "\033[48;5;19m" +// #define BACKGROUND20 "\033[48;5;20m" +// #define BACKGROUND21 "\033[48;5;21m" +// #define BACKGROUND22 "\033[48;5;22m" +// #define BACKGROUND23 "\033[48;5;23m" +// #define BACKGROUND24 "\033[48;5;24m" +// #define BACKGROUND25 "\033[48;5;25m" +// #define BACKGROUND26 "\033[48;5;26m" +// #define BACKGROUND27 "\033[48;5;27m" +// #define BACKGROUND28 "\033[48;5;28m" +// #define BACKGROUND29 "\033[48;5;29m" +// #define BACKGROUND30 "\033[48;5;30m" +// #define BACKGROUND31 "\033[48;5;31m" +// #define BACKGROUND32 "\033[48;5;32m" +// #define BACKGROUND33 "\033[48;5;33m" +// #define BACKGROUND34 "\033[48;5;34m" +// #define BACKGROUND35 "\033[48;5;35m" +// #define BACKGROUND36 "\033[48;5;36m" +// #define BACKGROUND37 "\033[48;5;37m" +// #define BACKGROUND38 "\033[48;5;38m" +// #define BACKGROUND39 "\033[48;5;39m" +// #define BACKGROUND40 "\033[48;5;40m" +// #define BACKGROUND41 "\033[48;5;41m" +// #define BACKGROUND42 "\033[48;5;42m" +// #define BACKGROUND43 "\033[48;5;43m" +// #define BACKGROUND44 "\033[48;5;44m" +// #define BACKGROUND45 "\033[48;5;45m" +// #define BACKGROUND46 "\033[48;5;46m" +// #define BACKGROUND47 "\033[48;5;47m" +// #define BACKGROUND48 "\033[48;5;48m" +// #define BACKGROUND49 "\033[48;5;49m" +// #define BACKGROUND50 "\033[48;5;50m" +// #define BACKGROUND51 "\033[48;5;51m" +// #define BACKGROUND52 "\033[48;5;52m" +// #define BACKGROUND53 "\033[48;5;53m" +// #define BACKGROUND54 "\033[48;5;54m" +// #define BACKGROUND55 "\033[48;5;55m" +// #define BACKGROUND56 "\033[48;5;56m" +// #define BACKGROUND57 "\033[48;5;57m" +// #define BACKGROUND58 "\033[48;5;58m" +// #define BACKGROUND59 "\033[48;5;59m" +// #define BACKGROUND60 "\033[48;5;60m" +// #define BACKGROUND61 "\033[48;5;61m" +// #define BACKGROUND62 "\033[48;5;62m" +// #define BACKGROUND63 "\033[48;5;63m" +// #define BACKGROUND64 "\033[48;5;64m" +// #define BACKGROUND65 "\033[48;5;65m" +// #define BACKGROUND66 "\033[48;5;66m" +// #define BACKGROUND67 "\033[48;5;67m" +// #define BACKGROUND68 "\033[48;5;68m" +// #define BACKGROUND69 "\033[48;5;69m" +// #define BACKGROUND70 "\033[48;5;70m" +// #define BACKGROUND71 "\033[48;5;71m" +// #define BACKGROUND72 "\033[48;5;72m" +// #define BACKGROUND73 "\033[48;5;73m" +// #define BACKGROUND74 "\033[48;5;74m" +// #define BACKGROUND75 "\033[48;5;75m" +// #define BACKGROUND76 "\033[48;5;76m" +// #define BACKGROUND77 "\033[48;5;77m" +// #define BACKGROUND78 "\033[48;5;78m" +// #define BACKGROUND79 "\033[48;5;79m" +// #define BACKGROUND80 "\033[48;5;80m" +// #define BACKGROUND81 "\033[48;5;81m" +// #define BACKGROUND82 "\033[48;5;82m" +// #define BACKGROUND83 "\033[48;5;83m" +// #define BACKGROUND84 "\033[48;5;84m" +// #define BACKGROUND85 "\033[48;5;85m" +// #define BACKGROUND86 "\033[48;5;86m" +// #define BACKGROUND87 "\033[48;5;87m" +// #define BACKGROUND88 "\033[48;5;88m" +// #define BACKGROUND89 "\033[48;5;89m" +// #define BACKGROUND90 "\033[48;5;90m" +// #define BACKGROUND91 "\033[48;5;91m" +// #define BACKGROUND92 "\033[48;5;92m" +// #define BACKGROUND93 "\033[48;5;93m" +// #define BACKGROUND94 "\033[48;5;94m" +// #define BACKGROUND95 "\033[48;5;95m" +// #define BACKGROUND96 "\033[48;5;96m" +// #define BACKGROUND97 "\033[48;5;97m" +// #define BACKGROUND98 "\033[48;5;98m" +// #define BACKGROUND99 "\033[48;5;99m" +// #define BACKGROUND100 "\033[48;5;100m" +// #define BACKGROUND101 "\033[48;5;101m" +// #define BACKGROUND102 "\033[48;5;102m" +// #define BACKGROUND103 "\033[48;5;103m" +// #define BACKGROUND104 "\033[48;5;104m" +// #define BACKGROUND105 "\033[48;5;105m" +// #define BACKGROUND106 "\033[48;5;106m" +// #define BACKGROUND107 "\033[48;5;107m" +// #define BACKGROUND108 "\033[48;5;108m" +// #define BACKGROUND109 "\033[48;5;109m" +// #define BACKGROUND110 "\033[48;5;110m" +// #define BACKGROUND111 "\033[48;5;111m" +// #define BACKGROUND112 "\033[48;5;112m" +// #define BACKGROUND113 "\033[48;5;113m" +// #define BACKGROUND114 "\033[48;5;114m" +// #define BACKGROUND115 "\033[48;5;115m" +// #define BACKGROUND116 "\033[48;5;116m" +// #define BACKGROUND117 "\033[48;5;117m" +// #define BACKGROUND118 "\033[48;5;118m" +// #define BACKGROUND119 "\033[48;5;119m" +// #define BACKGROUND120 "\033[48;5;120m" +// #define BACKGROUND121 "\033[48;5;121m" +// #define BACKGROUND122 "\033[48;5;122m" +// #define BACKGROUND123 "\033[48;5;123m" +// #define BACKGROUND124 "\033[48;5;124m" +// #define BACKGROUND125 "\033[48;5;125m" +// #define BACKGROUND126 "\033[48;5;126m" +// #define BACKGROUND127 "\033[48;5;127m" +// #define BACKGROUND128 "\033[48;5;128m" +// #define BACKGROUND129 "\033[48;5;129m" +// #define BACKGROUND130 "\033[48;5;130m" +// #define BACKGROUND131 "\033[48;5;131m" +// #define BACKGROUND132 "\033[48;5;132m" +// #define BACKGROUND133 "\033[48;5;133m" +// #define BACKGROUND134 "\033[48;5;134m" +// #define BACKGROUND135 "\033[48;5;135m" +// #define BACKGROUND136 "\033[48;5;136m" +// #define BACKGROUND137 "\033[48;5;137m" +// #define BACKGROUND138 "\033[48;5;138m" +// #define BACKGROUND139 "\033[48;5;139m" +// #define BACKGROUND140 "\033[48;5;140m" +// #define BACKGROUND141 "\033[48;5;141m" +// #define BACKGROUND142 "\033[48;5;142m" +// #define BACKGROUND143 "\033[48;5;143m" +// #define BACKGROUND144 "\033[48;5;144m" +// #define BACKGROUND145 "\033[48;5;145m" +// #define BACKGROUND146 "\033[48;5;146m" +// #define BACKGROUND147 "\033[48;5;147m" +// #define BACKGROUND148 "\033[48;5;148m" +// #define BACKGROUND149 "\033[48;5;149m" +// #define BACKGROUND150 "\033[48;5;150m" +// #define BACKGROUND151 "\033[48;5;151m" +// #define BACKGROUND152 "\033[48;5;152m" +// #define BACKGROUND153 "\033[48;5;153m" +// #define BACKGROUND154 "\033[48;5;154m" +// #define BACKGROUND155 "\033[48;5;155m" +// #define BACKGROUND156 "\033[48;5;156m" +// #define BACKGROUND157 "\033[48;5;157m" +// #define BACKGROUND158 "\033[48;5;158m" +// #define BACKGROUND159 "\033[48;5;159m" +// #define BACKGROUND160 "\033[48;5;160m" +// #define BACKGROUND161 "\033[48;5;161m" +// #define BACKGROUND162 "\033[48;5;162m" +// #define BACKGROUND163 "\033[48;5;163m" +// #define BACKGROUND164 "\033[48;5;164m" +// #define BACKGROUND165 "\033[48;5;165m" +// #define BACKGROUND166 "\033[48;5;166m" +// #define BACKGROUND167 "\033[48;5;167m" +// #define BACKGROUND168 "\033[48;5;168m" +// #define BACKGROUND169 "\033[48;5;169m" +// #define BACKGROUND170 "\033[48;5;170m" +// #define BACKGROUND171 "\033[48;5;171m" +// #define BACKGROUND172 "\033[48;5;172m" +// #define BACKGROUND173 "\033[48;5;173m" +// #define BACKGROUND174 "\033[48;5;174m" +// #define BACKGROUND175 "\033[48;5;175m" +// #define BACKGROUND176 "\033[48;5;176m" +// #define BACKGROUND177 "\033[48;5;177m" +// #define BACKGROUND178 "\033[48;5;178m" +// #define BACKGROUND179 "\033[48;5;179m" +// #define BACKGROUND180 "\033[48;5;180m" +// #define BACKGROUND181 "\033[48;5;181m" +// #define BACKGROUND182 "\033[48;5;182m" +// #define BACKGROUND183 "\033[48;5;183m" +// #define BACKGROUND184 "\033[48;5;184m" +// #define BACKGROUND185 "\033[48;5;185m" +// #define BACKGROUND186 "\033[48;5;186m" +// #define BACKGROUND187 "\033[48;5;187m" +// #define BACKGROUND188 "\033[48;5;188m" +// #define BACKGROUND189 "\033[48;5;189m" +// #define BACKGROUND190 "\033[48;5;190m" +// #define BACKGROUND191 "\033[48;5;191m" +// #define BACKGROUND192 "\033[48;5;192m" +// #define BACKGROUND193 "\033[48;5;193m" +// #define BACKGROUND194 "\033[48;5;194m" +// #define BACKGROUND195 "\033[48;5;195m" +// #define BACKGROUND196 "\033[48;5;196m" +// #define BACKGROUND197 "\033[48;5;197m" +// #define BACKGROUND198 "\033[48;5;198m" +// #define BACKGROUND199 "\033[48;5;199m" +// #define BACKGROUND200 "\033[48;5;200m" +// #define BACKGROUND201 "\033[48;5;201m" +// #define BACKGROUND202 "\033[48;5;202m" +// #define BACKGROUND203 "\033[48;5;203m" +// #define BACKGROUND204 "\033[48;5;204m" +// #define BACKGROUND205 "\033[48;5;205m" +// #define BACKGROUND206 "\033[48;5;206m" +// #define BACKGROUND207 "\033[48;5;207m" +// #define BACKGROUND208 "\033[48;5;208m" +// #define BACKGROUND209 "\033[48;5;209m" +// #define BACKGROUND210 "\033[48;5;210m" +// #define BACKGROUND211 "\033[48;5;211m" +// #define BACKGROUND212 "\033[48;5;212m" +// #define BACKGROUND213 "\033[48;5;213m" +// #define BACKGROUND214 "\033[48;5;214m" +// #define BACKGROUND215 "\033[48;5;215m" +// #define BACKGROUND216 "\033[48;5;216m" +// #define BACKGROUND217 "\033[48;5;217m" +// #define BACKGROUND218 "\033[48;5;218m" +// #define BACKGROUND219 "\033[48;5;219m" +// #define BACKGROUND220 "\033[48;5;220m" +// #define BACKGROUND221 "\033[48;5;221m" +// #define BACKGROUND222 "\033[48;5;222m" +// #define BACKGROUND223 "\033[48;5;223m" +// #define BACKGROUND224 "\033[48;5;224m" +// #define BACKGROUND225 "\033[48;5;225m" +// #define BACKGROUND226 "\033[48;5;226m" +// #define BACKGROUND227 "\033[48;5;227m" +// #define BACKGROUND228 "\033[48;5;228m" +// #define BACKGROUND229 "\033[48;5;229m" +// #define BACKGROUND230 "\033[48;5;230m" +// #define BACKGROUND231 "\033[48;5;231m" +// #define BACKGROUND232 "\033[48;5;232m" +// #define BACKGROUND233 "\033[48;5;233m" +// #define BACKGROUND234 "\033[48;5;234m" +// #define BACKGROUND235 "\033[48;5;235m" +// #define BACKGROUND236 "\033[48;5;236m" +// #define BACKGROUND237 "\033[48;5;237m" +// #define BACKGROUND238 "\033[48;5;238m" +// #define BACKGROUND239 "\033[48;5;239m" +// #define BACKGROUND240 "\033[48;5;240m" +// #define BACKGROUND241 "\033[48;5;241m" +// #define BACKGROUND242 "\033[48;5;242m" +// #define BACKGROUND243 "\033[48;5;243m" +// #define BACKGROUND244 "\033[48;5;244m" +// #define BACKGROUND245 "\033[48;5;245m" +// #define BACKGROUND246 "\033[48;5;246m" +// #define BACKGROUND247 "\033[48;5;247m" +// #define BACKGROUND248 "\033[48;5;248m" +// #define BACKGROUND249 "\033[48;5;249m" +// #define BACKGROUND250 "\033[48;5;250m" +// #define BACKGROUND251 "\033[48;5;251m" +// #define BACKGROUND252 "\033[48;5;252m" +// #define BACKGROUND253 "\033[48;5;253m" +// #define BACKGROUND254 "\033[48;5;254m" +// #define BACKGROUND255 "\033[48;5;255m" + + + + +#endif \ No newline at end of file diff --git a/ex01/src/Bureaucrat.cpp b/ex01/src/Bureaucrat.cpp new file mode 100644 index 0000000..2a25c63 --- /dev/null +++ b/ex01/src/Bureaucrat.cpp @@ -0,0 +1,102 @@ +#include "Bureaucrat.hpp" +#include "Form.hpp" + +#include + +#include "colors.h" + +#define COLOR BOLD BACKGROUND4 +#define BUREAUCRAT COLOR " Bureaucrat: " RESET " " +#define CONSTRUCTOR BUREAUCRAT "Constructor called" +#define PARAMETERIZED_CONSTRUCTOR BUREAUCRAT "Parameterized constructor called" +#define DESTRUCTOR BUREAUCRAT "Destructor called" +#define COPY_CONSTRUCTOR BUREAUCRAT "Copy constructor called" + + +Bureaucrat::Bureaucrat(std::string name, int grade) : _name(name) +{ + std::cout << PARAMETERIZED_CONSTRUCTOR << std::endl; + if (grade < HIGHEST_GRADE) + throw(Bureaucrat::GradeTooHighException()); + if (grade > LOWEST_GRADE) + throw(Bureaucrat::GradeTooLowException()); + _grade = grade; + std::cout << BUREAUCRAT << *this << std::endl; +} + +Bureaucrat::Bureaucrat(Bureaucrat &other) : _name(other._name), _grade(other._grade) +{ + std::cout << COPY_CONSTRUCTOR << std::endl; + std::cout << BUREAUCRAT << *this << std::endl; +} + +Bureaucrat::~Bureaucrat() +{ + std::cout << DESTRUCTOR << std::endl; +} + +Bureaucrat &Bureaucrat::operator++() // Pre-increment +{ + if (_grade <= HIGHEST_GRADE) + throw(Bureaucrat::GradeTooHighException()); + _grade--; + return *this; +} + +Bureaucrat Bureaucrat::operator++(int) // Post-increment +{ + Bureaucrat temp(*this); + ++(*this); + return temp; +} + +Bureaucrat &Bureaucrat::operator--() // Pre-decrement +{ + if (_grade >= LOWEST_GRADE) + throw(Bureaucrat::GradeTooLowException()); + _grade++; + return *this; +} + +Bureaucrat Bureaucrat::operator--(int) // Post-decrement +{ + Bureaucrat temp(*this); + --(*this); + return temp; +} + +int Bureaucrat::getGrade() const +{ + return _grade; +} + +const std::string Bureaucrat::getName() const +{ + return _name; +} + +void Bureaucrat::signForm(Form &form) +{ + try { + form.beSigned(*this); + std::cout << BUREAUCRAT << _name << " signs " << form.getName() << std::endl; + } catch (std::exception &e) { + std::cout << BUREAUCRAT << _name << " cannot sign " << form.getName() << " because: " << e.what() << std::endl; + } +} + +const char *Bureaucrat::GradeTooHighException::what() const throw() +{ + return "Grade too high!"; +} + +const char *Bureaucrat::GradeTooLowException::what() const throw() +{ + return "Grade too low!"; +} + +std::ostream &operator<<(std::ostream &os, const Bureaucrat &bureaucrat) +{ + std::cout << bureaucrat.getName() << ", bureaucrat grade " << bureaucrat.getGrade(); + return os; +} diff --git a/ex01/src/Form.cpp b/ex01/src/Form.cpp new file mode 100644 index 0000000..7285caf --- /dev/null +++ b/ex01/src/Form.cpp @@ -0,0 +1,89 @@ +#include +#include + +#include "Form.hpp" +#include "colors.h" + +#define COLOR BOLD BACKGROUND5 +#define FORM COLOR " Form: " RESET " " +#define CONSTRUCTOR FORM "Constructor called" +#define PARAMETERIZED_CONSTRUCTOR FORM "Parameterized constructor called" +#define DESTRUCTOR FORM "Destructor called" +#define COPY_CONSTRUCTOR FORM "Copy constructor called" + +Form::Form(std::string name, int signGrade, int executeGrade) + : _name(name), _isSigned(false), _signGrade(signGrade), _executeGrade(executeGrade) +{ + std::cout << PARAMETERIZED_CONSTRUCTOR << std::endl; + if (signGrade < 1 || executeGrade < 1) + throw GradeTooHighException(); + if (signGrade > 150 || executeGrade > 150) + throw GradeTooLowException(); + std::cout << FORM << *this << std::endl; +} + +Form::Form(const Form &other) + : _name(other._name), _isSigned(other._isSigned), _signGrade(other._signGrade), _executeGrade(other._executeGrade) +{ + std::cout << COPY_CONSTRUCTOR << std::endl; + std::cout << FORM << *this << std::endl; +} + +Form::~Form() +{ + std::cout << DESTRUCTOR << std::endl; +} + +const std::string &Form::getName() const +{ + return _name; +} + +bool Form::getIsSigned() const +{ + return _isSigned; +} + +int Form::getSignGrade() const +{ + return _signGrade; +} + +int Form::getExecuteGrade() const +{ + return _executeGrade; +} + +void Form::beSigned(const Bureaucrat &bureaucrat) +{ + if (_isSigned) + throw FormAlreadySignedException(); + if (bureaucrat.getGrade() > _signGrade) + throw GradeTooLowException(); + _isSigned = true; +} + +const char *Form::GradeTooHighException::what() const throw() +{ + return "Form grade is too high!"; +} + +const char *Form::GradeTooLowException::what() const throw() +{ + return "Form grade is too low!"; +} + +const char *Form::FormAlreadySignedException::what() const throw() +{ + return "Form is already signed!"; +} + +std::ostream &operator<<(std::ostream &os, const Form &form) +{ + os << "Form Name: " << form.getName() + << ", Is Signed: " << (form.getIsSigned() ? "Yes" : "No") + << ", Sign Grade: " << form.getSignGrade() + << ", Execute Grade: " << form.getExecuteGrade(); + return os; +} + diff --git a/ex01/src/main.cpp b/ex01/src/main.cpp new file mode 100644 index 0000000..3eb37bf --- /dev/null +++ b/ex01/src/main.cpp @@ -0,0 +1,155 @@ +#include +#include + +#include "Bureaucrat.hpp" +#include "Form.hpp" +#include "colors.h" + +#define EXCEPTION_COLOR BOLD BACKGROUND1 +#define EXCEPTION EXCEPTION_COLOR " Exception: " RESET " " +#define INFO_COLOR ITALIC BOLD UNDERLINE GREEN +#define INFO INFO_COLOR "Info: " +#define PRINT_COLOR BOLD BACKGROUND3 +#define PRINT PRINT_COLOR " Print: " RESET " " +#define END_SCOPE ITALIC BOLD UNDERLINE RED "End of scope" RESET +#define END_SCOPE_EXCEPTION ITALIC BOLD UNDERLINE RED "End of scope with exception" RESET + +int main(void) +{ + try + { + std::cout << INFO << "Creating Bureaucrat with name 'jan' and grade 3" << RESET << std::endl; + Bureaucrat jan("Jan", 41); + std::cout << std::endl; + + std::cout << INFO << "Printing Bureaucrat..." << RESET << std::endl; + std::cout << PRINT << jan << std::endl; + std::cout << std::endl; + + std::cout << INFO << "Creating a Form with name 'Form1', sign grade 40, and execute grade 30" << RESET + << std::endl; + Form form1("Form1", 40, 30); + std::cout << std::endl; + + std::cout << INFO << "Printing Form..." << RESET << std::endl; + std::cout << PRINT << form1 << std::endl; + std::cout << std::endl; + + std::cout << INFO << "Jan tries to sign Form1..." << RESET << std::endl; + jan.signForm(form1); + std::cout << std::endl; + + std::cout << INFO << "Printing Form after signing..." << RESET << std::endl; + std::cout << PRINT << form1 << std::endl; + std::cout << std::endl; + + std::cout << INFO << "Incrementing Jan's grade..." << RESET << std::endl; + ++jan; + std::cout << std::endl; + + std::cout << INFO << "Printing Bureaucrat after incrementing..." << RESET << std::endl; + std::cout << PRINT << jan << std::endl; + std::cout << std::endl; + + std::cout << INFO << "Jan tries to sign Form1 again..." << RESET << std::endl; + jan.signForm(form1); + std::cout << std::endl; + + std::cout << INFO << "Printing Form after second signing attempt..." << RESET << std::endl; + std::cout << PRINT << form1 << std::endl; + std::cout << std::endl; + + std::cout << INFO << "Jan tries to sign Form1 again" << RESET << std::endl; + jan.signForm(form1); + std::cout << std::endl; + + std::cout << INFO << "Destructing..." << RESET << std::endl; + std::cout << END_SCOPE << std::endl; + } + catch (std::exception &e) + { + std::cerr << EXCEPTION << e.what() << std::endl; + std::cout << END_SCOPE_EXCEPTION << std::endl; + } + std::cout << std::endl; + + std::cout << INFO << "Testing Exceptions..." << RESET << std::endl; + std::cout << std::endl; + try + { + std::cout << INFO << "Creating Bureaucrat with name 'Invalid' and grade 0" << RESET << std::endl; + Bureaucrat invalid("Invalid", 0); + std::cout << END_SCOPE << std::endl; + } + catch (std::exception &e) + { + std::cerr << EXCEPTION << e.what() << std::endl; + std::cout << END_SCOPE_EXCEPTION << std::endl; + } + std::cout << std::endl; + + try + { + std::cout << INFO << "Creating Bureaucrat with name 'Invalid' and grade 151" << RESET << std::endl; + Bureaucrat invalid("Invalid", 151); + std::cout << END_SCOPE << std::endl; + } + catch (std::exception &e) + { + std::cerr << EXCEPTION << e.what() << std::endl; + std::cout << END_SCOPE_EXCEPTION << std::endl; + } + std::cout << std::endl; + + try + { + std::cout << INFO << "Creating Form with name 'InvalidForm', sign grade 0, and execute grade 30" << RESET + << std::endl; + Form invalidForm("InvalidForm", 0, 30); + std::cout << END_SCOPE << std::endl; + } + catch (std::exception &e) + { + std::cerr << EXCEPTION << e.what() << std::endl; + std::cout << END_SCOPE_EXCEPTION << std::endl; + } + std::cout << std::endl; + + try + { + std::cout << INFO << "Creating Form with name 'InvalidForm', sign grade 40, and execute grade 151" << RESET + << std::endl; + Form invalidForm("InvalidForm", 40, 151); + std::cout << END_SCOPE << std::endl; + } + catch (std::exception &e) + { + std::cerr << EXCEPTION << e.what() << std::endl; + std::cout << END_SCOPE_EXCEPTION << std::endl; + } + std::cout << std::endl; + + std::cout << INFO << "Testing signing with Bureaucrat with grade too low using Form::beSigned()" << RESET + << std::endl; + try + { + std::cout << INFO << "Creating Bureaucrat with name 'Peter' and grade 50" << RESET << std::endl; + Bureaucrat peter("Peter", 50); + std::cout << std::endl; + + std::cout << INFO << "Creating Form with name 'Form2', sign grade 40, and execute grade 30" << RESET + << std::endl; + Form form2("Form2", 40, 30); + std::cout << std::endl; + + std::cout << INFO << "Peter tries to sign Form2..." << RESET << std::endl; + form2.beSigned(peter); + std::cout << END_SCOPE << std::endl; + } + catch (std::exception &e) + { + std::cerr << EXCEPTION << e.what() << std::endl; + std::cout << END_SCOPE_EXCEPTION << std::endl; + } + std::cout << END_SCOPE << std::endl; +}