]> git.tdb.fi Git - libs/datafile.git/blobdiff - source/collection.cpp
Improve the API for future objects
[libs/datafile.git] / source / collection.cpp
index d40ab1997f9b78fcec8777f7ce14bd06fc153aea..5ac12ab7d366c3406cfc59206b42b166875557d5 100644 (file)
@@ -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<string>::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