X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;ds=sidebyside;f=source%2Fcollection.h;h=66c50fe69d2c86e85ce38ac1e2b4bb73fd8672b3;hb=495920e971324d29bd4933b8a319fb5668ca5562;hp=0595aaca7caddb801d094d9ed847362c669c8be7;hpb=4f036ceabe12869c86cb6821f698fbb65cd47ea6;p=libs%2Fdatafile.git diff --git a/source/collection.h b/source/collection.h index 0595aac..66c50fe 100644 --- a/source/collection.h +++ b/source/collection.h @@ -137,6 +137,8 @@ protected: insert_unique(items, name, ptr); } + void add_future(const std::string &name); + public: /// Gets a typed object from the collection. template @@ -302,15 +304,20 @@ protected: { }; std::string kwd; + std::vector suffixes; TagBase *tag; CollectionItemTypeBase(); public: virtual ~CollectionItemTypeBase(); + void set_keyword(const std::string &); + void add_suffix(const std::string &); 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; + bool match_name(const std::string &) const; + virtual Variant create_future() const = 0; template bool check_type() const @@ -360,6 +367,7 @@ private: virtual ~StoreBase() { } virtual void store(Collection &, const std::string &, T *) = 0; + virtual Variant create_future() const = 0; virtual void add_to_loader(Collection::Loader &, const std::string &) = 0; }; @@ -371,6 +379,9 @@ private: virtual void store(Collection &coll, const std::string &name, T *obj) { coll.add(name, static_cast(obj)); } + virtual Variant create_future() const + { return RefPtr(0); } + virtual void add_to_loader(Collection::Loader &loader, const std::string &kwd) { Collection::Loader::Add::add(loader, kwd); } }; @@ -394,7 +405,17 @@ public: item's name. */ CollectionItemType &keyword(const std::string &k) { - kwd = k; + set_keyword(k); + return *this; + } + + /** Adds a suffix that is used to match names when looking for future + objects. There is no implied separator; a name matches if it ends with the + suffix. If a keyword is defined before any suffixes, then "."+keyword is + added as a suffix. */ + CollectionItemType &suffix(const std::string &s) + { + add_suffix(s); return *this; } @@ -438,6 +459,9 @@ public: if(obj) store->store(coll, name, obj); } + + virtual Variant create_future() const + { return store->create_future(); } };