From 6169d697a5be59426d034b878bffc848de49491d Mon Sep 17 00:00:00 2001 From: Charles Cabergs Date: Wed, 18 Nov 2020 10:30:31 +0100 Subject: Added cpp06/ex01 and ex02 --- cpp06/ex01/Makefile | 35 +++++++++++++++ cpp06/ex01/main.cpp | 100 +++++++++++++++++++++++++++++++++++++++++++ cpp06/ex01/serialization.hpp | 32 ++++++++++++++ 3 files changed, 167 insertions(+) create mode 100644 cpp06/ex01/Makefile create mode 100644 cpp06/ex01/main.cpp create mode 100644 cpp06/ex01/serialization.hpp (limited to 'cpp06/ex01') diff --git a/cpp06/ex01/Makefile b/cpp06/ex01/Makefile new file mode 100644 index 0000000..fff9a9f --- /dev/null +++ b/cpp06/ex01/Makefile @@ -0,0 +1,35 @@ +# ############################################################################ # +# # +# ::: :::::::: # +# Makefile :+: :+: :+: # +# +:+ +:+ +:+ # +# By: charles +#+ +:+ +#+ # +# +#+#+#+#+#+ +#+ # +# Created: 2020/11/18 09:31:16 by charles #+# #+# # +# Updated: 2020/11/18 10:17:03 by charles ### ########.fr # +# # +# ############################################################################ # + +NAME = serialization + +CXX = clang++ +CXXFLAGS = -std=c++98 -Wall -Wextra -Werror + +SRC = main.cpp +OBJ = $(SRC:.cpp=.o) + +all: $(NAME) + +$(NAME): $(OBJ) + $(CXX) -o $@ $^ + +%.o: %.cpp + $(CXX) $(CXXFLAGS) -c -o $@ $^ + +clean: + rm -f $(OBJ) + +fclean: clean + rm -f $(NAME) + +re: fclean all diff --git a/cpp06/ex01/main.cpp b/cpp06/ex01/main.cpp new file mode 100644 index 0000000..3786106 --- /dev/null +++ b/cpp06/ex01/main.cpp @@ -0,0 +1,100 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* main.cpp :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: charles +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2020/11/18 09:32:02 by charles #+# #+# */ +/* Updated: 2020/11/18 10:22:26 by charles ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include +#include +#include +#include +#include +#include +#include + +#include "serialization.hpp" + +void generate_chars(char c[8]) +{ + char choices[] = + { + 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', + 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', + 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', + 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', + '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' + }; + for (int i = 0; i < 8; i++) + c[i] = choices[rand() % (sizeof(choices) / sizeof(char))]; +} + +void* serialize(void) +{ + RawData *d = new RawData; + + static const char choices[] = + { + 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', + 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', + 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', + 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', + '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' + }; + size_t choices_len = sizeof(choices) / sizeof(char); + for (int i = 0; i < 8; i++) + { + d->c1[i] = choices[rand() % choices_len]; + d->c2[i] = choices[rand() % choices_len]; + } + d->n = rand() % INT_MAX; + return reinterpret_cast(d); +} + +Data* deserialize(void* raw) +{ + RawData *raw_data = reinterpret_cast(raw); + Data *data = new Data; + + char tmp[9] = {'\0'}; + memcpy(tmp, raw_data->c1, 8 * sizeof(char)); + data->s1 = tmp; + memcpy(tmp, raw_data->c2, 8 * sizeof(char)); + data->s2 = tmp; + data->n = raw_data->n; + return data; +} + +int main() +{ + int seed; + std::ifstream devRandom("/dev/random"); + if (devRandom.is_open()) + { + devRandom.read((char*)&seed, sizeof(int)); + devRandom.close(); + } + else + { + seed = time(NULL); + } + srand(seed); + + for (int i = 0; i < 20; i++) + { + void *raw = serialize(); + Data *data = deserialize(raw); + std::cout << "s1: " << data->s1 + << ", n: " << std::setw(10) << data->n + << ", s2: " << data->s2 + << std::endl; + delete reinterpret_cast(raw); + delete data; + } + return 0; +} diff --git a/cpp06/ex01/serialization.hpp b/cpp06/ex01/serialization.hpp new file mode 100644 index 0000000..36a5434 --- /dev/null +++ b/cpp06/ex01/serialization.hpp @@ -0,0 +1,32 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* serialization.hpp :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: charles +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2020/11/18 10:22:17 by charles #+# #+# */ +/* Updated: 2020/11/18 10:22:35 by charles ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#ifndef SERIALIZATION_HPP +# define SERIALIZATION_HPP + +# include + +struct RawData +{ + char c1[8]; + int n; + char c2[8]; +}; + +struct Data +{ + std::string s1; + int n; + std::string s2; +}; + +#endif -- cgit