X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fcollection.h;h=d0e8a1a8bb9b25c636ab23a8c1e4bbdcfa5c04a7;hb=HEAD;hp=4a2f736de49cdabc4df1c9da4ce4ee96cda4753e;hpb=daca21051927eabee098e422fe5a0990acacfb96;p=libs%2Fdatafile.git diff --git a/source/collection.h b/source/collection.h index 4a2f736..c8470dd 100644 --- a/source/collection.h +++ b/source/collection.h @@ -89,10 +89,9 @@ private: std::vector types; ItemMap items; std::vector sources; - Collection *fallback; + Collection *fallback = nullptr; public: - Collection(); virtual ~Collection(); /** Adds an object into the collection. The name must not pre-exist. The @@ -335,7 +334,7 @@ class CollectionItemTypeBase protected: struct ExtractorBase { - virtual ~ExtractorBase() { } + virtual ~ExtractorBase() = default; }; template @@ -348,7 +347,7 @@ protected: std::vector suffixes; std::vector extractors; - CollectionItemTypeBase() { } + CollectionItemTypeBase() = default; public: virtual ~CollectionItemTypeBase(); @@ -397,7 +396,7 @@ private: template struct Extractor: CollectionItemTypeBase::Extractor { - virtual B &extract(const Variant &var) const + B &extract(const Variant &var) const override { return *var.value >(); } }; @@ -452,19 +451,19 @@ public: return *this; } - virtual bool is_same_type(const CollectionItemTypeBase &other) const + bool is_same_type(const CollectionItemTypeBase &other) const override { return dynamic_cast *>(&other); } - virtual bool check_item_type(const Variant &var) const + bool check_item_type(const Variant &var) const override { return var.check_type >(); } - 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(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"); @@ -473,12 +472,12 @@ public: 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 obj = var.value >(); for(const auto &n: notify_funcs) @@ -491,10 +490,10 @@ template class LoadableCollectionItemType: public CollectionItemType { 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); } - 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 obj = new T; Collection::ItemLoader ldr(*obj, coll);