?? qdatastream.h
字號:
/******************************************************************************** Copyright (C) 1992-2006 Trolltech ASA. All rights reserved.**** This file is part of the QtCore module of the Qt Toolkit.**** This file may be used under the terms of the GNU General Public** License version 2.0 as published by the Free Software Foundation** and appearing in the file LICENSE.GPL included in the packaging of** this file. Please review the following information to ensure GNU** General Public Licensing requirements will be met:** http://www.trolltech.com/products/qt/opensource.html**** If you are unsure which license is appropriate for your use, please** review the following information:** http://www.trolltech.com/products/qt/licensing.html or contact the** sales department at sales@trolltech.com.**** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.******************************************************************************/#ifndef QDATASTREAM_H#define QDATASTREAM_H#include <QtCore/qiodevice.h>#include <QtCore/qglobal.h>#ifdef Status#error qdatastream.h must be included before any header file that defines Status#endifQT_BEGIN_HEADERQT_MODULE(Core)class QByteArray;class QIODevice;template <typename T> class QList;template <typename T> class QLinkedList;template <typename T> class QVector;template <typename T> class QSet;template <class Key, class T> class QHash;template <class Key, class T> class QMap;class QDataStreamPrivate;#ifndef QT_NO_DATASTREAMclass Q_CORE_EXPORT QDataStream{public: enum Version { Qt_1_0 = 1, Qt_2_0 = 2, Qt_2_1 = 3, Qt_3_0 = 4, Qt_3_1 = 5, Qt_3_3 = 6, Qt_4_0 = 7, Qt_4_1 = Qt_4_0, Qt_4_2 = 8#if QT_VERSION >= 0x040300#error Add Qt_4_3 = Qt_4_2#endif }; enum ByteOrder { BigEndian = QSysInfo::BigEndian, LittleEndian = QSysInfo::LittleEndian }; enum Status { Ok, ReadPastEnd, ReadCorruptData }; QDataStream(); explicit QDataStream(QIODevice *);#ifdef QT3_SUPPORT QDataStream(QByteArray *, int mode);#endif QDataStream(QByteArray *, QIODevice::OpenMode flags); QDataStream(const QByteArray &); virtual ~QDataStream(); QIODevice *device() const; void setDevice(QIODevice *); void unsetDevice(); bool atEnd() const;#ifdef QT3_SUPPORT inline QT3_SUPPORT bool eof() const { return atEnd(); }#endif Status status() const; void setStatus(Status status); void resetStatus(); ByteOrder byteOrder() const; void setByteOrder(ByteOrder); int version() const; void setVersion(int); QDataStream &operator>>(qint8 &i); QDataStream &operator>>(quint8 &i); QDataStream &operator>>(qint16 &i); QDataStream &operator>>(quint16 &i); QDataStream &operator>>(qint32 &i); QDataStream &operator>>(quint32 &i); QDataStream &operator>>(qint64 &i); QDataStream &operator>>(quint64 &i); QDataStream &operator>>(bool &i); QDataStream &operator>>(float &f); QDataStream &operator>>(double &f); QDataStream &operator>>(char *&str); QDataStream &operator<<(qint8 i); QDataStream &operator<<(quint8 i); QDataStream &operator<<(qint16 i); QDataStream &operator<<(quint16 i); QDataStream &operator<<(qint32 i); QDataStream &operator<<(quint32 i); QDataStream &operator<<(qint64 i); QDataStream &operator<<(quint64 i); QDataStream &operator<<(bool i); QDataStream &operator<<(float f); QDataStream &operator<<(double f); QDataStream &operator<<(const char *str); QDataStream &readBytes(char *&, uint &len); int readRawData(char *, int len); QDataStream &writeBytes(const char *, uint len); int writeRawData(const char *, int len); int skipRawData(int len);#ifdef QT3_SUPPORT inline QT3_SUPPORT QDataStream &readRawBytes(char *str, uint len) { readRawData(str, (int)len); return *this; } inline QT3_SUPPORT QDataStream &writeRawBytes(const char *str, uint len) { writeRawData(str, (int)len); return *this; } inline QT3_SUPPORT bool isPrintableData() const { return false; } inline QT3_SUPPORT void setPrintableData(bool) {}#endifprivate: Q_DISABLE_COPY(QDataStream) QDataStreamPrivate *d; QIODevice *dev; bool owndev; bool noswap; ByteOrder byteorder; int ver; Status q_status;};/***************************************************************************** QDataStream inline functions *****************************************************************************/inline QIODevice *QDataStream::device() const{ return dev; }inline QDataStream::ByteOrder QDataStream::byteOrder() const{ return byteorder; }inline int QDataStream::version() const{ return ver; }inline void QDataStream::setVersion(int v){ ver = v; }inline QDataStream &QDataStream::operator>>(quint8 &i){ return *this >> reinterpret_cast<qint8&>(i); }inline QDataStream &QDataStream::operator>>(quint16 &i){ return *this >> reinterpret_cast<qint16&>(i); }inline QDataStream &QDataStream::operator>>(quint32 &i){ return *this >> reinterpret_cast<qint32&>(i); }inline QDataStream &QDataStream::operator>>(quint64 &i){ return *this >> reinterpret_cast<qint64&>(i); }inline QDataStream &QDataStream::operator<<(quint8 i){ return *this << qint8(i); }inline QDataStream &QDataStream::operator<<(quint16 i){ return *this << qint16(i); }inline QDataStream &QDataStream::operator<<(quint32 i){ return *this << qint32(i); }inline QDataStream &QDataStream::operator<<(quint64 i){ return *this << qint64(i); }template <typename T>QDataStream& operator>>(QDataStream& s, QList<T>& l){ l.clear(); quint32 c; s >> c; for(quint32 i = 0; i < c; ++i) { T t; s >> t; l.append(t); if (s.atEnd()) break; } return s;}template <typename T>QDataStream& operator<<(QDataStream& s, const QList<T>& l){ s << quint32(l.size()); for (int i = 0; i < l.size(); ++i) s << l.at(i); return s;}template <typename T>QDataStream& operator>>(QDataStream& s, QLinkedList<T>& l){ l.clear(); quint32 c; s >> c; for(quint32 i = 0; i < c; ++i) { T t; s >> t; l.append(t); if (s.atEnd()) break; } return s;}template <typename T>QDataStream& operator<<(QDataStream& s, const QLinkedList<T>& l){ s << quint32(l.size()); typename QLinkedList<T>::ConstIterator it = l.constBegin(); for(; it != l.constEnd(); ++it) s << *it; return s;}template<typename T>QDataStream& operator>>(QDataStream& s, QVector<T>& v){ v.clear(); quint32 c; s >> c; v.resize(c); for(quint32 i = 0; i < c; ++i) { T t; s >> t; v[i] = t; } return s;}template<typename T>QDataStream& operator<<(QDataStream& s, const QVector<T>& v){ s << quint32(v.size()); for (typename QVector<T>::const_iterator it = v.begin(); it != v.end(); ++it) s << *it; return s;}template <typename T>QDataStream &operator>>(QDataStream &in, QSet<T> &set){ set.clear(); quint32 c; in >> c; for (quint32 i = 0; i < c; ++i) { T t; in >> t; set << t; if (in.atEnd()) break; } return in;}template <typename T>QDataStream& operator<<(QDataStream &out, const QSet<T> &set){ out << quint32(set.size()); typename QSet<T>::const_iterator i = set.constBegin(); while (i != set.constEnd()) { out << *i; ++i; } return out;}template <class Key, class T>Q_OUTOFLINE_TEMPLATE QDataStream &operator>>(QDataStream &in, QHash<Key, T> &hash){ QDataStream::Status oldStatus = in.status(); in.resetStatus(); hash.clear(); quint32 n; in >> n; for (quint32 i = 0; i < n; ++i) { if (in.status() != QDataStream::Ok) break; Key k; T t; in >> k >> t; hash.insertMulti(k, t); } if (in.status() != QDataStream::Ok) hash.clear(); if (oldStatus != QDataStream::Ok) in.setStatus(oldStatus); return in;}template <class Key, class T>Q_OUTOFLINE_TEMPLATE QDataStream &operator<<(QDataStream &out, const QHash<Key, T>& hash){ out << quint32(hash.size()); typename QHash<Key, T>::ConstIterator it = hash.end(); typename QHash<Key, T>::ConstIterator begin = hash.begin(); while (it != begin) { --it; out << it.key() << it.value(); } return out;}#ifdef qdoctemplate <class Key, class T>Q_OUTOFLINE_TEMPLATE QDataStream &operator>>(QDataStream &in, QMap<Key, T> &map)#elsetemplate <class aKey, class aT>Q_OUTOFLINE_TEMPLATE QDataStream &operator>>(QDataStream &in, QMap<aKey, aT> &map)#endif{ QDataStream::Status oldStatus = in.status(); in.resetStatus(); map.clear(); quint32 n; in >> n; map.detach();#if !defined(Q_CC_BOR) map.d->insertInOrder = true;#endif for (quint32 i = 0; i < n; ++i) { if (in.status() != QDataStream::Ok) break; aKey key; aT value; in >> key >> value; map.insertMulti(key, value); }#if !defined(Q_CC_BOR) map.d->insertInOrder = false;#endif if (in.status() != QDataStream::Ok) map.clear(); if (oldStatus != QDataStream::Ok) in.setStatus(oldStatus); return in;}template <class Key, class T>Q_OUTOFLINE_TEMPLATE QDataStream &operator<<(QDataStream &out, const QMap<Key, T> &map){ out << quint32(map.size()); typename QMap<Key, T>::ConstIterator it = map.end(); typename QMap<Key, T>::ConstIterator begin = map.begin(); while (it != begin) { --it; out << it.key() << it.value(); } return out;}#endif // QT_NO_DATASTREAMQT_END_HEADER#endif // QDATASTREAM_H
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -