X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fcollection.cpp;h=5ac12ab7d366c3406cfc59206b42b166875557d5;hb=76c532f3f5ff079cf7b2016343a1ff73d497c50f;hp=d40ab1997f9b78fcec8777f7ce14bd06fc153aea;hpb=e249d648f6393fbb4b74e76c2a7b9eee9f1187f1;p=libs%2Fdatafile.git diff --git a/source/collection.cpp b/source/collection.cpp index d40ab19..5ac12ab 100644 --- a/source/collection.cpp +++ b/source/collection.cpp @@ -1,5 +1,7 @@ #include "collection.h" +using namespace std; + namespace Msp { namespace DataFile { @@ -9,6 +11,28 @@ Collection::~Collection() delete *i; } +void Collection::add_future(const string &name) +{ + for(TypeList::const_iterator i=types.begin(); i!=types.end(); ++i) + if((*i)->match_name(name)) + { + insert_unique(items, name, (*i)->create_future()); + return; + } +} + +void Collection::add_future_with_keyword(const string &name, const string &keyword) +{ + for(TypeList::const_iterator i=types.begin(); i!=types.end(); ++i) + if((*i)->get_keyword()==keyword) + { + insert_unique(items, name, (*i)->create_future()); + return; + } + + throw runtime_error("Collection::add_future_with_keyword"); +} + Collection::Loader::Loader(Collection &c): coll(c) @@ -17,5 +41,35 @@ Collection::Loader::Loader(Collection &c): (*i)->add_to_loader(*this); } + +CollectionItemTypeBase::CollectionItemTypeBase(): + tag(0) +{ } + +CollectionItemTypeBase::~CollectionItemTypeBase() +{ + delete tag; +} + +void CollectionItemTypeBase::set_keyword(const string &k) +{ + kwd = k; + if(suffixes.empty()) + add_suffix("."+kwd); +} + +void CollectionItemTypeBase::add_suffix(const string &s) +{ + suffixes.push_back(s); +} + +bool CollectionItemTypeBase::match_name(const string &name) const +{ + for(vector::const_iterator i=suffixes.begin(); i!=suffixes.end(); ++i) + if(name.size()>i->size() && !name.compare(name.size()-i->size(), string::npos, *i)) + return true; + return false; +} + } // namespace DataFile } // namespace Msp