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
|
||||
project(qad)
|
||||
set(qad_MAJOR 2)
|
||||
set(qad_MINOR 1)
|
||||
set(qad_MINOR 2)
|
||||
set(qad_REVISION 0)
|
||||
set(qad_SUFFIX beta)
|
||||
set(qad_SUFFIX )
|
||||
set(qad_COMPANY 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.second = QString::number(p);
|
||||
} else
|
||||
ret.first = QString::number(v);
|
||||
ret.first = QString::number(v, 'g', 8);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
@@ -23,6 +23,7 @@
|
||||
#include <QDataStream>
|
||||
#include <QBuffer>
|
||||
#include <QByteArray>
|
||||
#include <QDebug>
|
||||
#include <QMap>
|
||||
#include "qad_utils_export.h"
|
||||
|
||||
@@ -64,22 +65,55 @@ public:
|
||||
bool atEnd() const {return stream_.atEnd();}
|
||||
Version version() const {return (Version)version_;}
|
||||
|
||||
|
||||
|
||||
int read();
|
||||
void readAll();
|
||||
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>
|
||||
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);
|
||||
if (!ba.isEmpty()) {
|
||||
QDataStream s(ba); s.setVersion(QDataStream::Qt_4_8);
|
||||
QDataStream s(ba);
|
||||
s.setVersion(QDataStream::Qt_4_8);
|
||||
s >> v;
|
||||
}
|
||||
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:
|
||||
void _init();
|
||||
|
||||
@@ -97,12 +131,37 @@ private:
|
||||
template <typename T> friend ChunkStream & operator <<(ChunkStream & s, const ChunkStream::ChunkConst<T> & c);
|
||||
};
|
||||
|
||||
template <typename T>
|
||||
ChunkStream & operator <<(ChunkStream & s, const ChunkStream::Chunk<T> & c) {
|
||||
QByteArray ba;
|
||||
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);
|
||||
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_) {
|
||||
case ChunkStream::Version_1:
|
||||
s.stream_ << c.id << ba;
|
||||
@@ -118,12 +177,11 @@ ChunkStream & operator <<(ChunkStream & s, const ChunkStream::Chunk<T> & c) {
|
||||
}
|
||||
return s;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
ChunkStream & operator <<(ChunkStream & s, const ChunkStream::ChunkConst<T> & c) {
|
||||
QByteArray ba;
|
||||
QDataStream bas(&ba, QIODevice::WriteOnly);
|
||||
bas.setVersion(QDataStream::Qt_4_8);
|
||||
bas << c.data;
|
||||
__writeChunkConstData(ba, c);
|
||||
switch (s.version_) {
|
||||
case ChunkStream::Version_1:
|
||||
s.stream_ << c.id << ba;
|
||||
|
||||
Reference in New Issue
Block a user