File: 0025-blocks-patterned-interleaver-remove-unnecessary-copi.patch

package info (click to toggle)
gnuradio 3.10.12.0-3
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 41,196 kB
  • sloc: cpp: 191,540; python: 91,856; ansic: 2,292; xml: 999; fortran: 927; sh: 477; makefile: 50
file content (75 lines) | stat: -rw-r--r-- 2,664 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
From a012757a9f9ab78d4492745a76568b8b44e097db Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Marcus=20M=C3=BCller?= <mmueller@gnuradio.org>
Date: Sun, 9 Mar 2025 15:17:41 +0100
Subject: [PATCH 25/41] blocks/patterned interleaver: remove unnecessary
 copies, simplify
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Signed-off-by: Marcus Müller <mmueller@gnuradio.org>
---
 gr-blocks/lib/patterned_interleaver_impl.cc | 24 ++++++---------------
 1 file changed, 7 insertions(+), 17 deletions(-)

diff --git a/gr-blocks/lib/patterned_interleaver_impl.cc b/gr-blocks/lib/patterned_interleaver_impl.cc
index ecc41e33da..299d765eb5 100644
--- a/gr-blocks/lib/patterned_interleaver_impl.cc
+++ b/gr-blocks/lib/patterned_interleaver_impl.cc
@@ -1,6 +1,7 @@
 /* -*- c++ -*- */
 /*
  * Copyright 2012 Free Software Foundation, Inc.
+ * Copyright 2025 Marcus Müller
  *
  * This file is part of GNU Radio
  *
@@ -8,10 +9,6 @@
  *
  */
 
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
 #include "patterned_interleaver_impl.h"
 #include <gnuradio/io_signature.h>
 
@@ -45,20 +42,13 @@ int patterned_interleaver_impl::general_work(int noutput_items,
                                              gr_vector_const_void_star& input_items,
                                              gr_vector_void_star& output_items)
 {
-    size_t nblks = noutput_items / d_pattern.size();
-
-    std::vector<const char*> ii;
-    for (size_t i = 0; i < input_items.size(); i++) {
-        ii.push_back((const char*)input_items[i]);
-    }
-
-    char* oo = (char*)output_items[0];
+    const size_t nblks = noutput_items / d_pattern.size();
 
     for (size_t i = 0; i < nblks; i++) {
-        for (size_t j = 0; j < d_pattern.size(); j++) {
-            memcpy(oo, ii[d_pattern[j]], d_itemsize);
-            oo += d_itemsize;
-            ii[d_pattern[j]] += d_itemsize;
+        for (const auto input_idx : d_pattern) {
+            memcpy(output_items[0], input_items[input_idx], d_itemsize);
+            reinterpret_cast<const char*&>(input_items[input_idx]) += d_itemsize;
+            reinterpret_cast<char*&>(output_items[0]) += d_itemsize;
         }
     }
 
@@ -71,7 +61,7 @@ int patterned_interleaver_impl::general_work(int noutput_items,
 void patterned_interleaver_impl::forecast(int noutput_items,
                                           gr_vector_int& ninput_items_required)
 {
-    int nblks = noutput_items / d_pattern.size();
+    const int nblks = noutput_items / d_pattern.size();
     for (size_t i = 0; i < ninput_items_required.size(); i++) {
         ninput_items_required[i] = d_counts[i] * nblks;
     }
-- 
2.47.3