1 #ifndef TOC_LABEL_TABLE_H_INCLUDED 2 #define TOC_LABEL_TABLE_H_INCLUDED 44 struct CLabelTableEntry;
47 struct CLabelTableEntry<IntToType<-1> >
51 template <
class T,
class U>
52 struct MergeLabelTables
61 typedef typename std::conditional<
63 (
sizeof(CLabelTableEntry<T>) != 1),
65 MergeLabelTables<decltype(makeLabelTable(IntToType<T::value - 1>())), CLabelTableEntry<T> >,
67 decltype(makeLabelTable(IntToType<T::value - 1>()))
73 struct label_table_t<IntToType<-1> >
75 typedef CLabelTableEntry<IntToType<-1> > type;
80 constexpr
typename label_table_t<T>::type makeLabelTable(T)
82 return MergeLabelTables<
83 decltype(makeLabelTable(IntToType<T::value - 1>())),
90 constexpr CLabelTableEntry<IntToType<-1> > makeLabelTable(IntToType<-1> t)
92 return CLabelTableEntry<IntToType<-1> >();
95 #define TOC_DECLARE_LABEL(id, label) \ 97 struct CLabelTableEntry<IntToType<id> > \ 99 const char content[sizeof(label)] = label; \ 100 static constexpr int raw_offset = \ 101 packed_sizeof(makeLabelTable(IntToType<id - 1>())); \ 102 static constexpr int offset = (sizeof(content) == 1) ? \ 103 -1 : raw_offset == 1 ? 0 : raw_offset; \ 106 template<
class Length>
109 const typename label_table_t<Length>::type impl = makeLabelTable(Length());
A part of TOC table compile-time generator.