rename key to priority in pqueue
[libfirm] / include / libfirm / adt / impl.h
1 /*
2  * Copyright (C) 1995-2008 University of Karlsruhe.  All right reserved.
3  *
4  * This file is part of libFirm.
5  *
6  * This file may be distributed and/or modified under the terms of the
7  * GNU General Public License version 2 as published by the Free Software
8  * Foundation and appearing in the file LICENSE.GPL included in the
9  * packaging of this file.
10  *
11  * Licensees holding valid libFirm Professional Edition licenses may use
12  * this file in accordance with the libFirm Commercial License.
13  * Agreement provided with the Software.
14  *
15  * This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
16  * WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR
17  * PURPOSE.
18  */
19
20 /**
21  * @file
22  * @brief  Some macros for wrapper function implementation. (WARNING deprecated)
23  * @author Sebastian Hack
24  * @date   9.12.2004
25  *
26  * Please don't use these macros, they make the code unnecessarily unreadable!
27  */
28 #ifndef FIRM_ADT_IMPL_H
29 #define FIRM_ADT_IMPL_H
30
31 #define _MANGLE(prefix,name)            prefix ## name
32
33 #define INTERNAL(name)                                  _MANGLE(_, name)
34
35
36 #define _HEAD1(name,res,t1) \
37         res (name)(t1 p1)
38
39 #define _HEAD2(name,res,t1,t2) \
40         res (name)(t1 p1, t2 p2)
41
42 #define _HEAD3(name,res,t1,t2,t3) \
43         res (name)(t1 p1, t2 p2, t3 p3)
44
45 #define _HEAD4(name,res,t1,t2,t3,t4) \
46         res (name)(t1 p1, t2 p2, t3 p3, t4 p4)
47
48
49 #define _IMPL1(name,prefix,ret,res,t1) \
50 _HEAD1(name, res, t1) { \
51         ret prefix ## name (p1); \
52 }
53
54 #define _IMPL2(name,prefix,ret,res,t1,t2) \
55 _HEAD2(name, res, t1, t2) { \
56         ret prefix ## name (p1, p2); \
57 }
58
59 #define _IMPL3(name,prefix,ret,res,t1,t2,t3) \
60 _HEAD3(name, res, t1, t2, t3) { \
61         ret prefix ## name (p1, p2, p3); \
62 }
63
64 #define _IMPL4(name,prefix,ret,res,t1,t2,t3,t4) \
65 _HEAD4(name, res, t1, t2, t3, t4) { \
66         ret prefix ## name (p1, p2, p3, p4); \
67 }
68
69 #define IMPL1_VOID(name,prefix,t1) \
70   _IMPL1(name, prefix, (void), void, t1)
71
72 #define IMPL2_VOID(name,prefix,t1,t2) \
73   _IMPL2(name, prefix, (void), void, t1, t2)
74
75 #define IMPL3_VOID(name,prefix,t1,t2,t3) \
76   _IMPL3(name, prefix, (void), void, t1, t2, t3)
77
78 #define IMPL4_VOID(name,prefix,t1,t2,t3,t4) \
79   _IMPL4(name, prefix, (void), void, t1, t2, t3, t4)
80
81
82 #define IMPL1(name,type,prefix,t1) \
83   _IMPL1(name, prefix, return, type, t1)
84
85 #define IMPL2(name,type,prefix,t1,t2) \
86   _IMPL2(name, prefix, return, type, t1, t2)
87
88 #define IMPL3(name,type,prefix,t1,t2,t3) \
89   _IMPL3(name, prefix, return, type, t1, t2, t3)
90
91 #define IMPL4(name,type,prefix,t1,t2,t3,t4) \
92   _IMPL4(name, prefix, return, type, t1, t2, t3, t4)
93
94
95 #define FIRM_IMPL1(name,type,t1) \
96   _IMPL1(name, _, return, type, t1)
97
98 #define FIRM_IMPL2(name,type,t1,t2) \
99   _IMPL2(name, _, return, type, t1, t2)
100
101 #define FIRM_IMPL3(name,type,t1,t2,t3) \
102   _IMPL3(name, _, return, type, t1, t2, t3)
103
104 #define FIRM_IMPL4(name,type,t1,t2,t3,t4) \
105   _IMPL4(name, _, return, type, t1, t2, t3, t4)
106
107
108 #define FIRM_IMPL1_VOID(name,t1) \
109   _IMPL1(name, _, (void), void, t1)
110
111 #define FIRM_IMPL2_VOID(name,t1,t2) \
112   _IMPL2(name, _, (void), void, t1, t2)
113
114 #define FIRM_IMPL3_VOID(name,t1,t2,t3) \
115   _IMPL3(name, _, (void), void, t1, t2, t3)
116
117 #define FIRM_IMPL4_VOID(name,t1,t2,t3,t4) \
118   _IMPL4(name, _, (void), void, t1, t2, t3, t4)
119
120 #define FIRM_PROTO1(name,type,t1)                                               _HEAD1(name, type, t1)
121 #define FIRM_PROTO2(name,type,t1,t2)                                    _HEAD2(name, type, t1, t2)
122 #define FIRM_PROTO3(name,type,t1,t2,t3)                         _HEAD3(name, type, t1, t2, t3)
123 #define FIRM_PROTO4(name,type,t1,t2,t3,t4)              _HEAD4(name, type, t1, t2, t3, t4)
124
125 #endif