diff options
author | Matthias Schiffer <matthias@gamezock.de> | 2009-09-11 02:15:13 +0200 |
---|---|---|
committer | Matthias Schiffer <matthias@gamezock.de> | 2009-09-11 02:15:13 +0200 |
commit | 36a3a590ffa4133f7f2d980a57d48ef95c680b71 (patch) | |
tree | 47a5f37f571db0918fe3f48bb14c819d01e13777 /src/Common | |
parent | f540560feb093143569f8a85eb5280d9c7504a0e (diff) | |
download | mad-36a3a590ffa4133f7f2d980a57d48ef95c680b71.tar mad-36a3a590ffa4133f7f2d980a57d48ef95c680b71.zip |
Extended StorageManager
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 { |