Milena (Olena)  User documentation 2.0a Id
 All Classes Namespaces Functions Variables Typedefs Enumerator Groups Pages
core/var.hh
1 // Copyright (C) 2008, 2009 EPITA Research and Development Laboratory (LRDE)
2 //
3 // This file is part of Olena.
4 //
5 // Olena is free software: you can redistribute it and/or modify it under
6 // the terms of the GNU General Public License as published by the Free
7 // Software Foundation, version 2 of the License.
8 //
9 // Olena is distributed in the hope that it will be useful,
10 // but WITHOUT ANY WARRANTY; without even the implied warranty of
11 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 // General Public License for more details.
13 //
14 // You should have received a copy of the GNU General Public License
15 // along with Olena. If not, see <http://www.gnu.org/licenses/>.
16 //
17 // As a special exception, you may use this file as part of a free
18 // software project without restriction. Specifically, if other files
19 // instantiate templates or use macros or inline functions from this
20 // file, or you compile this file and link it with other files to produce
21 // an executable, this file does not by itself cause the resulting
22 // executable to be covered by the GNU General Public License. This
23 // exception does not however invalidate any other reasons why the
24 // executable file might be covered by the GNU General Public License.
25 
26 #ifndef MLN_CORE_VAR_HH
27 # define MLN_CORE_VAR_HH
28 
35 
36 # include <mln/core/macros.hh>
37 
41 #define mln_VAR(Var, Expr) \
42  \
43  typeof(Expr) Var = Expr; \
44  typedef typeof(Expr) Var##_t
45 
46 #define mln_const_VAR(Var, Expr) \
47  \
48  const typeof(Expr) Var = Expr; \
49  typedef const typeof(Expr) Var##_t
50 
51 
52 // mln_PITER
53 
56 #define mln_PITER(p, obj) \
57  typedef typeof(obj) p##__obj_type; \
58  mln_piter(p##__obj_type) p(obj)
59 
60 #define mln_PITER_(p, obj) \
61  typedef typeof(obj) p##__obj_type; \
62  mln_piter_(p##__obj_type) p(obj)
63 
64 
67 #define mln_FWD_PITER(p, obj) \
68  typedef typeof(obj) p##__obj_type; \
69  mln_fwd_piter(p##__obj_type) p(obj)
70 
71 #define mln_FWD_PITER_(p, obj) \
72  typedef typeof(obj) p##__obj_type; \
73  mln_fwd_piter_(p##__obj_type) p(obj)
74 
75 
78 #define mln_BKD_PITER(p, obj) \
79  typedef typeof(obj) p##__obj_type; \
80  mln_bkd_piter(p##__obj_type) p(obj)
81 
82 #define mln_BKD_PITER_(p, obj) \
83  typedef typeof(obj) p##__obj_type; \
84  mln_bkd_piter_(p##__obj_type) p(obj)
85 
86 
87 
88 // mln_NITER
89 
92 #define mln_NITER(n, obj, p) \
93  typedef typeof(obj) n##__obj_type; \
94  mln_niter(n##__obj_type) n(obj, p)
95 
96 #define mln_NITER_(n, obj, p) \
97  typedef typeof(obj) n##__obj_type; \
98  mln_niter_(n##__obj_type) n(obj, p)
99 
100 
103 #define mln_FWD_NITER(n, obj, p) \
104  typedef typeof(obj) n##__obj_type; \
105  mln_fwd_niter(n##__obj_type) n(obj, p)
106 
107 #define mln_FWD_NITER_(n, obj, p) \
108  typedef typeof(obj) n##__obj_type; \
109  mln_fwd_niter_(n##__obj_type) n(obj, p)
110 
111 
114 #define mln_BKD_NITER(n, obj, p) \
115  typedef typeof(obj) n##__obj_type; \
116  mln_bkd_niter(n##__obj_type) n(obj, p)
117 
118 #define mln_BKD_NITER_(n, obj, p) \
119  typedef typeof(obj) n##__obj_type; \
120  mln_bkd_niter_(n##__obj_type) n(obj, p)
121 
122 
123 
124 // mln_QITER
125 
128 #define mln_QITER(q, obj, p) \
129  typedef typeof(obj) q##__obj_type; \
130  mln_qiter(q##__obj_type) q(obj, p)
131 
132 #define mln_QITER_(q, obj, p) \
133  typedef typeof(obj) q##__obj_type; \
134  mln_qiter_(q##__obj_type) q(obj, p)
135 
136 
139 #define mln_FWD_QITER(q, obj, p) \
140  typedef typeof(obj) q##__obj_type; \
141  mln_fwd_qiter(q##__obj_type) q(obj, p)
142 
143 #define mln_FWD_QITER_(q, obj, p) \
144  typedef typeof(obj) q##__obj_type; \
145  mln_fwd_qiter_(q##__obj_type) q(obj, p)
146 
147 
150 #define mln_BKD_QITER(q, obj, p) \
151  typedef typeof(obj) q##__obj_type; \
152  mln_bkd_qiter(q##__obj_type) q(obj, p)
153 
154 #define mln_BKD_QITER_(q, obj, p) \
155  typedef typeof(obj) q##__obj_type; \
156  mln_bkd_qiter_(q##__obj_type) q(obj, p)
157 
158 
159 
160 // mln_EITER
161 
164 #define mln_EITER(e, obj) \
165  typedef typeof(obj) e##__obj_type; \
166  mln_eiter(e##__obj_type) e(obj)
167 
168 #define mln_EITER_(e, obj) \
169  typedef typeof(obj) e##__obj_type; \
170  mln_eiter_(e##__obj_type) e(obj)
171 
172 
175 #define mln_FWD_EITER(e, obj) \
176  typedef typeof(obj) e##__obj_type; \
177  mln_fwd_eiter(e##__obj_type) e(obj)
178 
179 #define mln_FWD_EITER_(e, obj) \
180  typedef typeof(obj) e##__obj_type; \
181  mln_fwd_eiter_(e##__obj_type) e(obj)
182 
183 
186 #define mln_BKD_EITER(e, obj) \
187  typedef typeof(obj) e##__obj_type; \
188  mln_bkd_eiter(e##__obj_type) e(obj)
189 
190 #define mln_BKD_EITER_(e, obj) \
191  typedef typeof(obj) e##__obj_type; \
192  mln_bkd_eiter_(e##__obj_type) e(obj)
193 
194 
195 
196 // mln_VITER
197 
200 #define mln_VITER(v, obj) \
201  typedef typeof(obj) v##__obj_type; \
202  mln_viter(v##__obj_type) v(obj)
203 
204 #define mln_VITER_(v, obj) \
205  typedef typeof(obj) v##__obj_type; \
206  mln_viter_(v##__obj_type) v(obj)
207 
208 
211 #define mln_FWD_VITER(v, obj) \
212  typedef typeof(obj) v##__obj_type; \
213  mln_fwd_viter(v##__obj_type) v(obj)
214 
215 #define mln_FWD_VITER_(v, obj) \
216  typedef typeof(obj) v##__obj_type; \
217  mln_fwd_viter_(v##__obj_type) v(obj)
218 
219 
222 #define mln_BKD_VITER(v, obj) \
223  typedef typeof(obj) v##__obj_type; \
224  mln_bkd_viter(v##__obj_type) v(obj)
225 
226 #define mln_BKD_VITER_(v, obj) \
227  typedef typeof(obj) v##__obj_type; \
228  mln_bkd_viter_(v##__obj_type) v(obj)
229 
230 
231 
232 #endif // ! MLN_CORE_VAR_HH