From a2cf896663e538e1bc2f29a16368dca9b18a626f Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Bodn=C3=A1r=20Zsombor?= <bodzsoaa@sch.bme.hu>
Date: Sat, 6 Feb 2021 14:34:34 +0100
Subject: [PATCH] Move MuebTransmitterPrivate to private header file

---
 src/CMakeLists.txt      |  2 +-
 src/muebtransmitter.cc  | 92 +-------------------------------------
 src/muebtransmitter_p.h | 97 +++++++++++++++++++++++++++++++++++++++++
 3 files changed, 99 insertions(+), 92 deletions(-)
 create mode 100644 src/muebtransmitter_p.h

diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index d698c42..d422e1a 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -2,7 +2,7 @@ add_library(
   muebtransmitter SHARED
   ${CMAKE_SOURCE_DIR}/include/libmueb/libmueb_global.h
   ${CMAKE_SOURCE_DIR}/include/libmueb/muebtransmitter.h configuration.h
-  muebtransmitter.cc configuration.cc)
+  muebtransmitter_p.h muebtransmitter.cc configuration.cc)
 target_include_directories(muebtransmitter PUBLIC ../include/${PROJECT_NAME})
 target_link_libraries(
   muebtransmitter
diff --git a/src/muebtransmitter.cc b/src/muebtransmitter.cc
index cc3f025..6515461 100644
--- a/src/muebtransmitter.cc
+++ b/src/muebtransmitter.cc
@@ -1,96 +1,6 @@
 #include "muebtransmitter.h"
 
-#include <QByteArray>
-#include <QDebug>
-#include <QNetworkDatagram>
-#include <QUdpSocket>
-#include <QtConcurrent>
-
-#include "configuration.h"
-
-class MuebTransmitterPrivate {
-  Q_DECLARE_PUBLIC(MuebTransmitter)
-  Q_DISABLE_COPY(MuebTransmitterPrivate)
-
- public:
-  explicit MuebTransmitterPrivate(MuebTransmitter* q)
-      : datagram_(QByteArray(), configuration_.target_address(),
-                  configuration_.broadcast_animation_port()),
-        q_ptr(q) {
-    qInfo().noquote() << "[MuebTransmitter] UDP Socket will send frame to"
-                      << QString("%1:%2")
-                             .arg(configuration_.target_address().toString())
-                             .arg(configuration_.broadcast_animation_port());
-  }
-
-  void SendFrame(libmueb::Frame frame) {
-    std::uint8_t packet_number{0};
-
-    QByteArray reduced_compressed_frame;
-    // Frame color reduction and compression
-    if (configuration_.color_depth() < 5) {
-      reduced_compressed_frame =
-          QtConcurrent::blockingMappedReduced<QByteArray>(
-              frame.constBits(), frame.constBits() + frame.sizeInBytes(),
-              /* Reference:
-               * http://threadlocalmutex.com/?p=48
-               * http://threadlocalmutex.com/?page_id=60
-               */
-              [this](const uchar& color) -> uchar {
-                if (configuration_.color_depth() == 3) {
-                  return (color * 225 + 4096) >> 13;
-                } else if (configuration_.color_depth() == 4) {
-                  return (color * 15 + 135) >> 8;
-                }
-
-                return color;
-              },
-              [this](QByteArray& compressed_colors, const uchar& color) {
-                static bool msb{true};
-
-                // Compress 2 color components into 1 byte
-                if (msb) {
-                  compressed_colors.append(color << configuration_.factor());
-                } else {
-                  compressed_colors.back() = compressed_colors.back() | color;
-                }
-
-                msb = !msb;
-              },
-              QtConcurrent::OrderedReduce | QtConcurrent::SequentialReduce);
-    }
-    // No compression
-    else {
-      reduced_compressed_frame.setRawData(
-          reinterpret_cast<const char*>(frame.bits()), frame.sizeInBytes());
-    }
-
-    if (configuration_.max_packet_number() == 1) {
-      reduced_compressed_frame.insert(0, configuration_.protocol_type())
-          .insert(1, packet_number);
-
-      datagram_.setData(reduced_compressed_frame);
-    } else {
-      for (std::uint8_t i = 0; i < configuration_.max_packet_number(); ++i) {
-        QByteArray data;
-        data.append(configuration_.protocol_type())
-            .append(packet_number++)
-            .append(reduced_compressed_frame.sliced(
-                i * configuration_.frame_fragment_size(),
-                configuration_.frame_fragment_size()));
-
-        datagram_.setData(data);
-      }
-    }
-
-    socket_.writeDatagram(datagram_);
-  }
-
-  Configuration configuration_;
-  QUdpSocket socket_;
-  QNetworkDatagram datagram_;
-  MuebTransmitter* q_ptr;
-};
+#include "muebtransmitter_p.h"
 
 MuebTransmitter::MuebTransmitter(QObject* parent)
     : QObject(parent), d_ptr_(new MuebTransmitterPrivate(this)) {}
diff --git a/src/muebtransmitter_p.h b/src/muebtransmitter_p.h
new file mode 100644
index 0000000..facfc11
--- /dev/null
+++ b/src/muebtransmitter_p.h
@@ -0,0 +1,97 @@
+#ifndef LIBMUEB_MUEBTRANSMITTER_P_H_
+#define LIBMUEB_MUEBTRANSMITTER_P_H_
+
+#include <QByteArray>
+#include <QDebug>
+#include <QNetworkDatagram>
+#include <QUdpSocket>
+#include <QtConcurrent>
+
+#include "configuration.h"
+#include "muebtransmitter.h"
+
+class MuebTransmitterPrivate {
+  Q_DECLARE_PUBLIC(MuebTransmitter)
+  Q_DISABLE_COPY(MuebTransmitterPrivate)
+
+ public:
+  explicit MuebTransmitterPrivate(MuebTransmitter* q)
+      : datagram_(QByteArray(), configuration_.target_address(),
+                  configuration_.broadcast_animation_port()),
+        q_ptr(q) {
+    qInfo().noquote() << "[MuebTransmitter] UDP Socket will send frame to"
+                      << QString("%1:%2")
+                             .arg(configuration_.target_address().toString())
+                             .arg(configuration_.broadcast_animation_port());
+  }
+
+  void SendFrame(libmueb::Frame frame) {
+    std::uint8_t packet_number{0};
+
+    QByteArray reduced_compressed_frame;
+    // Frame color reduction and compression
+    if (configuration_.color_depth() < 5) {
+      reduced_compressed_frame =
+          QtConcurrent::blockingMappedReduced<QByteArray>(
+              frame.constBits(), frame.constBits() + frame.sizeInBytes(),
+              /* Reference:
+               * http://threadlocalmutex.com/?p=48
+               * http://threadlocalmutex.com/?page_id=60
+               */
+              [this](const uchar& color) -> uchar {
+                if (configuration_.color_depth() == 3) {
+                  return (color * 225 + 4096) >> 13;
+                } else if (configuration_.color_depth() == 4) {
+                  return (color * 15 + 135) >> 8;
+                }
+
+                return color;
+              },
+              [this](QByteArray& compressed_colors, const uchar& color) {
+                static bool msb{true};
+
+                // Compress 2 color components into 1 byte
+                if (msb) {
+                  compressed_colors.append(color << configuration_.factor());
+                } else {
+                  compressed_colors.back() = compressed_colors.back() | color;
+                }
+
+                msb = !msb;
+              },
+              QtConcurrent::OrderedReduce | QtConcurrent::SequentialReduce);
+    }
+    // No compression
+    else {
+      reduced_compressed_frame.setRawData(
+          reinterpret_cast<const char*>(frame.bits()), frame.sizeInBytes());
+    }
+
+    if (configuration_.max_packet_number() == 1) {
+      reduced_compressed_frame.insert(0, configuration_.protocol_type())
+          .insert(1, packet_number);
+
+      datagram_.setData(reduced_compressed_frame);
+    } else {
+      for (std::uint8_t i = 0; i < configuration_.max_packet_number(); ++i) {
+        QByteArray data;
+        data.append(configuration_.protocol_type())
+            .append(packet_number++)
+            .append(reduced_compressed_frame.sliced(
+                i * configuration_.frame_fragment_size(),
+                configuration_.frame_fragment_size()));
+
+        datagram_.setData(data);
+      }
+    }
+
+    socket_.writeDatagram(datagram_);
+  }
+
+  Configuration configuration_;
+  QUdpSocket socket_;
+  QNetworkDatagram datagram_;
+  MuebTransmitter* q_ptr;
+};
+
+#endif  // LIBMUEB_MUEBTRANSMITTER_P_H_
-- 
GitLab