// qfile.sip generated by MetaSIP on Fri Feb 10 10:35:11 2012
//
// 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.
// 
// If you are unsure which license is appropriate for your use, please
// 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.


%ModuleCode
#include <qfile.h>
%End

class QFile : QIODevice
{
%TypeHeaderCode
#include <qfile.h>
%End

public:
    enum FileError
    {
        NoError,
        ReadError,
        WriteError,
        FatalError,
        ResourceError,
        OpenError,
        AbortError,
        TimeOutError,
        UnspecifiedError,
        RemoveError,
        RenameError,
        PositionError,
        ResizeError,
        PermissionsError,
        CopyError,
    };

%If (Qt_4_4_0 -)

    enum MemoryMapFlags
    {
        NoOptions,
    };

%End

    enum Permission
    {
        ReadOwner,
        WriteOwner,
        ExeOwner,
        ReadUser,
        WriteUser,
        ExeUser,
        ReadGroup,
        WriteGroup,
        ExeGroup,
        ReadOther,
        WriteOther,
        ExeOther,
    };

    typedef QFlags<QFile::Permission> Permissions;
    QFile();
    QFile(const QString &name);
    explicit QFile(QObject *parent /TransferThis/);
    QFile(const QString &name, QObject *parent /TransferThis/);
    virtual ~QFile();
    QFile::FileError error() const;
    void unsetError();
    QString fileName() const;
    void setFileName(const QString &name);
    static QByteArray encodeName(const QString &fileName);
    static QString decodeName(const QByteArray &localFileName);
    static QString decodeName(const char *localFileName /Encoding="ASCII"/);
    bool exists() const;
    static bool exists(const QString &fileName);
    QString readLink() const;
    static QString readLink(const QString &fileName);
    bool remove() /ReleaseGIL/;
    static bool remove(const QString &fileName) /ReleaseGIL/;
    bool rename(const QString &newName) /ReleaseGIL/;
    static bool rename(const QString &oldName, const QString &newName) /ReleaseGIL/;
    bool link(const QString &newName) /ReleaseGIL/;
    static bool link(const QString &oldname, const QString &newName) /ReleaseGIL/;
    bool copy(const QString &newName) /ReleaseGIL/;
    static bool copy(const QString &fileName, const QString &newName) /ReleaseGIL/;
    virtual bool isSequential() const;
    virtual bool open(QFlags<QIODevice::OpenModeFlag> flags) /ReleaseGIL/;
    bool open(int fd, QFlags<QIODevice::OpenModeFlag> flags) /ReleaseGIL/;
    virtual void close() /ReleaseGIL/;
    virtual qint64 size() const;
    virtual qint64 pos() const;
    virtual bool seek(qint64 offset) /ReleaseGIL/;
    virtual bool atEnd() const;
    bool flush() /ReleaseGIL/;
    bool resize(qint64 sz);
    static bool resize(const QString &filename, qint64 sz);
    QFlags<QFile::Permission> permissions() const;
    static QFlags<QFile::Permission> permissions(const QString &filename);
    bool setPermissions(QFlags<QFile::Permission> permissionSpec);
    static bool setPermissions(const QString &filename, QFlags<QFile::Permission> permissionSpec);
    int handle() const;
    virtual QAbstractFileEngine *fileEngine() const;
%If (Qt_4_2_0 -)
    QString symLinkTarget() const;
%End
%If (Qt_4_2_0 -)
    static QString symLinkTarget(const QString &fileName);
%End
%If (Qt_4_4_0 -)
    void *map(qint64 offset, qint64 size /ResultSize/, QFile::MemoryMapFlags flags = QFile::NoOptions) [uchar * (qint64 offset, qint64 size, QFile::MemoryMapFlags flags = QFile::NoOptions)];
%End
%If (Qt_4_4_0 -)
    bool unmap(void *address) [bool (uchar *address)];
%End

protected:
    virtual SIP_PYOBJECT readData(qint64 maxlen) /DocType="Py_v3:bytes;str",ReleaseGIL/ [qint64 (char *data, qint64 maxlen)];
%MethodCode
        // Return the data read or None if there was an error.
        if (a0 < 0)
        {
            PyErr_SetString(PyExc_ValueError, "maximum length of data to be read cannot be negative");
            sipIsErr = 1;
        }
        else
        {
            char *s = new char[a0];
            qint64 len;
        
            Py_BEGIN_ALLOW_THREADS
        #if defined(SIP_PROTECTED_IS_PUBLIC)
            len = sipSelfWasArg ? sipCpp->QFile::readData(s, a0) : sipCpp->readData(s, a0);
        #else
            len = sipCpp->sipProtectVirt_readData(sipSelfWasArg, s, a0);
        #endif
            Py_END_ALLOW_THREADS
        
            if (len < 0)
            {
                Py_INCREF(Py_None);
                sipRes = Py_None;
            }
            else
            {
                sipRes = SIPBytes_FromStringAndSize(s, len);
        
                if (!sipRes)
                    sipIsErr = 1;
            }
        
            delete[] s;
        }
%End

    virtual SIP_PYOBJECT readLineData(qint64 maxlen) /DocType="Py_v3:bytes;str",ReleaseGIL/ [qint64 (char *data, qint64 maxlen)];
%MethodCode
        // Return the data read or None if there was an error.
        if (a0 < 0)
        {
            PyErr_SetString(PyExc_ValueError, "maximum length of data to be read cannot be negative");
            sipIsErr = 1;
        }
        else
        {
            char *s = new char[a0];
            qint64 len;
        
            Py_BEGIN_ALLOW_THREADS
        #if defined(SIP_PROTECTED_IS_PUBLIC)
            len = sipSelfWasArg ? sipCpp->QFile::readLineData(s, a0) : sipCpp->readLineData(s, a0);
        #else
            len = sipCpp->sipProtectVirt_readLineData(sipSelfWasArg, s, a0);
        #endif
            Py_END_ALLOW_THREADS
        
            if (len < 0)
            {
                Py_INCREF(Py_None);
                sipRes = Py_None;
            }
            else
            {
                sipRes = SIPBytes_FromStringAndSize(s, len);
        
                if (!sipRes)
                    sipIsErr = 1;
            }
        
            delete[] s;
        }
%End

    virtual qint64 writeData(const char *data /Array/, qint64 len /ArraySize/) /ReleaseGIL/;

private:
    QFile(const QFile &);

public:
%If (Qt_4_8_0 -)

    enum FileHandleFlag
    {
        AutoCloseHandle,
        DontCloseHandle,
    };

%End
%If (Qt_4_8_0 -)
    typedef QFlags<QFile::FileHandleFlag> FileHandleFlags;
%End
%If (Qt_4_8_0 -)
    bool open(int fd, QFlags<QIODevice::OpenModeFlag> flags, QFlags<QFile::FileHandleFlag> handleFlags) /ReleaseGIL/;
%End
};

QFlags<QFile::Permission> operator|(QFile::Permission f1, QFlags<QFile::Permission> f2);
