18 #ifndef INCLUDED_LIBUHD_NODE_CTRL_BASE_HPP 19 #define INCLUDED_LIBUHD_NODE_CTRL_BASE_HPP 24 #include <boost/cstdint.hpp> 25 #include <boost/shared_ptr.hpp> 26 #include <boost/utility.hpp> 27 #include <boost/enable_shared_from_this.hpp> 28 #include <boost/function.hpp> 35 #define UHD_RFNOC_BLOCK_TRACE() UHD_LOGV(never) << "[" << unique_id() << "] " 41 class node_ctrl_base : boost::noncopyable,
public boost::enable_shared_from_this<node_ctrl_base>
47 typedef boost::shared_ptr<node_ctrl_base>
sptr;
48 typedef boost::weak_ptr<node_ctrl_base>
wptr;
109 template <
typename T>
112 return _find_child_node<T, true>();
117 template <
typename T>
120 return _find_child_node<T, false>();
135 template <
typename T,
typename value_type>
137 boost::function<value_type(boost::shared_ptr<T> node,
size_t port)> get_property,
138 value_type null_value,
139 const std::set< boost::shared_ptr<T> > &exclude_nodes=std::set< boost::shared_ptr<T> >()
141 return _find_unique_property<T, value_type, true>(get_property, null_value, exclude_nodes);
146 template <
typename T,
typename value_type>
148 boost::function<value_type(boost::shared_ptr<T> node,
size_t port)> get_property,
149 value_type null_value,
150 const std::set< boost::shared_ptr<T> > &exclude_nodes=std::set< boost::shared_ptr<T> >()
152 return _find_unique_property<T, value_type, false>(get_property, null_value, exclude_nodes);
211 template <
typename T,
bool downstream>
212 std::vector< boost::shared_ptr<T> > _find_child_node();
222 template <
typename T,
typename value_type,
bool downstream>
223 value_type _find_unique_property(
224 boost::function<value_type(boost::shared_ptr<T>,
size_t)> get_property,
225 value_type NULL_VALUE,
226 const std::set< boost::shared_ptr<T> > &exclude_nodes
231 std::map<size_t, size_t> _upstream_ports;
235 std::map<size_t, size_t> _downstream_ports;
UHD_INLINE value_type find_upstream_unique_property(boost::function< value_type(boost::shared_ptr< T > node, size_t port)> get_property, value_type null_value, const std::set< boost::shared_ptr< T > > &exclude_nodes=std::set< boost::shared_ptr< T > >())
Definition: node_ctrl_base.hpp:147
node_map_t list_upstream_nodes()
Definition: node_ctrl_base.hpp:66
virtual void _register_upstream_node(node_ctrl_base::sptr upstream_node, size_t port)
std::map< size_t, wptr > node_map_t
Definition: node_ctrl_base.hpp:49
virtual ~node_ctrl_base()
Definition: node_ctrl_base.hpp:160
void set_downstream_port(const size_t this_port, const size_t remote_port)
virtual void _register_downstream_node(node_ctrl_base::sptr downstream_node, size_t port)
node_map_t list_downstream_nodes()
Definition: node_ctrl_base.hpp:65
node_ctrl_base(void)
Definition: node_ctrl_base.hpp:159
std::pair< size_t, wptr > node_map_pair_t
Definition: node_ctrl_base.hpp:50
Definition: build_info.hpp:25
uhd::device_addr_t _args
Stores default arguments.
Definition: node_ctrl_base.hpp:160
boost::shared_ptr< node_ctrl_base > sptr
Definition: node_ctrl_base.hpp:47
#define UHD_RFNOC_API
Definition: config.hpp:103
size_t get_downstream_port(const size_t this_port)
size_t get_upstream_port(const size_t this_port)
#define UHD_INLINE
Definition: config.h:63
node_map_t _downstream_nodes
List of downstream nodes.
Definition: node_ctrl_base.hpp:175
UHD_INLINE std::vector< boost::shared_ptr< T > > find_upstream_node()
Definition: node_ctrl_base.hpp:118
void set_upstream_port(const size_t this_port, const size_t remote_port)
virtual std::string unique_id() const
Returns a unique string that identifies this block.
UHD_INLINE value_type find_downstream_unique_property(boost::function< value_type(boost::shared_ptr< T > node, size_t port)> get_property, value_type null_value, const std::set< boost::shared_ptr< T > > &exclude_nodes=std::set< boost::shared_ptr< T > >())
Definition: node_ctrl_base.hpp:136
UHD_INLINE std::vector< boost::shared_ptr< T > > find_downstream_node()
Definition: node_ctrl_base.hpp:110
boost::weak_ptr< node_ctrl_base > wptr
Definition: node_ctrl_base.hpp:48
node_map_t _upstream_nodes
List of upstream nodes.
Definition: node_ctrl_base.hpp:172
Definition: device_addr.hpp:47
Definition: node_ctrl_base.hpp:41