X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fcollection.h;h=42dc2c90dd519c7f919742c42aaf1ff40eeee5f7;hb=215e719d0ef85f748898660d15d01e77ac551de9;hp=303697a8c726f7c71e99c3a8d8e6582be998b87b;hpb=55592b9eeaff3d41e5f03b9c0c1566ed508f38a5;p=libs%2Fdatafile.git diff --git a/source/collection.h b/source/collection.h index 303697a..42dc2c9 100644 --- a/source/collection.h +++ b/source/collection.h @@ -1,13 +1,14 @@ /* $Id$ This file is part of libmspdatafile -Copyright © 2006 Mikko Rasa, Mikkosoft Productions +Copyright © 2006-2008 Mikko Rasa, Mikkosoft Productions Distributed under the LGPL */ #ifndef MSP_DATAFILE_COLLECTION_H_ #define MSP_DATAFILE_COLLECTION_H_ +#include #include #include "loader.h" @@ -31,14 +32,6 @@ struct NeedsCollection enum { result=(sizeof(f(0))==sizeof(Yes)) }; }; -template -struct RemoveConst -{ typedef T Type; }; - -template -struct RemoveConst -{ typedef T Type; }; - /** A collection of objects that can be loaded from a datafile. Each object is identified by a name, which must be unique across the entire collection. @@ -121,7 +114,7 @@ private: template struct ItemCreatorBridge: public ItemCreatorBase { - virtual S *create(Collection &, const std::string &) const =0; + virtual S *create(Collection &, const std::string &) const = 0; }; template @@ -284,6 +277,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.