![Logo](../../ATLAS-Logo-Square-Blue-RGB.png) |
ATLAS Offline Software
|
Go to the documentation of this file.
5 #ifndef TRIGNAVIGATION_TYPEINFORMATION_H
6 #define TRIGNAVIGATION_TYPEINFORMATION_H
10 #include <type_traits>
13 #include <boost/function_types/function_type.hpp>
14 #include <boost/function_types/parameter_types.hpp>
15 #include <boost/function_types/function_arity.hpp>
16 #include <boost/typeof/std/utility.hpp>
17 #include <type_traits>
21 namespace TypeInformation{
44 template<
class type,
class list_of_types>
46 static const int last_index = 1 + list_of_types::last_index;
49 typedef list_of_types
rest;
52 template <
class new_element>
struct add;
54 template <
class new_list>
struct join;
55 template <
class element>
struct has;
56 template <
int i>
struct get;
57 template <
int i,
class element>
struct set;
58 template <
int begin,
int end>
struct range;
68 template<
class new_element,
class thelist>
69 struct do_add<new_element,thelist,true>{
74 template<
class new_element,
class thelist>
75 struct do_add<new_element,thelist,false>{
83 template <
class type,
class list_of_types>
84 template <
class new_element>
99 template<
class list,
int i>
111 template<
class list,
int i>
119 template<
typename element,
typename list>
126 template<
class element>
127 struct do_search<element,nil>{
128 static const bool found =
false;
131 template<
typename element,
typename list,
int i = list::last_index>
137 template<
typename element,
typename list>
143 template <
class type,
class list_of_types>
144 template <
class element>
145 struct list<
type,list_of_types>::has {
149 template <
class the_type,
class list_of_types>
151 struct list<the_type,list_of_types>::
get {
155 template<
class thelist,
int begin,
int end,
bool begin_is_end = (begin==end)>
162 template<
class thelist,
int begin,
int end>
168 template <
class the_type,
class list_of_types>
169 template <
int begin,
int end>
170 struct list<the_type,list_of_types>::
range {
179 template<
class new_element,
class old_element,
bool do_replace>
struct replace_if;
180 template<
class new_element,
class old_element>
struct replace_if<new_element,old_element,true>{
typedef new_element
result;};
181 template<
class new_element,
class old_element>
struct replace_if<new_element,old_element,false>{
typedef old_element
result;};
185 template<
class a_list,
class new_element,
int i>
191 template<
class a_list,
class new_element,
int i>
197 template <
class the_type,
class list_of_types>
198 template <
int i,
class new_element>
199 struct list<the_type,list_of_types>::
set {
207 template<
class first,
class second,
int index = first::last_index>
212 template<
class first,
class second>
217 template<
class type,
class list_of_types>
218 template<
class new_list>
236 template<
bool is_same,
int index,
int value>
struct test;
250 template<
typename _objt,
typename _list_of_feats,
typename _cont,
typename _aux = no_aux>
266 template<
class element,
class list,
template<
class E,
class L,
int I>
class by,
int fall_back>
struct find<element,
list,
by,0,fall_back>{
276 template<
typename element,
typename list,
int index>
struct get_element{
279 template<
typename element,
typename list,
int index>
struct get_cont{
280 static const bool result = std::is_same<element,typename at<list,index>::type::container>
::value;
283 template<
typename element,
typename list,
int index>
struct get_objt{
287 template<
typename element,
typename list,
int index>
struct get_aux{
288 static const bool result = std::is_same<element,typename at<list,index>::type::auxt>
::value;
291 template<
typename element,
typename list,
int index>
struct get_feat{
307 template<
typename element,
typename list,
template<
class E,
class L,
int I>
class by>
319 template<
class new_element,
class thelist,
int index>
struct do_my_add;
321 template<
class O,
class F,
class C,
class A,
class thelist>
326 template<
class O,
class F,
class C,
class A,
class thelist,
int index>
332 typedef typename thelist::template set<index,type_info<typename old_entry::object,extended,typename old_entry::container,typename old_entry::aux> >
::go result;
336 template <
class type,
class list_of_types>
337 template<
class newElement>
338 struct list<
type,list_of_types>::addWithChecking{
342 template <
class type,
class list_of_types>
343 template<
class O,
class F,
class C,
class A>
345 typedef typename do_my_add<type_info<O,F,C,A>,
list<type,list_of_types>,
find<typename type_info<O,F,C,A>::container,
list<type,list_of_types>,
get_cont>
::result>
::result go;
367 template<
typename list,
template<
typename,
typename,
typename,
bool>
class functor,
typename result,
class arg,
int i =
list::last_index,
bool isLast =
true>
372 template<
typename list,
template<
typename,
typename,
typename,
bool>
class functor,
typename result,
class arg,
bool isLast>
378 template <
class list,
class functor,
int last_index = list::last_index>
382 functor
transient = functor();
383 functor* ptr = (!
f) ? &
transient :
f;
393 template <
class list,
class functor>
397 functor
transient = functor();
398 functor* ptr = (!
f) ? &
transient :
f;
406 template <
class element>
407 void do_it()
const {std::cout <<
"["<<
typeid(element).
name() <<
"] ";}
411 template <
class element>
415 template <
class element>
418 std::cout <<
" features [";
421 std::cout <<
" container ["<<
typeid(
typename element::container).
name() <<
"] ";
422 std::cout << std::endl;
It used to be useful piece of code for replacing actual SG with other store of similar functionality ...
bool add(const std::string &hname, TKey *tobj)
constexpr std::enable_if_t< is_bitmask_v< E >, E & > set(E &lhs, E rhs)
Convenience function to set bits in a class enum bitmask.
std::string join(const std::vector< std::string > &v, const char c=',')