From d26289ffb43a5fcf34e855db1dfbf42aa03c4f5a Mon Sep 17 00:00:00 2001 From: Erik Verbruggen Date: Tue, 7 Aug 2018 12:29:21 +0200 Subject: [PATCH] Add ++/--/min/max to QSpecialInteger Add both prefix and postfix versions of the increment/decrement operators, and a static constexpr min/max which returns the minimum/maximumm values that can be stored in the QSpecialInteger. These latter functions are useful to define constants, e.g.: typedef quint8_be IPv4_TTL; static constexpr TTL_TO_DROP = IPv4_TTL::min(); Change-Id: I825a279feb68b93572765a9fdb5aa7b06d1be35b Reviewed-by: Thiago Macieira --- src/corelib/global/qendian.cpp | 80 ++++++++++++++++++++++++++++++++++ src/corelib/global/qendian.h | 40 +++++++++++++++++ 2 files changed, 120 insertions(+) diff --git a/src/corelib/global/qendian.cpp b/src/corelib/global/qendian.cpp index 5bc5507dd59..7fd6e13d3b7 100644 --- a/src/corelib/global/qendian.cpp +++ b/src/corelib/global/qendian.cpp @@ -432,6 +432,46 @@ QT_BEGIN_NAMESPACE this object. */ +/*! + \fn template QLEInteger &QLEInteger::operator++() + + Performs a prefix ++ (increment) on this QLEInteger and returns a reference to + this object. +*/ + +/*! + \fn template QLEInteger QLEInteger::operator++(int) + + Performs a postfix ++ (increment) on this QLEInteger and returns a reference to + this object. +*/ + +/*! + \fn template QLEInteger &QLEInteger::operator--() + + Performs a prefix -- (decrement) on this QLEInteger and returns a reference to + this object. +*/ + +/*! + \fn template QLEInteger QLEInteger::operator--(int) + + Performs a postfix -- (decrement) on this QLEInteger and returns a reference to + this object. +*/ + +/*! + \fn template QLEInteger QLEInteger::max() + + Returns the maximum (finite) value representable by the numeric type T. +*/ + +/*! + \fn template QLEInteger QLEInteger::min() + + Returns the minimum (finite) value representable by the numeric type T. +*/ + /*! \class QBEInteger \inmodule QtCore @@ -551,6 +591,46 @@ QT_BEGIN_NAMESPACE this object. */ +/*! + \fn template QBEInteger &QBEInteger::operator++() + + Performs a prefix ++ (increment) on this QBEInteger and returns a reference to + this object. +*/ + +/*! + \fn template QBEInteger QBEInteger::operator++(int) + + Performs a postfix ++ (increment) on this QBEInteger and returns a reference to + this object. +*/ + +/*! + \fn template QBEInteger &QBEInteger::operator--() + + Performs a prefix -- (decrement) on this QBEInteger and returns a reference to + this object. +*/ + +/*! + \fn template QBEInteger QBEInteger::operator--(int) + + Performs a postfix -- (decrement) on this QBEInteger and returns a reference to + this object. +*/ + +/*! + \fn template QBEInteger QBEInteger::max() + + Returns the maximum (finite) value representable by the numeric type T. +*/ + +/*! + \fn template QBEInteger QBEInteger::min() + + Returns the minimum (finite) value representable by the numeric type T. +*/ + /*! \typedef quint16_le \relates diff --git a/src/corelib/global/qendian.h b/src/corelib/global/qendian.h index 135bc4460b3..1cc8a823d9c 100644 --- a/src/corelib/global/qendian.h +++ b/src/corelib/global/qendian.h @@ -47,6 +47,11 @@ #include #include +#ifdef min // MSVC +#undef min +#undef max +#endif + QT_BEGIN_NAMESPACE /* @@ -279,6 +284,27 @@ public: { return (*this = S::fromSpecial(val) & i); } QSpecialInteger &operator ^=(T i) { return (*this = S::fromSpecial(val) ^ i); } + QSpecialInteger &operator ++() + { return (*this = S::fromSpecial(val) + 1); } + QSpecialInteger &operator --() + { return (*this = S::fromSpecial(val) - 1); } + QSpecialInteger operator ++(int) + { + QSpecialInteger pre = *this; + *this += 1; + return pre; + } + QSpecialInteger operator --(int) + { + QSpecialInteger pre = *this; + *this -= 1; + return pre; + } + + static constexpr QSpecialInteger max() + { return QSpecialInteger(std::numeric_limits::max()); } + static constexpr QSpecialInteger min() + { return QSpecialInteger(std::numeric_limits::min()); } }; template @@ -316,6 +342,13 @@ public: QLEInteger &operator |=(T i); QLEInteger &operator &=(T i); QLEInteger &operator ^=(T i); + QLEInteger &operator ++(); + QLEInteger &operator --(); + QLEInteger &operator ++(int); + QLEInteger &operator --(int); + + static constexpr QLEInteger max(); + static constexpr QLEInteger min(); }; template @@ -336,6 +369,13 @@ public: QBEInteger &operator |=(T i); QBEInteger &operator &=(T i); QBEInteger &operator ^=(T i); + QBEInteger &operator ++(); + QBEInteger &operator --(); + QBEInteger &operator ++(int); + QBEInteger &operator --(int); + + static constexpr QBEInteger max(); + static constexpr QBEInteger min(); }; #else