X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fcollection.h;h=c83b4376d20b2b6d4854b29dfc0fbda9c0c286b5;hb=348a6d9ca1a9b3838ff8c6da5050f61b2c74d010;hp=3d5b7f0a6abce95bc8aa5d6ec05749be3ec6f8b2;hpb=60e8000566e2b1510ccd52697793ab049b62b07c;p=libs%2Fdatafile.git diff --git a/source/collection.h b/source/collection.h index 3d5b7f0..c83b437 100644 --- a/source/collection.h +++ b/source/collection.h @@ -130,8 +130,14 @@ protected: insert_unique(items, name, ptr); } + /** Adds the name of a future object, guessing its type. If a type matching + the name can't be found, nothing is done. */ void add_future(const std::string &name); + /** Adds the name of a future object, using a keyword to determine its type. + The keyword must be known to the collection. */ + void add_future_with_keyword(const std::string &name, const std::string &); + public: /// Gets a typed object from the collection. template @@ -308,11 +314,12 @@ 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 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 @@ -478,7 +485,10 @@ T &Collection::get(const std::string &name) if((*j)->can_create() && (*j)->check_type()) (*j)->create_item(*this, name); - return *get_item(items, name).value >(); + NCT *ptr = get_item(items, name).value >().get(); + if(!ptr) + throw key_error(typeid(ItemMap)); + return *ptr; } template