X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fcollection.cpp;h=129c0a84f76808c14f0a8164b853e0c56d6ccb97;hb=0881c95bef812d94d8086225c2736b4f15b4c8dc;hp=cffb7e22e7041ba48268c9643c6d7791e118407f;hpb=7feeeacf8fa3eae889cb256c42ada615c4761eec;p=libs%2Fdatafile.git diff --git a/source/collection.cpp b/source/collection.cpp index cffb7e2..129c0a8 100644 --- a/source/collection.cpp +++ b/source/collection.cpp @@ -36,21 +36,15 @@ const Variant &Collection::get_var(const string &name, const CollectionItemTypeB loaded = items.count(name); } if(!loaded && fallback) - { - for(TypeList::const_iterator j=fallback->types.begin(); j!=fallback->types.end(); ++j) - if((*j)->is_same_type(*type)) - { - if(fallback->get_status(name, **j)) - return fallback->get_var(name, *j); - break; - } - } + if(CollectionItemTypeBase *fb_type = fallback->get_type(*type)) + if(fallback->get_status(name, *fb_type)) + return fallback->get_var(name, fb_type); } return get_item(items, name); } -void Collection::gather_items(list *vars, list *names, const CollectionItemTypeBase &type, bool include_sources) const +void Collection::gather_items(vector *vars, list *names, const CollectionItemTypeBase &type, bool include_sources) const { for(ItemMap::const_iterator i=items.begin(); i!=items.end(); ++i) if(type.check_item_type(i->second)) @@ -73,12 +67,23 @@ unsigned Collection::get_status(const string &name, const CollectionItemTypeBase for(SourceList::const_iterator j=sources.begin(); j!=sources.end(); ++j) if((*j)->is_loadable(type, name)) return 2; + if(fallback) + if(CollectionItemTypeBase *fb_type = fallback->get_type(type)) + return fallback->get_status(name, *fb_type); return 0; } return type.check_item_type(i->second); } +CollectionItemTypeBase *Collection::get_type(const CollectionItemTypeBase &type) const +{ + for(TypeList::const_iterator j=types.begin(); j!=types.end(); ++j) + if((*j)->is_same_type(type)) + return *j; + return 0; +} + CollectionItemTypeBase *Collection::get_type_for_item(const Variant &var) const { for(TypeList::const_iterator i=types.begin(); i!=types.end(); ++i) @@ -87,7 +92,7 @@ CollectionItemTypeBase *Collection::get_type_for_item(const Variant &var) const return 0; } -void Collection::add_source(CollectionSource &s) +void Collection::add_source(const CollectionSource &s) { sources.push_back(&s); }