Orxonox  0.0.5 Codename: Arcturus
IdentifierManager.h
Go to the documentation of this file.
1 /*
2  * ORXONOX - the hottest 3D action shooter ever to exist
3  * > www.orxonox.net <
4  *
5  *
6  * License notice:
7  *
8  * This program is free software; you can redistribute it and/or
9  * modify it under the terms of the GNU General Public License
10  * as published by the Free Software Foundation; either version 2
11  * of the License, or (at your option) any later version.
12  *
13  * This program is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16  * GNU General Public License for more details.
17  *
18  * You should have received a copy of the GNU General Public License
19  * along with this program; if not, write to the Free Software
20  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
21  *
22  * Author:
23  * Fabian 'x3n' Landau
24  * Co-authors:
25  * ...
26  *
27  */
28 
34 #ifndef _IdentifierManager_H__
35 #define _IdentifierManager_H__
36 
37 #include "core/CorePrereqs.h"
38 
39 #include <typeindex>
40 #include <map>
41 #include <unordered_map>
42 #include <set>
43 #include <list>
44 #include <string>
45 
46 #include "util/Singleton.h"
47 
48 namespace orxonox
49 {
50  class _CoreExport IdentifierManager : public Singleton<IdentifierManager>
51  {
53 
54  public:
56  ~IdentifierManager() = default;
57 
58  void addIdentifier(Identifier* identifier);
59  void removeIdentifier(Identifier* identifier);
60 
61 
65  void createClassHierarchy();
66  void verifyClassHierarchy(const std::set<Identifier*>& initializedIdentifiers);
67  void destroyClassHierarchy();
68 
69  void createdObject(Identifiable* identifiable);
70 
72  inline bool isCreatingHierarchy()
73  { return (hierarchyCreatingCounter_s > 0); }
74 
75 
79  Identifier* getIdentifierByString(const std::string& name);
80  Identifier* getIdentifierByLowercaseString(const std::string& name);
81  Identifier* getIdentifierByID(uint32_t id);
82  Identifier* getIdentifierByTypeInfo(const std::type_info& typeInfo);
83 
84  void clearNetworkIDs();
85 
87  inline const std::map<std::string, Identifier*>& getIdentifierByStringMap()
88  { return this->identifierByString_; }
90  inline const std::map<std::string, Identifier*>& getIdentifierByLowercaseStringMap()
91  { return this->identifierByLowercaseString_; }
93  inline const std::map<uint32_t, Identifier*>& getIdentifierByNetworkIdMap()
94  { return this->identifierByNetworkId_; }
95 
96  private:
97  // non-copyable:
98  IdentifierManager(const IdentifierManager&) = delete;
99  IdentifierManager& operator=(const IdentifierManager&) = delete;
100 
103  { hierarchyCreatingCounter_s++; }
105  inline void stopCreatingHierarchy()
106  { hierarchyCreatingCounter_s--; }
107 
108  std::set<Identifier*> identifiers_;
109  std::unordered_map<std::type_index, Identifier*> identifierByTypeIndex_;
110  std::map<std::string, Identifier*> identifierByString_;
111  std::map<std::string, Identifier*> identifierByLowercaseString_;
112  std::map<uint32_t, Identifier*> identifierByNetworkId_;
113 
115 
118  std::map<Identifiable*, std::list<const Identifier*>> identifierTraceOfNewObject_;
120 
122  };
123 }
124 
125 #endif /* _IdentifierManager_H__ */
const std::map< std::string, Identifier * > & getIdentifierByLowercaseStringMap()
Returns the map that stores all Identifiers with their names in lowercase.
Definition: IdentifierManager.h:90
Shared library macros, enums, constants and forward declarations for the core library ...
::std::string string
Definition: gtest-port.h:756
static IdentifierManager * singletonPtr_s
Definition: IdentifierManager.h:121
const std::map< std::string, Identifier * > & getIdentifierByStringMap()
Returns the map that stores all Identifiers with their names.
Definition: IdentifierManager.h:87
bool isCreatingHierarchy()
Returns true, if a branch of the class-hierarchy is being created, causing all new objects to store t...
Definition: IdentifierManager.h:72
int hierarchyCreatingCounter_s
Bigger than zero if at least one Identifier stores its parents (its an int instead of a bool to avoid...
Definition: IdentifierManager.h:114
Identifiable is needed to create the class-hierarchy at startup and to store the Identifier.
Definition: Identifiable.h:50
void startCreatingHierarchy()
Increases the hierarchyCreatingCounter_s variable, causing all new objects to store their parents...
Definition: IdentifierManager.h:102
std::set< Identifier * > identifiers_
All identifiers. This is only used internally.
Definition: IdentifierManager.h:108
std::unordered_map< std::type_index, Identifier * > identifierByTypeIndex_
Map that stores all Identifiers with their type_index.
Definition: IdentifierManager.h:109
Base for singleton classes.
Definition: Singleton.h:114
Die Wagnis Klasse hat die folgenden Aufgaben:
Definition: ApplicationPaths.cc:66
#define _CoreExport
Definition: CorePrereqs.h:61
The Identifier is used to identify the class of an object and to store information about the class...
Definition: Identifier.h:109
const std::map< uint32_t, Identifier * > & getIdentifierByNetworkIdMap()
Returns the map that stores all Identifiers with their IDs.
Definition: IdentifierManager.h:93
std::map< Identifiable *, std::list< const Identifier * > > identifierTraceOfNewObject_
Used while creating the object hierarchy to keep track of the identifiers of a newly created object (...
Definition: IdentifierManager.h:118
Definition of the Singleton template that is used as base class for classes that allow only one insta...
void stopCreatingHierarchy()
Decreases the hierarchyCreatingCounter_s variable, causing the objects to stop storing their parents...
Definition: IdentifierManager.h:105
std::map< std::string, Identifier * > identifierByLowercaseString_
Map that stores all Identifiers with their names in lowercase.
Definition: IdentifierManager.h:111
Identifier * recordTraceForIdentifier_
The identifier for which we want to record the trace of identifiers during object creation...
Definition: IdentifierManager.h:119
std::map< uint32_t, Identifier * > identifierByNetworkId_
Returns the map that stores all Identifiers with their network IDs.
Definition: IdentifierManager.h:112
Definition: IdentifierManager.h:50
std::map< std::string, Identifier * > identifierByString_
Map that stores all Identifiers with their names.
Definition: IdentifierManager.h:110