diff options
author | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2017-06-15 13:04:36 +0200 |
---|---|---|
committer | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2017-06-21 06:37:24 +0000 |
commit | e5e1fac136065d7c8afc49ac72cb517f64c87910 (patch) | |
tree | 23bfea53fd8ffe183b5bbad7e0c76387b165ff16 /src/corelib/json | |
parent | 4d70e03002de5cfc558398a235755470ad2c8408 (diff) |
Move endian integers to qendian_p.h
The endian integers have more use than just in QJson, and is already
used separately by QtDeclarative. This patch moves q_littleendian out
of qjson_p.h and matches it with a corresponding q_bigendian, and puts
it to use in simplifying endian handling in the ico image handler.
Change-Id: I975bb701a089256db8ced3cb53b4bd62cdfb02dd
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Diffstat (limited to 'src/corelib/json')
-rw-r--r-- | src/corelib/json/qjson.cpp | 13 | ||||
-rw-r--r-- | src/corelib/json/qjson_p.h | 38 |
2 files changed, 5 insertions, 46 deletions
diff --git a/src/corelib/json/qjson.cpp b/src/corelib/json/qjson.cpp index d509349a51..e4bca3bcd0 100644 --- a/src/corelib/json/qjson.cpp +++ b/src/corelib/json/qjson.cpp @@ -45,15 +45,8 @@ QT_BEGIN_NAMESPACE namespace QJsonPrivate { -#if Q_BYTE_ORDER == Q_LITTLE_ENDIAN -#define Q_TO_LITTLE_ENDIAN(x) (x) -#else -#define Q_TO_LITTLE_ENDIAN(x) ( ((x & 0xff) << 24) | ((x & 0xff00) << 8) | ((x & 0xff0000) >> 8) | ((x & 0xff000000) >> 24) ) -#endif - -static const Base emptyArray = { { Q_TO_LITTLE_ENDIAN(sizeof(Base)) }, { 0 }, { 0 } }; -static const Base emptyObject = { { Q_TO_LITTLE_ENDIAN(sizeof(Base)) }, { 0 }, { 0 } }; - +static Q_CONSTEXPR Base emptyArray = { { qle_uint(sizeof(Base)) }, { 0 }, { qle_uint(0) } }; +static Q_CONSTEXPR Base emptyObject = { { qle_uint(sizeof(Base)) }, { 0 }, { qle_uint(0) } }; void Data::compact() { @@ -394,7 +387,7 @@ int Value::requiredStorage(QJsonValue &v, bool *compressed) v.d->compact(); v.base = static_cast<QJsonPrivate::Base *>(v.d->header->root()); } - return v.base ? v.base->size : sizeof(QJsonPrivate::Base); + return v.base ? uint(v.base->size) : sizeof(QJsonPrivate::Base); case QJsonValue::Undefined: case QJsonValue::Null: case QJsonValue::Bool: diff --git a/src/corelib/json/qjson_p.h b/src/corelib/json/qjson_p.h index c012ec2662..5d600843aa 100644 --- a/src/corelib/json/qjson_p.h +++ b/src/corelib/json/qjson_p.h @@ -61,6 +61,7 @@ #include <qendian.h> #include <qnumeric.h> +#include "private/qendian_p.h" #include "private/qsimd_p.h" #include <limits.h> @@ -131,42 +132,7 @@ class Value; class Entry; template<typename T> -class q_littleendian -{ -public: - T val; - - q_littleendian &operator =(T i) { val = qToLittleEndian(i); return *this; } - operator T() const { return qFromLittleEndian(val); } - - bool operator ==(T i) { return qFromLittleEndian(val) == i; } - bool operator !=(T i) { return qFromLittleEndian(val) != i; } - bool operator ==(q_littleendian<T> i) { return val == i.val; } - bool operator !=(q_littleendian<T> i) { return val != i.val; } - bool operator <(T i) { return qFromLittleEndian(val) < i; } - bool operator >(T i) { return qFromLittleEndian(val) > i; } - bool operator <=(T i) { return qFromLittleEndian(val) <= i; } - bool operator >=(T i) { return qFromLittleEndian(val) >= i; } - q_littleendian &operator +=(T i) { - val = qToLittleEndian(qFromLittleEndian(val) + i); - return *this; - } - q_littleendian &operator |=(T i) { - val = qToLittleEndian(qFromLittleEndian(val) | i); - return *this; - } - q_littleendian &operator &=(T i) { - val = qToLittleEndian(qFromLittleEndian(val) & i); - return *this; - } -}; -} // namespace QJsonPrivate - -template <typename T> -class QTypeInfo<QJsonPrivate::q_littleendian<T> > - : public QTypeInfoMerger<QJsonPrivate::q_littleendian<T>, T> {}; - -namespace QJsonPrivate { +using q_littleendian = QLEInteger<T>; typedef q_littleendian<short> qle_short; typedef q_littleendian<unsigned short> qle_ushort; |