16 #include <unordered_map>
17 #include <unordered_set>
18 #include <boost/graph/adjacency_list.hpp>
26 namespace uhd {
namespace rfnoc {
43 std::unordered_map<res_source_info, std::vector<res_source_info>>;
64 static const size_t ANY_PORT = size_t(~0);
80 virtual std::string get_unique_id()
const;
88 virtual size_t get_num_input_ports()
const = 0;
96 virtual size_t get_num_output_ports()
const = 0;
110 std::vector<std::string> get_property_ids()
const;
127 template <
typename prop_data_t>
129 const std::string&
id,
const prop_data_t& val,
const size_t instance = 0);
182 template <
typename prop_data_t>
183 const prop_data_t& get_property(
184 const std::string&
id,
const size_t instance = 0) ;
201 virtual void set_command_time(
uhd::time_spec_t time,
const size_t instance);
214 virtual void clear_command_time(
const size_t instance);
242 void register_property(
279 void add_property_resolver(
305 void set_prop_forwarding_policy(
342 template <
typename prop_data_t>
344 const std::string&
id,
const prop_data_t& val,
const res_source_info& src_info);
357 template <
typename prop_data_t>
358 const prop_data_t& get_property(
377 void register_action_handler(
const std::string&
id,
action_handler_t&& handler);
397 void set_action_forwarding_policy(
460 virtual bool check_topology(
const std::vector<size_t>& connected_inputs,
461 const std::vector<size_t>& connected_outputs);
468 virtual void shutdown();
477 friend class node_accessor_t;
498 template <
typename PredicateType>
499 prop_ptrs_t filter_props(PredicateType&& predicate)
502 for (
const auto& type_prop_pair : _props) {
503 for (
const auto& prop : type_prop_pair.second) {
504 if (predicate(prop)) {
505 filtered_props.push_back(prop);
510 return filtered_props;
520 property_base_t* inject_edge_property(
521 property_base_t* blueprint, res_source_info new_src_info);
561 void resolve_props();
577 void set_resolve_all_callback(resolve_callback_t&& resolver)
579 _resolve_all_cb = resolver;
584 void clear_resolve_all_callback()
586 _resolve_all_cb = _default_resolve_all_cb;
592 void set_graph_mutex_callback(graph_mutex_callback_t&& mutex)
594 _graph_mutex_cb = mutex;
600 void clear_graph_mutex_callback()
602 _graph_mutex_cb = NULL;
639 void forward_edge_property(
640 property_base_t* incoming_prop,
const size_t incoming_port);
648 void set_post_action_callback(action_handler_t&& post_handler)
650 _post_action_cb = std::move(post_handler);
667 bool _has_port(
const res_source_info& port_info)
const;
670 template <
typename prop_data_t>
671 void _set_property(
const std::string&
id,
const prop_data_t& val,
const res_source_info& src_info);
677 mutable std::mutex _prop_mutex;
681 std::vector<property_base_t*>,
686 std::unordered_map<property_base_t*, resolve_callback_t> _clean_cb_registry;
688 using property_resolver_t = std::tuple<prop_ptrs_t, prop_ptrs_t, resolver_fn_t>;
690 std::vector<property_resolver_t> _prop_resolvers;
695 graph_mutex_callback_t _graph_mutex_cb;
699 resolve_callback_t _resolve_all_cb;
703 const resolve_callback_t _default_resolve_all_cb = [
this]() {
715 std::unordered_set<std::unique_ptr<property_base_t>> _dynamic_props;
720 std::unordered_map<std::string, forwarding_policy_t> _prop_fwd_policies{
721 {
"", forwarding_policy_t::ONE_TO_ONE}};
724 forwarding_map_t _prop_fwd_map;
729 mutable std::mutex _action_mutex;
732 std::unordered_map<std::string, action_handler_t> _action_handlers;
735 std::unordered_map<std::string, forwarding_policy_t> _action_fwd_policies{
736 {
"", forwarding_policy_t::ONE_TO_ONE}};
741 action_handler_t _post_action_cb = [](
const res_source_info&,
745 forwarding_map_t _action_fwd_map;
750 std::vector<uhd::time_spec_t> _cmd_timespecs;