/* ************************************************************************** */ /* */ /* ::: :::::::: */ /* Fixed.cpp :+: :+: :+: */ /* +:+ +:+ +:+ */ /* By: adjoly <adjoly@student.42angouleme.fr> +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/11/12 21:14:55 by adjoly #+# #+# */ /* Updated: 2024/11/19 16:29:28 by adjoly ### ########.fr */ /* */ /* ************************************************************************** */ #include "Fixed.hpp" #include <cmath> #include <iostream> 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); }