// qdatastream.sip generated by MetaSIP on Sun Jan 23 10:08:27 2011
//
// This file is part of the QtCore Python extension module.
//
// Copyright (c) 2011 Riverbank Computing Limited <info@riverbankcomputing.com>
// 
// This file is part of PyQt.
// 
// This file may be used under the terms of the GNU General Public
// License versions 2.0 or 3.0 as published by the Free Software
// Foundation and appearing in the files LICENSE.GPL2 and LICENSE.GPL3
// included in the packaging of this file.  Alternatively you may (at
// your option) use any later version of the GNU General Public
// License if such license has been publicly approved by Riverbank
// Computing Limited (or its successors, if any) and the KDE Free Qt
// Foundation. In addition, as a special exception, Riverbank gives you
// certain additional rights. These rights are described in the Riverbank
// GPL Exception version 1.1, which can be found in the file
// GPL_EXCEPTION.txt in this package.
// 
// Please review the following information to ensure GNU General
// Public Licensing requirements will be met:
// http://trolltech.com/products/qt/licenses/licensing/opensource/. If
// you are unsure which license is appropriate for your use, please
// review the following information:
// http://trolltech.com/products/qt/licenses/licensing/licensingoverview
// or contact the sales department at sales@riverbankcomputing.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.


class QDataStream
{
%TypeHeaderCode
#include <qdatastream.h>
%End

public:
    enum Version
    {
        Qt_1_0,
        Qt_2_0,
        Qt_2_1,
        Qt_3_0,
        Qt_3_1,
        Qt_3_3,
        Qt_4_0,
        Qt_4_1,
%If (Qt_4_2_0 -)
        Qt_4_2,
%End
%If (Qt_4_3_0 -)
        Qt_4_3,
%End
%If (Qt_4_4_0 -)
        Qt_4_4,
%End
%If (Qt_4_5_0 -)
        Qt_4_5,
%End
%If (Qt_4_6_0 -)
        Qt_4_6,
%End
%If (Qt_4_7_0 -)
        Qt_4_7,
%End
    };

    enum ByteOrder
    {
        BigEndian,
        LittleEndian,
    };

    enum Status
    {
        Ok,
        ReadPastEnd,
        ReadCorruptData,
    };

    QDataStream();
    explicit QDataStream(QIODevice *);
    QDataStream(QByteArray * /Constrained/, QFlags<QIODevice::OpenModeFlag> flags);
    QDataStream(const QByteArray & /Constrained/);
    virtual ~QDataStream();
    QIODevice *device() const;
    void setDevice(QIODevice *);
    void unsetDevice();
    bool atEnd() const;
    QDataStream::Status status() const;
    void setStatus(QDataStream::Status status);
    void resetStatus();
    QDataStream::ByteOrder byteOrder() const;
    void setByteOrder(QDataStream::ByteOrder);
    int version() const;
    void setVersion(int v);
    int skipRawData(int len) /ReleaseGIL/;
// Extra methods to give explicit control over the simple data types being read and written.
int readInt() /ReleaseGIL/;
%MethodCode
    Py_BEGIN_ALLOW_THREADS
    *sipCpp >> sipRes;
    Py_END_ALLOW_THREADS
%End

qint8 readInt8() /ReleaseGIL/;
%MethodCode
    Py_BEGIN_ALLOW_THREADS
    *sipCpp >> sipRes;
    Py_END_ALLOW_THREADS
%End

quint8 readUInt8() /ReleaseGIL/;
%MethodCode
    Py_BEGIN_ALLOW_THREADS
    *sipCpp >> sipRes;
    Py_END_ALLOW_THREADS
%End

qint16 readInt16() /ReleaseGIL/;
%MethodCode
    Py_BEGIN_ALLOW_THREADS
    *sipCpp >> sipRes;
    Py_END_ALLOW_THREADS
%End

quint16 readUInt16() /ReleaseGIL/;
%MethodCode
    Py_BEGIN_ALLOW_THREADS
    *sipCpp >> sipRes;
    Py_END_ALLOW_THREADS
%End

qint32 readInt32() /ReleaseGIL/;
%MethodCode
    Py_BEGIN_ALLOW_THREADS
    *sipCpp >> sipRes;
    Py_END_ALLOW_THREADS
%End

quint32 readUInt32() /ReleaseGIL/;
%MethodCode
    Py_BEGIN_ALLOW_THREADS
    *sipCpp >> sipRes;
    Py_END_ALLOW_THREADS
%End

qint64 readInt64() /ReleaseGIL/;
%MethodCode
    Py_BEGIN_ALLOW_THREADS
    *sipCpp >> sipRes;
    Py_END_ALLOW_THREADS
%End

quint64 readUInt64() /ReleaseGIL/;
%MethodCode
    Py_BEGIN_ALLOW_THREADS
    *sipCpp >> sipRes;
    Py_END_ALLOW_THREADS
%End

bool readBool() /ReleaseGIL/;
%MethodCode
    Py_BEGIN_ALLOW_THREADS
    *sipCpp >> sipRes;
    Py_END_ALLOW_THREADS
%End

float readFloat() /ReleaseGIL/;
%MethodCode
    Py_BEGIN_ALLOW_THREADS
    *sipCpp >> sipRes;
    Py_END_ALLOW_THREADS
%End

double readDouble() /ReleaseGIL/;
%MethodCode
    Py_BEGIN_ALLOW_THREADS
    *sipCpp >> sipRes;
    Py_END_ALLOW_THREADS
%End

SIP_PYOBJECT readString() /ReleaseGIL,DocType="Py_v3:bytes;str"/;
%MethodCode
    char *s;

    Py_BEGIN_ALLOW_THREADS
    *sipCpp >> s;
    Py_END_ALLOW_THREADS

    if (s)
    {
        sipRes = SIPBytes_FromString(s);
        delete[] s;
    }
    else
    {
        sipRes = Py_None;
        Py_INCREF(Py_None);
    }
%End

void writeInt(int i) /ReleaseGIL/;
%MethodCode
    Py_BEGIN_ALLOW_THREADS
    *sipCpp << a0;
    Py_END_ALLOW_THREADS
%End

void writeInt8(qint8 i) /ReleaseGIL/;
%MethodCode
    Py_BEGIN_ALLOW_THREADS
    *sipCpp << a0;
    Py_END_ALLOW_THREADS
%End

void writeUInt8(quint8 i) /ReleaseGIL/;
%MethodCode
    Py_BEGIN_ALLOW_THREADS
    *sipCpp << a0;
    Py_END_ALLOW_THREADS
%End

void writeInt16(qint16 i) /ReleaseGIL/;
%MethodCode
    Py_BEGIN_ALLOW_THREADS
    *sipCpp << a0;
    Py_END_ALLOW_THREADS
%End

void writeUInt16(quint16 i) /ReleaseGIL/;
%MethodCode
    Py_BEGIN_ALLOW_THREADS
    *sipCpp << a0;
    Py_END_ALLOW_THREADS
%End

void writeInt32(qint32 i) /ReleaseGIL/;
%MethodCode
    Py_BEGIN_ALLOW_THREADS
    *sipCpp << a0;
    Py_END_ALLOW_THREADS
%End

void writeUInt32(quint32 i) /ReleaseGIL/;
%MethodCode
    Py_BEGIN_ALLOW_THREADS
    *sipCpp << a0;
    Py_END_ALLOW_THREADS
%End

void writeInt64(qint64 i) /ReleaseGIL/;
%MethodCode
    Py_BEGIN_ALLOW_THREADS
    *sipCpp << a0;
    Py_END_ALLOW_THREADS
%End

void writeUInt64(quint64 i) /ReleaseGIL/;
%MethodCode
    Py_BEGIN_ALLOW_THREADS
    *sipCpp << a0;
    Py_END_ALLOW_THREADS
%End

void writeBool(bool i) /ReleaseGIL/;
%MethodCode
    Py_BEGIN_ALLOW_THREADS
    *sipCpp << a0;
    Py_END_ALLOW_THREADS
%End

void writeFloat(float f) /ReleaseGIL/;
%MethodCode
    Py_BEGIN_ALLOW_THREADS
    *sipCpp << a0;
    Py_END_ALLOW_THREADS
%End

void writeDouble(double f) /ReleaseGIL/;
%MethodCode
    Py_BEGIN_ALLOW_THREADS
    *sipCpp << a0;
    Py_END_ALLOW_THREADS
%End

void writeString(const char *str /Encoding="None"/) /ReleaseGIL/;
%MethodCode
    Py_BEGIN_ALLOW_THREADS
    *sipCpp << a0;
    Py_END_ALLOW_THREADS
%End
// Extra methods to support v2 of the QString and QVariant APIs.
QString readQString() /ReleaseGIL/;
%MethodCode
    sipRes = new QString;

    Py_BEGIN_ALLOW_THREADS
    *sipCpp >> *sipRes;
    Py_END_ALLOW_THREADS
%End

void writeQString(const QString &qstr) /ReleaseGIL/;
%MethodCode
    Py_BEGIN_ALLOW_THREADS
    *sipCpp << *a0;
    Py_END_ALLOW_THREADS
%End

QStringList readQStringList() /ReleaseGIL/;
%MethodCode
    sipRes = new QStringList;

    Py_BEGIN_ALLOW_THREADS
    *sipCpp >> *sipRes;
    Py_END_ALLOW_THREADS
%End

void writeQStringList(const QStringList &qstrlst) /ReleaseGIL/;
%MethodCode
    Py_BEGIN_ALLOW_THREADS
    *sipCpp << *a0;
    Py_END_ALLOW_THREADS
%End

QVariant readQVariant() /ReleaseGIL/;
%MethodCode
    sipRes = new QVariant;

    Py_BEGIN_ALLOW_THREADS
    *sipCpp >> *sipRes;
    Py_END_ALLOW_THREADS
%End

void writeQVariant(const QVariant &qvar) /ReleaseGIL/;
%MethodCode
    Py_BEGIN_ALLOW_THREADS
    *sipCpp << *a0;
    Py_END_ALLOW_THREADS
%End

QVariantList readQVariantList() /ReleaseGIL/;
%MethodCode
    sipRes = new QVariantList;

    Py_BEGIN_ALLOW_THREADS
    *sipCpp >> *sipRes;
    Py_END_ALLOW_THREADS
%End

void writeQVariantList(const QVariantList &qvarlst) /ReleaseGIL/;
%MethodCode
    Py_BEGIN_ALLOW_THREADS
    *sipCpp << *a0;
    Py_END_ALLOW_THREADS
%End

QVariantMap readQVariantMap() /ReleaseGIL/;
%MethodCode
    sipRes = new QVariantMap;

    Py_BEGIN_ALLOW_THREADS
    *sipCpp >> *sipRes;
    Py_END_ALLOW_THREADS
%End

void writeQVariantMap(const QVariantMap &qvarmap) /ReleaseGIL/;
%MethodCode
    Py_BEGIN_ALLOW_THREADS
    *sipCpp << *a0;
    Py_END_ALLOW_THREADS
%End

%If (Qt_4_5_0 -)

QVariantHash readQVariantHash() /ReleaseGIL/;
%MethodCode
    sipRes = new QVariantHash;

    Py_BEGIN_ALLOW_THREADS
    *sipCpp >> *sipRes;
    Py_END_ALLOW_THREADS
%End

void writeQVariantHash(const QVariantHash &qvarhash) /ReleaseGIL/;
%MethodCode
    Py_BEGIN_ALLOW_THREADS
    *sipCpp << *a0;
    Py_END_ALLOW_THREADS
%End

%End
    SIP_PYOBJECT readBytes() /DocType="Py_v3:bytes;str",ReleaseGIL/;
%MethodCode
        char *s;
        uint l;
        
        Py_BEGIN_ALLOW_THREADS
        sipCpp->readBytes(s, l);
        Py_END_ALLOW_THREADS
        
        if ((sipRes = SIPBytes_FromStringAndSize(s, l)) == NULL)
            sipIsErr = 1;
        
        if (s)
            delete[] s;
%End

    SIP_PYOBJECT readRawData(int len) /DocType="Py_v3:bytes;str",ReleaseGIL/;
%MethodCode
        char *s = new char[a0];
        
        Py_BEGIN_ALLOW_THREADS
        sipCpp->readRawData(s, a0);
        Py_END_ALLOW_THREADS
        
        sipRes = SIPBytes_FromStringAndSize(s, a0);
        
        if (!sipRes)
            sipIsErr = 1;
        
        delete[] s;
%End

    QDataStream &writeBytes(const char * /Array/, uint len /ArraySize/) /ReleaseGIL/;
    int writeRawData(const char * /Array/, int len /ArraySize/) /ReleaseGIL/;
%If (Qt_4_6_0 -)

    enum FloatingPointPrecision
    {
        SinglePrecision,
        DoublePrecision,
    };

%End
%If (Qt_4_6_0 -)
    QDataStream::FloatingPointPrecision floatingPointPrecision() const;
%End
%If (Qt_4_6_0 -)
    void setFloatingPointPrecision(QDataStream::FloatingPointPrecision precision);
%End

private:
    QDataStream(const QDataStream &);
};
