diff options
| author | Martin Braun <martin.braun@ettus.com> | 2019-09-30 16:35:51 +0200 | 
|---|---|---|
| committer | Martin Braun <martin.braun@ettus.com> | 2019-09-30 16:35:51 +0200 | 
| commit | d8b75ca5324204bfb3d7cdb1a03831d9ecd97e73 (patch) | |
| tree | 356de930d47ce54833566a87ce826551c5ee3e61 | |
| parent | abedbfe5481650a3f5200ab2ba48f6668096761e (diff) | |
| download | uhd-d8b75ca5324204bfb3d7cdb1a03831d9ecd97e73.tar.gz uhd-d8b75ca5324204bfb3d7cdb1a03831d9ecd97e73.tar.bz2 uhd-d8b75ca5324204bfb3d7cdb1a03831d9ecd97e73.zip  | |
Revert "uhd: Check property type at access; error if mismatch"
This reverts commit 94592641f0647563bc4d2163805d5284a6796273.
The commit itself was OK, but it changed the requirements such that UHD
could only be compiled with C++11.
| -rw-r--r-- | host/include/uhd/property_tree.hpp | 8 | ||||
| -rw-r--r-- | host/include/uhd/property_tree.ipp | 7 | ||||
| -rw-r--r-- | host/lib/property_tree.cpp | 25 | ||||
| -rw-r--r-- | host/tests/property_test.cpp | 20 | 
4 files changed, 5 insertions, 55 deletions
diff --git a/host/include/uhd/property_tree.hpp b/host/include/uhd/property_tree.hpp index d97a5505e..11b92393a 100644 --- a/host/include/uhd/property_tree.hpp +++ b/host/include/uhd/property_tree.hpp @@ -14,7 +14,6 @@  #include <boost/function.hpp>  #include <boost/shared_ptr.hpp>  #include <boost/utility.hpp> -#include <typeindex>  #include <vector>  namespace uhd { @@ -253,15 +252,10 @@ private:      virtual boost::shared_ptr<void> _pop(const fs_path& path) = 0;      //! Internal create property with wild-card type -    virtual void _create(const fs_path& path, const boost::shared_ptr<void>& prop, -        std::type_index prop_type) = 0; +    virtual void _create(const fs_path& path, const boost::shared_ptr<void>& prop) = 0;      //! Internal access property with wild-card type      virtual boost::shared_ptr<void>& _access(const fs_path& path) const = 0; - -    //! Internal access property with wild-card type but with type verification -    virtual boost::shared_ptr<void>& _access_with_type_check( -        const fs_path& path, std::type_index expected_prop_type) const = 0;  };  } // namespace uhd diff --git a/host/include/uhd/property_tree.ipp b/host/include/uhd/property_tree.ipp index 20ad43fb1..ca5d6904f 100644 --- a/host/include/uhd/property_tree.ipp +++ b/host/include/uhd/property_tree.ipp @@ -12,7 +12,6 @@  #include <uhd/exception.hpp>  #include <boost/foreach.hpp>  #include <boost/scoped_ptr.hpp> -#include <typeindex>  #include <vector>  /*********************************************************************** @@ -183,16 +182,14 @@ template <typename T>  property<T>& property_tree::create(const fs_path& path, coerce_mode_t coerce_mode)  {      this->_create(path, -        typename boost::shared_ptr<property<T> >(new property_impl<T>(coerce_mode)), -        std::type_index(typeid(T))); +        typename boost::shared_ptr<property<T> >(new property_impl<T>(coerce_mode)));      return this->access<T>(path);  }  template <typename T>  property<T>& property_tree::access(const fs_path& path)  { -    return *boost::static_pointer_cast<property<T> >( -        this->_access_with_type_check(path, std::type_index(typeid(T)))); +    return *boost::static_pointer_cast<property<T> >(this->_access(path));  }  template <typename T> diff --git a/host/lib/property_tree.cpp b/host/lib/property_tree.cpp index 6f797bc2e..85868b27c 100644 --- a/host/lib/property_tree.cpp +++ b/host/lib/property_tree.cpp @@ -11,7 +11,6 @@  #include <boost/make_shared.hpp>  #include <boost/thread/mutex.hpp>  #include <iostream> -#include <typeindex>  using namespace uhd; @@ -157,8 +156,7 @@ public:          return prop;      } -    void _create(const fs_path& path_, const boost::shared_ptr<void>& prop, -        std::type_index prop_type) +    void _create(const fs_path& path_, const boost::shared_ptr<void>& prop)      {          const fs_path path = _root / path_;          boost::mutex::scoped_lock lock(_guts->mutex); @@ -173,7 +171,6 @@ public:              throw uhd::runtime_error(                  "Cannot create! Property already exists at: " + path);          node->prop = prop; -        node->prop_type_hash = prop_type.hash_code();      }      boost::shared_ptr<void>& _access(const fs_path& path_) const @@ -192,25 +189,6 @@ public:          return node->prop;      } -    boost::shared_ptr<void>& _access_with_type_check( -        const fs_path& path_, std::type_index expected_prop_type) const -    { -        const fs_path path = _root / path_; -        boost::mutex::scoped_lock lock(_guts->mutex); - -        node_type* node = &_guts->root; -        for (const std::string& name : path_tokenizer(path)) { -            if (not node->has_key(name)) -                throw_path_not_found(path); -            node = &(*node)[name]; -        } -        if (node->prop.get() == NULL) -            throw uhd::runtime_error("Cannot access! Property uninitialized at: " + path); -        if (node->prop_type_hash != expected_prop_type.hash_code()) -            throw uhd::runtime_error("Cannot access! Property types do not match at: " + path); -        return node->prop; -    } -  private:      void throw_path_not_found(const fs_path& path) const      { @@ -221,7 +199,6 @@ private:      struct node_type : uhd::dict<std::string, node_type>      {          boost::shared_ptr<void> prop; -        std::size_t prop_type_hash;      };      // tree guts which may be referenced in a subtree diff --git a/host/tests/property_test.cpp b/host/tests/property_test.cpp index 732e3ca84..907ca9f73 100644 --- a/host/tests/property_test.cpp +++ b/host/tests/property_test.cpp @@ -239,6 +239,7 @@ BOOST_AUTO_TEST_CASE(test_prop_subtree)          tree_dirs2.begin(), tree_dirs2.end(), subtree2_dirs.begin(), subtree2_dirs.end());  } +  BOOST_AUTO_TEST_CASE(test_prop_operators)  {      uhd::fs_path path1 = "/root/"; @@ -258,22 +259,3 @@ BOOST_AUTO_TEST_CASE(test_prop_operators)      path4              = path4 / x;      BOOST_CHECK_EQUAL(path4, "/root/2");  } - -BOOST_AUTO_TEST_CASE(test_mismatched_type_access) -{ -    uhd::property_tree::sptr tree = uhd::property_tree::make(); - -    // accesses of the correct type should succeed -    tree->create<int>("/intprop"); -    tree->create<double>("/doubleprop"); -    tree->create<std::string>("/stringprop"); -    BOOST_CHECK_NO_THROW(tree->access<int>("/intprop")); -    BOOST_CHECK_NO_THROW(tree->access<double>("/doubleprop")); -    BOOST_CHECK_NO_THROW(tree->access<std::string>("/stringprop")); - -    // accesses of the incorrect type should throw an exception -    BOOST_CHECK_THROW(tree->access<int>("/doubleprop"), uhd::runtime_error); -    BOOST_CHECK_THROW(tree->access<double>("/stringprop"), uhd::runtime_error); -    BOOST_CHECK_THROW(tree->access<std::string>("/intprop"), uhd::runtime_error); -} -  | 
