From e3ff4a9bc99855d0c7702622353edf089bc22420 Mon Sep 17 00:00:00 2001 From: Leo Firmin Date: Mon, 2 Feb 2026 00:50:54 +0100 Subject: [PATCH] push ex01 --- ex00/Main.cpp | 23 ++++++----------------- ex00/Makefile | 2 +- ex00/ScalarConverter.cpp | 10 +++++----- ex01/Data.hpp | 9 +++++++++ ex01/Main.cpp | 39 +++++++++++++++++++++++++++++++++++++++ ex01/Makefile | 36 ++++++++++++++++++++++++++++++++++++ ex01/Serializer.cpp | 31 +++++++++++++++++++++++++++++++ ex01/Serializer.hpp | 24 ++++++++++++++++++++++++ 8 files changed, 151 insertions(+), 23 deletions(-) create mode 100644 ex01/Data.hpp create mode 100644 ex01/Main.cpp create mode 100644 ex01/Makefile create mode 100644 ex01/Serializer.cpp create mode 100644 ex01/Serializer.hpp diff --git a/ex00/Main.cpp b/ex00/Main.cpp index 5dfa0c0..d6d2167 100644 --- a/ex00/Main.cpp +++ b/ex00/Main.cpp @@ -2,23 +2,12 @@ int main(int argc, char **argv) { - std::cout << std::endl; - if (argc < 2) - std::cout << "Usage: ./convert ..." << std::endl; - - int i = 1; - - while (argv[i]) - { - std::cout << "############## OUTPUT " << i << " ##############" << std::endl; - std::cout << "user input:\t\"" << argv[i] << "\"" << std::endl; - - if (argv[i][0]) - ScalarConverter::convert(argv[i++]); - else - std::cout << "Argument " << i++ << " is empty." << std::endl; - std::cout << std::endl; - } + if (argc != 2) + { + std::cerr << "Usage: ./convert " << std::endl; + return 1; + } + ScalarConverter::convert(argv[1]); return (0); } \ No newline at end of file diff --git a/ex00/Makefile b/ex00/Makefile index 839085e..a432d54 100644 --- a/ex00/Makefile +++ b/ex00/Makefile @@ -3,7 +3,7 @@ CXXFLAGS = -Wall -Wextra -Werror -std=c++98 OBJDIR = obj SOURCES = Main.cpp ScalarConverter.cpp OBJECTS = $(addprefix $(OBJDIR)/, $(SOURCES:.cpp=.o)) -NAME = Bureaucrat +NAME = ScalarConverter all: $(NAME) diff --git a/ex00/ScalarConverter.cpp b/ex00/ScalarConverter.cpp index a7c0311..3d9a231 100644 --- a/ex00/ScalarConverter.cpp +++ b/ex00/ScalarConverter.cpp @@ -205,14 +205,14 @@ void ScalarConverter::toOther(const std::string &input) void ScalarConverter::convert(const std::string &input) { - if (isChar(input)) + if (isInt(input)) + toInt(input); + else if (isChar(input)) toChar(input); - else if (isInt(input)) - toInt(input); //////////////// else if (isFloat(input)) - toFloat(input); ////////////// + toFloat(input); else if (isDouble(input)) - toDouble(input); ///////////// + toDouble(input); else if (isOther(input)) toOther(input); else diff --git a/ex01/Data.hpp b/ex01/Data.hpp new file mode 100644 index 0000000..5b5f616 --- /dev/null +++ b/ex01/Data.hpp @@ -0,0 +1,9 @@ +#ifndef DATA_HPP +#define DATA_HPP + +typedef struct Data +{ + int value; +} Data; + +#endif \ No newline at end of file diff --git a/ex01/Main.cpp b/ex01/Main.cpp new file mode 100644 index 0000000..d5abdf2 --- /dev/null +++ b/ex01/Main.cpp @@ -0,0 +1,39 @@ + +#include "Serializer.hpp" +#include "Data.hpp" + +int main() +{ + Data data; + Data* ptr; + uintptr_t raw; + Data* result; + + // Initialiser Data + data.value = 42; + + ptr = &data; + + std::cout << "Original pointer: " << ptr << std::endl; + std::cout << "Value: " << ptr->value << std::endl; + std::cout << std::endl; + + // Serialize + raw = Serializer::serialize(ptr); + std::cout << "Serialized: " << raw << std::endl; + std::cout << std::endl; + + // Deserialize + result = Serializer::deserialize(raw); + std::cout << "Deserialized pointer: " << result << std::endl; + std::cout << "Value: " << result->value << std::endl; + std::cout << std::endl; + + // Verification + if (ptr == result) + std::cout << "โœ“ Success: pointers are equal" << std::endl; + else + std::cout << "โœ— Error: pointers differ" << std::endl; + + return 0; +} \ No newline at end of file diff --git a/ex01/Makefile b/ex01/Makefile new file mode 100644 index 0000000..ac353f5 --- /dev/null +++ b/ex01/Makefile @@ -0,0 +1,36 @@ +CXX = c++ +CXXFLAGS = -Wall -Wextra -Werror -std=c++98 +OBJDIR = obj +SOURCES = Serializer.cpp Main.cpp +OBJECTS = $(addprefix $(OBJDIR)/, $(SOURCES:.cpp=.o)) +NAME = Serializer + +all: $(NAME) + +$(OBJDIR): + @echo "๐Ÿ“ Creating obj directory..." + @mkdir -p $(OBJDIR) + +$(OBJDIR)/%.o: %.cpp | $(OBJDIR) + @echo "๐Ÿง  Compiling $< ..." + @$(CXX) $(CXXFLAGS) -c $< -o $@ + @echo "โœ… $@ ready!" + +$(NAME): $(OBJECTS) + @echo "๐Ÿ”— Linking $(NAME) ..." + @$(CXX) $(CXXFLAGS) $(OBJECTS) -o $(NAME) + @echo "๐ŸŽ‰ $(NAME) is ready!" + +clean: + @echo "๐Ÿงน Cleaning object files..." + @rm -rf $(OBJDIR) + @echo "โœจ Objects cleaned!" + +fclean: clean + @echo "๐Ÿ—‘๏ธ Removing $(NAME)..." + @rm -f $(NAME) + @echo "๐Ÿ’€ Full clean complete!" + +re: fclean all + +.PHONY: all clean fclean re diff --git a/ex01/Serializer.cpp b/ex01/Serializer.cpp new file mode 100644 index 0000000..d3c0183 --- /dev/null +++ b/ex01/Serializer.cpp @@ -0,0 +1,31 @@ +#include "Serializer.hpp" + + +Serializer::Serializer() +{ +} + +Serializer::Serializer(const Serializer &src) +{ + (void)src; +} + +Serializer& Serializer::operator=(const Serializer &src) +{ + (void)src; + return (*this); +} + +Serializer::~Serializer() +{ +} + +uintptr_t Serializer::serialize(Data* ptr) +{ + return (reinterpret_cast(ptr)); +} + +Data* Serializer::deserialize(uintptr_t raw) +{ + return (reinterpret_cast(raw)); +} \ No newline at end of file diff --git a/ex01/Serializer.hpp b/ex01/Serializer.hpp new file mode 100644 index 0000000..4ce2160 --- /dev/null +++ b/ex01/Serializer.hpp @@ -0,0 +1,24 @@ +#ifndef SERIALIZER_HPP +#define SERIALIZER_HPP + +#include +#include +#include +#include "Data.hpp" + +class Serializer +{ + private: + Serializer(void); + Serializer(Serializer const &src); + ~Serializer(void); + Serializer& operator=(Serializer const &rhs); + + public: + static uintptr_t serialize(Data* ptr); + static Data* deserialize(uintptr_t raw); + + +}; + +#endif \ No newline at end of file