1 #ifndef BIGBYTEARRAY_H 2 #define BIGBYTEARRAY_H 3 4 #include <QList> 5 #include <QString> 6 #include <QByteArray> 7 #include "macros.h" 8 9 #define QMC2_BBA_CHUNK_SIZE quint64(QMC2_1G) 10 #define QMC2_QBYTEARRAY_LIMIT quint64(QMC2_2G) 11 12 class BigByteArray 13 { 14 public: BigByteArray()15 explicit BigByteArray() { ; } 16 explicit BigByteArray(const BigByteArray &bba); 17 explicit BigByteArray(const char *rawData, quint64 len); ~BigByteArray()18 ~BigByteArray() { clear(); } 19 20 // QByteArray-like API clear()21 void clear() { m_concatByteArrays.clear(); } setRawData(const char * rawData,quint64 len)22 void setRawData(const char *rawData, quint64 len) { clear(); *this = BigByteArray(rawData, len); } 23 void append(const QByteArray &ba); 24 void append(const BigByteArray &bba); 25 char at(quint64 index); 26 quint64 size(); length()27 quint64 length() { return size(); } 28 QByteArray &mid(quint64 index, int len); 29 30 // BigByteArray-specific chunks()31 int chunks() const { return m_concatByteArrays.count(); } chunk(int index)32 const QByteArray &chunk(int index) const { return m_concatByteArrays.at(index); } chunkSize()33 quint64 chunkSize() { return QMC2_BBA_CHUNK_SIZE; } 34 QString crc32(); 35 QString sha1(); 36 QString md5(); 37 38 private: 39 QList<QByteArray> m_concatByteArrays; 40 QByteArray m_tempArray; 41 }; 42 43 #endif // BIGBYTEARRAY_H 44