#include "collectionsource.h"
#include "loader.h"
#include "meta.h"
+#include "mspdatafile_api.h"
/* XXX This file is a big mess with too many things in it. However, the
dependencies between those things make it difficult to split up. */
between the collections, and are only deleted when all collections in the chain
have been destroyed.
*/
-class Collection: private NonCopyable
+class MSPDATAFILE_API Collection: private NonCopyable
{
public:
/**
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);