diff src/common/Module.cpp @ 1117:3c6206da8bcf

Add Module::registerInstance() and Module::getInstance(). Module::registerInstance() registers a module instance which can later be retrieved using Module::getInstance(). registerInstance() is called in luax_register_module(). getInstance() expects the full name (as returned by Module::getName()) of the requested module.
author vrld <vrld@vrld.org>
date Sun, 05 Aug 2012 16:03:37 +0200
parents
children 05f0d0e44cd5
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/common/Module.cpp	Sun Aug 05 16:03:37 2012 +0200
@@ -0,0 +1,60 @@
+/**
+ * Copyright (c) 2006-2012 LOVE Development Team
+ *
+ * This software is provided 'as-is', without any express or implied
+ * warranty.  In no event will the authors be held liable for any damages
+ * arising from the use of this software.
+ *
+ * Permission is granted to anyone to use this software for any purpose,
+ * including commercial applications, and to alter it and redistribute it
+ * freely, subject to the following restrictions:
+ *
+ * 1. The origin of this software must not be misrepresented; you must not
+ *    claim that you wrote the original software. If you use this software
+ *    in a product, an acknowledgment in the product documentation would be
+ *    appreciated but is not required.
+ * 2. Altered source versions must be plainly marked as such, and must not be
+ *    misrepresented as being the original software.
+ * 3. This notice may not be removed or altered from any source distribution.
+ **/
+
+// LOVE
+#include "Module.h"
+#include "Exception.h"
+
+// std
+#include <map>
+#include <utility>
+#include <string>
+
+namespace
+{
+	std::map<std::string, love::Module*> registry;
+} // anonymous namespace
+
+namespace love
+{
+	void Module::registerInstance(Module *instance)
+	{
+		if (instance == NULL)
+			throw Exception("Module instance is NULL");
+
+		std::string name(instance->getName());
+
+		std::map<std::string, Module*>::iterator it = registry.find(name);
+		if (registry.end() != it)
+			throw Exception("Module %s already registered!", instance->getName());
+
+		registry.insert(make_pair(name, instance));
+	}
+
+	Module *Module::getInstance(const char *name)
+	{
+		std::map<std::string, Module*>::iterator it = registry.find(std::string(name));
+
+		if (registry.end() == it)
+			return NULL;
+
+		return it->second;
+	}
+} // namespace love