diff options
author | Martin Braun <martin.braun@ettus.com> | 2014-08-19 16:40:09 +0200 |
---|---|---|
committer | Martin Braun <martin.braun@ettus.com> | 2014-09-23 16:02:14 -0700 |
commit | c431a66df3df4cff82bfa2d2b2c7b16895a7efd6 (patch) | |
tree | de7fc65147c688b3b4b18de4f787e3dca897b2ce | |
parent | 4547d1c74a6c875057f23f8ea77033b9cd191539 (diff) | |
download | uhd-c431a66df3df4cff82bfa2d2b2c7b16895a7efd6.tar.gz uhd-c431a66df3df4cff82bfa2d2b2c7b16895a7efd6.tar.bz2 uhd-c431a66df3df4cff82bfa2d2b2c7b16895a7efd6.zip |
uhd: Added an operator/ for (fs_path, size_t)
This is useful when constructing property tree paths.
With this path, the following code would be valid:
size_t mb_index = 0;
fs_path mb_root = "/mboards";
mb_root = mb_root / mb_index;
This is a shortcut for the (in UHD very common)
mb_root = mb_root / boost::lexical_cast<std::string(mb_index);
-rw-r--r-- | host/include/uhd/property_tree.hpp | 1 | ||||
-rw-r--r-- | host/lib/property_tree.cpp | 6 | ||||
-rw-r--r-- | host/tests/property_test.cpp | 21 |
3 files changed, 28 insertions, 0 deletions
diff --git a/host/include/uhd/property_tree.hpp b/host/include/uhd/property_tree.hpp index f889ba235..3c24de7e6 100644 --- a/host/include/uhd/property_tree.hpp +++ b/host/include/uhd/property_tree.hpp @@ -113,6 +113,7 @@ struct fs_path : std::string{ }; UHD_API fs_path operator/(const fs_path &, const fs_path &); +UHD_API fs_path operator/(const fs_path &, size_t); /*! * The property tree provides a file system structure for accessing properties. diff --git a/host/lib/property_tree.cpp b/host/lib/property_tree.cpp index 50e82a6ba..5666e2639 100644 --- a/host/lib/property_tree.cpp +++ b/host/lib/property_tree.cpp @@ -65,6 +65,12 @@ fs_path uhd::operator/(const fs_path &lhs, const fs_path &rhs){ return fs_path(lhs + "/" + rhs); } +fs_path uhd::operator/(const fs_path &lhs, size_t rhs) +{ + fs_path rhs_str = boost::lexical_cast<std::string>(rhs); + return lhs / rhs_str; +} + /*********************************************************************** * Property tree implementation **********************************************************************/ diff --git a/host/tests/property_test.cpp b/host/tests/property_test.cpp index 04d3a831c..00bb3c022 100644 --- a/host/tests/property_test.cpp +++ b/host/tests/property_test.cpp @@ -173,3 +173,24 @@ BOOST_AUTO_TEST_CASE(test_prop_subtree){ BOOST_CHECK_EQUAL_COLLECTIONS(tree_dirs2.begin(), tree_dirs2.end(), subtree2_dirs.begin(), subtree2_dirs.end()); } + + +BOOST_AUTO_TEST_CASE(test_prop_operators) +{ + uhd::fs_path path1 = "/root/"; + path1 = path1 / "leaf"; + BOOST_CHECK_EQUAL(path1, "/root/leaf"); + + uhd::fs_path path2 = "/root"; + path2 = path2 / "leaf"; + BOOST_CHECK_EQUAL(path2, "/root/leaf"); + + uhd::fs_path path3 = "/root/"; + path3 = path3 / "/leaf/"; + BOOST_CHECK_EQUAL(path3, "/root/leaf/"); + + uhd::fs_path path4 = "/root/"; + size_t x = 2; + path4 = path4 / x; + BOOST_CHECK_EQUAL(path4, "/root/2"); +} |