OSDN Git Service

de-inline QBuffer::setData() overload for performance reasons
authorIvailo Monev <xakepa10@gmail.com>
Tue, 12 Jan 2021 14:31:54 +0000 (16:31 +0200)
committerIvailo Monev <xakepa10@gmail.com>
Tue, 12 Jan 2021 14:31:54 +0000 (16:31 +0200)
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
src/core/io/qbuffer.cpp
src/core/io/qbuffer.h

index 4a89e22..0b7bc9f 100644 (file)
@@ -294,7 +294,7 @@ const QByteArray &QBuffer::data() const
 */
 void QBuffer::setData(const QByteArray &data)
 {
-    if (isOpen()) {
+    if (Q_UNLIKELY(isOpen())) {
         qWarning("QBuffer::setData: Buffer is open");
         return;
     }
@@ -303,13 +303,20 @@ void QBuffer::setData(const QByteArray &data)
 }
 
 /*!
-    \fn void QBuffer::setData(const char *data, int size)
-
     \overload
 
     Sets the contents of the internal buffer to be the first \a size
-    bytes of \a data.
+    bytes of \a data, does not copy the data.
 */
+void QBuffer::setData(const char *data, const int len)
+{
+    if (Q_UNLIKELY(isOpen())) {
+        qWarning("QBuffer::setData: Buffer is open");
+        return;
+    }
+    Q_D(QBuffer);
+    d->buf->setRawData(data, len);
+}
 
 /*!
    \reimp
index 8fadc42..852d7c7 100644 (file)
@@ -63,8 +63,7 @@ public:
     void setBuffer(QByteArray *a);
 
     void setData(const QByteArray &data);
-    inline void setData(const char *data, const int len)
-        { setData(QByteArray::fromRawData(data, len)); }
+    void setData(const char *data, const int len);
     const QByteArray &data() const;
 
     bool open(OpenMode openMode);