std::vector<CollectionItemTypeBase *> types;
ItemMap items;
std::vector<const CollectionSource *> sources;
- Collection *fallback;
+ Collection *fallback = nullptr;
public:
- Collection();
virtual ~Collection();
/** Adds an object into the collection. The name must not pre-exist. The
protected:
struct ExtractorBase
{
- virtual ~ExtractorBase() { }
+ virtual ~ExtractorBase() = default;
};
template<typename T>
std::vector<std::string> suffixes;
std::vector<ExtractorBase *> extractors;
- CollectionItemTypeBase() { }
+ CollectionItemTypeBase() = default;
public:
virtual ~CollectionItemTypeBase();
template<typename B>
struct Extractor: CollectionItemTypeBase::Extractor<B>
{
- virtual B &extract(const Variant &var) const
+ B &extract(const Variant &var) const override
{ return *var.value<RefPtr<T> >(); }
};
return *this;
}
- virtual bool is_same_type(const CollectionItemTypeBase &other) const
+ bool is_same_type(const CollectionItemTypeBase &other) const override
{ return dynamic_cast<const CollectionItemType<T> *>(&other); }
- virtual bool check_item_type(const Variant &var) const
+ bool check_item_type(const Variant &var) const override
{ return var.check_type<RefPtr<T> >(); }
- virtual void add_to_loader(Collection::Loader &) const
+ void add_to_loader(Collection::Loader &) const override
{ }
- virtual bool can_create() const
+ bool can_create() const override
{ return static_cast<bool>(create_func); }
- virtual void create_item(Collection &coll, const std::string &name) const
+ void create_item(Collection &coll, const std::string &name) const override
{
if(!create_func)
throw std::runtime_error("no creator");
coll.add(name, obj);
}
- virtual void load_item(Collection &, Parser &, const std::string &) const
+ void load_item(Collection &, Parser &, const std::string &) const override
{
throw std::runtime_error("this type cannot be loaded");
}
- virtual void notify_item(const std::string &name, const Variant &var) const
+ void notify_item(const std::string &name, const Variant &var) const override
{
RefPtr<T> obj = var.value<RefPtr<T> >();
for(const auto &n: notify_funcs)
class LoadableCollectionItemType: public CollectionItemType<T>
{
public:
- virtual void add_to_loader(Collection::Loader &loader) const
+ void add_to_loader(Collection::Loader &loader) const override
{ loader.add(this->kwd, &Collection::Loader::item<T, T>); }
- virtual void load_item(Collection &coll, Parser &parser, const std::string &name) const
+ void load_item(Collection &coll, Parser &parser, const std::string &name) const override
{
RefPtr<T> obj = new T;
Collection::ItemLoader<T> ldr(*obj, coll);