diff options
| author | Martin Braun <martin.braun@ettus.com> | 2019-11-01 14:48:06 -0700 | 
|---|---|---|
| committer | Martin Braun <martin.braun@ettus.com> | 2019-11-04 09:57:49 -0800 | 
| commit | 0014f5ba2947448703c9ba0afb1c9f1084f1fc50 (patch) | |
| tree | ebef31442fa49aaeee34426fdd244fa34a58b1bc | |
| parent | ebb06c983a4d5e68ebf6d51c05eac95b9fcbbaba (diff) | |
| download | uhd-0014f5ba2947448703c9ba0afb1c9f1084f1fc50.tar.gz uhd-0014f5ba2947448703c9ba0afb1c9f1084f1fc50.tar.bz2 uhd-0014f5ba2947448703c9ba0afb1c9f1084f1fc50.zip | |
uhd: dict: Add typecast operator to std::map<>
This will now allow calls like this:
uhd::dict<k, v> d = /* ... */;
auto m = static_cast<std::map<k, v>>(d);
| -rw-r--r-- | host/include/uhd/types/dict.hpp | 5 | ||||
| -rw-r--r-- | host/include/uhd/types/dict.ipp | 10 | ||||
| -rw-r--r-- | host/tests/dict_test.cpp | 4 | 
3 files changed, 19 insertions, 0 deletions
| diff --git a/host/include/uhd/types/dict.hpp b/host/include/uhd/types/dict.hpp index 8b7a63c69..b5858d61c 100644 --- a/host/include/uhd/types/dict.hpp +++ b/host/include/uhd/types/dict.hpp @@ -10,6 +10,7 @@  #include <uhd/config.hpp>  #include <list> +#include <map>  #include <vector>  namespace uhd { @@ -138,6 +139,10 @@ public:       */      void update(const dict<Key, Val>& new_dict, bool fail_on_conflict = true); +    /*! Typecast operator to std::map<> +     */ +    operator std::map<Key, Val>() const; +  private:      typedef std::pair<Key, Val> pair_t;      std::list<pair_t> _map; // private container diff --git a/host/include/uhd/types/dict.ipp b/host/include/uhd/types/dict.ipp index b172d17f1..5a5024fcc 100644 --- a/host/include/uhd/types/dict.ipp +++ b/host/include/uhd/types/dict.ipp @@ -157,6 +157,16 @@ namespace uhd{          }      } +    template <typename Key, typename Val> +    dict<Key, Val>::operator std::map<Key, Val>() const +    { +        std::map<Key, Val> new_map; +        BOOST_FOREACH (const pair_t& p, _map) { +            new_map[p.first] = p.second; +        } +        return new_map; +    } +  } //namespace uhd  #endif /* INCLUDED_UHD_TYPES_DICT_IPP */ diff --git a/host/tests/dict_test.cpp b/host/tests/dict_test.cpp index 99fc2366c..011ea449c 100644 --- a/host/tests/dict_test.cpp +++ b/host/tests/dict_test.cpp @@ -8,6 +8,7 @@  #include <uhd/types/dict.hpp>  #include <boost/assign/list_of.hpp>  #include <boost/test/unit_test.hpp> +#include <map>  BOOST_AUTO_TEST_CASE(test_dict_init)  { @@ -41,6 +42,9 @@ BOOST_AUTO_TEST_CASE(test_const_dict)      BOOST_CHECK(d.vals()[1] == 4);      BOOST_CHECK_EQUAL(d[-1], 3);      BOOST_CHECK_THROW(d[2], std::exception); + +    std::map<int, int> m = static_cast<std::map<int, int>>(d); +    BOOST_CHECK_EQUAL(m[-1], 3);  }  BOOST_AUTO_TEST_CASE(test_dict_pop) | 
