ACF $AcfVersion:0$
CClassInfo.h
Go to the documentation of this file.
1// SPDX-License-Identifier: LGPL-2.1-or-later OR GPL-2.0-or-later OR GPL-3.0-or-later OR LicenseRef-ACF-Commercial
2#pragma once
3
4
5// STL includes
6#include <typeinfo>
7
8// Qt includes
9#include <QtCore/QByteArray>
10
11// ACF includes
12#include <istd/IPolymorphic.h>
13
14
15namespace istd
16{
17
18
22class CClassInfo: virtual public istd::IPolymorphic
23{
24public:
25 CClassInfo();
26 explicit CClassInfo(const std::type_info& info);
27 explicit CClassInfo(const QByteArray& name);
28 explicit CClassInfo(const istd::IPolymorphic& object);
29 CClassInfo(CClassInfo const&) = default;
30
35 bool IsValid() const;
36
41 const QByteArray& GetName() const;
42
46 bool IsVoid() const;
47
51 bool IsConst() const;
52
56 CClassInfo GetConstCasted(bool enableConst = true) const;
57
61 bool ConstCast(bool enableConst = true);
62
66 bool IsTemplateClass() const;
67
73
77 CClassInfo GetTemplateParam(int paramIndex = 0) const;
78
79 template <class C>
80 bool IsType() const;
81
82 CClassInfo& operator=(const std::type_info& info);
83 CClassInfo& operator=(const CClassInfo& info);
84 bool operator==(const CClassInfo& info) const;
85 bool operator!=(const CClassInfo& info) const;
86 bool operator<(const CClassInfo& info) const;
87 bool operator>(const CClassInfo& info) const;
88
89 // static methods
90
94 template <class C>
95 static CClassInfo GetInfo();
96
100 template <class C>
101 static QByteArray GetName();
102
106 static QByteArray GetName(const std::type_info& info);
107
111 static QByteArray GetName(const istd::IPolymorphic& object);
112
116 static QByteArray GetUndecoratedName(const QByteArray& rawName);
117
118private:
119 QByteArray m_name;
120};
121
122
123// inline methods
124
126{
127}
128
129
130inline CClassInfo::CClassInfo(const std::type_info& info)
131: m_name(GetName(info))
132{
133}
134
135
136inline CClassInfo::CClassInfo(const QByteArray& name)
137: m_name(GetUndecoratedName(name))
138{
139}
140
141
143: m_name(GetUndecoratedName(typeid(object).name()))
144{
145}
146
147
148inline bool CClassInfo::IsValid() const
149{
150 return !m_name.isEmpty();
151}
152
153
154inline const QByteArray& CClassInfo::GetName() const
155{
156 return m_name;
157}
158
159
160inline bool CClassInfo::IsVoid() const
161{
162 return *this == istd::CClassInfo::GetInfo<void>();
163}
164
165
166template <class C>
167inline bool CClassInfo::IsType() const
168{
169 return m_name == GetName(typeid(C));
170}
171
172
173inline CClassInfo& CClassInfo::operator=(const std::type_info& info)
174{
175 m_name = GetName(info);
176
177 return *this;
178}
179
180
182{
183 m_name = info.m_name;
184
185 return *this;
186}
187
188
189inline bool CClassInfo::operator==(const CClassInfo& info) const
190{
191 return m_name == info.m_name;
192}
193
194
195inline bool CClassInfo::operator!=(const CClassInfo& info) const
196{
197 return m_name != info.m_name;
198}
199
200
201inline bool CClassInfo::operator<(const CClassInfo& info) const
202{
203 return m_name < info.m_name;
204}
205
206
207inline bool CClassInfo::operator>(const CClassInfo& info) const
208{
209 return m_name > info.m_name;
210}
211
212
213// public static methods
214
215template <class C>
217{
218 CClassInfo retVal(typeid(C));
219
220 return retVal;
221}
222
223
224template <class C>
226{
227 return GetUndecoratedName(typeid(C).name());
228}
229
230
231} // namespace istd
232
233
234
235
Represents platform independent type info and provide set of static class manipulation functions.
Definition CClassInfo.h:23
bool IsConst() const
Check if this class information represents const class.
CClassInfo GetTemplateParam(int paramIndex=0) const
Get class info of some template parameter if this class is template.
bool operator!=(const CClassInfo &info) const
Definition CClassInfo.h:195
CClassInfo & operator=(const std::type_info &info)
Definition CClassInfo.h:173
static CClassInfo GetInfo()
Get class name defined as template parameter.
Definition CClassInfo.h:216
bool operator<(const CClassInfo &info) const
Definition CClassInfo.h:201
bool operator>(const CClassInfo &info) const
Definition CClassInfo.h:207
static QByteArray GetName(const std::type_info &info)
Get class name from RTTI.
const QByteArray & GetName() const
Get undecorated and platform undependent class name.
Definition CClassInfo.h:154
bool IsValid() const
Check if this class info object is valid.
Definition CClassInfo.h:148
bool operator==(const CClassInfo &info) const
Definition CClassInfo.h:189
bool IsVoid() const
Check if this class information represents void type.
Definition CClassInfo.h:160
int GetTemplateParamsCount() const
Get number of template parameters if this class is template class.
bool ConstCast(bool enableConst=true)
Enable or disable const attribute.
CClassInfo GetConstCasted(bool enableConst=true) const
Get class with enabled or disabled const attribute.
bool IsTemplateClass() const
Check if this class information represents template class.
CClassInfo(CClassInfo const &)=default
static QByteArray GetUndecoratedName(const QByteArray &rawName)
Get undecorated class name from raw name.
bool IsType() const
Definition CClassInfo.h:167
static QByteArray GetName(const istd::IPolymorphic &object)
Get class name of polymorphic object.
Base interface for all used interfaces and implementations.
Standard library.
Definition IComponent.h:17