X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fcollection.cpp;h=8e9543a0d1feef9717184c2a06d10c5e64f6f489;hb=daca21051927eabee098e422fe5a0990acacfb96;hp=c168d8abd002a5bd82134914a9ee9205a1ab06fb;hpb=256b44a5009467171af53316141277027bcc0ba4;p=libs%2Fdatafile.git diff --git a/source/collection.cpp b/source/collection.cpp index c168d8a..8e9543a 100644 --- a/source/collection.cpp +++ b/source/collection.cpp @@ -8,7 +8,7 @@ namespace Msp { namespace DataFile { Collection::Collection(): - fallback(0) + fallback(nullptr) { } Collection::~Collection() @@ -20,8 +20,16 @@ Collection::~Collection() void Collection::add_var(const string &name, const CollectionItemTypeBase *type, const Variant &var) { insert_unique(items, name, var); - if(type) - type->notify_item(*this, name, var); + try + { + if(type) + type->notify_item(name, var); + } + catch(...) + { + remove_existing(items, name); + throw; + } } const Variant &Collection::get_var(const string &name, const CollectionItemTypeBase *type) @@ -59,7 +67,7 @@ const Variant *Collection::find_var(const string &name, const CollectionItemType } i = items.find(name); - return (i!=items.end() ? &i->second : 0); + return (i!=items.end() ? &i->second : nullptr); } void Collection::gather_items(vector *vars, list *names, const CollectionItemTypeBase &type, bool include_sources) const @@ -99,7 +107,7 @@ CollectionItemTypeBase *Collection::get_type(const CollectionItemTypeBase &type) for(CollectionItemTypeBase *t: types) if(t->is_same_type(type)) return t; - return 0; + return nullptr; } CollectionItemTypeBase *Collection::get_type_for_item(const Variant &var) const @@ -107,7 +115,7 @@ CollectionItemTypeBase *Collection::get_type_for_item(const Variant &var) const for(CollectionItemTypeBase *t: types) if(t->check_item_type(var)) return t; - return 0; + return nullptr; } void Collection::add_source(const CollectionSource &s) @@ -121,7 +129,7 @@ IO::Seekable *Collection::open_raw(const string &name) const if(IO::Seekable *io = s->open(name)) return io; - return 0; + return nullptr; } void Collection::gather_names_from_sources(list &names, const CollectionItemTypeBase &type) const