diff options
Diffstat (limited to 'src/Common')
-rw-r--r-- | src/Common/StorageBackend.h | 4 | ||||
-rw-r--r-- | src/Common/StorageManager.cpp | 16 | ||||
-rw-r--r-- | src/Common/StorageManager.h | 3 | ||||
-rw-r--r-- | src/Common/XmlData.h | 19 |
4 files changed, 42 insertions, 0 deletions
diff --git a/src/Common/StorageBackend.h b/src/Common/StorageBackend.h index 027109e..1d53570 100644 --- a/src/Common/StorageBackend.h +++ b/src/Common/StorageBackend.h @@ -24,6 +24,7 @@ #include <Core/Exception.h> #include <boost/shared_ptr.hpp> +#include <set> namespace Mad { namespace Common { @@ -34,6 +35,9 @@ class StorageBackend { protected: friend class StorageManager; + virtual std::set<std::string> listTypes() throw (Core::Exception) = 0; + virtual std::set<std::string> list(const std::string &type) throw (Core::Exception) = 0; + virtual void store(const std::string &type, const std::string &name, const XmlData *data) throw (Core::Exception) = 0; virtual boost::shared_ptr<XmlData> load(const std::string &type, const std::string &name) throw (Core::Exception) = 0; diff --git a/src/Common/StorageManager.cpp b/src/Common/StorageManager.cpp index a1610fe..ac83476 100644 --- a/src/Common/StorageManager.cpp +++ b/src/Common/StorageManager.cpp @@ -36,6 +36,22 @@ void StorageManager::unsetBackend(boost::shared_ptr<StorageBackend> oldBackend) backend.reset(); } +std::set<std::string> StorageManager::listTypes() throw (Core::Exception) { + boost::shared_lock<boost::shared_mutex> lock(mutex); + if(!backend) + throw Core::Exception(Core::Exception::NOT_IMPLEMENTED); + + return backend->listTypes(); +} + +std::set<std::string> StorageManager::list(const std::string &type) throw (Core::Exception) { + boost::shared_lock<boost::shared_mutex> lock(mutex); + if(!backend) + throw Core::Exception(Core::Exception::NOT_IMPLEMENTED); + + return backend->list(type); +} + void StorageManager::store(const std::string &type, const std::string &name, const XmlData *data) throw (Core::Exception) { boost::shared_lock<boost::shared_mutex> lock(mutex); if(!backend) diff --git a/src/Common/StorageManager.h b/src/Common/StorageManager.h index c81c707..98533fb 100644 --- a/src/Common/StorageManager.h +++ b/src/Common/StorageManager.h @@ -51,6 +51,9 @@ class MAD_COMMON_EXPORT StorageManager { void setBackend(boost::shared_ptr<StorageBackend> newBackend); void unsetBackend(boost::shared_ptr<StorageBackend> oldBackend); + std::set<std::string> listTypes() throw (Core::Exception); + std::set<std::string> list(const std::string &type) throw (Core::Exception); + void store(const std::string &type, const std::string &name, const XmlData *data) throw (Core::Exception); boost::shared_ptr<XmlData> load(const std::string &type, const std::string &name) throw (Core::Exception); }; diff --git a/src/Common/XmlData.h b/src/Common/XmlData.h index 51e5327..b7e8ec1 100644 --- a/src/Common/XmlData.h +++ b/src/Common/XmlData.h @@ -26,6 +26,7 @@ #include <Core/Exception.h> #include <map> +#include <set> #include <string> #include <sstream> #include <vector> @@ -283,6 +284,24 @@ class MAD_COMMON_EXPORT XmlData { return; } + + std::set<std::string> getChildren() const { + std::set<std::string> childNames; + + for(std::map<std::string, Element*>::const_iterator it = elements.begin(); it != elements.end(); ++it) + childNames.insert(it->first); + + return childNames; + } + + std::set<std::string> getLists() const { + std::set<std::string> listNames; + + for(std::map<std::string, List*>::const_iterator it = lists.begin(); it != lists.end(); ++it) + listNames.insert(it->first); + + return listNames; + } }; class MAD_COMMON_EXPORT List : private boost::noncopyable { |