]> git.tdb.fi Git - libs/datafile.git/commitdiff
Make Collection::contains check for type
authorMikko Rasa <tdb@tdb.fi>
Wed, 26 Sep 2012 16:04:33 +0000 (19:04 +0300)
committerMikko Rasa <tdb@tdb.fi>
Wed, 26 Sep 2012 16:07:00 +0000 (19:07 +0300)
Checking item existence without type information is not particularly
useful, since there's no guarantee that the object can be used for its
intended purpose.

source/collection.cpp
source/collection.h

index e60b2009a4fc2c2cebf723ba700e5ab59967a00f..d40ab1997f9b78fcec8777f7ce14bd06fc153aea 100644 (file)
@@ -9,11 +9,6 @@ Collection::~Collection()
                delete *i;
 }
 
-bool Collection::contains(const std::string &n) const
-{
-       return items.count(n);
-}
-
 
 Collection::Loader::Loader(Collection &c):
        coll(c)
index 5dd2fe67ff2769083532605e2b33bd5fe3c9dec1..d5e0806afeebad9fbfa2f043ef80d3ef9bc64878 100644 (file)
@@ -151,9 +151,16 @@ public:
                return result;
        }
 
-       /** Checks whether a name exists in the collection.  Does not care about the
-       type of the object. */
-       bool contains(const std::string &n) const;
+       /// Checks whether a typed object exists in the collection.
+       template<typename T>
+       bool contains(const std::string &name) const
+       {
+               ItemMap::const_iterator i = items.find(name);
+               if(i==items.end())
+                       return false;
+
+               return i->second.check_type<typename RemoveConst<T>::Type>();
+       }
 
        /// Returns the name of an item in the collection.
        template<typename T>