23#ifndef INCLUDED_GR_RUNTIME_FLOWGRAPH_H
24#define INCLUDED_GR_RUNTIME_FLOWGRAPH_H
40 basic_block_sptr d_basic_block;
47 d_basic_block =
block;
50 basic_block_sptr
block()
const {
return d_basic_block; }
51 int port()
const {
return d_port; }
53 bool operator==(
const endpoint& other)
const;
58 return (d_basic_block == other.d_basic_block && d_port == other.d_port);
64 basic_block_sptr d_basic_block;
72 d_basic_block =
block;
76 basic_block_sptr
block()
const {
return d_basic_block; }
78 bool is_hier()
const {
return d_is_hier; }
86 return (d_basic_block == other.d_basic_block &&
pmt::equal(d_port, other.d_port));
99 edge() : d_src(), d_dst(){};
173 void connect(basic_block_sptr src_block,
175 basic_block_sptr dst_block,
181 void disconnect(basic_block_sptr src_block,
183 basic_block_sptr dst_block,
262 void check_dst_not_used(
const endpoint& dst);
266 void check_contiguity(basic_block_sptr
block,
267 const std::vector<int>& used_ports,
277 bool source_p(basic_block_sptr
block);
284 basic_block_sptr dst_block,
292 basic_block_sptr dst_block,
300 os << endp.
block()->alias() <<
":" << endp.
port();
The abstract base class for all 'terminal' processing blocks.
Definition: block.h:66
Class representing a connection between to graph endpoints.
Definition: flowgraph.h:97
const endpoint & dst() const
Definition: flowgraph.h:104
edge(const endpoint &src, const endpoint &dst)
Definition: flowgraph.h:100
edge()
Definition: flowgraph.h:99
const endpoint & src() const
Definition: flowgraph.h:103
Class representing a specific input or output graph endpoint.
Definition: flowgraph.h:38
endpoint(basic_block_sptr block, int port)
Definition: flowgraph.h:45
bool operator==(const endpoint &other) const
Definition: flowgraph.h:56
int port() const
Definition: flowgraph.h:51
endpoint()
Definition: flowgraph.h:44
basic_block_sptr block() const
Definition: flowgraph.h:50
Class representing a directed, acyclic graph of basic blocks.
Definition: flowgraph.h:147
const msg_edge_vector_t & msg_edges() const
Get vector of message edges.
Definition: flowgraph.h:220
basic_block_vector_t d_blocks
Definition: flowgraph.h:248
basic_block_vector_t calc_used_blocks()
calculates all used blocks in a flow graph
std::vector< int > calc_used_ports(basic_block_sptr block, bool check_inputs)
basic_block_vector_t calc_downstream_blocks(basic_block_sptr block, int port)
void connect(const msg_endpoint &src, const msg_endpoint &dst)
Connect two message endpoints.
basic_block_vector_t topological_sort(basic_block_vector_t &blocks)
topologically sort blocks
edge_vector_t calc_upstream_edges(basic_block_sptr block)
edge_vector_t d_edges
Definition: flowgraph.h:249
edge calc_upstream_edge(basic_block_sptr block, int port)
void disconnect(const msg_endpoint &src, const msg_endpoint &dst)
Disconnect two message endpoints.
void validate()
Validate flow graph.
const edge_vector_t & edges() const
Get vector of edges.
Definition: flowgraph.h:215
void disconnect(const endpoint &src, const endpoint &dst)
Disconnect two endpoints.
msg_edge_vector_t d_msg_edges
Definition: flowgraph.h:250
bool has_block_p(basic_block_sptr block)
void clear()
Clear existing flowgraph.
friend GR_RUNTIME_API flowgraph_sptr make_flowgraph()
virtual ~flowgraph()
Destruct an arbitrary flowgraph.
void connect(const endpoint &src, const endpoint &dst)
Connect two endpoints.
std::vector< basic_block_vector_t > partition()
Calculate vector of disjoint graph partions.
boost::shared_ptr< io_signature > sptr
Definition: io_signature.h:46
Class representing a msg connection between to graph msg endpoints.
Definition: flowgraph.h:120
~msg_edge()
Definition: flowgraph.h:124
const msg_endpoint & src() const
Definition: flowgraph.h:126
const msg_endpoint & dst() const
Definition: flowgraph.h:127
msg_edge(const msg_endpoint &src, const msg_endpoint &dst)
Definition: flowgraph.h:123
msg_edge()
Definition: flowgraph.h:122
Definition: flowgraph.h:62
bool is_hier() const
Definition: flowgraph.h:78
void set_hier(bool h)
Definition: flowgraph.h:79
basic_block_sptr block() const
Definition: flowgraph.h:76
bool operator==(const msg_endpoint &other) const
Definition: flowgraph.h:84
pmt::pmt_t port() const
Definition: flowgraph.h:77
msg_endpoint(basic_block_sptr block, pmt::pmt_t port, bool is_hier=false)
Definition: flowgraph.h:70
msg_endpoint()
Definition: flowgraph.h:69
#define GR_RUNTIME_API
Definition: gnuradio-runtime/include/gnuradio/api.h:30
Include this header to use the message passing features.
Definition: basic_block.h:45
std::vector< msg_edge >::iterator msg_edge_viter_t
Definition: flowgraph.h:136
std::vector< edge >::iterator edge_viter_t
Definition: flowgraph.h:113
std::string dot_graph_fg(flowgraph_sptr fg)
std::vector< basic_block_sptr > basic_block_vector_t
Definition: basic_block.h:422
std::vector< msg_edge > msg_edge_vector_t
Definition: flowgraph.h:135
std::ostream & operator<<(std::ostream &os, basic_block_sptr basic_block)
Definition: basic_block.h:427
std::vector< edge > edge_vector_t
Definition: flowgraph.h:112
std::vector< endpoint > endpoint_vector_t
Definition: flowgraph.h:90
std::vector< endpoint >::iterator endpoint_viter_t
Definition: flowgraph.h:91
GR_RUNTIME_API flowgraph_sptr make_flowgraph()
PMT_API bool equal(const pmt_t &x, const pmt_t &y)
PMT_API const std::string symbol_to_string(const pmt_t &sym)
boost::intrusive_ptr< pmt_base > pmt_t
typedef for shared pointer (transparent reference counting). See http://www.boost....
Definition: pmt.h:56
#define PMT_NIL
Definition: pmt.h:103