diff --git a/ex05/Makefile b/ex05/Makefile new file mode 100644 index 0000000..19aa947 --- /dev/null +++ b/ex05/Makefile @@ -0,0 +1,25 @@ +CXX = c++ +CXXFLAGS = -std=c++98 -Wall -Wextra -Werror -g -O0 +SRCDIR = src +OBJDIR = obj +BINDIR = bin +EXECUTABLE = harl + +SRCS = $(wildcard $(SRCDIR)/*.cpp) +OBJS = $(patsubst $(SRCDIR)/%.cpp,$(OBJDIR)/%.o,$(SRCS)) + +all: $(BINDIR)/$(EXECUTABLE) + +$(OBJDIR)/%.o: $(SRCDIR)/%.cpp + $(CXX) $(CXXFLAGS) -c $< -o $@ + +$(BINDIR)/$(EXECUTABLE): $(OBJS) + $(CXX) $(CXXFLAGS) $^ -o $@ + +clean: + rm -rf $(OBJDIR)/*.o + +fclean: clean + rm -fr $(BINDIR)/$(EXECUTABLE) + +re: fclean all diff --git a/ex05/src/Harl.cpp b/ex05/src/Harl.cpp new file mode 100644 index 0000000..934f1df --- /dev/null +++ b/ex05/src/Harl.cpp @@ -0,0 +1,47 @@ +#include "Harl.hpp" +#include +#include + +void Harl::complain(std::string level) +{ + static const HarlMethod methods[4] = { + &Harl::debug, + &Harl::info, + &Harl::warning, + &Harl::error, + }; + static const std::string strings[4] = { + "DEBUG", + "INFO", + "WARNING", + "ERROR" + }; + for (size_t i = 0; i < 4; i++) + { + if (strings[i] == level) + { + (this->*methods[i])(); + return; + } + } +} + +void Harl::debug() const +{ + std::cout << "I love having extra bacon for my 7XL-double-cheese-triple-pickle-special-ketchup burger. I really do !" << std::endl; +} + +void Harl::info() const +{ + std::cout << "I cannot believe adding extra bacon costs more money. You didn’t put enough bacon in my burger ! If you did, I wouldn’t be asking for more !" << std::endl; +} + +void Harl::warning() const +{ + std::cout << "I think I deserve to have some extra bacon for free. I’ve been coming for years whereas you started working here since last month." << std::endl; +} + +void Harl::error() const +{ + std::cout << "This is unacceptable ! I want to speak to the manager now." << std::endl; +} diff --git a/ex05/src/Harl.hpp b/ex05/src/Harl.hpp new file mode 100644 index 0000000..f3f4371 --- /dev/null +++ b/ex05/src/Harl.hpp @@ -0,0 +1,16 @@ +#pragma once +#include + +class Harl +{ + private: + void debug() const; + void info() const; + void warning() const; + void error() const; + + public: + void complain(std::string level); +}; + +typedef void (Harl::*HarlMethod)() const; diff --git a/ex05/src/main.cpp b/ex05/src/main.cpp new file mode 100644 index 0000000..ac7f980 --- /dev/null +++ b/ex05/src/main.cpp @@ -0,0 +1,19 @@ +#include "Harl.hpp" + +int main() +{ + Harl harl; + static const std::string levels[] = { + "DEBUG", + "INFO", + "WARNING", + "GOLEM", + "ERROR", + "PASLU", + "FLEMME", + "PANIC" + }; + for (int i = 0; i < 6; i++) + harl.complain(levels[i]); + return 0; +} diff --git a/ex06/Makefile b/ex06/Makefile new file mode 100644 index 0000000..19aa947 --- /dev/null +++ b/ex06/Makefile @@ -0,0 +1,25 @@ +CXX = c++ +CXXFLAGS = -std=c++98 -Wall -Wextra -Werror -g -O0 +SRCDIR = src +OBJDIR = obj +BINDIR = bin +EXECUTABLE = harl + +SRCS = $(wildcard $(SRCDIR)/*.cpp) +OBJS = $(patsubst $(SRCDIR)/%.cpp,$(OBJDIR)/%.o,$(SRCS)) + +all: $(BINDIR)/$(EXECUTABLE) + +$(OBJDIR)/%.o: $(SRCDIR)/%.cpp + $(CXX) $(CXXFLAGS) -c $< -o $@ + +$(BINDIR)/$(EXECUTABLE): $(OBJS) + $(CXX) $(CXXFLAGS) $^ -o $@ + +clean: + rm -rf $(OBJDIR)/*.o + +fclean: clean + rm -fr $(BINDIR)/$(EXECUTABLE) + +re: fclean all diff --git a/ex06/src/Harl.cpp b/ex06/src/Harl.cpp new file mode 100644 index 0000000..934f1df --- /dev/null +++ b/ex06/src/Harl.cpp @@ -0,0 +1,47 @@ +#include "Harl.hpp" +#include +#include + +void Harl::complain(std::string level) +{ + static const HarlMethod methods[4] = { + &Harl::debug, + &Harl::info, + &Harl::warning, + &Harl::error, + }; + static const std::string strings[4] = { + "DEBUG", + "INFO", + "WARNING", + "ERROR" + }; + for (size_t i = 0; i < 4; i++) + { + if (strings[i] == level) + { + (this->*methods[i])(); + return; + } + } +} + +void Harl::debug() const +{ + std::cout << "I love having extra bacon for my 7XL-double-cheese-triple-pickle-special-ketchup burger. I really do !" << std::endl; +} + +void Harl::info() const +{ + std::cout << "I cannot believe adding extra bacon costs more money. You didn’t put enough bacon in my burger ! If you did, I wouldn’t be asking for more !" << std::endl; +} + +void Harl::warning() const +{ + std::cout << "I think I deserve to have some extra bacon for free. I’ve been coming for years whereas you started working here since last month." << std::endl; +} + +void Harl::error() const +{ + std::cout << "This is unacceptable ! I want to speak to the manager now." << std::endl; +} diff --git a/ex06/src/Harl.hpp b/ex06/src/Harl.hpp new file mode 100644 index 0000000..f3f4371 --- /dev/null +++ b/ex06/src/Harl.hpp @@ -0,0 +1,16 @@ +#pragma once +#include + +class Harl +{ + private: + void debug() const; + void info() const; + void warning() const; + void error() const; + + public: + void complain(std::string level); +}; + +typedef void (Harl::*HarlMethod)() const; diff --git a/ex06/src/main.cpp b/ex06/src/main.cpp new file mode 100644 index 0000000..ba796ab --- /dev/null +++ b/ex06/src/main.cpp @@ -0,0 +1,28 @@ +#include "Harl.hpp" +#include + +int main(int ac, char **av) +{ + Harl harl; + static const std::string levels[] = { + "DEBUG", + "INFO", + "WARNING", + "GOLEM", + "ERROR", + "PASLU", + "FLEMME", + "PANIC" + }; + for (int i = 0; i < 7; i++) + { + if (ac > 1 && levels[i] != av[1]) + harl.complain(levels[i]); + else + { + std::cerr << "ERROR" << std::endl; + return (1); + } + } + return (0); +}