From cb9329a681552e6ac6277d16e1627afcbb23e637 Mon Sep 17 00:00:00 2001 From: Aaron Rossetto Date: Wed, 28 Aug 2019 08:32:00 -0500 Subject: uhd: Check property type at access; error if mismatch --- host/include/uhd/property_tree.hpp | 8 +++++++- host/include/uhd/property_tree.ipp | 7 +++++-- 2 files changed, 12 insertions(+), 3 deletions(-) (limited to 'host/include') diff --git a/host/include/uhd/property_tree.hpp b/host/include/uhd/property_tree.hpp index 11b92393a..d97a5505e 100644 --- a/host/include/uhd/property_tree.hpp +++ b/host/include/uhd/property_tree.hpp @@ -14,6 +14,7 @@ #include #include #include +#include #include namespace uhd { @@ -252,10 +253,15 @@ private: virtual boost::shared_ptr _pop(const fs_path& path) = 0; //! Internal create property with wild-card type - virtual void _create(const fs_path& path, const boost::shared_ptr& prop) = 0; + virtual void _create(const fs_path& path, const boost::shared_ptr& prop, + std::type_index prop_type) = 0; //! Internal access property with wild-card type virtual boost::shared_ptr& _access(const fs_path& path) const = 0; + + //! Internal access property with wild-card type but with type verification + virtual boost::shared_ptr& _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 ca5d6904f..20ad43fb1 100644 --- a/host/include/uhd/property_tree.ipp +++ b/host/include/uhd/property_tree.ipp @@ -12,6 +12,7 @@ #include #include #include +#include #include /*********************************************************************** @@ -182,14 +183,16 @@ template property& property_tree::create(const fs_path& path, coerce_mode_t coerce_mode) { this->_create(path, - typename boost::shared_ptr >(new property_impl(coerce_mode))); + typename boost::shared_ptr >(new property_impl(coerce_mode)), + std::type_index(typeid(T))); return this->access(path); } template property& property_tree::access(const fs_path& path) { - return *boost::static_pointer_cast >(this->_access(path)); + return *boost::static_pointer_cast >( + this->_access_with_type_check(path, std::type_index(typeid(T)))); } template -- cgit v1.2.3