From a69f2503af881ce4132c7eb93287c9d322fc64ed Mon Sep 17 00:00:00 2001 From: Adam JOLY Date: Tue, 19 Nov 2024 16:31:58 +0100 Subject: [PATCH] =?UTF-8?q?=E3=80=8C=E2=9C=A8=E3=80=8D=20feat(Ex01):=20Fin?= =?UTF-8?q?ished?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ex00/Fixed.hpp | 4 +-- ex01/Fixed | Bin 0 -> 17512 bytes ex01/Fixed.cpp | 66 +++++++++++++++++++++++++++++++++++++++++++++++++ ex01/Fixed.hpp | 37 +++++++++++++++++++++++++++ ex01/Makefile | 55 +++++++++++++++++++++++++++++++++++++++++ ex01/main.cpp | 34 +++++++++++++++++++++++++ flake.nix | 4 +-- 7 files changed, 196 insertions(+), 4 deletions(-) create mode 100755 ex01/Fixed create mode 100644 ex01/Fixed.cpp create mode 100644 ex01/Fixed.hpp create mode 100644 ex01/Makefile create mode 100644 ex01/main.cpp diff --git a/ex00/Fixed.hpp b/ex00/Fixed.hpp index d24e84c..dbbd429 100644 --- a/ex00/Fixed.hpp +++ b/ex00/Fixed.hpp @@ -6,7 +6,7 @@ /* By: adjoly +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/11/09 19:23:08 by adjoly #+# #+# */ -/* Updated: 2024/11/12 21:49:21 by adjoly ### ########.fr */ +/* Updated: 2024/11/19 11:47:29 by adjoly ### ########.fr */ /* */ /* ************************************************************************** */ @@ -15,7 +15,7 @@ class Fixed { private: int _number; - static const int _factBit = 8; + static const int _fractBit = 8; public: Fixed(void); Fixed(const Fixed& cpy); diff --git a/ex01/Fixed b/ex01/Fixed new file mode 100755 index 0000000000000000000000000000000000000000..e167aa756186e22cfad8ee3b47faf3fefc4082f2 GIT binary patch literal 17512 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 +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/11/12 21:14:55 by adjoly #+# #+# */ +/* Updated: 2024/11/19 16:29:28 by adjoly ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "Fixed.hpp" +#include +#include + +Fixed::Fixed(void) : _number(0) { + std::cout << "Default constructor called" << std::endl; +} + +Fixed::Fixed(const int nbr) { + std::cout << "Int constructor called" << std::endl; + _number = nbr << _fractBit; +} + +Fixed::Fixed(const float nbr) { + std::cout << "Float constructor called" << std::endl; + _number = roundf(nbr * (1 << _fractBit)); +} + +Fixed::Fixed(const Fixed& cpy) { + std::cout << "Copy constructor called" << std::endl; + *this = cpy; +} + +Fixed::~Fixed(void) { + std::cout << "Destructor called" << std::endl; +} + +Fixed &Fixed::operator=(const Fixed& cpy) { + std::cout << "Copy assignment operator called" << std::endl; + if (this != &cpy) + _number = cpy.getRawBits(); + return (*this); +} + +int Fixed::toInt(void) const { + return (_number >> _fractBit); +} + +float Fixed::toFloat(void) const { + return ((float)_number / (1 << _fractBit)); +} + +int Fixed::getRawBits(void) const { + return (_number); +} + +void Fixed::setRawBits(int const raw) { + _number = raw; +} + +std::ostream &operator<<(std::ostream &file, Fixed const &fixed) { + file << fixed.toFloat(); + return (file); +} diff --git a/ex01/Fixed.hpp b/ex01/Fixed.hpp new file mode 100644 index 0000000..2e76ce8 --- /dev/null +++ b/ex01/Fixed.hpp @@ -0,0 +1,37 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* Fixed.hpp :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: adjoly +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/11/09 19:23:08 by adjoly #+# #+# */ +/* Updated: 2024/11/19 16:27:15 by adjoly ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#pragma once + +#include + +class Fixed { + private: + int _number; + static const int _fractBit = 8; + public: + Fixed(void); + Fixed(const int nbr); + Fixed(const float nbr); + Fixed(const Fixed& cpy); + Fixed& operator=(const Fixed&); + + ~Fixed(void); + + int toInt(void) const; + float toFloat(void) const; + + int getRawBits( void ) const; + void setRawBits( int const raw ); +}; + +std::ostream &operator<<(std::ostream &file, Fixed const &fixed); diff --git a/ex01/Makefile b/ex01/Makefile new file mode 100644 index 0000000..c333ff1 --- /dev/null +++ b/ex01/Makefile @@ -0,0 +1,55 @@ +# **************************************************************************** # +# # +# ::: :::::::: # +# Makefile :+: :+: :+: # +# +:+ +:+ +:+ # +# By: adjoly +#+ +:+ +#+ # +# +#+#+#+#+#+ +#+ # +# Created: 2024/10/25 16:09:27 by adjoly #+# #+# # +# Updated: 2024/11/12 21:50:23 by adjoly ### ########.fr # +# # +# **************************************************************************** # + +NAME = Fixed + +CC = c++ + +OBJSDIR = obj/ + +SRCS = main.cpp \ + Fixed.cpp + +OBJS = $(addprefix $(OBJSDIR), $(SRCS:.cpp=.o)) + +FLAGS = -Wall -Werror -Wextra -std=c++98 -MMD -MP + +RED = \033[0;31m +GREEN = \033[0;32m +YELLOW = \033[1;33m +PURPLE = \e[0;35m +NC = \033[0m +DELETE = \x1B[2K\r + +all: $(NAME) + +$(NAME): $(OBJS) + @$(CC) $(FLAGS) $(OBJS) -o $(NAME) + @printf "$(YELLOW)「✨」($(NAME)) Program compiled\n" + +$(OBJSDIR)%.o: %.cpp + @mkdir -p $(@D) + @$(CC) $(FLAGS) -c $< -o $@ + @printf "$(DELETE)$(GREEN)「🔨」($<) Object compiled\n" + +clean: + @rm -f $(OBJS) + @printf "$(DELETE)$(RED)「🗑️」($(OBJS)) Object deleted\n" + +fclean: clean + @rm -f $(NAME) + @rm -Rf $(OBJSDIR) + @printf "$(RED)「🗑️」($(NAME)) Program deleted\n" + +re: fclean all + +.PHONY: clean fclean all re diff --git a/ex01/main.cpp b/ex01/main.cpp new file mode 100644 index 0000000..168a9dc --- /dev/null +++ b/ex01/main.cpp @@ -0,0 +1,34 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* main.cpp :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: adjoly +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/11/13 20:04:36 by adjoly #+# #+# */ +/* Updated: 2024/11/19 12:53:28 by adjoly ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "Fixed.hpp" +#include + +int main( void ) { + Fixed a; + Fixed const b(10); + Fixed const c(42.42f); + Fixed const d(b); + + a = Fixed(1234.4321f); + + std::cout << "a is " << a << std::endl; + std::cout << "b is " << b << std::endl; + std::cout << "c is " << c << std::endl; + std::cout << "d is " << d << std::endl; + std::cout << "a is " << a.toInt() << " as integer" << std::endl; + std::cout << "b is " << b.toInt() << " as integer" << std::endl; + std::cout << "c is " << c.toInt() << " as integer" << std::endl; + std::cout << "d is " << d.toInt() << " as integer" << std::endl; + + return 0; +} diff --git a/flake.nix b/flake.nix index 3ce3ed9..d7c2a58 100644 --- a/flake.nix +++ b/flake.nix @@ -1,7 +1,7 @@ { description = "A Nix-flake-based C/C++ development environment"; inputs = { - nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable"; + nixpkgs.url = "github:nixos/nixpkgs/nixos-24.11"; pogit = { url = "github:y-syo/pogit"; inputs.nixpkgs.follows = "nixpkgs"; @@ -10,7 +10,7 @@ outputs = inputs@{ nixpkgs, ... }: let - supportedSystems = [ "x86_64-linux" "aarch64-linux" "x86_64-darwin" "aarch64-darwin" ]; + supportedSystems = [ "x86_64-linux" ]; forEachSupportedSystem = f: nixpkgs.lib.genAttrs supportedSystems (system: f { pkgs = import nixpkgs { inherit system; }; });