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
|