MCPcopy Create free account
hub / github.com/KDAB/GammaRay / unpackVariant

Method unpackVariant

core/objectinstance.cpp:177–212  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

175}
176
177void ObjectInstance::unpackVariant()
178{
179 const auto mo = MetaObjectRepository::instance()->metaObject(m_variant.typeName());
180 if (mo && strstr(m_variant.typeName(), "*") != nullptr) { // pointer types
181 QMetaType(m_variant.userType()).construct(&m_obj, m_variant.constData());
182 if (!Util::isNullish(m_obj)) {
183 m_type = Object;
184 m_typeName = m_variant.typeName();
185 }
186 } else if (mo) { // value types
187 m_obj = const_cast<void *>(m_variant.constData());
188 m_type = Value;
189 m_typeName = m_variant.typeName();
190 }
191
192 if (!m_variant.isNull() && strstr(m_variant.typeName(), "*") != nullptr) { // pointer to gadget
193 QByteArray normalizedTypeName = m_variant.typeName();
194 // krazy:cond=doublequote_chars
195 normalizedTypeName.replace('*', "");
196 normalizedTypeName.replace('&', "");
197 normalizedTypeName.replace("const ", "");
198 normalizedTypeName.replace(" const", "");
199 normalizedTypeName.replace(' ', "");
200 // krazy:endcond=doublequote_chars
201
202 const auto typeId = QMetaType::fromName(normalizedTypeName).id();
203 if (typeId != QMetaType::UnknownType && (QMetaType(typeId).flags() & QMetaType::IsGadget)) {
204 QMetaType(m_variant.userType()).construct(&m_obj, m_variant.constData());
205 m_metaObj = QMetaType(typeId).metaObject();
206 if (m_obj && m_metaObj) {
207 m_type = QtGadgetPointer;
208 m_typeName = m_variant.typeName();
209 }
210 }
211 }
212}

Callers

nothing calls this directly

Calls 6

isNullishFunction · 0.85
metaObjectMethod · 0.45
typeNameMethod · 0.45
isNullMethod · 0.45
idMethod · 0.45
flagsMethod · 0.45

Tested by

no test coverage detected