GNU Radio Manual and C++ API Reference  3.9.2.0
The Free & Open Software Radio Ecosystem
tag_checker.h
Go to the documentation of this file.
1 /* -*- c++ -*- */
2 /*
3  * Copyright 2013 Free Software Foundation, Inc.
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_RUNTIME_TAG_CHECKER_H
12 #define INCLUDED_GR_RUNTIME_TAG_CHECKER_H
13 
14 #include <gnuradio/tags.h>
15 #include <algorithm>
16 #include <vector>
17 
18 namespace gr {
19 
21 {
22 private:
23  std::vector<tag_t> d_tags;
24  tag_t d_next_tag;
25  bool d_has_next_tag;
26  unsigned int d_next_tag_index;
27 
28 public:
29  tag_checker(std::vector<tag_t>& tags) : d_has_next_tag(false), d_next_tag_index(0)
30  {
31  d_tags = tags;
32  std::sort(d_tags.begin(), d_tags.end(), &gr::tag_t::offset_compare);
33  if (!d_tags.empty()) {
34  d_has_next_tag = true;
35  d_next_tag = tags[0];
36  }
37  };
38 
40 
41  void get_tags(std::vector<tag_t>& tag_list, unsigned int offset)
42  {
43  while (d_has_next_tag && (offset >= d_next_tag.offset)) {
44  if (offset == d_next_tag.offset) {
45  tag_list.push_back(d_next_tag);
46  }
47  d_next_tag_index += 1;
48  if (d_next_tag_index >= d_tags.size()) {
49  d_has_next_tag = false;
50  } else {
51  d_next_tag = d_tags[d_next_tag_index];
52  }
53  }
54  };
55 };
56 } // namespace gr
57 
58 #endif /* INCLUDED_GR_RUNTIME_TAG_CHECKER_H */
Definition: tag_checker.h:21
tag_checker(std::vector< tag_t > &tags)
Definition: tag_checker.h:29
void get_tags(std::vector< tag_t > &tag_list, unsigned int offset)
Definition: tag_checker.h:41
~tag_checker()
Definition: tag_checker.h:39
GNU Radio logging wrapper for log4cpp library (C++ port of log4j)
Definition: basic_block.h:29
Definition: tags.h:19
static bool offset_compare(const tag_t &x, const tag_t &y)
Definition: tags.h:40
uint64_t offset
the item tag occurred at (as a uint64_t)
Definition: tags.h:21