USRP Hardware Driver and USRP Manual Version: 4.2.0.0
UHD and USRP Manual
property_tree.hpp
Go to the documentation of this file.
1//
2// Copyright 2011,2014-2016 Ettus Research
3// Copyright 2018 Ettus Research, a National Instruments Company
4// Copyright 2019 Ettus Research, a National Instruments Brand
5//
6// SPDX-License-Identifier: GPL-3.0-or-later
7//
8
9#pragma once
10
11#include <uhd/config.hpp>
13#include <functional>
14#include <memory>
15#include <string>
16#include <vector>
17
18namespace uhd {
19
25public:
26 virtual ~property_iface() = default;
27};
28
76template <typename T>
78{
79public:
80 typedef std::function<void(const T&)> subscriber_type;
81 typedef std::function<T(void)> publisher_type;
82 typedef std::function<T(const T&)> coercer_type;
83
84 virtual ~property(void) = 0;
85
96 virtual property<T>& set_coercer(const coercer_type& coercer) = 0;
97
108 virtual property<T>& set_publisher(const publisher_type& publisher) = 0;
109
119 virtual property<T>& add_desired_subscriber(const subscriber_type& subscriber) = 0;
120
130 virtual property<T>& add_coerced_subscriber(const subscriber_type& subscriber) = 0;
131
138 virtual property<T>& update(void) = 0;
139
152 virtual property<T>& set(const T& value) = 0;
153
165 virtual property<T>& set_coerced(const T& value) = 0;
166
175 virtual const T get(void) const = 0;
176
183 virtual const T get_desired(void) const = 0;
184
191 virtual bool empty(void) const = 0;
192};
193
194template <typename T>
196{
197 /* NOP */
198}
199
204struct UHD_API_HEADER fs_path : std::string
205{
207 UHD_API fs_path(const char*);
208 UHD_API fs_path(const std::string&);
209 UHD_API std::string leaf(void) const;
211};
212
215
220{
221public:
222 typedef std::shared_ptr<property_tree> sptr;
223
224 enum coerce_mode_t { AUTO_COERCE, MANUAL_COERCE };
225
226 virtual ~property_tree(void) = 0;
227
229 static sptr make(void);
230
232 virtual sptr subtree(const fs_path& path) const = 0;
233
235 virtual void remove(const fs_path& path) = 0;
236
238 virtual bool exists(const fs_path& path) const = 0;
239
241 virtual std::vector<std::string> list(const fs_path& path) const = 0;
242
244 template <typename T>
245 property<T>& create(const fs_path& path, coerce_mode_t coerce_mode = AUTO_COERCE);
246
248 template <typename T>
249 property<T>& access(const fs_path& path);
250
252 template <typename T>
253 std::shared_ptr<property<T>> pop(const fs_path& path);
254
255private:
257 virtual std::shared_ptr<property_iface> _pop(const fs_path& path) = 0;
258
260 virtual void _create(const fs_path& path,
261 const std::shared_ptr<property_iface>& prop) = 0;
262
264 virtual std::shared_ptr<property_iface>& _access(const fs_path& path) const = 0;
265};
266
267} // namespace uhd
268
269#include <uhd/property_tree.ipp>
Definition: property_tree.hpp:24
virtual ~property_iface()=default
Definition: property_tree.hpp:220
std::shared_ptr< property_tree > sptr
Definition: property_tree.hpp:222
virtual ~property_tree(void)=0
virtual std::vector< std::string > list(const fs_path &path) const =0
Get an iterable to all things in the given path.
virtual void remove(const fs_path &path)=0
Remove a property or directory (recursive)
virtual sptr subtree(const fs_path &path) const =0
Get a subtree with a new root starting at path.
static sptr make(void)
Create a new + empty property tree.
virtual bool exists(const fs_path &path) const =0
True if the path exists in the tree.
coerce_mode_t
Definition: property_tree.hpp:224
@ AUTO_COERCE
Definition: property_tree.hpp:224
Definition: property_tree.hpp:78
virtual property< T > & set_coerced(const T &value)=0
virtual property< T > & set_coercer(const coercer_type &coercer)=0
std::function< T(void)> publisher_type
Definition: property_tree.hpp:81
virtual const T get_desired(void) const =0
virtual bool empty(void) const =0
virtual property< T > & add_coerced_subscriber(const subscriber_type &subscriber)=0
virtual ~property(void)=0
Definition: property_tree.hpp:195
virtual property< T > & update(void)=0
std::function< T(const T &)> coercer_type
Definition: property_tree.hpp:82
std::function< void(const T &)> subscriber_type
Definition: property_tree.hpp:80
virtual property< T > & add_desired_subscriber(const subscriber_type &subscriber)=0
virtual property< T > & set_publisher(const publisher_type &publisher)=0
virtual property< T > & set(const T &value)=0
virtual const T get(void) const =0
#define UHD_API_HEADER
Definition: config.h:88
#define UHD_API
Definition: config.h:87
Definition: build_info.hpp:12
boost::noncopyable noncopyable
Definition: noncopyable.hpp:45
UHD_API fs_path operator/(const fs_path &, const fs_path &)
Definition: property_tree.hpp:205
UHD_API fs_path(const char *)
UHD_API std::string leaf(void) const
UHD_API fs_path branch_path(void) const
UHD_API fs_path(void)
UHD_API fs_path(const std::string &)