blob: 9e123b180aa446301f6ea1da79914c3df3adbadd (
plain)
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
|
/* -*- c++ -*- */
/*
* Copyright 2004,2008,2013 Free Software Foundation, Inc.
*
* This file is part of GNU Radio
*
* SPDX-License-Identifier: GPL-3.0-or-later
*
*/
#ifndef INCLUDED_GR_RUNTIME_BLOCK_EXECUTOR_H
#define INCLUDED_GR_RUNTIME_BLOCK_EXECUTOR_H
#include <gnuradio/api.h>
#include <gnuradio/logger.h>
#include <gnuradio/runtime_types.h>
#include <gnuradio/tags.h>
#include <fstream>
#include <memory>
namespace gr {
/*!
* \brief Manage the execution of a single block.
* \ingroup internal
*/
class GR_RUNTIME_API block_executor
{
protected:
block_sptr d_block; // The block we're trying to run
gr::logger_ptr d_logger;
gr::logger_ptr d_debug_logger;
// These are allocated here so we don't have to on each iteration
gr_vector_int d_ninput_items_required;
gr_vector_int d_ninput_items;
gr_vector_const_void_star d_input_items;
std::vector<bool> d_input_done;
gr_vector_void_star d_output_items;
std::vector<uint64_t> d_start_nitems_read; // stores where tag counts are before work
std::vector<tag_t> d_returned_tags;
int d_max_noutput_items;
#ifdef GR_PERFORMANCE_COUNTERS
bool d_use_pc;
#endif /* GR_PERFORMANCE_COUNTERS */
public:
block_executor(block_sptr block, int max_noutput_items = 100000);
~block_executor();
enum state {
READY, // We made progress; everything's cool.
READY_NO_OUTPUT, // We consumed some input, but produced no output.
BLKD_IN, // no progress; we're blocked waiting for input data.
BLKD_OUT, // no progress; we're blocked waiting for output buffer space.
DONE, // we're done; don't call me again.
};
/*
* \brief Run one iteration.
*/
state run_one_iteration();
};
} /* namespace gr */
#endif /* INCLUDED_GR_RUNTIME_BLOCK_EXECUTOR_H */
|