QAD 1.7.0
backport PIChunkStream optimizations to ChunkStream
This commit is contained in:
@@ -2,7 +2,7 @@ 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 1)
|
set(_QAD_MAJOR 1)
|
||||||
set(_QAD_MINOR 6)
|
set(_QAD_MINOR 7)
|
||||||
set(_QAD_REVISION 0)
|
set(_QAD_REVISION 0)
|
||||||
set(_QAD_SUFFIX )
|
set(_QAD_SUFFIX )
|
||||||
set(_QAD_COMPANY SHS)
|
set(_QAD_COMPANY SHS)
|
||||||
|
|||||||
@@ -46,9 +46,15 @@ public:
|
|||||||
int id;
|
int id;
|
||||||
T data;
|
T data;
|
||||||
};
|
};
|
||||||
template <typename T> static Chunk<T> chunk(int id, const T & data) {return Chunk<T>(id, data);}
|
template <typename T>
|
||||||
|
struct ChunkConst {
|
||||||
|
ChunkConst(int i, const T & d): id(i), data(d) {}
|
||||||
|
int id;
|
||||||
|
const T & data;
|
||||||
|
};
|
||||||
|
template <typename T> static ChunkConst<T> chunk(int id, const T & data) {return ChunkConst<T>(id, data);}
|
||||||
|
|
||||||
template <typename T> ChunkStream & add(int id, const T & data) {*this << Chunk<T>(id, data); return *this;}
|
template <typename T> ChunkStream & add(int id, const T & data) {*this << ChunkConst<T>(id, data); return *this;}
|
||||||
|
|
||||||
void setSource(const QByteArray & data);
|
void setSource(const QByteArray & data);
|
||||||
void setSource(QDataStream & str);
|
void setSource(QDataStream & str);
|
||||||
@@ -88,6 +94,7 @@ private:
|
|||||||
QMap<int, QByteArray> data_map;
|
QMap<int, QByteArray> data_map;
|
||||||
|
|
||||||
template <typename T> friend ChunkStream & operator <<(ChunkStream & s, const ChunkStream::Chunk<T> & c);
|
template <typename T> friend ChunkStream & operator <<(ChunkStream & s, const ChunkStream::Chunk<T> & c);
|
||||||
|
template <typename T> friend ChunkStream & operator <<(ChunkStream & s, const ChunkStream::ChunkConst<T> & c);
|
||||||
};
|
};
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
@@ -111,5 +118,26 @@ ChunkStream & operator <<(ChunkStream & s, const ChunkStream::Chunk<T> & c) {
|
|||||||
}
|
}
|
||||||
return s;
|
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;
|
||||||
|
switch (s.version_) {
|
||||||
|
case ChunkStream::Version_1:
|
||||||
|
s.stream_ << c.id << ba;
|
||||||
|
break;
|
||||||
|
case ChunkStream::Version_2:
|
||||||
|
if (s.data_->isEmpty())
|
||||||
|
s.stream_ << uchar(uchar(s.version_) | 0x80);
|
||||||
|
ChunkStream::writeVInt(s.stream_, c.id);
|
||||||
|
ChunkStream::writeVInt(s.stream_, ba.size());
|
||||||
|
s.stream_.writeRawData(ba.data(), ba.size());
|
||||||
|
break;
|
||||||
|
default: break;
|
||||||
|
}
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
|
||||||
#endif // CHUNKSTREAM_H
|
#endif // CHUNKSTREAM_H
|
||||||
|
|||||||
Reference in New Issue
Block a user