+ virtual T &extract(const Variant &) const = 0;
+ };
+
+ std::string kwd;
+ std::vector<std::string> suffixes;
+ std::vector<ExtractorBase *> extractors;
+
+ CollectionItemTypeBase() { }
+public:
+ virtual ~CollectionItemTypeBase();
+
+ void set_keyword(const std::string &);
+ const std::string &get_keyword() const { return kwd; }
+ void add_suffix(const std::string &);
+ bool match_name(const std::string &) const;
+ virtual bool is_same_type(const CollectionItemTypeBase &) const = 0;
+ virtual bool check_item_type(const Variant &) const = 0;
+ virtual void add_to_loader(Collection::Loader &) const = 0;
+ virtual bool can_create() const = 0;
+ virtual void create_item(Collection &, const std::string &) const = 0;
+ virtual void load_item(Collection &, Parser &, const std::string &) const = 0;