// qiodevice.sip generated by MetaSIP on Fri Sep 28 17:07:47 2007 // // This file is part of the QtCore Python extension module. // // Copyright (c) 2007 // Phil Thompson // // This file is part of PyQt. // // This copy of PyQt is free software; you can redistribute it and/or modify it // under the terms of the GNU General Public License version 2 as published by // the Free Software Foundation and appearing in the file LICENSE included in the // packaging of this file. // // PyQt is supplied in the hope that it will be useful, but WITHOUT ANY // WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS // FOR A PARTICULAR PURPOSE. See the GNU General Public License for more // details. // // You should have received a copy of the GNU General Public License along with // PyQt; see the file LICENSE. If not, write to the Free Software Foundation, // Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. %ModuleCode #include %End class QIODevice : QObject { %TypeHeaderCode #include %End public: enum OpenModeFlag { NotOpen, ReadOnly, WriteOnly, ReadWrite, Append, Truncate, Text, Unbuffered, }; typedef QFlags OpenMode; QIODevice(); explicit QIODevice(QObject *parent /TransferThis/); virtual ~QIODevice(); QFlags openMode() const; void setTextModeEnabled(bool enabled); bool isTextModeEnabled() const; bool isOpen() const; bool isReadable() const; bool isWritable() const; virtual bool isSequential() const; virtual bool open(QFlags mode) /ReleaseGIL/; virtual void close() /ReleaseGIL/; virtual qint64 pos() const; virtual qint64 size() const; virtual bool seek(qint64 pos) /ReleaseGIL/; virtual bool atEnd() const; virtual bool reset(); virtual qint64 bytesAvailable() const; virtual qint64 bytesToWrite() const; SIP_PYOBJECT read(qint64 maxlen) /ReleaseGIL/; %MethodCode // Return the data read or None if there was an error. char *s; if ((s = (char *)sipMalloc(a0)) == NULL) sipIsErr = 1; else { qint64 len; Py_BEGIN_ALLOW_THREADS len = sipCpp->read(s, a0); Py_END_ALLOW_THREADS if (len < 0) { sipFree((ANY *)s); Py_INCREF(Py_None); sipRes = Py_None; } else { sipRes = PyString_FromStringAndSize(s, len); sipFree((ANY *)s); if (sipRes == NULL) sipIsErr = 1; } } %End QByteArray readAll() /ReleaseGIL/; SIP_PYOBJECT readLine(qint64 maxlen=0) /ReleaseGIL/; %MethodCode // The two C++ overloads would have the same Python signature so we get most of // the combined functionality by treating an argument of 0 (the default) as // meaning return a QByteArray of any length. Otherwise it is treated as a // maximum buffer size and a Python string is returned. if (a0 == 0) { QByteArray *ba; Py_BEGIN_ALLOW_THREADS ba = new QByteArray(sipCpp->readLine(a0)); Py_END_ALLOW_THREADS sipRes = sipBuildResult(&sipIsErr, "B", ba, sipClass_QByteArray, 0); } else { char *s; if ((s = (char *)sipMalloc(a0)) == NULL) sipIsErr = 1; else { qint64 len; Py_BEGIN_ALLOW_THREADS len = sipCpp->readLine(s, a0); Py_END_ALLOW_THREADS if (len < 0) { sipFree((ANY *)s); Py_INCREF(Py_None); sipRes = Py_None; } else { sipRes = PyString_FromStringAndSize(s, len); sipFree((ANY *)s); if (sipRes == NULL) sipIsErr = 1; } } } %End virtual bool canReadLine() const; QByteArray peek(qint64 maxlen) /ReleaseGIL/; qint64 write(const QByteArray &data) /ReleaseGIL/; virtual bool waitForReadyRead(int msecs) /ReleaseGIL/; virtual bool waitForBytesWritten(int msecs) /ReleaseGIL/; void ungetChar(char c); bool putChar(char c); bool getChar(char *c /Out/); QString errorString() const; signals: void readyRead(); void bytesWritten(qint64 bytes); void aboutToClose(); protected: virtual SIP_PYOBJECT readData(qint64 maxlen) = 0 /ReleaseGIL/ [qint64 (char *data, qint64 maxlen)]; %MethodCode // Return the data read or None if there was an error. char *s; if ((s = (char *)sipMalloc(a0)) == NULL) sipIsErr = 1; else { qint64 len; Py_BEGIN_ALLOW_THREADS len = sipCpp->sipProtect_readData(s, a0); Py_END_ALLOW_THREADS if (len < 0) { sipFree((ANY *)s); Py_INCREF(Py_None); sipRes = Py_None; } else { sipRes = PyString_FromStringAndSize(s, len); sipFree((ANY *)s); if (sipRes == NULL) sipIsErr = 1; } } %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 (!PyString_Check(buf)) { sipBadCatcherResult(sipMethod); sipIsErr = 1; } else { memcpy(a0, PyString_AS_STRING(buf), PyString_GET_SIZE(buf)); sipRes = PyString_GET_SIZE(buf); } Py_DECREF(buf); Py_DECREF(result); } %End virtual SIP_PYOBJECT readLineData(qint64 maxlen) /ReleaseGIL/ [qint64 (char *data, qint64 maxlen)]; %MethodCode // Return the data read or None if there was an error. char *s; if ((s = (char *)sipMalloc(a0)) == NULL) sipIsErr = 1; else { qint64 len; Py_BEGIN_ALLOW_THREADS len = sipCpp->sipProtectVirt_readLineData(sipSelfWasArg, s, a0); Py_END_ALLOW_THREADS if (len < 0) { sipFree((ANY *)s); Py_INCREF(Py_None); sipRes = Py_None; } else { sipRes = PyString_FromStringAndSize(s, len); sipFree((ANY *)s); if (sipRes == NULL) sipIsErr = 1; } } %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 (!PyString_Check(buf)) { sipBadCatcherResult(sipMethod); sipIsErr = 1; } else { memcpy(a0, PyString_AS_STRING(buf), PyString_GET_SIZE(buf)); sipRes = PyString_GET_SIZE(buf); } Py_DECREF(buf); Py_DECREF(result); } %End virtual qint64 writeData(const char *data /Array/, qint64 len /ArraySize/) = 0; void setOpenMode(QFlags openMode); void setErrorString(const QString &errorString); private: QIODevice(const QIODevice &); }; QFlags operator|(QIODevice::OpenModeFlag f1, QFlags f2); QFlags operator|(QIODevice::OpenModeFlag f1, QIODevice::OpenModeFlag f2);