diff options
author | Josh Blum <josh@joshknows.com> | 2011-06-28 21:26:28 -0700 |
---|---|---|
committer | Josh Blum <josh@joshknows.com> | 2011-06-28 21:26:28 -0700 |
commit | d2f79c07281604c1b48ec81f1cdb2754e97bbe65 (patch) | |
tree | e41a2000af165384bbe03b1ff6d6ea118bbbcf1f /host/include | |
parent | ebd2ecc6ff2b82cb06701bbcda17d4caaa4ba8c1 (diff) | |
download | uhd-d2f79c07281604c1b48ec81f1cdb2754e97bbe65.tar.gz uhd-d2f79c07281604c1b48ec81f1cdb2754e97bbe65.tar.bz2 uhd-d2f79c07281604c1b48ec81f1cdb2754e97bbe65.zip |
uhd: added properties unit tests, use shared ptr<void> in tree
Diffstat (limited to 'host/include')
-rw-r--r-- | host/include/uhd/property_tree.hpp | 9 | ||||
-rw-r--r-- | host/include/uhd/property_tree.ipp | 22 |
2 files changed, 7 insertions, 24 deletions
diff --git a/host/include/uhd/property_tree.hpp b/host/include/uhd/property_tree.hpp index 630e86bba..63cd76a56 100644 --- a/host/include/uhd/property_tree.hpp +++ b/host/include/uhd/property_tree.hpp @@ -19,7 +19,6 @@ #define INCLUDED_UHD_PROPERTY_TREE_HPP #include <uhd/config.hpp> -#include <boost/any.hpp> #include <boost/utility.hpp> #include <boost/shared_ptr.hpp> #include <boost/function.hpp> @@ -34,14 +33,10 @@ namespace uhd{ */ template <typename T> class UHD_API property : boost::noncopyable{ public: - typedef boost::shared_ptr<property> sptr; typedef boost::function<void(const T &)> subscriber_type; typedef boost::function<T(void)> publisher_type; typedef boost::function<T(const T &)> master_type; - //! Make a new property object - static sptr make(void); - /*! * Register a master subscriber into the property. * A master is a special subscriber that coerces the value. @@ -107,10 +102,10 @@ public: protected: //! Internal create property with wild-card type - virtual void _create(const path_type &path, const boost::any &prop) = 0; + virtual void _create(const path_type &path, const boost::shared_ptr<void> &prop) = 0; //! Internal access property with wild-card type - virtual boost::any &_access(const path_type &path) = 0; + virtual boost::shared_ptr<void> &_access(const path_type &path) = 0; }; diff --git a/host/include/uhd/property_tree.ipp b/host/include/uhd/property_tree.ipp index e4520df58..1c61d4937 100644 --- a/host/include/uhd/property_tree.ipp +++ b/host/include/uhd/property_tree.ipp @@ -18,15 +18,14 @@ #ifndef INCLUDED_UHD_PROPERTY_TREE_IPP #define INCLUDED_UHD_PROPERTY_TREE_IPP -#include <uhd/exception.hpp> #include <boost/foreach.hpp> +#include <boost/any.hpp> #include <vector> /*********************************************************************** * Implement templated property impl **********************************************************************/ -namespace uhd{ -namespace /*anon*/{ +namespace uhd{ namespace /*anon*/{ template <typename T> class UHD_API property_impl : public property<T>{ public: @@ -71,13 +70,7 @@ private: boost::any _value; //any type so we can assign structs w/ const members }; -} //namespace /*anon*/ - -template <typename T> typename property<T>::sptr property<T>::make(void){ - return sptr(new property_impl<T>()); -} - -} //namespace uhd +}} //namespace uhd::/*anon*/ /*********************************************************************** * Implement templated methods for the property tree @@ -85,17 +78,12 @@ template <typename T> typename property<T>::sptr property<T>::make(void){ namespace uhd{ template <typename T> property<T> &property_tree::create(const path_type &path){ - this->_create(path, property<T>::make()); + this->_create(path, typename boost::shared_ptr<property<T> >(new property_impl<T>())); return this->access<T>(path); } template <typename T> property<T> &property_tree::access(const path_type &path){ - try{ - return *boost::any_cast<typename property<T>::sptr>(this->_access(path)); - } - catch(const boost::bad_any_cast &){ - throw uhd::type_error("Cannot cast the property at: " + path.string()); - } + return *boost::static_pointer_cast<property<T> >(this->_access(path)); } } //namespace uhd |