aboutsummaryrefslogtreecommitdiffstats
path: root/host/lib/include/uhdlib/features/discoverable_feature_registry.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'host/lib/include/uhdlib/features/discoverable_feature_registry.hpp')
-rw-r--r--host/lib/include/uhdlib/features/discoverable_feature_registry.hpp42
1 files changed, 42 insertions, 0 deletions
diff --git a/host/lib/include/uhdlib/features/discoverable_feature_registry.hpp b/host/lib/include/uhdlib/features/discoverable_feature_registry.hpp
new file mode 100644
index 000000000..f27f1a4f1
--- /dev/null
+++ b/host/lib/include/uhdlib/features/discoverable_feature_registry.hpp
@@ -0,0 +1,42 @@
+//
+// Copyright 2020 Ettus Research, a National Instruments Brand
+//
+// SPDX-License-Identifier: GPL-3.0-or-later
+//
+
+#pragma once
+
+#include <uhd/exception.hpp>
+#include <uhd/features/discoverable_feature.hpp>
+#include <uhd/features/discoverable_feature_getter_iface.hpp>
+#include <map>
+#include <memory>
+#include <vector>
+
+namespace uhd { namespace features {
+
+/*! Map-based registry to implement discoverable_feature_getter_iface
+ */
+class discoverable_feature_registry : public virtual discoverable_feature_getter_iface
+{
+public:
+ virtual ~discoverable_feature_registry() = default;
+
+ std::vector<std::string> enumerate_features() override;
+
+ template <typename T>
+ void register_feature(std::shared_ptr<T> feature)
+ {
+ if (!_features.emplace(T::get_feature_id(), feature).second) {
+ UHD_ASSERT_THROW(false);
+ }
+ }
+
+private:
+ discoverable_feature::sptr get_feature_ptr(
+ discoverable_feature::feature_id_t feature_id) override;
+
+ std::map<discoverable_feature::feature_id_t, discoverable_feature::sptr> _features;
+};
+
+}} // namespace uhd::features