X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fcollection.h;h=fa3a7de9dbe25441417f988fbe16a5235cbf638d;hb=d84673be1c2fe8bd32ddaa7877529855cad6daa0;hp=f293428c8cdd0fc046019531335ccf6d28b525fc;hpb=a02c84384a101c0dec48b6aa2dee53bac4bbd034;p=libs%2Fdatafile.git diff --git a/source/collection.h b/source/collection.h index f293428..fa3a7de 100644 --- a/source/collection.h +++ b/source/collection.h @@ -72,6 +72,7 @@ private: */ struct ItemKeywordBase { + virtual ~ItemKeywordBase() { } virtual void add_to_loader(Loader &) const { }; }; @@ -283,6 +284,22 @@ public: */ bool contains(const std::string &n) const; + /** + Returns the name of an item in the collection. + */ + template + const std::string &get_name(T *d) const + { + typedef typename RemoveConst::Type NCT; + + for(ItemMap::const_iterator i=items.begin(); i!=items.end(); ++i) + if(Item *item=dynamic_cast *>(i->second)) + if(item->data==d) + return i->first; + + throw KeyError("Item not found in collection"); + } + protected: /** Adds a type that can be loaded from datafiles.