// qabstractfileengine.sip generated by MetaSIP
//
// This file is part of the QtCore Python extension module.
//
// Copyright (c) 2015 Riverbank Computing Limited <info@riverbankcomputing.com>
// 
// This file is part of PyQt4.
// 
// This file may be used under the terms of the GNU General Public License
// version 3.0 as published by the Free Software Foundation and appearing in
// the file LICENSE included in the packaging of this file.  Please review the
// following information to ensure the GNU General Public License version 3.0
// requirements will be met: http://www.gnu.org/copyleft/gpl.html.
// 
// If you do not wish to use this file under the terms of the GPL version 3.0
// then you may purchase a commercial license.  For more information contact
// info@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.


%If (- Qt_5_0_0)
%ModuleCode
#include <qabstractfileengine.h>
%End
%End

%If (- Qt_5_0_0)

class QAbstractFileEngine /Supertype=sip.wrapper/
{
%TypeHeaderCode
#include <qabstractfileengine.h>
%End

public:
    enum FileFlag
    {
        ReadOwnerPerm,
        WriteOwnerPerm,
        ExeOwnerPerm,
        ReadUserPerm,
        WriteUserPerm,
        ExeUserPerm,
        ReadGroupPerm,
        WriteGroupPerm,
        ExeGroupPerm,
        ReadOtherPerm,
        WriteOtherPerm,
        ExeOtherPerm,
        LinkType,
        FileType,
        DirectoryType,
        HiddenFlag,
        LocalDiskFlag,
        ExistsFlag,
        RootFlag,
        PermsMask,
        TypesMask,
        FlagsMask,
        FileInfoAll,
%If (Qt_4_3_0 -)
        BundleType,
%End
%If (Qt_4_3_0 -)
        Refresh,
%End
    };

    typedef QFlags<QAbstractFileEngine::FileFlag> FileFlags;

    enum FileName
    {
        DefaultName,
        BaseName,
        PathName,
        AbsoluteName,
        AbsolutePathName,
        LinkName,
        CanonicalName,
        CanonicalPathName,
%If (Qt_4_3_0 -)
        BundleName,
%End
    };

    enum FileOwner
    {
        OwnerUser,
        OwnerGroup,
    };

    enum FileTime
    {
        CreationTime,
        ModificationTime,
        AccessTime,
    };

    virtual ~QAbstractFileEngine();
%If (Qt_4_3_0 -)
    bool atEnd() const;
%End
    virtual bool open(QFlags<QIODevice::OpenModeFlag> openMode) /ReleaseGIL/;
    virtual bool close() /ReleaseGIL/;
    virtual bool flush() /ReleaseGIL/;
    virtual qint64 size() const;
    virtual qint64 pos() const;
    virtual bool seek(qint64 pos) /ReleaseGIL/;
    virtual bool isSequential() const;
    virtual bool remove() /ReleaseGIL/;
    virtual bool copy(const QString &newName) /ReleaseGIL/;
    virtual bool rename(const QString &newName) /ReleaseGIL/;
    virtual bool link(const QString &newName) /ReleaseGIL/;
    virtual bool mkdir(const QString &dirName, bool createParentDirectories) const /ReleaseGIL/;
    virtual bool rmdir(const QString &dirName, bool recurseParentDirectories) const /ReleaseGIL/;
    virtual bool setSize(qint64 size);
    virtual bool caseSensitive() const;
    virtual bool isRelativePath() const;
    virtual QStringList entryList(QFlags<QDir::Filter> filters, const QStringList &filterNames) const;
    virtual QFlags<QAbstractFileEngine::FileFlag> fileFlags(QFlags<QAbstractFileEngine::FileFlag> type = FileInfoAll) const;
    virtual bool setPermissions(uint perms);
    virtual QString fileName(QAbstractFileEngine::FileName file = DefaultName) const;
    virtual uint ownerId(QAbstractFileEngine::FileOwner) const;
    virtual QString owner(QAbstractFileEngine::FileOwner) const;
    virtual QDateTime fileTime(QAbstractFileEngine::FileTime time) const;
    virtual void setFileName(const QString &file);
    virtual int handle() const;
%If (Qt_4_3_0 -)
    typedef QAbstractFileEngineIterator Iterator;
%End
%If (Qt_4_3_0 -)
    virtual QAbstractFileEngineIterator *beginEntryList(QFlags<QDir::Filter> filters, const QStringList &filterNames) /Factory/;
%End
    virtual SIP_PYOBJECT read(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
            len = sipSelfWasArg ? sipCpp->QAbstractFileEngine::read(s, a0)
                                : sipCpp->read(s, a0);
            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

%VirtualCatcherCode
        PyObject *result = sipCallMethod(&sipIsErr, sipMethod, "n", a1);
        
        if (result != NULL)
        {
            PyObject *buf;
        
            sipParseResult(&sipIsErr, sipMethod, result, "O", &buf);
        
            if (buf == Py_None)
                sipRes = -1L;
            else if (!SIPBytes_Check(buf))
            {
                sipBadCatcherResult(sipMethod);
                sipIsErr = 1;
            }
            else
            {
                memcpy(a0, SIPBytes_AS_STRING(buf), SIPBytes_GET_SIZE(buf));
                sipRes = SIPBytes_GET_SIZE(buf);
            }
        
            Py_DECREF(buf);
            Py_DECREF(result);
        }
%End

    virtual SIP_PYOBJECT readLine(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
            len = sipSelfWasArg ? sipCpp->QAbstractFileEngine::readLine(s, a0)
                                : sipCpp->readLine(s, a0);
            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

%VirtualCatcherCode
        PyObject *result = sipCallMethod(&sipIsErr, sipMethod, "n", a1);
        
        if (result != NULL)
        {
            PyObject *buf;
        
            sipParseResult(&sipIsErr, sipMethod, result, "O", &buf);
        
            if (buf == Py_None)
                sipRes = -1L;
            else if (!SIPBytes_Check(buf))
            {
                sipBadCatcherResult(sipMethod);
                sipIsErr = 1;
            }
            else
            {
                memcpy(a0, SIPBytes_AS_STRING(buf), SIPBytes_GET_SIZE(buf));
                sipRes = SIPBytes_GET_SIZE(buf);
            }
        
            Py_DECREF(buf);
            Py_DECREF(result);
        }
%End

    virtual qint64 write(const char *data /Array/, qint64 len /ArraySize/) /ReleaseGIL/;
    QFile::FileError error() const;
    QString errorString() const;
    static QAbstractFileEngine *create(const QString &fileName) /Factory/;
%If (Qt_4_4_0 -)
    void *map(qint64 offset, qint64 size /ResultSize/, QFile::MemoryMapFlags flags) [uchar * (qint64 offset, qint64 size, QFile::MemoryMapFlags flags)];
%End
%If (Qt_4_4_0 -)
    bool unmap(void *ptr) [bool (uchar *ptr)];
%End

protected:
    QAbstractFileEngine();
    void setError(QFile::FileError error, const QString &str);

private:
%If (Qt_4_2_0 -)
    QAbstractFileEngine(const QAbstractFileEngine &);
%End
};

%End
%If (- Qt_5_0_0)
QFlags<QAbstractFileEngine::FileFlag> operator|(QAbstractFileEngine::FileFlag f1, QFlags<QAbstractFileEngine::FileFlag> f2);
%End
%If (- Qt_5_0_0)

class QAbstractFileEngineHandler
{
%TypeHeaderCode
#include <qabstractfileengine.h>
%End

public:
    QAbstractFileEngineHandler();
    virtual ~QAbstractFileEngineHandler();
    virtual QAbstractFileEngine *create(const QString &fileName) const = 0 /Factory/;
};

%End
%If (Qt_4_3_0 - Qt_5_0_0)

class QAbstractFileEngineIterator /Supertype=sip.wrapper/
{
%TypeHeaderCode
#include <qabstractfileengine.h>
%End

public:
    QAbstractFileEngineIterator(QFlags<QDir::Filter> filters, const QStringList &nameFilters);
    virtual ~QAbstractFileEngineIterator();
    virtual QString next() = 0;
    virtual bool hasNext() const = 0;
    QString path() const;
    QStringList nameFilters() const;
    QFlags<QDir::Filter> filters() const;
    virtual QString currentFileName() const = 0;
    virtual QFileInfo currentFileInfo() const;
    QString currentFilePath() const;

private:
    QAbstractFileEngineIterator(const QAbstractFileEngineIterator &);
};

%End
