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