/**************************************************************************** ** ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). ** Contact: Qt Software Information (qt-info@nokia.com) ** ** This file is part of the $MODULE$ of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** No Commercial Usage ** This file contains pre-release code and may not be distributed. ** You may use this file in accordance with the terms and conditions ** contained in the either Technology Preview License Agreement or the ** Beta Release License Agreement. ** ** GNU Lesser General Public License Usage ** Alternatively, this file may be used under the terms of the GNU Lesser ** General Public License version 2.1 as published by the Free Software ** Foundation and appearing in the file LICENSE.LGPL included in the ** packaging of this file. Please review the following information to ** ensure the GNU Lesser General Public License version 2.1 requirements ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** ** In addition, as a special exception, Nokia gives you certain ** additional rights. These rights are described in the Nokia Qt LGPL ** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this ** package. ** ** GNU General Public License Usage ** Alternatively, this file may be used under the terms of the GNU ** General Public License version 3.0 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the ** packaging of this file. Please review the following information to ** ensure the GNU General Public License version 3.0 requirements will be ** met: http://www.gnu.org/copyleft/gpl.html. ** ** If you are unsure which license is appropriate for your use, please ** contact the sales department at qt-sales@nokia.com. ** $QT_END_LICENSE$ ** ****************************************************************************/ #include "qfixedpt.h" QT_BEGIN_NAMESPACE /*! \internal Returns the fixed-point square root of \a value. */ qint64 qt_math3d_fixed_sqrt(qint64 value) { qint64 result = 0; qint64 bit = ((qint64)1) << 62; while (bit > value) bit >>= 2; while (bit != 0) { if (value >= (result + bit)) { value -= result + bit; result += (bit << 1); } result >>= 1; bit >>= 2; } return result; } /*! \class QFixedPt \brief The QFixedPt class represents fixed-point numbers within a 32-bit integer with a configurable precision. The template parameter is the number of bits of precision after the decimal point. For example, QFixedPt<5> indicates that there are 27 bits before the decimal point, and 5 bits of precision after the decimal point. */ /*! \fn QFixedPt::QFixedPt() Constructs a default fixed-point number. The initial value is undefined. */ /*! \fn QFixedPt::QFixedPt(int value) Constructs a fixed-point number from the integer \a value. */ /*! \fn QFixedPt::QFixedPt(qreal value) Constructs a fixed-point number from the floating-point \a value. */ /*! \fn QFixedPt& QFixedPt::operator=(int value) Assigns the integer \a value to this fixed-point variable. */ /*! \fn QFixedPt& QFixedPt::operator=(qreal value) Assigns the floating-point \a value to this fixed-point variable. */ /*! \fn int QFixedPt::bits() const Returns the raw bits that represent the fixed-point value of this object. \sa setBits() */ /*! \fn void QFixedPt::setBits(int value) Sets the raw bits that represent the fixed-point value of this object to \a value. \sa bits() */ #if !defined(QT_NO_MEMBER_TEMPLATES) || defined(Q_QDOC) /*! \fn QFixedPt QFixedPt::toPrecision() const Returns this fixed-point number, converted to the new fixed-point precision Prec. \sa qFixedPtToPrecision() */ #endif /*! \fn QFixedPt qFixedPtToPrecision(const QFixedPt& value) Returns the fixed-point number \a value, converted to the new fixed-point precision Prec. \sa QFixedPt::toPrecision() */ /*! \fn QFixedPt& QFixedPt::operator+=(const QFixedPt& value) Adds \a value to this fixed-point number. */ /*! \fn QFixedPt& QFixedPt::operator+=(int value) Adds an integer \a value to this fixed-point number. */ /*! \fn QFixedPt& QFixedPt::operator+=(qreal value) Adds a floating-point \a value to this fixed-point number. */ /*! \fn QFixedPt& QFixedPt::operator-=(const QFixedPt& value) Subtracts \a value from this fixed-point number. */ /*! \fn QFixedPt& QFixedPt::operator-=(int value) Subtracts an integer \a value from this fixed-point number. */ /*! \fn QFixedPt& QFixedPt::operator-=(qreal value) Subtracts a floating-point \a value from this fixed-point number. */ /*! \fn QFixedPt& QFixedPt::operator*=(const QFixedPt& value) Multiplies this fixed-point number by \a value. */ /*! \fn QFixedPt& QFixedPt::operator*=(int value) Multiplies this fixed-point number by an integer \a value. */ /*! \fn QFixedPt& QFixedPt::operator*=(qreal value) Multiplies this fixed-point number by a floating-point \a value. */ /*! \fn QFixedPt& QFixedPt::operator/=(const QFixedPt& value) Divides this fixed-point number by \a value. Division by zero will result in zero. */ /*! \fn QFixedPt& QFixedPt::operator/=(int value) Divides this fixed-point number by an integer \a value. Division by zero will result in zero. */ /*! \fn QFixedPt& QFixedPt::operator/=(qreal value) Divides this fixed-point number by a floating-point \a value. Division by zero will result in zero. */ /*! \fn QFixedPt& QFixedPt::operator<<=(int value) Shifts this fixed-point number left by \a value bits. */ /*! \fn QFixedPt& QFixedPt::operator>>=(int value) Shifts this fixed-point number right by \a value bits. */ /*! \fn QFixedPt QFixedPt::operator<<(int value) const Returns the result of shifting this fixed-point number left by \a value bits. */ /*! \fn QFixedPt QFixedPt::operator>>(int value) const Returns the result of shifting this fixed-point number right by \a value bits. */ /*! \fn bool QFixedPt::operator==(const QFixedPt& value) const Returns true if this fixed-point number is equal to \a value; false otherwise. */ /*! \fn bool operator==(const QFixedPt& v1, int v2) \relates QFixedPt Returns true if \a v1 is equal to \a v2; false otherwise. */ /*! \fn bool operator==(int v1, const QFixedPt& v2) \relates QFixedPt Returns true if \a v1 is equal to \a v2; false otherwise. */ /*! \fn bool operator==(const QFixedPt& v1, qreal v2) \relates QFixedPt Returns true if \a v1 is equal to \a v2; false otherwise. */ /*! \fn bool operator==(qreal v1, const QFixedPt& v2) \relates QFixedPt Returns true if \a v1 is equal to \a v2; false otherwise. */ /*! \fn bool QFixedPt::operator!=(const QFixedPt& value) const Returns true if this fixed-point number is not equal to \a value; false otherwise. */ /*! \fn bool operator!=(const QFixedPt& v1, int v2) \relates QFixedPt Returns true if \a v1 is not equal to \a v2; false otherwise. */ /*! \fn bool operator!=(int v1, const QFixedPt& v2) \relates QFixedPt Returns true if \a v1 is not equal to \a v2; false otherwise. */ /*! \fn bool operator!=(const QFixedPt& v1, qreal v2) \relates QFixedPt Returns true if \a v1 is not equal to \a v2; false otherwise. */ /*! \fn bool operator!=(qreal v1, const QFixedPt& v2) \relates QFixedPt Returns true if \a v1 is not equal to \a v2; false otherwise. */ /*! \fn bool QFixedPt::operator<=(const QFixedPt& value) const Returns true if this fixed-point number is less than or equal to \a value; false otherwise. */ /*! \fn bool operator<=(const QFixedPt& v1, int v2) \relates QFixedPt Returns true if \a v1 is less than or equal to \a v2; false otherwise. */ /*! \fn bool operator<=(int v1, const QFixedPt& v2) \relates QFixedPt Returns true if \a v1 is less than or equal to \a v2; false otherwise. */ /*! \fn bool operator<=(const QFixedPt& v1, qreal v2) \relates QFixedPt Returns true if \a v1 is less than or equal to \a v2; false otherwise. */ /*! \fn bool operator<=(qreal v1, const QFixedPt& v2) \relates QFixedPt Returns true if \a v1 is less than or equal to \a v2; false otherwise. */ /*! \fn bool QFixedPt::operator<(const QFixedPt& value) const Returns true if this fixed-point number is less than \a value; false otherwise. */ /*! \fn bool operator<(const QFixedPt& v1, int v2) \relates QFixedPt Returns true if \a v1 is less than \a v2; false otherwise. */ /*! \fn bool operator<(int v1, const QFixedPt& v2) \relates QFixedPt Returns true if \a v1 is less than \a v2; false otherwise. */ /*! \fn bool operator<(const QFixedPt& v1, qreal v2) \relates QFixedPt Returns true if \a v1 is less than \a v2; false otherwise. */ /*! \fn bool operator<(qreal v1, const QFixedPt& v2) \relates QFixedPt Returns true if \a v1 is less than \a v2; false otherwise. */ /*! \fn bool QFixedPt::operator>=(const QFixedPt& value) const Returns true if this fixed-point number is greater than or equal to \a value; false otherwise. */ /*! \fn bool operator>=(const QFixedPt& v1, int v2) \relates QFixedPt Returns true if \a v1 is greater than or equal to \a v2; false otherwise. */ /*! \fn bool operator>=(int v1, const QFixedPt& v2) \relates QFixedPt Returns true if \a v1 is greater than or equal to \a v2; false otherwise. */ /*! \fn bool operator>=(const QFixedPt& v1, qreal v2) \relates QFixedPt Returns true if \a v1 is greater than or equal to \a v2; false otherwise. */ /*! \fn bool operator>=(qreal v1, const QFixedPt& v2) \relates QFixedPt Returns true if \a v1 is greater than or equal to \a v2; false otherwise. */ /*! \fn bool QFixedPt::operator>(const QFixedPt& value) const Returns true if this fixed-point number is greater than \a value; false otherwise. */ /*! \fn bool operator>(const QFixedPt& v1, int v2) \relates QFixedPt Returns true if \a v1 is greater than \a v2; false otherwise. */ /*! \fn bool operator>(int v1, const QFixedPt& v2) \relates QFixedPt Returns true if \a v1 is greater than \a v2; false otherwise. */ /*! \fn bool operator>(const QFixedPt& v1, qreal v2) \relates QFixedPt Returns true if \a v1 is greater than \a v2; false otherwise. */ /*! \fn bool operator>(qreal v1, const QFixedPt& v2) \relates QFixedPt Returns true if \a v1 is greater than \a v2; false otherwise. */ /*! \fn QFixedPt QFixedPt::operator+(const QFixedPt& value) const Returns the result of adding this fixed-point number and \a value. */ /*! \fn QFixedPt QFixedPt::operator+(int value) const Returns the result of adding this fixed-point number and \a value. */ /*! \fn QFixedPt QFixedPt::operator+(qreal value) const Returns the result of adding this fixed-point number and \a value. */ /*! \fn QFixedPt operator+(int v1, const QFixedPt& v2) \relates QFixedPt Returns the result of adding \a v1 and \a v2. */ /*! \fn QFixedPt operator+(qreal v1, const QFixedPt& v2) \relates QFixedPt Returns the result of adding \a v1 and \a v2. */ /*! \fn QFixedPt QFixedPt::operator-(const QFixedPt& value) const Returns the result of subtracting \a value from this fixed-point number. */ /*! \fn QFixedPt QFixedPt::operator-(int value) const Returns the result of subtracting \a value from this fixed-point number. */ /*! \fn QFixedPt QFixedPt::operator-(qreal value) const Returns the result of subtracting \a value from this fixed-point number. */ /*! \fn QFixedPt operator-(int v1, const QFixedPt& v2) \relates QFixedPt Returns the result of subtracting \a v2 from \a v1. */ /*! \fn QFixedPt operator-(qreal v1, const QFixedPt& v2) \relates QFixedPt Returns the result of subtracting \a v2 from \a v1. */ /*! \fn QFixedPt QFixedPt::operator*(const QFixedPt& value) const Returns the result of multiplying this fixed-point number by \a value. */ /*! \fn QFixedPt QFixedPt::operator*(int value) const Returns the result of multiplying this fixed-point number by \a value. */ /*! \fn QFixedPt QFixedPt::operator*(qreal value) const Returns the result of multiplying this fixed-point number by \a value. */ /*! \fn QFixedPt operator*(int v1, const QFixedPt& v2) \relates QFixedPt Returns the result of multiplying \a v1 by \a v2. */ /*! \fn QFixedPt operator*(qreal v1, const QFixedPt& v2) \relates QFixedPt Returns the result of multiplying \a v1 by \a v2. */ /*! \fn QFixedPt QFixedPt::operator/(const QFixedPt& value) const Returns the result of dividing this fixed-point number by \a value. Division by zero will result in zero. */ /*! \fn QFixedPt QFixedPt::operator/(int value) const Returns the result of dividing this fixed-point number by \a value. Division by zero will result in zero. */ /*! \fn QFixedPt QFixedPt::operator/(qreal value) const Returns the result of dividing this fixed-point number by \a value. Division by zero will result in zero. */ /*! \fn QFixedPt operator/(int v1, const QFixedPt& v2) \relates QFixedPt Returns the result of dividing \a v1 by \a v2. Division by zero will result in zero. */ /*! \fn QFixedPt operator/(qreal v1, const QFixedPt& v2) \relates QFixedPt Returns the result of dividing \a v1 by \a v2. Division by zero will result in zero. */ /*! \fn QFixedPt QFixedPt::operator-() const Returns the negation of this fixed-point number. */ /*! \fn QFixedPt QFixedPt::sqrt() const Returns the square root of this fixed-point number. \sa sqrtF() */ /*! \fn qreal QFixedPt::sqrtF() const Return the square root of this fixed-point number as a floating-point value. \sa sqrt() */ /*! \fn QFixedPt QFixedPt::round() const Returns this fixed-point number, rounded to the nearest integer. \sa floor(), ceil(), truncate() */ /*! \fn QFixedPt QFixedPt::floor() const; Returns the largest integer that is less than or equal to this fixed-point number. \sa round(), ceil(), truncate() */ /*! \fn QFixedPt QFixedPt::ceil() const Returns the smallest integer that is greater than or equal to this fixed-point number. \sa round(), floor(), truncate() */ /*! \fn int QFixedPt::truncate() const Returns this fixed-point number with the bits after the decimal point truncated. \sa round(), floor(), ceil() */ /*! \fn int QFixedPt::toInt() const Returns this fixed-point number, rounded to the nearest integer. \sa toReal() */ /*! \fn qreal QFixedPt::toReal() const Returns this fixed-point number as a floating-point value. \sa toInt() */ /*! \fn int qCeil(const QFixedPt& value) \relates QFixedPt Returns the smallest integer that is greater than or equal to \a value. \sa qFloor(), qRound(), QFixedPt::ceil() */ /*! \fn int qFloor(const QFixedPt& value) \relates QFixedPt Returns the largest integer that is less than or equal to \a value. \sa qCeil(), qRound(), QFixedPt::floor() */ /*! \fn int qRound(const QFixedPt& value) \relates QFixedPt Returns \a value, rounded to the nearest integer. \sa qCeil(), qFloor(), QFixedPt::round() */ /*! \fn bool qFuzzyCompare(const QFixedPt& v1, const QFixedPt& v2, int compareBits) \relates QFixedPt Returns true if \a v1 is almost equal to \a v2; false otherwise. The \a compareBits parameter specifies the number of bits of precision that should be considered relevant when performing the comparison. By default, \a compareBits is PrecBits / 4. */ /*! \fn bool qIsNull(const QFixedPt& v) \relates QFixedPt Returns true if \a v is zero; false otherwise. */ QT_END_NAMESPACE