223{
224 if (!typ) return;
227 std::string nam = typ.
Name();
228 if (!memo.insert (nam).second) return;
229 if (nam == "string" || nam == "std::string" ||
230 startsWith (nam, "basic_string<") ||
231 startsWith (nam, "std::basic_string<"))
232 {
233 return;
234 }
235 if (startsWith (nam, "vector<") || startsWith (nam, "std::vector<")) {
236 std::string eltclass;
237 {
238
239
240
241 R__WRITE_LOCKGUARD(ROOT::gCoreMutex);
242 TClassEdit::TSplitType
split (nam.c_str());
243 if (
split.fElements.size() > 1) {
244 eltclass =
split.fElements[1];
245 }
246 }
247 if (!eltclass.empty()) {
249 return;
250 }
251
252 }
253 else if (startsWith (nam, "DataVector<")) {
254 std::string eltclass;
255 {
256
257
258
259 R__WRITE_LOCKGUARD(ROOT::gCoreMutex);
260 TClassEdit::TSplitType
split (nam.c_str());
261 if (
split.fElements.size() > 1) {
262 eltclass =
split.fElements[1];
263 }
264 }
265 if (!eltclass.empty()) {
267 return;
268 }
269 }
270 else if (startsWith (nam, "pair<") || startsWith (nam, "std::pair<")) {
271 std::string pclass1, pclass2;
272 {
273
274
275
276 R__WRITE_LOCKGUARD(ROOT::gCoreMutex);
277 TClassEdit::TSplitType
split (nam.c_str());
278 if (
split.fElements.size() > 2) {
279 pclass1 =
split.fElements[1];
280 pclass2 =
split.fElements[2];
281 }
282 }
283 if (!pclass1.empty()) {
286 return;
287 }
288 }
289 else if (startsWith (nam, "map<") || startsWith (nam, "std::map<")) {
290 std::string pclass1, pclass2;
291 {
292
293
294
295 R__WRITE_LOCKGUARD(ROOT::gCoreMutex);
296 TClassEdit::TSplitType
split (nam.c_str());
297 if (
split.fElements.size() > 2) {
298 pclass1 =
split.fElements[1];
299 pclass2 =
split.fElements[2];
300 }
301 }
302 if (!pclass1.empty()) {
305
306 std::string pname = "std::pair<" + pclass1 + "," + pclass2 + ">";
308 return;
309 }
310 }
311 else if (startsWith (nam, "LArConditionsContainer<")) {
312 std::string pname;
313 {
314
315
316
317 R__WRITE_LOCKGUARD(ROOT::gCoreMutex);
318 TClassEdit::TSplitType
split (nam.c_str());
319 if (
split.fElements.size() > 1) {
320 pname =
"LArConditionsSubset<" +
split.fElements[1] +
">";
321 }
322 }
323 if (!pname.empty()) {
325
326 std::unique_ptr<ITPCnvBase> tpcnv =
m_tpCnvSvc->t2p_cnv_unique (pname);
327 if (tpcnv) {
328 load_type (tpcnv->persistentTInfo(),
true);
329 }
330 return;
331 }
332 }
333
335 for (
size_t i = 0;
i < nbase;
i++) {
337 }
338
340 for (
size_t i = 0;
i < nmem;
i++) {
343 }
344}
virtual const RootType load_type(const std::string &type_name, bool recursive=false) override
retrieve a Reflex::Type by name (auto)loading the dictionary by any necessary means.
TTypeAdapter TypeOf() const
size_t DataMemberSize() const
Bool_t IsFundamental() const
TMemberAdapter DataMemberAt(size_t nth) const
TBaseAdapter BaseAt(size_t nth) const
std::string Name(unsigned int mod=Reflex::SCOPED) const
std::vector< std::string > split(const std::string &s, const std::string &t=":")