16 #include <unordered_map>
17 #include <unordered_set>
18 #include <boost/graph/adjacency_list.hpp>
26 namespace uhd {
namespace rfnoc {
42 std::unordered_map<res_source_info, std::vector<res_source_info>>;
63 static const size_t ANY_PORT = size_t(~0);
126 template <
typename prop_data_t>
128 const std::string&
id,
const prop_data_t& val,
const size_t instance = 0);
181 template <
typename prop_data_t>
182 const prop_data_t& get_property(
183 const std::string&
id,
const size_t instance = 0) ;
333 template <
typename prop_data_t>
335 const std::string&
id,
const prop_data_t& val,
const res_source_info& src_info);
348 template <
typename prop_data_t>
349 const prop_data_t& get_property(
452 const std::vector<size_t>& connected_outputs);
468 friend class node_accessor_t;
489 template <
typename PredicateType>
490 prop_ptrs_t filter_props(PredicateType&& predicate)
493 for (
const auto& type_prop_pair : _props) {
494 for (
const auto& prop : type_prop_pair.second) {
495 if (predicate(prop)) {
496 filtered_props.insert(prop);
501 return filtered_props;
511 property_base_t* inject_edge_property(
512 property_base_t* blueprint, res_source_info new_src_info);
552 void resolve_props();
568 void set_resolve_all_callback(resolve_callback_t&& resolver)
570 _resolve_all_cb = resolver;
607 void forward_edge_property(
608 property_base_t* incoming_prop,
const size_t incoming_port);
616 void set_post_action_callback(action_handler_t&& post_handler)
618 _post_action_cb = std::move(post_handler);
635 bool _has_port(
const res_source_info& port_info)
const;
641 mutable std::mutex _prop_mutex;
645 std::vector<property_base_t*>,
650 std::unordered_map<property_base_t*, resolve_callback_t> _clean_cb_registry;
652 using property_resolver_t = std::tuple<prop_ptrs_t, prop_ptrs_t, resolver_fn_t>;
654 std::vector<property_resolver_t> _prop_resolvers;
658 resolve_callback_t _resolve_all_cb = [
this]() {
669 std::unordered_set<std::unique_ptr<property_base_t>> _dynamic_props;
674 std::unordered_map<std::string, forwarding_policy_t> _prop_fwd_policies{
675 {
"", forwarding_policy_t::ONE_TO_ONE}};
678 forwarding_map_t _prop_fwd_map;
683 mutable std::mutex _action_mutex;
686 std::unordered_map<std::string, action_handler_t> _action_handlers;
689 std::unordered_map<std::string, forwarding_policy_t> _action_fwd_policies{
690 {
"", forwarding_policy_t::ONE_TO_ONE}};
695 action_handler_t _post_action_cb = [](
const res_source_info&,
699 forwarding_map_t _action_fwd_map;
704 std::vector<uhd::time_spec_t> _cmd_timespecs;