]> git.tdb.fi Git - libs/core.git/blobdiff - source/core/maputils.h
Use C++11 features with containers
[libs/core.git] / source / core / maputils.h
index 2495a1e29b41854e62850324d80fa358ffe2e152..f5faa1271a2e1317523767c5e9c3e6a858792027 100644 (file)
@@ -57,7 +57,7 @@ private:
 template<typename T>
 typename T::mapped_type &get_item(T &map, const typename T::key_type &key)
 {
-       typename T::iterator i = map.find(key);
+       auto i = map.find(key);
        if(i==map.end())
                throw key_error(key);
 
@@ -67,20 +67,26 @@ typename T::mapped_type &get_item(T &map, const typename T::key_type &key)
 template<typename T>
 const typename T::mapped_type &get_item(const T &map, const typename T::key_type &key)
 {
-       typename T::const_iterator i = map.find(key);
+       auto i = map.find(key);
        if(i==map.end())
                throw key_error(key);
 
        return i->second;
 }
 
+template<typename D, typename T>
+D *get_item(const T &map, const typename T::key_type &key)
+{
+       return dynamic_cast<D *>(get_item(map, key));
+}
+
 template<typename T>
 typename T::iterator insert_unique(T &map, const typename T::key_type &key, const typename T::mapped_type &item)
 {
        if(map.count(key))
                throw key_error(key);
 
-       return map.insert(typename T::value_type(key, item)).first;
+       return map.insert(std::make_pair(key, item)).first;
 }
 
 template<typename T>