diff --git a/d01/ex06/Karen.cpp b/d01/ex06/Karen.cpp new file mode 100644 index 0000000..2aeec72 --- /dev/null +++ b/d01/ex06/Karen.cpp @@ -0,0 +1,38 @@ +#include "Karen.hpp" + + +Karen::Karen() { + + _fp[0] = &Karen::_debug; + _fp[1] = &Karen::_info; + _fp[2] = &Karen::_warning; + _fp[3] = &Karen::_error; + + _level[0] = "DEBUG"; + _level[1] = "INFO"; + _level[2] = "WARNING"; + _level[3] = "ERROR"; + + return; + +} +Karen::~Karen() {return;} + +void Karen::complain( std::string level ) { + + int size; + + size = sizeof(this->_level) / sizeof(this->_level[0]); + + for (int i = 0; i < size; i++) + { + if (level.compare(this->_level[i]) == 0) + (this->*_fp[i])(); + } + +} + +void Karen::_debug( void ) {std::cout << "debug" << '\n';} +void Karen::_info( void ) {std::cout << "info" << '\n';} +void Karen::_warning( void ) {std::cout << "warning" << '\n';} +void Karen::_error( void ) {std::cout << "error" << '\n';} diff --git a/d01/ex06/Karen.hpp b/d01/ex06/Karen.hpp new file mode 100644 index 0000000..7385055 --- /dev/null +++ b/d01/ex06/Karen.hpp @@ -0,0 +1,27 @@ +#ifndef KAREN_HPP +# define KAREN_HPP + +#include + +class Karen { + +public: + + Karen(); + ~Karen(); + + void complain( std::string level ); + +private: + + void (Karen::*_fp[4])(); + std::string _level[4]; + + void _debug( void ); + void _info( void ); + void _warning( void ); + void _error( void ); + +}; + +#endif diff --git a/d01/ex06/Makefile b/d01/ex06/Makefile new file mode 100644 index 0000000..43d12d0 --- /dev/null +++ b/d01/ex06/Makefile @@ -0,0 +1,62 @@ +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # +# . name = value . name is case sensitive # +# VARIABLES . or name = value \ . use VPATH only for .c # +# . value . or .cpp # +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # + +NAME = karenFilter + +CC = clang++ +CFLAGS = -Wall -Wextra -Werror $(INCLUDES) -std=c++98 -g3 + +VPATH = $(D_SRCS) + +LIBS = + +INCLUDES = -I$(D_HEADERS) + +D_SRCS = . +SRCS = main.cpp \ + Karen.cpp + +D_HEADERS = . +HEADERS = Karen.hpp + +D_OBJS = builds +OBJS = $(SRCS:%.cpp=$(D_OBJS)/%.o) + +RM_D_OBJS = rm -rf $(D_OBJS) +ifeq "$(D_OBJS)" "." +RM_D_OBJS = +endif + + +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # +# . target: prerequisites . $@ : target # +# RULES . recipe . $< : 1st prerequisite # +# . recipe . $^ : all prerequisites # +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # + +all: $(NAME) + +$(D_OBJS)/%.o: %.cpp | $(D_OBJS) + $(CC) $(CFLAGS) -c $< -o $@ + +$(D_OBJS): + mkdir $@ + +$(OBJS): $(HEADERS:%=$(D_HEADERS)/%) + +$(NAME): $(OBJS) + $(CC) $(OBJS) -o $@ $(LIBS) + +clean: + rm -f $(OBJS) + +fclean: clean + rm -f $(NAME) + $(RM_D_OBJS) + +re: fclean all + +.PHONY : all clean fclean re bonus run valgrind diff --git a/d01/ex06/karenFilter b/d01/ex06/karenFilter new file mode 100755 index 0000000..00922f7 Binary files /dev/null and b/d01/ex06/karenFilter differ diff --git a/d01/ex06/main.cpp b/d01/ex06/main.cpp new file mode 100644 index 0000000..cc4f03b --- /dev/null +++ b/d01/ex06/main.cpp @@ -0,0 +1,41 @@ +#include "Karen.hpp" +#include +#include + +int main(int ac, char *av[]) +{ + Karen karen; + std::string level[4] = { "DEBUG", "INFO", "WARNING", "ERROR" }; + int i; + + if (ac != 2) + return (1); + + for (i = 0; i < 4; i++) + if (level[i].compare(av[1]) == 0) + break; + + switch (i) + { + case (0): + std::cout << "[ DEBUG ]" << '\n'; + karen.complain("DEBUG"); + std::cout << '\n'; + case (1): + std::cout << "[ INFO ]" << '\n'; + karen.complain("INFO"); + std::cout << '\n'; + case (2): + std::cout << "[ WARNING ]" << '\n'; + karen.complain("WARNING"); + std::cout << '\n'; + case (3): + std::cout << "[ ERROR ]" << '\n'; + karen.complain("ERROR"); + break ; + default: + std::cout << "[ Probably complaining about insignificant problems ]" << '\n'; + } + + return (0); +}