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