From 2e68c5daef3a08ee31750b4e2771dbf6340c6132 Mon Sep 17 00:00:00 2001 From: hugogogo Date: Mon, 14 Mar 2022 12:53:25 +0100 Subject: [PATCH] d08 ex02 fini, piscine finie :p --- d08/ex02/Makefile | 80 +++++++++++++++++++++++++++++++++++++++ d08/ex02/MutantStack.hpp | 29 ++++++++++++++ d08/ex02/colors.h | 25 ++++++++++++ d08/ex02/main.cpp | 62 ++++++++++++++++++++++++++++++ d08/ex02/mutantstack | Bin 0 -> 33736 bytes 5 files changed, 196 insertions(+) create mode 100644 d08/ex02/Makefile create mode 100644 d08/ex02/MutantStack.hpp create mode 100644 d08/ex02/colors.h create mode 100644 d08/ex02/main.cpp create mode 100755 d08/ex02/mutantstack diff --git a/d08/ex02/Makefile b/d08/ex02/Makefile new file mode 100644 index 0000000..1715a65 --- /dev/null +++ b/d08/ex02/Makefile @@ -0,0 +1,80 @@ +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # +# . name = value \ . += append to a variable # +# VARIABLES . value . != set result of command # +# . name is case sensitive . ?= set if not already set # +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # + +NAME = mutantstack + +#TYPE = c +TYPE = cpp + +ifeq "$(TYPE)" "c" + CC = c + EXT = c +else ifeq "$(TYPE)" "cpp" + CC = clang++ + EXT = cpp +endif + +CFLAGS = -Wall -Wextra -Werror $(INCLUDES) +ifeq "$(TYPE)" "cpp" + CFLAGS += -std=c++98 +endif + +VPATH = $(D_SRCS) + +LIBS = + +INCLUDES = -I$(D_HEADERS) + +D_SRCS = . +SRCS = main.cpp + +D_HEADERS = . +HEADERS = +#HEADERS = colors.h \ +# MutantStack.hpp + +D_OBJS = builds +OBJS = $(SRCS:%.$(EXT)=$(D_OBJS)/%.o) + +ifeq "$(D_OBJS)" "." + RM_OBJS = rm -f $(OBJS) +else + RM_OBJS = rm -rf $(D_OBJS) +endif + + +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # +# . target: prerequisites . $@ : target # +# RULES . recipe . $< : 1st prerequisite # +# . recipe . $^ : all prerequisites # +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # + +all: $(NAME) + +$(D_OBJS)/%.o: %.$(EXT) | $(D_OBJS) + $(CC) $(CFLAGS) -c $< -o $@ + +$(D_OBJS): + mkdir $@ + +$(OBJS): $(HEADERS:%=$(D_HEADERS)/%) + +$(NAME): $(OBJS) + $(CC) $(OBJS) -o $@ $(LIBS) + +leaks: $(NAME) + valgrind --leak-check=full --show-leak-kinds=all ./$(NAME) + +clean: + $(RM_OBJS) + +fclean: clean + rm -f $(NAME) + +re: fclean all + +.PHONY : all clean fclean re + diff --git a/d08/ex02/MutantStack.hpp b/d08/ex02/MutantStack.hpp new file mode 100644 index 0000000..e0c2eaf --- /dev/null +++ b/d08/ex02/MutantStack.hpp @@ -0,0 +1,29 @@ +#ifndef MUTANTSTACK_HPP +# define MUTANTSTACK_HPP + +#include + +template +class MutantStack : public std::stack { + +public: + typedef T * iterator; + typedef T const * const_iterator; + + iterator begin() {return (&this->top() - (this->size() - 1));} + iterator end() {return (&this->top()+ 1);} + const_iterator begin() const {return (&this->top() - (this->size() - 1));} + const_iterator end() const {return (&this->top()+ 1);} + +// typedef typename std::stack::container_type::iterator iterator; +// typedef typename std::stack::container_type::const_iterator const_iterator; + +// iterator begin() {return this->c.begin();} +// iterator end() {return this->c.end();} +// const_iterator begin() const {return this->c.begin();} +// const_iterator end() const {return this->c.end();} + +}; + +#endif + diff --git a/d08/ex02/colors.h b/d08/ex02/colors.h new file mode 100644 index 0000000..0374e42 --- /dev/null +++ b/d08/ex02/colors.h @@ -0,0 +1,25 @@ +#ifndef COLORS_H +# define COLORS_H + +# define GRAY "\e[0;30m" +# define RED "\e[0;31m" +# define GREEN "\e[0;32m" +# define YELLOW "\e[0;33m" +# define BLUE "\e[0;34m" +# define PURPLE "\e[0;35m" +# define CYAN "\e[0;36m" +# define WHITE "\e[0;37m" + +# define B_GRAY "\e[1;30m" +# define B_RED "\e[1;31m" +# define B_GREEN "\e[1;32m" +# define B_YELLOW "\e[1;33m" +# define B_BLUE "\e[1;34m" +# define B_PURPLE "\e[1;35m" +# define B_CYAN "\e[1;36m" +# define B_WHITE "\e[1;37m" + +# define RESET "\e[0m" + +#endif + diff --git a/d08/ex02/main.cpp b/d08/ex02/main.cpp new file mode 100644 index 0000000..8caf72f --- /dev/null +++ b/d08/ex02/main.cpp @@ -0,0 +1,62 @@ +#include +#include "colors.h" +#include "MutantStack.hpp" + +#define N_TEST "1" + +int main() { + int i = 0; + + std::cout << B_YELLOW "\n[" << ++i << "/" N_TEST "] " + << "test simple iterator :" RESET "\n"; + { + MutantStack mstack; + + mstack.push(7); + mstack.push(987); + mstack.push(9); + mstack.push(8); + mstack.push(34); + mstack.push(1); + + MutantStack::iterator it = mstack.begin(); + MutantStack::iterator ite = mstack.end(); + + for (; it != ite; it++) + std::cout << *it << "\n"; + } + + std::cout << B_YELLOW "\n[" << ++i << "/" N_TEST "] " + << "tests subject :" RESET "\n"; + { + MutantStack mstack; + + mstack.push(5); + mstack.push(17); + + std::cout << mstack.top() << std::endl; + mstack.pop(); + std::cout << mstack.size() << std::endl; + + mstack.push(3); + mstack.push(5); + mstack.push(737); + + mstack.push(0); + MutantStack::iterator it = mstack.begin(); + MutantStack::iterator ite = mstack.end(); + + ++it; + --it; + + while (it != ite) + { + std::cout << *it << std::endl; + ++it; + } + std::stack s(mstack); + } + + return 0; +} + diff --git a/d08/ex02/mutantstack b/d08/ex02/mutantstack new file mode 100755 index 0000000000000000000000000000000000000000..80bd292e058f02ec70cfd987533adab7c2b22018 GIT binary patch literal 33736 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