1 /* If BASE is undefined we use function names like gsl_name()
2 and assume that we are using doubles.
4 If BASE is defined we used function names like gsl_BASE_name()
5 and use BASE as the base datatype */
7 #if defined(BASE_GSL_COMPLEX_LONG)
8 #define BASE gsl_complex_long_double
9 #define SHORT complex_long_double
10 #define SHORT_REAL long_double
11 #define ATOMIC long double
12 #define USES_LONGDOUBLE 1
13 #define MULTIPLICITY 2
15 #define IN_FORMAT "%Lg"
16 #define OUT_FORMAT "%Lg"
17 #define ATOMIC_IO ATOMIC
18 #define ZERO {{0.0L,0.0L}}
19 #define ONE {{1.0L,0.0L}}
20 #define BASE_EPSILON GSL_DBL_EPSILON
22 #elif defined(BASE_GSL_COMPLEX)
23 #define BASE gsl_complex
27 #define MULTIPLICITY 2
29 #define IN_FORMAT "%lg"
30 #define OUT_FORMAT "%g"
31 #define ATOMIC_IO ATOMIC
32 #define ZERO {{0.0,0.0}}
33 #define ONE {{1.0,0.0}}
34 #define BASE_EPSILON GSL_DBL_EPSILON
36 #elif defined(BASE_GSL_COMPLEX_FLOAT)
37 #define BASE gsl_complex_float
38 #define SHORT complex_float
39 #define SHORT_REAL float
41 #define MULTIPLICITY 2
43 #define IN_FORMAT "%g"
44 #define OUT_FORMAT "%g"
45 #define ATOMIC_IO ATOMIC
46 #define ZERO {{0.0F,0.0F}}
47 #define ONE {{1.0F,0.0F}}
48 #define BASE_EPSILON GSL_FLT_EPSILON
50 #elif defined(BASE_LONG_DOUBLE)
51 #define BASE long double
52 #define SHORT long_double
53 #define ATOMIC long double
54 #define USES_LONGDOUBLE 1
55 #define MULTIPLICITY 1
57 #define IN_FORMAT "%Lg"
58 #define OUT_FORMAT "%Lg"
59 #define ATOMIC_IO ATOMIC
62 #define BASE_EPSILON GSL_DBL_EPSILON
64 #elif defined(BASE_DOUBLE)
68 #define MULTIPLICITY 1
70 #define IN_FORMAT "%lg"
71 #define OUT_FORMAT "%g"
72 #define ATOMIC_IO ATOMIC
75 #define BASE_EPSILON GSL_DBL_EPSILON
77 #elif defined(BASE_FLOAT)
81 #define MULTIPLICITY 1
83 #define IN_FORMAT "%g"
84 #define OUT_FORMAT "%g"
85 #define ATOMIC_IO ATOMIC
88 #define BASE_EPSILON GSL_FLT_EPSILON
90 #elif defined(BASE_ULONG)
91 #define BASE unsigned long
93 #define ATOMIC unsigned long
94 #define MULTIPLICITY 1
95 #define IN_FORMAT "%lu"
96 #define OUT_FORMAT "%lu"
97 #define ATOMIC_IO ATOMIC
102 #elif defined(BASE_LONG)
106 #define MULTIPLICITY 1
107 #define IN_FORMAT "%ld"
108 #define OUT_FORMAT "%ld"
109 #define ATOMIC_IO ATOMIC
113 #elif defined(BASE_UINT)
114 #define BASE unsigned int
116 #define ATOMIC unsigned int
117 #define MULTIPLICITY 1
118 #define IN_FORMAT "%u"
119 #define OUT_FORMAT "%u"
120 #define ATOMIC_IO ATOMIC
125 #elif defined(BASE_INT)
129 #define MULTIPLICITY 1
130 #define IN_FORMAT "%d"
131 #define OUT_FORMAT "%d"
132 #define ATOMIC_IO ATOMIC
136 #elif defined(BASE_USHORT)
137 #define BASE unsigned short
139 #define ATOMIC unsigned short
140 #define MULTIPLICITY 1
141 #define IN_FORMAT "%hu"
142 #define OUT_FORMAT "%hu"
143 #define ATOMIC_IO ATOMIC
148 #elif defined(BASE_SHORT)
152 #define MULTIPLICITY 1
153 #define IN_FORMAT "%hd"
154 #define OUT_FORMAT "%hd"
155 #define ATOMIC_IO ATOMIC
159 #elif defined(BASE_UCHAR)
160 #define BASE unsigned char
162 #define ATOMIC unsigned char
163 #define MULTIPLICITY 1
164 #define IN_FORMAT "%u"
165 #define OUT_FORMAT "%u"
166 #define ATOMIC_IO unsigned int
171 #elif defined(BASE_CHAR)
175 #define MULTIPLICITY 1
176 #define IN_FORMAT "%d"
177 #define OUT_FORMAT "%d"
178 #define ATOMIC_IO int
181 #ifdef __CHAR_UNSIGNED__
186 #error unknown BASE_ directive in source.h
189 #define CONCAT2x(a,b) a ## _ ## b
190 #define CONCAT2(a,b) CONCAT2x(a,b)
191 #define CONCAT3x(a,b,c) a ## _ ## b ## _ ## c
192 #define CONCAT3(a,b,c) CONCAT3x(a,b,c)
193 #define CONCAT4x(a,b,c,d) a ## _ ## b ## _ ## c ## _ ## d
194 #define CONCAT4(a,b,c,d) CONCAT4x(a,b,c,d)
196 #ifndef USE_QUALIFIER
201 #if defined(BASE_DOUBLE)
202 #define FUNCTION(dir,name) CONCAT3(dir,QUALIFIER,name)
203 #define TYPE(dir) dir
204 #define VIEW(dir,name) CONCAT2(dir,name)
205 #define QUALIFIED_TYPE(dir) QUALIFIER dir
206 #define QUALIFIED_VIEW(dir,name) CONCAT3(dir,QUALIFIER,name)
208 #define FUNCTION(a,c) CONCAT4(a,SHORT,QUALIFIER,c)
209 #define TYPE(dir) CONCAT2(dir,SHORT)
210 #define VIEW(dir,name) CONCAT3(dir,SHORT,name)
211 #define QUALIFIED_TYPE(dir) QUALIFIER CONCAT2(dir,SHORT)
212 #define QUALIFIED_VIEW(dir,name) CONCAT4(dir,SHORT,QUALIFIER,name)
214 #if defined(BASE_GSL_COMPLEX)
215 #define REAL_TYPE(dir) dir
216 #define REAL_VIEW(dir,name) CONCAT2(dir,name)
217 #define QUALIFIED_REAL_TYPE(dir) QUALIFIER dir
218 #define QUALIFIED_REAL_VIEW(dir,name) CONCAT3(dir,QUALIFIER,name)
220 #define REAL_TYPE(dir) CONCAT2(dir,SHORT_REAL)
221 #define REAL_VIEW(dir,name) CONCAT3(dir,SHORT_REAL,name)
222 #define QUALIFIED_REAL_TYPE(dir) QUALIFIER CONCAT2(dir,SHORT_REAL)
223 #define QUALIFIED_REAL_VIEW(dir,name) CONCAT4(dir,SHORT_REAL,QUALIFIER,name)
226 #if defined(BASE_DOUBLE)
227 #define FUNCTION(dir,name) CONCAT2(dir,name)
228 #define TYPE(dir) dir
229 #define VIEW(dir,name) CONCAT2(dir,name)
230 #define QUALIFIED_TYPE(dir) TYPE(dir)
231 #define QUALIFIED_VIEW(dir,name) CONCAT2(dir,name)
233 #define FUNCTION(a,c) CONCAT3(a,SHORT,c)
234 #define TYPE(dir) CONCAT2(dir,SHORT)
235 #define VIEW(dir,name) CONCAT3(dir,SHORT,name)
236 #define QUALIFIED_TYPE(dir) TYPE(dir)
237 #define QUALIFIED_VIEW(dir,name) CONCAT3(dir,SHORT,name)
239 #if defined(BASE_GSL_COMPLEX)
240 #define REAL_TYPE(dir) dir
241 #define REAL_VIEW(dir,name) CONCAT2(dir,name)
242 #define QUALIFIED_REAL_TYPE(dir) dir
243 #define QUALIFIED_REAL_VIEW(dir,name) CONCAT2(dir,name)
245 #define REAL_TYPE(dir) CONCAT2(dir,SHORT_REAL)
246 #define REAL_VIEW(dir,name) CONCAT3(dir,SHORT_REAL,name)
247 #define QUALIFIED_REAL_TYPE(dir) CONCAT2(dir,SHORT_REAL)
248 #define QUALIFIED_REAL_VIEW(dir,name) CONCAT3(dir,SHORT_REAL,name)
253 #define EXPAND(x) STRING(x)
254 #define NAME(x) EXPAND(TYPE(x))