TrinityCore
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
TypeList.h
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2008-2016 TrinityCore <http://www.trinitycore.org/>
3  * Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
4  *
5  * This program is free software; you can redistribute it and/or modify it
6  * under the terms of the GNU General Public License as published by the
7  * Free Software Foundation; either version 2 of the License, or (at your
8  * option) any later version.
9  *
10  * This program is distributed in the hope that it will be useful, but WITHOUT
11  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
12  * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
13  * more details.
14  *
15  * You should have received a copy of the GNU General Public License along
16  * with this program. If not, see <http://www.gnu.org/licenses/>.
17  */
18 
19 #ifndef TRINITY_TYPELIST_H
20 #define TRINITY_TYPELIST_H
21 
22 /*
23  @struct TypeList
24  TypeList is the most simple but yet the most powerfull class of all. It holds
25  at compile time the different type of objects in a linked list.
26  */
27 
28 class TypeNull;
29 
30 template<typename HEAD, typename TAIL>
31 struct TypeList
32 {
33  typedef HEAD Head;
34  typedef TAIL Tail;
35 };
36 
37 // enough for now.. can be expand at any point in time as needed
38 #define TYPELIST_1(T1) TypeList<T1, TypeNull>
39 #define TYPELIST_2(T1, T2) TypeList<T1, TYPELIST_1(T2) >
40 #define TYPELIST_3(T1, T2, T3) TypeList<T1, TYPELIST_2(T2, T3) >
41 #define TYPELIST_4(T1, T2, T3, T4) TypeList<T1, TYPELIST_3(T2, T3, T4) >
42 #define TYPELIST_5(T1, T2, T3, T4, T5) TypeList<T1, TYPELIST_4(T2, T3, T4, T5) >
43 #define TYPELIST_6(T1, T2, T3, T4, T5, T6) TypeList<T1, TYPELIST_5(T2, T3, T4, T5, T6) >
44 #endif
45 
#define TAIL()
HEAD Head
Definition: TypeList.h:33
Definition: TypeList.h:31
Definition: inflate.h:21
TAIL Tail
Definition: TypeList.h:34