GNU Radio Manual and C++ API Reference 3.10.4.0-rc1
The Free & Open Software Radio Ecosystem
blockinterleaving.h
Go to the documentation of this file.
1/* -*- c++ -*- */
2/*
3 * Copyright 2022 Johannes Demel.
4 *
5 * This file is part of GNU Radio
6 *
7 * SPDX-License-Identifier: GPL-3.0-or-later
8 *
9 */
10
11#ifndef INCLUDED_GR_BLOCKS_BLOCKINTERLEAVING_H
12#define INCLUDED_GR_BLOCKS_BLOCKINTERLEAVING_H
13
14#include <gnuradio/blocks/api.h>
15
16
17namespace gr {
18namespace blocks {
19namespace kernel {
20
22{
23public:
24 block_interleaving(std::vector<size_t> interleaver_indices);
25
26 size_t interleaver_length() { return _interleaver_indices.size(); };
27 std::vector<size_t> interleaver_indices() { return _interleaver_indices; };
28 std::vector<size_t> deinterleaver_indices() { return _deinterleaver_indices; };
29
30 template <class T>
31 void interleave(T* target, const T* src)
32 {
33 for (auto idx : _interleaver_indices) {
34 *target++ = src[idx];
35 }
36 }
37
38 template <class T>
39 void deinterleave(T* target, const T* src)
40 {
41 for (auto idx : _deinterleaver_indices) {
42 *target++ = src[idx];
43 }
44 }
45
46private:
47 std::vector<size_t> _interleaver_indices;
48 std::vector<size_t> _deinterleaver_indices;
49
50 void set_interleaver_indices(const std::vector<size_t>& interleaver_indices);
51};
52
53} /* namespace kernel */
54} /* namespace blocks */
55} /* namespace gr */
56
57#endif /* INCLUDED_GR_BLOCKS_BLOCKINTERLEAVING_H */
Definition: blockinterleaving.h:22
size_t interleaver_length()
Definition: blockinterleaving.h:26
void interleave(T *target, const T *src)
Definition: blockinterleaving.h:31
std::vector< size_t > deinterleaver_indices()
Definition: blockinterleaving.h:28
block_interleaving(std::vector< size_t > interleaver_indices)
std::vector< size_t > interleaver_indices()
Definition: blockinterleaving.h:27
void deinterleave(T *target, const T *src)
Definition: blockinterleaving.h:39
#define BLOCKS_API
Definition: gr-blocks/include/gnuradio/blocks/api.h:18
GNU Radio logging wrapper.
Definition: basic_block.h:29