private:
typedef std::map<std::string, Variant> ItemMap;
typedef std::list<CollectionItemTypeBase *> TypeList;
- typedef std::list<CollectionSource *> SourceList;
+ typedef std::list<const CollectionSource *> SourceList;
TypeList types;
ItemMap items;
template<typename T>
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
/** Sets a fallback collection, which will be consulted if an item is not
found. */
void set_fallback(Collection *);
+
+ Collection *get_fallback() const { return fallback; }
};
template<typename T>
Creator(FuncPtr f): func(f) { }
virtual T *create(Collection &coll, const std::string &name) const
- { return (static_cast<C &>(coll).*func)(name); }
+ { return (dynamic_cast<C &>(coll).*func)(name); }
};
template<typename B>