X-Git-Url: http://git.tdb.fi/?p=libs%2Fdatafile.git;a=blobdiff_plain;f=source%2Fcollection.h;h=612a0af01879deaac213f1883db29df76d3cd57d;hp=5f0650c6761043977e85a33e55c6854d25b1703f;hb=5e677b2b3eeb2b3c41216a329f7b1363aade0aed;hpb=7feeeacf8fa3eae889cb256c42ada615c4761eec diff --git a/source/collection.h b/source/collection.h index 5f0650c..612a0af 100644 --- a/source/collection.h +++ b/source/collection.h @@ -83,7 +83,7 @@ public: private: typedef std::map ItemMap; typedef std::list TypeList; - typedef std::list SourceList; + typedef std::list SourceList; TypeList types; ItemMap items; @@ -255,13 +255,16 @@ private: template CollectionItemTypeBase *get_type() const; + /// Gets a descriptor with the same type as another descriptor. + CollectionItemTypeBase *get_type(const CollectionItemTypeBase &) const; + /// Returns the descriptor for an item, or null if it's of an unknown type. CollectionItemTypeBase *get_type_for_item(const Variant &) const; protected: /** Adds a source for automatically loading items. Sources are consulted in the order they are added. */ - void add_source(CollectionSource &); + void add_source(const CollectionSource &); public: /** Opens a raw resource, without interpreting it as object data. Null is @@ -380,7 +383,7 @@ private: Creator(FuncPtr f): func(f) { } virtual T *create(Collection &coll, const std::string &name) const - { return (static_cast(coll).*func)(name); } + { return (dynamic_cast(coll).*func)(name); } }; template