]> de.git.xonotic.org Git - xonotic/netradiant.git/blob - libs/modulesystem/moduleregistry.h
Merge commit '48410b113dd2036e69dbf723a39ec9af02fc9b12'
[xonotic/netradiant.git] / libs / modulesystem / moduleregistry.h
1 /*
2 Copyright (C) 2001-2006, William Joseph.
3 All Rights Reserved.
4
5 This file is part of GtkRadiant.
6
7 GtkRadiant is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 2 of the License, or
10 (at your option) any later version.
11
12 GtkRadiant is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15 GNU General Public License for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with GtkRadiant; if not, write to the Free Software
19 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
20 */
21
22 #if !defined(INCLUDED_MODULESYSTEM_MODULEREGISTRY_H)
23 #define INCLUDED_MODULESYSTEM_MODULEREGISTRY_H
24
25 #include "generic/static.h"
26 #include <list>
27
28 class ModuleRegisterable
29 {
30 public:
31   virtual void selfRegister() = 0;
32 };
33
34 class ModuleRegistryList
35 {
36   typedef std::list<ModuleRegisterable*> RegisterableModules;
37   RegisterableModules m_modules;
38 public:
39   void addModule(ModuleRegisterable& module)
40   {
41     m_modules.push_back(&module);
42   }
43   void registerModules() const
44   {
45     for(RegisterableModules::const_iterator i = m_modules.begin(); i != m_modules.end(); ++i)
46     {
47       (*i)->selfRegister();
48     }
49   }
50 };
51
52 typedef SmartStatic<ModuleRegistryList> StaticModuleRegistryList;
53
54
55 class StaticRegisterModule : public StaticModuleRegistryList
56 {
57 public:
58   StaticRegisterModule(ModuleRegisterable& module)
59   {
60     StaticModuleRegistryList::instance().addModule(module);
61   }
62 };
63
64
65 #endif