From 4b150e5671cc4f566470dfcc11cf7685f8f5f71e Mon Sep 17 00:00:00 2001 From: adjoly Date: Sat, 8 Mar 2025 20:04:33 +0100 Subject: [PATCH] =?UTF-8?q?=E3=80=8C=E2=9C=A8=E3=80=8D=20feat:=20Ex00=20fi?= =?UTF-8?q?nished?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .clang-format | 5 +++ ex00/Bureaucrat | Bin 0 -> 24256 bytes ex00/Bureaucrat.cpp | 57 +++++++++++++++++++++++++++++ ex00/Bureaucrat.hpp | 85 ++++++++++++++++++++++++++++++++++++++++++++ ex00/Makefile | 60 +++++++++++++++++++++++++++++++ ex00/main.cpp | 45 +++++++++++++++++++++++ 6 files changed, 252 insertions(+) create mode 100644 .clang-format create mode 100755 ex00/Bureaucrat create mode 100644 ex00/Bureaucrat.cpp create mode 100644 ex00/Bureaucrat.hpp create mode 100644 ex00/Makefile create mode 100644 ex00/main.cpp diff --git a/.clang-format b/.clang-format new file mode 100644 index 0000000..7a2deec --- /dev/null +++ b/.clang-format @@ -0,0 +1,5 @@ +UseTab: Always +IndentWidth: 4 +TabWidth: 4 +AlignConsecutiveDeclarations: true +ConstructorInitializerIndentWidth: 4 diff --git a/ex00/Bureaucrat b/ex00/Bureaucrat new file mode 100755 index 0000000000000000000000000000000000000000..55d06a9a1ab83bf6b1bb8676339e72d1634be16f GIT binary patch literal 24256 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 literal 0 HcmV?d00001 diff --git a/ex00/Bureaucrat.cpp b/ex00/Bureaucrat.cpp new file mode 100644 index 0000000..c7492a0 --- /dev/null +++ b/ex00/Bureaucrat.cpp @@ -0,0 +1,57 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* Bureaucrat.cpp :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: adjoly +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/12/23 13:59:45 by adjoly #+# #+# */ +/* Updated: 2025/03/08 20:00:23 by adjoly ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "Bureaucrat.hpp" + +Bureaucrat &Bureaucrat::operator=(Bureaucrat const &cpy) { + if (&cpy == this) + return *this; + _grade = cpy._grade; + return *this; +} + +Bureaucrat &Bureaucrat::operator++(void) { + _grade--; + if (_grade < MAXGRADE) + throw GradeTooHighException(); + return *this; +} + +Bureaucrat &Bureaucrat::operator--(void) { + _grade++; + if (_grade > MINGRADE) + throw GradeTooLowException(); + return *this; +} + +Bureaucrat Bureaucrat::operator++(int) { + Bureaucrat old = *this; + + _grade--; + if (_grade < MAXGRADE) + throw GradeTooHighException(); + return (old); +} + +Bureaucrat Bureaucrat::operator--(int) { + Bureaucrat old = *this; + + _grade++; + if (_grade > MINGRADE) + throw GradeTooLowException(); + return old; +} + +std::ostream &operator<<(std::ostream &os, Bureaucrat &val) { + os << val.getName() << ", bureaucrat grade " << (int)val.getGrade(); + return os; +} diff --git a/ex00/Bureaucrat.hpp b/ex00/Bureaucrat.hpp new file mode 100644 index 0000000..8664356 --- /dev/null +++ b/ex00/Bureaucrat.hpp @@ -0,0 +1,85 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* Bureaucrat.hpp :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: adjoly +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/12/23 13:59:43 by adjoly #+# #+# */ +/* Updated: 2025/03/08 19:58:18 by adjoly ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#pragma once + +#include +#include +#include +#include + +typedef unsigned char uint8_t; + +inline void _log(std::string emoji, std::string what, std::string who, + std::string str) { +#ifdef VERBOSE + if (who.empty()) + std::cout << "「" << emoji << "」" << what << ": " << str << std::endl; + else + std::cout << "「" << emoji << "」" << what << "(" << who << "): " << str + << std::endl; +#else + (void)emoji, (void)what, (void)who, (void)str; +#endif +} + +#define MAXGRADE 1 +#define MINGRADE 150 + +class Bureaucrat { + public: + Bureaucrat(void) { + _log("➕", "Bureaucrat", "", "default constructor called"); + } + Bureaucrat(const Bureaucrat &cpy) { + _log("➕", "Bureaucrat", "", "copy constructor called"); + if (&cpy != this) + *this = cpy; + } + Bureaucrat(std::string name, uint8_t grade) : _name(name), _grade(grade) { + _log("➕", "Bureaucrat", "", "constructor called"); + } + ~Bureaucrat(void) { _log("➖", "Bureaucrat", "", "destructor called"); } + + const std::string &getName(void) { return _name; } + uint8_t getGrade(void) { return _grade; } + + class GradeTooHighException : public std::exception { + public: + virtual const char *what() const throw() { + return ("Grade is too high"); + } + }; + class GradeTooLowException : public std::exception { + public: + virtual const char *what() const throw() { + return ("Grade is too low"); + } + }; + + // Copy assignement operator + Bureaucrat &operator=(Bureaucrat const &); + + // Preincrement operator + Bureaucrat &operator++(void); + Bureaucrat &operator--(void); + + // Post increment operator + Bureaucrat operator++(int); + Bureaucrat operator--(int); + + private: + const std::string _name; + uint8_t _grade; +}; + +std::ostream &operator<<(std::ostream &, Bureaucrat &); diff --git a/ex00/Makefile b/ex00/Makefile new file mode 100644 index 0000000..46eecde --- /dev/null +++ b/ex00/Makefile @@ -0,0 +1,60 @@ +# **************************************************************************** # +# # +# ::: :::::::: # +# Makefile :+: :+: :+: # +# +:+ +:+ +:+ # +# By: adjoly +#+ +:+ +#+ # +# +#+#+#+#+#+ +#+ # +# Created: 2024/10/25 16:09:27 by adjoly #+# #+# # +# Updated: 2025/03/08 19:55:47 by adjoly ### ########.fr # +# # +# **************************************************************************** # + +SHELL = bash + +NAME = Bureaucrat + +CC = c++ + +OBJSDIR = obj/ + +SRCS = $(shell find . -name '*.cpp') + +OBJS = $(addprefix $(OBJSDIR), $(SRCS:.cpp=.o)) + +FLAGS = -Wall -Werror -Wextra -std=c++98 -MMD -MP + +RED = \033[0;31m +GREEN = \033[0;32m +YELLOW = \033[1;33m +PURPLE = \e[0;35m +NC = \033[0m +DELETE = \x1B[2K\r + +ifeq ($(VERBOSE),true) + FLAGS += -D VERBOSE +endif + +all: $(NAME) + +$(NAME): $(OBJS) + @$(CC) $(FLAGS) -I . $(OBJS) -o $(NAME) + @printf "$(YELLOW)「✨」($(NAME)) Program compiled\n" + +$(OBJSDIR)%.o: %.cpp + @mkdir -p $(@D) + @$(CC) $(FLAGS) -I . -c $< -o $@ + @printf "$(DELETE)$(GREEN)「🔨」($<) Object compiled\n" + +clean: + @rm -f $(OBJS) + @printf "$(DELETE)$(RED)「🗑️」($(OBJS)) Object deleted\n" + +fclean: clean + @rm -f $(NAME) + @rm -Rf $(OBJSDIR) + @printf "$(RED)「🗑️」($(NAME)) Program deleted\n" + +re: fclean all + +.PHONY: clean fclean all re diff --git a/ex00/main.cpp b/ex00/main.cpp new file mode 100644 index 0000000..566beeb --- /dev/null +++ b/ex00/main.cpp @@ -0,0 +1,45 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* main.cpp :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: adjoly +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/12/23 14:01:11 by adjoly #+# #+# */ +/* Updated: 2025/03/08 20:04:22 by adjoly ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "Bureaucrat.hpp" +#include + +int main(void) { + Bureaucrat knl("Kanel", 10); + + knl--; + std::cout << knl << std::endl; + knl++; + std::cout << knl << std::endl; + try { + knl++; + knl++; + knl++; + knl++; + knl++; + knl++; + knl++; + knl++; + knl++; + knl++; + knl++; + knl++; + knl++; + knl++; + knl++; + knl++; + knl++; + } catch (const std::exception &e) { + std::cerr << "Error : " << e.what() << std::endl; + } + std::cout << knl << std::endl; +}