From 3c4e48f9015d882b8f103020bf214061b9be8dd1 Mon Sep 17 00:00:00 2001
From: Kubat <mael.martin31@gmail.com>
Date: Mon, 5 Jul 2021 21:46:29 +0200
Subject: [PATCH] MISC: Add a parallel_for macro for `#pragma omp parallel for
 \nfor (...)`

This is done to have a good formating with clang-format
---
 .clang-format             | 1 +
 src/Lib/Utils.hh          | 7 ++++++-
 src/UI/AudioVisualizer.cc | 6 ++----
 3 files changed, 9 insertions(+), 5 deletions(-)

diff --git a/.clang-format b/.clang-format
index f24513ac..57f14efd 100644
--- a/.clang-format
+++ b/.clang-format
@@ -63,6 +63,7 @@ ForEachMacros:
   - 'FOR_EVER_IF'
   - 'FOR_EVER_UNTIL'
   - 'FOR_EACH_FLAT_LIST_ITEM'
+  - 'parallel_for'
 
 IncludeCategories:
   - Regex: '.*'
diff --git a/src/Lib/Utils.hh b/src/Lib/Utils.hh
index 95f8e748..3c9bf0e8 100644
--- a/src/Lib/Utils.hh
+++ b/src/Lib/Utils.hh
@@ -10,8 +10,13 @@
 #include <QtGlobal>
 #include <type_traits>
 
+// Prety define for OpenMP's parallel for loop with indentation not fucked up
+// by clang-format.
+#define parallel_for                                                                               \
+    _Pragma("omp parallel for") for
+
+// Don't move this object, create it in one place and never move it again.
 #define VIVY_UNMOVABLE_OBJECT(classname)                                                           \
-    /* Don't move this object around */                                                            \
     classname(const classname &) = delete;            /* Copy */                                   \
     classname(classname &&)      = delete;            /* Move */                                   \
     classname &operator=(const classname &) = delete; /* Copy assign */                            \
diff --git a/src/UI/AudioVisualizer.cc b/src/UI/AudioVisualizer.cc
index a85ac126..6ef88a27 100644
--- a/src/UI/AudioVisualizer.cc
+++ b/src/UI/AudioVisualizer.cc
@@ -55,8 +55,7 @@ AudioVisualizer::AudioVisualizer(AudioContext::StreamPtr stream, QWidget *parent
     /* Compute the image data */
 
     for (size_t x = 0, i = 0; i < size - height; i += decalage, ++x) {
-#pragma omp parallel for
-        for (size_t j = 0; j < height; j++) {
+        parallel_for (size_t j = 0; j < height; j++) {
             const double curr_dat = decodedData[i + j];
             const double window_modifier =
                 (1 - cos(2 * M_PI * static_cast<double>(j) / static_cast<double>(height - 1))) / 2;
@@ -67,8 +66,7 @@ AudioVisualizer::AudioVisualizer(AudioContext::StreamPtr stream, QWidget *parent
 
         av_rdft_calc(ctx.get(), chunkData.get());
 
-#pragma omp parallel for
-        for (size_t j = 0; j < height / 2; j++) {
+        parallel_for (size_t j = 0; j < height / 2; j++) {
             const float im     = chunkData[j * 2];
             const float re     = chunkData[j * 2 + 1];
             const float mag    = sqrtf(im * im + re * re);
-- 
GitLab