ATLAS Offline Software
Loading...
Searching...
No Matches
DVLInfo.cxx
Go to the documentation of this file.
1// This file's extension implies that it's C, but it's really -*- C++ -*-.
2
3/*
4 Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
5*/
6
7// $Id: DVLInfo.cxx 470529 2011-11-24 23:54:22Z ssnyder $
16
17
20#ifndef XAOD_STANDALONE
22#endif
23#include <typeinfo>
24#include <string>
25#include <memory>
26#include <unordered_map>
27
28
29using AthContainers_detail::mutex;
30using AthContainers_detail::lock_guard;
31
32
33namespace DataModel_detail {
34
35
39typedef std::unordered_map<const std::type_info*, DVLInfoBase*>
43
44struct dvlmapdel {
45 ~dvlmapdel() { delete s_dvl_tinfo_map; }
47
48
49
50
59DVLInfoBase::DVLInfoBase (const std::type_info& tinfo,
60 const std::type_info& elt_tinfo)
61 : m_tinfo (tinfo),
63{
64 lock_guard<mutex> lock (s_dvl_tinfo_mutex);
65 if (s_dvl_tinfo_map == 0)
66 s_dvl_tinfo_map = new dvl_tinfo_map_t;
67 (*s_dvl_tinfo_map)[&tinfo] = this;
68}
69
70
76DVLInfoBase* DVLInfoBase::find (const std::type_info& tinfo)
77{
78 lock_guard<mutex> lock (s_dvl_tinfo_mutex);
79 if (!s_dvl_tinfo_map)
80 return 0;
81 dvl_tinfo_map_t::iterator i = s_dvl_tinfo_map->find (&tinfo);
82 if (i != s_dvl_tinfo_map->end())
83 return i->second;
84 return 0;
85}
86
87
88#ifdef XAOD_STANDALONE
90{
91 return 0;
92}
93
95{
96 return CLID_NULL;
97}
98#else
106{
107 const std::type_info* ti = CLIDRegistry::CLIDToTypeinfo (clid);
108 if (ti)
109 return DVLInfoBase::find (*ti);
110 return 0;
111}
112
113
121#endif
122
123
124} // namespace DataModel_detail
a static registry of CLID->typeName entries.
Holder to implement conversion copies for DataVector/DataList.
uint32_t CLID
The Class ID type.
static CLID typeinfoToCLID(const std::type_info &ti)
Return the CLID corresponding to a type_info.
static const std::type_info * CLIDToTypeinfo(CLID clid)
Translate between CLID and type_info.
static DVLInfoBase * find(const std::type_info &tinfo)
Find the DVLInfo for the container tinfo.
Definition DVLInfo.cxx:76
const std::type_info & elt_tinfo() const
Return the type_info for the container's element.
CLID clid() const
Return the CLID for the container.
Definition DVLInfo.cxx:117
const std::type_info & m_elt_tinfo
The type_info of the container's element.
Definition DVLInfo.h:185
const std::type_info & tinfo() const
Return the type_info for the container.
const std::type_info & m_tinfo
The type_info of the container.
Definition DVLInfo.h:182
DVLInfoBase(const std::type_info &tinfo, const std::type_info &elt_tinfo)
Constructor.
Definition DVLInfo.cxx:59
struct DataModel_detail::dvlmapdel s_dvlmapdel
dvl_tinfo_map_t *s_dvl_tinfo_map ATLAS_THREAD_SAFE
Definition DVLInfo.cxx:41
mutex s_dvl_tinfo_mutex
Definition DVLInfo.cxx:42
std::unordered_map< const std::type_info *, DVLInfoBase * > dvl_tinfo_map_t
Maps from tinfo pointers and CLID to DVLInfo instances.
Definition DVLInfo.cxx:40
Threading definitions.