chunkstream patch for enums (old Qt)
This commit is contained in:
@@ -2,9 +2,9 @@ cmake_minimum_required(VERSION 3.0)
|
|||||||
cmake_policy(SET CMP0017 NEW) # need include() with .cmake
|
cmake_policy(SET CMP0017 NEW) # need include() with .cmake
|
||||||
project(qad)
|
project(qad)
|
||||||
set(qad_MAJOR 2)
|
set(qad_MAJOR 2)
|
||||||
set(qad_MINOR 1)
|
set(qad_MINOR 2)
|
||||||
set(qad_REVISION 0)
|
set(qad_REVISION 0)
|
||||||
set(qad_SUFFIX beta)
|
set(qad_SUFFIX )
|
||||||
set(qad_COMPANY SHS)
|
set(qad_COMPANY SHS)
|
||||||
set(qad_DOMAIN org.SHS)
|
set(qad_DOMAIN org.SHS)
|
||||||
|
|
||||||
|
|||||||
@@ -1178,7 +1178,7 @@ QPair<QString, QString> Graphic::gridMark(double v) const {
|
|||||||
ret.first = QString::fromUtf8("%1·10").arg(v);
|
ret.first = QString::fromUtf8("%1·10").arg(v);
|
||||||
ret.second = QString::number(p);
|
ret.second = QString::number(p);
|
||||||
} else
|
} else
|
||||||
ret.first = QString::number(v);
|
ret.first = QString::number(v, 'g', 8);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -23,6 +23,7 @@
|
|||||||
#include <QDataStream>
|
#include <QDataStream>
|
||||||
#include <QBuffer>
|
#include <QBuffer>
|
||||||
#include <QByteArray>
|
#include <QByteArray>
|
||||||
|
#include <QDebug>
|
||||||
#include <QMap>
|
#include <QMap>
|
||||||
#include "qad_utils_export.h"
|
#include "qad_utils_export.h"
|
||||||
|
|
||||||
@@ -64,22 +65,55 @@ public:
|
|||||||
bool atEnd() const {return stream_.atEnd();}
|
bool atEnd() const {return stream_.atEnd();}
|
||||||
Version version() const {return (Version)version_;}
|
Version version() const {return (Version)version_;}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
int read();
|
int read();
|
||||||
void readAll();
|
void readAll();
|
||||||
int getID() {return last_id;}
|
int getID() {return last_id;}
|
||||||
template <typename T>
|
|
||||||
T getData() const {T ret; QDataStream s(last_data); s.setVersion(QDataStream::Qt_4_8); s >> ret; return ret;}
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
void get(T & v) const {v = getData<T>();}
|
void get(T & v) const {v = getData<T>();}
|
||||||
template <typename T>
|
|
||||||
const ChunkStream & get(int id, T & v) const {
|
template <typename T> typename std::enable_if<!std::is_enum<T>::value, T>::type
|
||||||
|
getData() const {
|
||||||
|
QDataStream s(last_data);
|
||||||
|
s.setVersion(QDataStream::Qt_4_8);
|
||||||
|
T ret;
|
||||||
|
s >> ret;
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
template <typename T> typename std::enable_if<std::is_enum<T>::value, T>::type
|
||||||
|
getData() const {
|
||||||
|
QDataStream s(last_data);
|
||||||
|
s.setVersion(QDataStream::Qt_4_8);
|
||||||
|
typename std::underlying_type<T>::type ret;
|
||||||
|
s >> ret;
|
||||||
|
return (T)ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T> typename std::enable_if<!std::is_enum<T>::value, const ChunkStream &>::type
|
||||||
|
get(int id, T & v) const {
|
||||||
QByteArray ba = data_map.value(id);
|
QByteArray ba = data_map.value(id);
|
||||||
if (!ba.isEmpty()) {
|
if (!ba.isEmpty()) {
|
||||||
QDataStream s(ba); s.setVersion(QDataStream::Qt_4_8);
|
QDataStream s(ba);
|
||||||
|
s.setVersion(QDataStream::Qt_4_8);
|
||||||
s >> v;
|
s >> v;
|
||||||
}
|
}
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
template <typename T> typename std::enable_if<std::is_enum<T>::value, const ChunkStream &>::type
|
||||||
|
get(int id, T & v) const {
|
||||||
|
QByteArray ba = data_map.value(id);
|
||||||
|
if (!ba.isEmpty()) {
|
||||||
|
QDataStream s(ba);
|
||||||
|
s.setVersion(QDataStream::Qt_4_8);
|
||||||
|
typename std::underlying_type<T>::type iv;
|
||||||
|
s >> iv;
|
||||||
|
v = (T)iv;
|
||||||
|
}
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void _init();
|
void _init();
|
||||||
|
|
||||||
@@ -97,12 +131,37 @@ private:
|
|||||||
template <typename T> friend ChunkStream & operator <<(ChunkStream & s, const ChunkStream::ChunkConst<T> & c);
|
template <typename T> friend ChunkStream & operator <<(ChunkStream & s, const ChunkStream::ChunkConst<T> & c);
|
||||||
};
|
};
|
||||||
|
|
||||||
template <typename T>
|
template <typename T> typename std::enable_if<!std::is_enum<T>::value, void>::type
|
||||||
ChunkStream & operator <<(ChunkStream & s, const ChunkStream::Chunk<T> & c) {
|
__writeChunkData(QByteArray & ba, const ChunkStream::Chunk<T> & c) {
|
||||||
QByteArray ba;
|
|
||||||
QDataStream bas(&ba, QIODevice::WriteOnly);
|
QDataStream bas(&ba, QIODevice::WriteOnly);
|
||||||
bas.setVersion(QDataStream::Qt_4_8);
|
bas.setVersion(QDataStream::Qt_4_8);
|
||||||
bas << c.data;
|
bas << c.data;
|
||||||
|
}
|
||||||
|
template <typename T> typename std::enable_if<std::is_enum<T>::value, void>::type
|
||||||
|
__writeChunkData(QByteArray & ba, const ChunkStream::Chunk<T> & c) {
|
||||||
|
QDataStream bas(&ba, QIODevice::WriteOnly);
|
||||||
|
bas.setVersion(QDataStream::Qt_4_8);
|
||||||
|
typename std::underlying_type<T>::type iv = c.data;
|
||||||
|
bas << iv;
|
||||||
|
}
|
||||||
|
template <typename T> typename std::enable_if<!std::is_enum<T>::value, void>::type
|
||||||
|
__writeChunkConstData(QByteArray & ba, const ChunkStream::ChunkConst<T> & c) {
|
||||||
|
QDataStream bas(&ba, QIODevice::WriteOnly);
|
||||||
|
bas.setVersion(QDataStream::Qt_4_8);
|
||||||
|
bas << c.data;
|
||||||
|
}
|
||||||
|
template <typename T> typename std::enable_if<std::is_enum<T>::value, void>::type
|
||||||
|
__writeChunkConstData(QByteArray & ba, const ChunkStream::ChunkConst<T> & c) {
|
||||||
|
QDataStream bas(&ba, QIODevice::WriteOnly);
|
||||||
|
bas.setVersion(QDataStream::Qt_4_8);
|
||||||
|
typename std::underlying_type<T>::type iv = c.data;
|
||||||
|
bas << iv;
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T>
|
||||||
|
ChunkStream & operator <<(ChunkStream & s, const ChunkStream::Chunk<T> & c) {
|
||||||
|
QByteArray ba;
|
||||||
|
__writeChunkData(ba, c);
|
||||||
switch (s.version_) {
|
switch (s.version_) {
|
||||||
case ChunkStream::Version_1:
|
case ChunkStream::Version_1:
|
||||||
s.stream_ << c.id << ba;
|
s.stream_ << c.id << ba;
|
||||||
@@ -118,12 +177,11 @@ ChunkStream & operator <<(ChunkStream & s, const ChunkStream::Chunk<T> & c) {
|
|||||||
}
|
}
|
||||||
return s;
|
return s;
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
ChunkStream & operator <<(ChunkStream & s, const ChunkStream::ChunkConst<T> & c) {
|
ChunkStream & operator <<(ChunkStream & s, const ChunkStream::ChunkConst<T> & c) {
|
||||||
QByteArray ba;
|
QByteArray ba;
|
||||||
QDataStream bas(&ba, QIODevice::WriteOnly);
|
__writeChunkConstData(ba, c);
|
||||||
bas.setVersion(QDataStream::Qt_4_8);
|
|
||||||
bas << c.data;
|
|
||||||
switch (s.version_) {
|
switch (s.version_) {
|
||||||
case ChunkStream::Version_1:
|
case ChunkStream::Version_1:
|
||||||
s.stream_ << c.id << ba;
|
s.stream_ << c.id << ba;
|
||||||
|
|||||||
Reference in New Issue
Block a user