From 03f911fd0a4bb2768835fe16b9bef0893ccc25b9 Mon Sep 17 00:00:00 2001
From: Mikhail Svetkin <mikhail.svetkin@gmail.com>
Date: Sun, 21 Jul 2019 12:16:19 +0200
Subject: [PATCH] QHttpServerResponse: Use rvalue more
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Change-Id: I442245dc800a545142f3f28ea51a4465d6eaff84
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
Reviewed-by: MÃ¥rten Nordheim <marten.nordheim@qt.io>
---
 src/httpserver/qhttpserverresponse.cpp | 34 +++++++++++++++++++++++++-
 src/httpserver/qhttpserverresponse.h   | 16 ++++++++++++
 2 files changed, 49 insertions(+), 1 deletion(-)

diff --git a/src/httpserver/qhttpserverresponse.cpp b/src/httpserver/qhttpserverresponse.cpp
index 5941418..e997e96 100644
--- a/src/httpserver/qhttpserverresponse.cpp
+++ b/src/httpserver/qhttpserverresponse.cpp
@@ -56,7 +56,7 @@ QHttpServerResponse::QHttpServerResponse(const QHttpServerResponse::StatusCode s
 }
 
 QHttpServerResponse::QHttpServerResponse(const char *data)
-    : QHttpServerResponse(QByteArray(data))
+    : QHttpServerResponse(QByteArray::fromRawData(data, qstrlen(data)))
 {
 }
 
@@ -70,6 +70,13 @@ QHttpServerResponse::QHttpServerResponse(const QByteArray &data)
 {
 }
 
+QHttpServerResponse::QHttpServerResponse(QByteArray &&data)
+    : QHttpServerResponse(
+            QMimeDatabase().mimeTypeForData(data).name().toLocal8Bit(),
+            std::move(data))
+{
+}
+
 QHttpServerResponse::QHttpServerResponse(const QJsonObject &data)
     : QHttpServerResponse(mimeApplicationJson,
                           QJsonDocument(data).toJson(QJsonDocument::Compact))
@@ -89,6 +96,31 @@ QHttpServerResponse::QHttpServerResponse(const QByteArray &mimeType,
 {
 }
 
+QHttpServerResponse::QHttpServerResponse(QByteArray &&mimeType,
+                                         const QByteArray &data,
+                                         const StatusCode status)
+    : QHttpServerResponse(
+            new QHttpServerResponsePrivate{std::move(mimeType), data, status})
+{
+}
+
+QHttpServerResponse::QHttpServerResponse(const QByteArray &mimeType,
+                                         QByteArray &&data,
+                                         const StatusCode status)
+    : QHttpServerResponse(
+            new QHttpServerResponsePrivate{mimeType, std::move(data), status})
+{
+}
+
+QHttpServerResponse::QHttpServerResponse(QByteArray &&mimeType,
+                                         QByteArray &&data,
+                                         const StatusCode status)
+    : QHttpServerResponse(
+            new QHttpServerResponsePrivate{std::move(mimeType), std::move(data),
+                                           status})
+{
+}
+
 QHttpServerResponse::~QHttpServerResponse()
 {
 }
diff --git a/src/httpserver/qhttpserverresponse.h b/src/httpserver/qhttpserverresponse.h
index 030b8c4..73fa52d 100644
--- a/src/httpserver/qhttpserverresponse.h
+++ b/src/httpserver/qhttpserverresponse.h
@@ -54,14 +54,30 @@ public:
     QHttpServerResponse& operator=(QHttpServerResponse &&other) = delete;
 
     QHttpServerResponse(const StatusCode statusCode);
+
     QHttpServerResponse(const char *data);
+
     QHttpServerResponse(const QString &data);
+
     explicit QHttpServerResponse(const QByteArray &data);
+    explicit QHttpServerResponse(QByteArray &&data);
+
     QHttpServerResponse(const QJsonObject &data);
     QHttpServerResponse(const QJsonArray &data);
+
     QHttpServerResponse(const QByteArray &mimeType,
                         const QByteArray &data,
                         const StatusCode status = StatusCode::Ok);
+    QHttpServerResponse(QByteArray &&mimeType,
+                        const QByteArray &data,
+                        const StatusCode status = StatusCode::Ok);
+    QHttpServerResponse(const QByteArray &mimeType,
+                        QByteArray &&data,
+                        const StatusCode status = StatusCode::Ok);
+    QHttpServerResponse(QByteArray &&mimeType,
+                        QByteArray &&data,
+                        const StatusCode status = StatusCode::Ok);
+
     virtual ~QHttpServerResponse();
     static QHttpServerResponse fromFile(const QString &fileName);