Milena (Olena)
User documentation 2.0a Id
|
00001 // Copyright (C) 2008, 2009 EPITA Research and Development Laboratory (LRDE) 00002 // 00003 // This file is part of Olena. 00004 // 00005 // Olena is free software: you can redistribute it and/or modify it under 00006 // the terms of the GNU General Public License as published by the Free 00007 // Software Foundation, version 2 of the License. 00008 // 00009 // Olena is distributed in the hope that it will be useful, 00010 // but WITHOUT ANY WARRANTY; without even the implied warranty of 00011 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00012 // General Public License for more details. 00013 // 00014 // You should have received a copy of the GNU General Public License 00015 // along with Olena. If not, see <http://www.gnu.org/licenses/>. 00016 // 00017 // As a special exception, you may use this file as part of a free 00018 // software project without restriction. Specifically, if other files 00019 // instantiate templates or use macros or inline functions from this 00020 // file, or you compile this file and link it with other files to produce 00021 // an executable, this file does not by itself cause the resulting 00022 // executable to be covered by the GNU General Public License. This 00023 // exception does not however invalidate any other reasons why the 00024 // executable file might be covered by the GNU General Public License. 00025 00026 #ifndef MLN_CORE_VAR_HH 00027 # define MLN_CORE_VAR_HH 00028 00035 00036 # include <mln/core/macros.hh> 00037 00041 #define mln_VAR(Var, Expr) \ 00042 \ 00043 typeof(Expr) Var = Expr; \ 00044 typedef typeof(Expr) Var##_t 00045 00046 #define mln_const_VAR(Var, Expr) \ 00047 \ 00048 const typeof(Expr) Var = Expr; \ 00049 typedef const typeof(Expr) Var##_t 00050 00051 00052 // mln_PITER 00053 00056 #define mln_PITER(p, obj) \ 00057 typedef typeof(obj) p##__obj_type; \ 00058 mln_piter(p##__obj_type) p(obj) 00059 00060 #define mln_PITER_(p, obj) \ 00061 typedef typeof(obj) p##__obj_type; \ 00062 mln_piter_(p##__obj_type) p(obj) 00063 00064 00067 #define mln_FWD_PITER(p, obj) \ 00068 typedef typeof(obj) p##__obj_type; \ 00069 mln_fwd_piter(p##__obj_type) p(obj) 00070 00071 #define mln_FWD_PITER_(p, obj) \ 00072 typedef typeof(obj) p##__obj_type; \ 00073 mln_fwd_piter_(p##__obj_type) p(obj) 00074 00075 00078 #define mln_BKD_PITER(p, obj) \ 00079 typedef typeof(obj) p##__obj_type; \ 00080 mln_bkd_piter(p##__obj_type) p(obj) 00081 00082 #define mln_BKD_PITER_(p, obj) \ 00083 typedef typeof(obj) p##__obj_type; \ 00084 mln_bkd_piter_(p##__obj_type) p(obj) 00085 00086 00087 00088 // mln_NITER 00089 00092 #define mln_NITER(n, obj, p) \ 00093 typedef typeof(obj) n##__obj_type; \ 00094 mln_niter(n##__obj_type) n(obj, p) 00095 00096 #define mln_NITER_(n, obj, p) \ 00097 typedef typeof(obj) n##__obj_type; \ 00098 mln_niter_(n##__obj_type) n(obj, p) 00099 00100 00103 #define mln_FWD_NITER(n, obj, p) \ 00104 typedef typeof(obj) n##__obj_type; \ 00105 mln_fwd_niter(n##__obj_type) n(obj, p) 00106 00107 #define mln_FWD_NITER_(n, obj, p) \ 00108 typedef typeof(obj) n##__obj_type; \ 00109 mln_fwd_niter_(n##__obj_type) n(obj, p) 00110 00111 00114 #define mln_BKD_NITER(n, obj, p) \ 00115 typedef typeof(obj) n##__obj_type; \ 00116 mln_bkd_niter(n##__obj_type) n(obj, p) 00117 00118 #define mln_BKD_NITER_(n, obj, p) \ 00119 typedef typeof(obj) n##__obj_type; \ 00120 mln_bkd_niter_(n##__obj_type) n(obj, p) 00121 00122 00123 00124 // mln_QITER 00125 00128 #define mln_QITER(q, obj, p) \ 00129 typedef typeof(obj) q##__obj_type; \ 00130 mln_qiter(q##__obj_type) q(obj, p) 00131 00132 #define mln_QITER_(q, obj, p) \ 00133 typedef typeof(obj) q##__obj_type; \ 00134 mln_qiter_(q##__obj_type) q(obj, p) 00135 00136 00139 #define mln_FWD_QITER(q, obj, p) \ 00140 typedef typeof(obj) q##__obj_type; \ 00141 mln_fwd_qiter(q##__obj_type) q(obj, p) 00142 00143 #define mln_FWD_QITER_(q, obj, p) \ 00144 typedef typeof(obj) q##__obj_type; \ 00145 mln_fwd_qiter_(q##__obj_type) q(obj, p) 00146 00147 00150 #define mln_BKD_QITER(q, obj, p) \ 00151 typedef typeof(obj) q##__obj_type; \ 00152 mln_bkd_qiter(q##__obj_type) q(obj, p) 00153 00154 #define mln_BKD_QITER_(q, obj, p) \ 00155 typedef typeof(obj) q##__obj_type; \ 00156 mln_bkd_qiter_(q##__obj_type) q(obj, p) 00157 00158 00159 00160 // mln_EITER 00161 00164 #define mln_EITER(e, obj) \ 00165 typedef typeof(obj) e##__obj_type; \ 00166 mln_eiter(e##__obj_type) e(obj) 00167 00168 #define mln_EITER_(e, obj) \ 00169 typedef typeof(obj) e##__obj_type; \ 00170 mln_eiter_(e##__obj_type) e(obj) 00171 00172 00175 #define mln_FWD_EITER(e, obj) \ 00176 typedef typeof(obj) e##__obj_type; \ 00177 mln_fwd_eiter(e##__obj_type) e(obj) 00178 00179 #define mln_FWD_EITER_(e, obj) \ 00180 typedef typeof(obj) e##__obj_type; \ 00181 mln_fwd_eiter_(e##__obj_type) e(obj) 00182 00183 00186 #define mln_BKD_EITER(e, obj) \ 00187 typedef typeof(obj) e##__obj_type; \ 00188 mln_bkd_eiter(e##__obj_type) e(obj) 00189 00190 #define mln_BKD_EITER_(e, obj) \ 00191 typedef typeof(obj) e##__obj_type; \ 00192 mln_bkd_eiter_(e##__obj_type) e(obj) 00193 00194 00195 00196 // mln_VITER 00197 00200 #define mln_VITER(v, obj) \ 00201 typedef typeof(obj) v##__obj_type; \ 00202 mln_viter(v##__obj_type) v(obj) 00203 00204 #define mln_VITER_(v, obj) \ 00205 typedef typeof(obj) v##__obj_type; \ 00206 mln_viter_(v##__obj_type) v(obj) 00207 00208 00211 #define mln_FWD_VITER(v, obj) \ 00212 typedef typeof(obj) v##__obj_type; \ 00213 mln_fwd_viter(v##__obj_type) v(obj) 00214 00215 #define mln_FWD_VITER_(v, obj) \ 00216 typedef typeof(obj) v##__obj_type; \ 00217 mln_fwd_viter_(v##__obj_type) v(obj) 00218 00219 00222 #define mln_BKD_VITER(v, obj) \ 00223 typedef typeof(obj) v##__obj_type; \ 00224 mln_bkd_viter(v##__obj_type) v(obj) 00225 00226 #define mln_BKD_VITER_(v, obj) \ 00227 typedef typeof(obj) v##__obj_type; \ 00228 mln_bkd_viter_(v##__obj_type) v(obj) 00229 00230 00231 00232 #endif // ! MLN_CORE_VAR_HH