16 #include <unordered_map>
17 #include <unordered_set>
18 #include <boost/graph/adjacency_list.hpp>
26 namespace uhd {
namespace rfnoc {
51 std::unordered_map<res_source_info, std::vector<res_source_info>>;
73 static const size_t ANY_PORT = size_t(~0);
138 template <
typename prop_data_t>
140 const std::string&
id,
const prop_data_t& val,
const size_t instance = 0);
193 template <
typename prop_data_t>
194 const prop_data_t& get_property(
195 const std::string&
id,
const size_t instance = 0) ;
353 template <
typename prop_data_t>
355 const std::string&
id,
const prop_data_t& val,
const res_source_info& src_info);
368 template <
typename prop_data_t>
369 const prop_data_t& get_property(
484 const std::vector<size_t>& connected_outputs);
521 template <
typename PredicateType>
522 prop_ptrs_t filter_props(PredicateType&& predicate)
525 for (
const auto& type_prop_pair : _props) {
526 for (
const auto& prop : type_prop_pair.second) {
527 if (predicate(prop)) {
528 filtered_props.push_back(prop);
533 return filtered_props;
543 property_base_t* inject_edge_property(
544 property_base_t* blueprint, res_source_info new_src_info);
584 void resolve_props();
600 void set_resolve_all_callback(resolve_callback_t&& resolver)
602 _resolve_all_cb = resolver;
607 void clear_resolve_all_callback()
609 _resolve_all_cb = _default_resolve_all_cb;
615 void set_graph_mutex_callback(graph_mutex_callback_t&& mutex)
617 _graph_mutex_cb = mutex;
623 void clear_graph_mutex_callback()
625 _graph_mutex_cb = NULL;
662 void forward_edge_property(
663 property_base_t* incoming_prop,
const size_t incoming_port);
671 void set_post_action_callback(post_action_handler_t&& post_handler)
673 _post_action_cb = std::move(post_handler);
690 bool _has_port(
const res_source_info& port_info)
const;
693 template <
typename prop_data_t>
695 const std::string&
id,
const prop_data_t& val,
const res_source_info& src_info);
702 mutable std::mutex _prop_mutex;
706 std::vector<property_base_t*>,
711 std::unordered_map<property_base_t*, resolve_callback_t> _clean_cb_registry;
713 using property_resolver_t = std::tuple<prop_ptrs_t, prop_ptrs_t, resolver_fn_t>;
715 std::vector<property_resolver_t> _prop_resolvers;
721 graph_mutex_callback_t _graph_mutex_cb;
726 resolve_callback_t _resolve_all_cb;
731 const resolve_callback_t _default_resolve_all_cb = [
this]() {
744 std::unordered_set<std::unique_ptr<property_base_t>> _dynamic_props;
750 std::unordered_map<std::string, forwarding_policy_t> _prop_fwd_policies{
751 {
"", forwarding_policy_t::ONE_TO_ONE}};
754 forwarding_map_t _prop_fwd_map;
759 mutable std::mutex _action_mutex;
762 std::unordered_map<std::string, action_handler_t> _action_handlers;
765 std::unordered_map<std::string, forwarding_policy_t> _action_fwd_policies{
766 {
"", forwarding_policy_t::ONE_TO_ONE}};
772 post_action_handler_t _post_action_cb =
776 forwarding_map_t _action_fwd_map;
781 std::vector<uhd::time_spec_t> _cmd_timespecs;
Definition: device_addr.hpp:39
Definition: dirtifier.hpp:19
Special class which may access nodes.
Definition: node_accessor.hpp:29
virtual std::string get_unique_id() const
Return a unique identifier string for this node.
void register_property(property_base_t *prop, resolve_callback_t &&clean_callback=nullptr)
std::unordered_map< res_source_info, std::vector< res_source_info > > forwarding_map_t
Definition: node.hpp:51
void set_action_forwarding_policy(forwarding_policy_t policy, const std::string &action_key="")
void set_prop_forwarding_map(const forwarding_map_t &map)
std::vector< property_base_t * > prop_ptrs_t
Definition: node.hpp:231
std::function< void(void)> resolver_fn_t
Definition: node.hpp:43
std::function< void(void)> resolve_callback_t
Definition: node.hpp:44
void register_action_handler(const std::string &id, action_handler_t &&handler)
virtual void set_command_time(uhd::time_spec_t time, const size_t instance)
virtual bool check_topology(const std::vector< size_t > &connected_inputs, const std::vector< size_t > &connected_outputs)
virtual ~node_t()
Definition: node.hpp:80
void set_action_forwarding_map(const forwarding_map_t &map)
virtual size_t get_num_output_ports() const =0
Return the number of output ports for this block.
void set_properties(const uhd::device_addr_t &props, const size_t instance=0)
forwarding_policy_t
Types of property/action forwarding for those not defined by the block itself.
Definition: node.hpp:54
std::function< void(const res_source_info &, action_info::sptr, action_mode_t)> post_action_handler_t
Definition: node.hpp:49
action_mode_t
Action execution modes.
Definition: node.hpp:38
std::function< std::recursive_mutex &(void)> graph_mutex_callback_t
Definition: node.hpp:45
virtual size_t get_num_input_ports() const =0
Return the number of input ports for this block.
void add_property_resolver(prop_ptrs_t &&inputs, prop_ptrs_t &&outputs, resolver_fn_t &&resolver_fn)
std::function< void(const res_source_info &, action_info::sptr)> action_handler_t
Definition: node.hpp:47
virtual void clear_command_time(const size_t instance)
void post_action(const res_source_info &edge_info, action_info::sptr action, action_mode_t mode=action_mode_t::SYNC)
static dirtifier_t ALWAYS_DIRTY
A dirtifyer object, useful for properties that always need updating.
Definition: node.hpp:497
virtual uhd::time_spec_t get_command_time(const size_t instance) const
std::vector< std::string > get_property_ids() const
void set_prop_forwarding_policy(forwarding_policy_t policy, const std::string &prop_id="")
Definition: property.hpp:26
access_t
Definition: property.hpp:28
Definition: time_spec.hpp:31
std::unique_ptr< scope_exit > uptr
Definition: scope_exit.hpp:26
#define UHD_API
Definition: include/uhd/config.h:87
Definition: endianness.hpp:16
std::shared_ptr< action_info > sptr
Definition: actions.hpp:39
Definition: res_source_info.hpp:18
source_t
Definition: res_source_info.hpp:21