ICF 3.0.5.47
Technical documentation of ICF Libraries
CClassInfo.h
Go to the documentation of this file.
1/********************************************************************************
2** This file is part of the ICF Framework. Copyright (C) Witold Gantzke & Kirill Lepskiy
3** ICF Framework may be used under the terms of the LGPL License v. 2.1 by the Free Software Foundation.
4********************************************************************************/
5
6#pragma once
7
8
9// STL includes
10#include <typeinfo>
11
12// Qt includes
13#include <QtCore/QByteArray>
14
15// ICF includes
16#include <istd/IPolymorphic.h>
17
18
19namespace istd
20{
21
22
26class CClassInfo: virtual public istd::IPolymorphic
27{
28public:
29 CClassInfo();
30 explicit CClassInfo(const std::type_info& info);
31 explicit CClassInfo(const QByteArray& name);
32 explicit CClassInfo(const istd::IPolymorphic& object);
33
38 bool IsValid() const;
43 const QByteArray& GetName() const;
44
48 bool IsVoid() const;
49
53 bool IsConst() const;
54
58 CClassInfo GetConstCasted(bool enableConst = true) const;
59
63 bool ConstCast(bool enableConst = true);
64
68 bool IsTemplateClass() const;
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
93 template <class C>
94 static CClassInfo GetInfo();
98 template <class C>
99 static QByteArray GetName();
103 static QByteArray GetName(const std::type_info& info);
107 static QByteArray GetName(const istd::IPolymorphic& object);
108
112 static QByteArray GetUndecoratedName(const QByteArray& rawName);
113
114private:
115 QByteArray m_name;
116};
117
118
119// inline methods
120
122{
123}
124
125
126inline CClassInfo::CClassInfo(const std::type_info& info)
127: m_name(GetName(info))
128{
129}
130
131
132inline CClassInfo::CClassInfo(const QByteArray& name)
133: m_name(GetUndecoratedName(name))
134{
135}
136
137
138inline CClassInfo::CClassInfo(const istd::IPolymorphic& object)
139: m_name(GetUndecoratedName(typeid(object).name()))
140{
141}
142
143
144inline bool CClassInfo::IsValid() const
145{
146 return !m_name.isEmpty();
147}
148
149
150inline const QByteArray& CClassInfo::GetName() const
151{
152 return m_name;
153}
154
155
156inline bool CClassInfo::IsVoid() const
157{
158 return *this == istd::CClassInfo::GetInfo<void>();
159}
160
161
162template <class C>
163inline bool CClassInfo::IsType() const
164{
165 return m_name == GetName(typeid(C));
166}
167
168
169inline CClassInfo& CClassInfo::operator=(const std::type_info& info)
170{
171 m_name = GetName(info);
172
173 return *this;
174}
175
176
178{
179 m_name = info.m_name;
180
181 return *this;
182}
183
184
185inline bool CClassInfo::operator==(const CClassInfo& info) const
186{
187 return m_name == info.m_name;
188}
189
190
191inline bool CClassInfo::operator!=(const CClassInfo& info) const
192{
193 return m_name != info.m_name;
194}
195
196
197inline bool CClassInfo::operator<(const CClassInfo& info) const
198{
199 return m_name < info.m_name;
200}
201
202
203inline bool CClassInfo::operator>(const CClassInfo& info) const
204{
205 return m_name > info.m_name;
206}
207
208
209// public static methods
210
211template <class C>
213{
214 CClassInfo retVal(typeid(C));
215
216 return retVal;
217}
218
219
220template <class C>
222{
223 return GetUndecoratedName(typeid(C).name());
224}
225
226
227} // namespace istd
228
229
Represents platform independent type info and provide set of static class manipulation functions.
Definition CClassInfo.h:27
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:191
CClassInfo & operator=(const std::type_info &info)
Definition CClassInfo.h:169
static CClassInfo GetInfo()
Get class name defined as template parameter.
Definition CClassInfo.h:212
bool operator<(const CClassInfo &info) const
Definition CClassInfo.h:197
bool operator>(const CClassInfo &info) const
Definition CClassInfo.h:203
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:150
bool IsValid() const
Check if this class info object is valid.
Definition CClassInfo.h:144
bool operator==(const CClassInfo &info) const
Definition CClassInfo.h:185
bool IsVoid() const
Check if this class information represents void type.
Definition CClassInfo.h:156
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.
static QByteArray GetUndecoratedName(const QByteArray &rawName)
Get undecorated class name from raw name.
bool IsType() const
Definition CClassInfo.h:163
static QByteArray GetName(const istd::IPolymorphic &object)
Get class name of polymorphic object.
Standard library.
Definition IComponent.h:17

© Witold Gantzke and Kirill Lepskiy