ADTF
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
class_info_detail.h
Go to the documentation of this file.
1
7#ifndef _ADTF_UCOM_ANT_CLASS_INFO_DETAIL_INCLUDES_HEADER_
8#define _ADTF_UCOM_ANT_CLASS_INFO_DETAIL_INCLUDES_HEADER_
9
10#ifdef GetClassInfo
11#undef GetClassInfo
12#endif
13
14namespace adtf
15{
16namespace ucom
17{
18namespace ant
19{
20namespace detail
21{
22
28template<typename T>
30{
32 struct yes { char x[1]; };
34 struct no { char x[2]; };
35
41 template<typename C>
42 static yes exists(typename C::template class_dependencies<static_cast<C*>(nullptr)>* = nullptr);
48 template<typename C> static no exists(...);
49
50public:
52 static const bool value = sizeof(exists<T>(nullptr)) == sizeof(yes);
53};//template<typename T> class has_class_dependencies_type
54
60template<typename T>
62{
64 struct yes { char x[1]; };
66 struct no { char x[2]; };
67
73 template<typename C>
74 static yes exists(typename C::template class_versions<static_cast<C*>(nullptr)>* = nullptr);
80 template<typename C> static no exists(...);
81
82public:
84 static const bool value = sizeof(exists<T>(nullptr)) == sizeof(yes);
85};//template<typename T> class has_class_versions_type
86
87
88template<typename EnclosingType>
90{
91private:
92 template<typename U, bool = has_class_dependencies_type<U>::value>
94 {
95 static const tDependencyDescription* dependency_data() { return nullptr; }
96 static std::size_t dependency_size() { return 0; }
97 };
98
99 template<typename U>
100 struct class_dependency_traits <U, true>
101 {
102 static const tDependencyDescription* dependency_data()
103 {
104 return U::template class_dependencies<(U*)nullptr>::get_dependencies().data();
105 }
106
107 static std::size_t dependency_size()
108 {
109 return U::template class_dependencies<(U*)nullptr>::get_dependencies().size();
110 }
111 };
112
113 template<typename U, bool = has_class_versions_type<U>::value>
114 struct class_versions_traits //false
115 { //at least the default version set with ADTF_CLASS_ID() must be considered
116 static const tNamedVersion* version_data() { return &DefaultCVersion(); }
117 static const std::size_t version_size() { return 1; }
118 };
119
120 template<typename U>
121 struct class_versions_traits <U, true>
122 {
123 static const tNamedVersion* version_data()
124 {
125 return U::template class_versions<(U*)nullptr>::get_versions().data();
126 }
127
128 static const std::size_t version_size()
129 {
130 return U::template class_versions<(U*)nullptr>::get_versions().size();
131 }
132 };
133
134public:
135 static const adtf::ucom::ant::tNamedVersion& DefaultCVersion()
136 {
138 static const tNamedVersion oVersion{ UCOM_VERSION_ID, adtf::ucom::get_ucom_version_information() };
139 return oVersion;
140 }
141
144 CVersions()
145 {
146 return GetClass_Info().GetCVersions();
147 }
148
151 CDependencies()
152 {
153 return GetClass_Info().GetCDependencies();
154 }
155
156 static const adtf::ucom::cClassInfo& GetClass_Info()
157 { //To prevent information being added twice to the static object, everything
158 //has to be passed via initialization
159 static const adtf::ucom::cClassInfo s_oClassInfo(
162 class_dependency_traits<EnclosingType>::dependency_data(),
163 class_dependency_traits<EnclosingType>::dependency_size(),
164 class_versions_traits<EnclosingType>::version_data(),
165 class_versions_traits<EnclosingType>::version_size());
166 return s_oClassInfo;
167 }
168};//struct class_info_detail
169
170}//ns detail
171}//ns ant
172
173namespace detail
174{
176using ant::detail::class_info_detail;
177}//ns detail
178
179}//ns ucom
180}//ns adtf
181
182#endif // _ADTF_UCOM_ANT_CLASS_INFO_DETAIL_INCLUDES_HEADER_
The Helper Storage Class for a IClassInfo.
Definition class_info.h:27
Usable for enable_if<>: Compile time check whether a struct class_dependencies<> is available.
static const bool value
Evaluates to either size of yes or no, depending on existence of class_dependencies<>
static yes exists(typename C::template class_dependencies< static_cast< C * >(nullptr)> *=nullptr)
Overload taken if the class_dependencies<> exists.
static no exists(...)
Overload taken if the class_dependencies<> does not exist.
Usable for enable_if<>: Compile time check whether a struct class_versions<> is available.
static const bool value
Evaluates to either size of yes or no, depending on existence of class_versions<>
static no exists(...)
Overload taken if the class_versions<> does not exist.
static yes exists(typename C::template class_versions< static_cast< C * >(nullptr)> *=nullptr)
Overload taken if the class_versions<> exists.
Namespace for all internally used uCOM functionality implemented.
Namespace for all functionality provided since v3.0.
Namespace for the ADTF uCOM3 SDK.
constexpr const char * get_class_id()
Alias always bringing the latest version of ant::get_class_id into scope.
Definition class_id.h:110
constexpr const char * get_class_label()
Alias always bringing the latest version of ant::get_class_label into scope.
Definition class_id.h:143
Namespace for entire ADTF SDK.
Return value if interface_info<> does not exist.
Return value if interface_info<> does not exist.
Return value if interface_info<> exists.
Adapter for begin and end iterators - usable as return and parameter value in interfaces.
Empty struct template to specialize implementations of iterator interfaces.
Dependency description usable for ADTF_CLASS_DEPENDENCIES()
Named version information consisting of the modules name and its adtf_util::tVersion.