1 |
|
|
/* |
2 |
|
|
Teem: Tools to process and visualize scientific data and images . |
3 |
|
|
Copyright (C) 2013, 2012, 2011, 2010, 2009 University of Chicago |
4 |
|
|
Copyright (C) 2008, 2007, 2006, 2005 Gordon Kindlmann |
5 |
|
|
Copyright (C) 2004, 2003, 2002, 2001, 2000, 1999, 1998 University of Utah |
6 |
|
|
|
7 |
|
|
This library is free software; you can redistribute it and/or |
8 |
|
|
modify it under the terms of the GNU Lesser General Public License |
9 |
|
|
(LGPL) as published by the Free Software Foundation; either |
10 |
|
|
version 2.1 of the License, or (at your option) any later version. |
11 |
|
|
The terms of redistributing and/or modifying this software also |
12 |
|
|
include exceptions to the LGPL that facilitate static linking. |
13 |
|
|
|
14 |
|
|
This library is distributed in the hope that it will be useful, |
15 |
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of |
16 |
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
17 |
|
|
Lesser General Public License for more details. |
18 |
|
|
|
19 |
|
|
You should have received a copy of the GNU Lesser General Public License |
20 |
|
|
along with this library; if not, write to Free Software Foundation, Inc., |
21 |
|
|
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA |
22 |
|
|
*/ |
23 |
|
|
|
24 |
|
|
#include "meet.h" |
25 |
|
|
|
26 |
|
|
const int |
27 |
|
|
meetPresent = 42; |
28 |
|
|
|
29 |
|
|
const char * |
30 |
|
|
meetBiffKey = "meet"; |
31 |
|
|
|
32 |
|
|
typedef union { |
33 |
|
|
const airEnum ***enm; |
34 |
|
|
void **v; |
35 |
|
|
} foobarUnion; |
36 |
|
|
|
37 |
|
|
/* |
38 |
|
|
******** meetAirEnumAll |
39 |
|
|
** |
40 |
|
|
** ALLOCATES and returns a NULL-terminated array of |
41 |
|
|
** pointers to all the airEnums in Teem |
42 |
|
|
** |
43 |
|
|
** It would be better if this array could be created at compile-time, |
44 |
|
|
** but efforts at doing this resulted in lots of "initializer is not const" |
45 |
|
|
** errors. |
46 |
|
|
** |
47 |
|
|
** NOTE: the order here reflects the library ordering of the LIBS |
48 |
|
|
** variable in teem/src/GNUMakefile, which is the canonical dependency |
49 |
|
|
** ordering of the libraries. Can manually check completeness by: |
50 |
|
|
** (TEEM_LIB_LIST) |
51 |
|
|
|
52 |
|
|
grep "airEnum *" {air,hest,biff,nrrd,ell,unrrdu,alan,moss,tijk,gage,dye,bane,limn,echo,hoover,seek,ten,elf,pull,coil,push,mite}/?*.h | grep EXPORT | more |
53 |
|
|
|
54 |
|
|
** (with the ? in "}/?*.h" to stop warnings about / * inside comment) |
55 |
|
|
** We could grep specifically for "const airEnum *const", but its good to |
56 |
|
|
** use this occasion to also make sure that all public airEnums are |
57 |
|
|
** indeed const airEnum *const |
58 |
|
|
*/ |
59 |
|
|
const airEnum ** |
60 |
|
|
meetAirEnumAll() { |
61 |
|
|
airArray *arr; |
62 |
|
4 |
const airEnum **enm; |
63 |
|
|
unsigned int ii; |
64 |
|
|
foobarUnion fbu; |
65 |
|
|
|
66 |
|
2 |
arr = airArrayNew((fbu.enm = &enm, fbu.v), |
67 |
|
|
NULL, sizeof(airEnum *), 2); |
68 |
|
|
|
69 |
|
|
/* air */ |
70 |
|
2 |
ii = airArrayLenIncr(arr, 1); enm[ii] = airEndian; |
71 |
|
2 |
ii = airArrayLenIncr(arr, 1); enm[ii] = airBool; |
72 |
|
|
|
73 |
|
|
/* hest: no airEnums */ |
74 |
|
|
|
75 |
|
|
/* biff: no airEnums */ |
76 |
|
|
|
77 |
|
|
/* nrrd */ |
78 |
|
2 |
ii = airArrayLenIncr(arr, 1); enm[ii] = nrrdFormatType; |
79 |
|
2 |
ii = airArrayLenIncr(arr, 1); enm[ii] = nrrdType; |
80 |
|
2 |
ii = airArrayLenIncr(arr, 1); enm[ii] = nrrdEncodingType; |
81 |
|
2 |
ii = airArrayLenIncr(arr, 1); enm[ii] = nrrdCenter; |
82 |
|
2 |
ii = airArrayLenIncr(arr, 1); enm[ii] = nrrdKind; |
83 |
|
2 |
ii = airArrayLenIncr(arr, 1); enm[ii] = nrrdField; |
84 |
|
2 |
ii = airArrayLenIncr(arr, 1); enm[ii] = nrrdSpace; |
85 |
|
2 |
ii = airArrayLenIncr(arr, 1); enm[ii] = nrrdSpacingStatus; |
86 |
|
2 |
ii = airArrayLenIncr(arr, 1); enm[ii] = nrrdOrientationHave; |
87 |
|
2 |
ii = airArrayLenIncr(arr, 1); enm[ii] = nrrdBoundary; |
88 |
|
2 |
ii = airArrayLenIncr(arr, 1); enm[ii] = nrrdMeasure; |
89 |
|
2 |
ii = airArrayLenIncr(arr, 1); enm[ii] = nrrdUnaryOp; |
90 |
|
2 |
ii = airArrayLenIncr(arr, 1); enm[ii] = nrrdBinaryOp; |
91 |
|
2 |
ii = airArrayLenIncr(arr, 1); enm[ii] = nrrdTernaryOp; |
92 |
|
2 |
ii = airArrayLenIncr(arr, 1); enm[ii] = nrrdFFTWPlanRigor; |
93 |
|
2 |
ii = airArrayLenIncr(arr, 1); enm[ii] = nrrdResampleNonExistent; |
94 |
|
2 |
ii = airArrayLenIncr(arr, 1); enm[ii] = nrrdMetaDataCanonicalVersion; |
95 |
|
|
|
96 |
|
|
/* ell */ |
97 |
|
2 |
ii = airArrayLenIncr(arr, 1); enm[ii] = ell_cubic_root; |
98 |
|
|
|
99 |
|
|
/* unrrdu: no airEnums */ |
100 |
|
|
|
101 |
|
|
#if defined(TEEM_BUILD_EXPERIMENTAL_LIBS) |
102 |
|
|
/* alan */ |
103 |
|
|
ii = airArrayLenIncr(arr, 1); enm[ii] = alanStop; |
104 |
|
|
#endif |
105 |
|
|
|
106 |
|
|
/* moss: no airEnums */ |
107 |
|
|
|
108 |
|
|
#if defined(TEEM_BUILD_EXPERIMENTAL_LIBS) |
109 |
|
|
ii = airArrayLenIncr(arr, 1); enm[ii] = tijk_class; |
110 |
|
|
#endif |
111 |
|
|
|
112 |
|
|
/* gage */ |
113 |
|
2 |
ii = airArrayLenIncr(arr, 1); enm[ii] = gageErr; |
114 |
|
2 |
ii = airArrayLenIncr(arr, 1); enm[ii] = gageKernel; |
115 |
|
2 |
ii = airArrayLenIncr(arr, 1); enm[ii] = gageItemPackPart; |
116 |
|
2 |
ii = airArrayLenIncr(arr, 1); enm[ii] = gageScl; |
117 |
|
2 |
ii = airArrayLenIncr(arr, 1); enm[ii] = gageVec; |
118 |
|
2 |
ii = airArrayLenIncr(arr, 1); enm[ii] = gageSigmaSampling; |
119 |
|
|
|
120 |
|
|
/* dye */ |
121 |
|
2 |
ii = airArrayLenIncr(arr, 1); enm[ii] = dyeSpace; |
122 |
|
|
|
123 |
|
|
#if defined(TEEM_BUILD_EXPERIMENTAL_LIBS) |
124 |
|
|
/* bane */ |
125 |
|
|
ii = airArrayLenIncr(arr, 1); enm[ii] = baneGkmsMeasr; |
126 |
|
|
#endif |
127 |
|
|
|
128 |
|
|
/* limn */ |
129 |
|
2 |
ii = airArrayLenIncr(arr, 1); enm[ii] = limnSpace; |
130 |
|
2 |
ii = airArrayLenIncr(arr, 1); enm[ii] = limnPolyDataInfo; |
131 |
|
2 |
ii = airArrayLenIncr(arr, 1); enm[ii] = limnCameraPathTrack; |
132 |
|
2 |
ii = airArrayLenIncr(arr, 1); enm[ii] = limnPrimitive; |
133 |
|
2 |
ii = airArrayLenIncr(arr, 1); enm[ii] = limnSplineType; |
134 |
|
2 |
ii = airArrayLenIncr(arr, 1); enm[ii] = limnSplineInfo; |
135 |
|
|
|
136 |
|
|
/* echo */ |
137 |
|
2 |
ii = airArrayLenIncr(arr, 1); enm[ii] = echoJitter; |
138 |
|
2 |
ii = airArrayLenIncr(arr, 1); enm[ii] = echoType; |
139 |
|
2 |
ii = airArrayLenIncr(arr, 1); enm[ii] = echoMatter; |
140 |
|
|
|
141 |
|
|
/* hoover */ |
142 |
|
2 |
ii = airArrayLenIncr(arr, 1); enm[ii] = hooverErr; |
143 |
|
|
|
144 |
|
|
/* seek */ |
145 |
|
2 |
ii = airArrayLenIncr(arr, 1); enm[ii] = seekType; |
146 |
|
|
|
147 |
|
|
/* ten */ |
148 |
|
2 |
ii = airArrayLenIncr(arr, 1); enm[ii] = tenAniso; |
149 |
|
2 |
ii = airArrayLenIncr(arr, 1); enm[ii] = tenInterpType; |
150 |
|
2 |
ii = airArrayLenIncr(arr, 1); enm[ii] = tenGage; |
151 |
|
2 |
ii = airArrayLenIncr(arr, 1); enm[ii] = tenFiberType; |
152 |
|
2 |
ii = airArrayLenIncr(arr, 1); enm[ii] = tenDwiFiberType; |
153 |
|
2 |
ii = airArrayLenIncr(arr, 1); enm[ii] = tenFiberStop; |
154 |
|
2 |
ii = airArrayLenIncr(arr, 1); enm[ii] = tenFiberIntg; |
155 |
|
2 |
ii = airArrayLenIncr(arr, 1); enm[ii] = tenGlyphType; |
156 |
|
2 |
ii = airArrayLenIncr(arr, 1); enm[ii] = tenEstimate1Method; |
157 |
|
2 |
ii = airArrayLenIncr(arr, 1); enm[ii] = tenEstimate2Method; |
158 |
|
2 |
ii = airArrayLenIncr(arr, 1); enm[ii] = tenTripleType; |
159 |
|
2 |
ii = airArrayLenIncr(arr, 1); enm[ii] = tenDwiGage; |
160 |
|
|
|
161 |
|
|
#if defined(TEEM_BUILD_EXPERIMENTAL_LIBS) |
162 |
|
|
/* elf: no airEnums */ |
163 |
|
|
#endif |
164 |
|
|
|
165 |
|
|
/* pull */ |
166 |
|
2 |
ii = airArrayLenIncr(arr, 1); enm[ii] = pullInterType; |
167 |
|
2 |
ii = airArrayLenIncr(arr, 1); enm[ii] = pullEnergyType; |
168 |
|
2 |
ii = airArrayLenIncr(arr, 1); enm[ii] = pullInfo; |
169 |
|
2 |
ii = airArrayLenIncr(arr, 1); enm[ii] = pullSource; |
170 |
|
2 |
ii = airArrayLenIncr(arr, 1); enm[ii] = pullProp; |
171 |
|
2 |
ii = airArrayLenIncr(arr, 1); enm[ii] = pullProcessMode; |
172 |
|
2 |
ii = airArrayLenIncr(arr, 1); enm[ii] = pullTraceStop; |
173 |
|
2 |
ii = airArrayLenIncr(arr, 1); enm[ii] = pullInitMethod; |
174 |
|
2 |
ii = airArrayLenIncr(arr, 1); enm[ii] = pullCount; |
175 |
|
2 |
ii = airArrayLenIncr(arr, 1); enm[ii] = pullConstraintFail; |
176 |
|
|
|
177 |
|
|
#if defined(TEEM_BUILD_EXPERIMENTAL_LIBS) |
178 |
|
|
/* coil */ |
179 |
|
|
ii = airArrayLenIncr(arr, 1); enm[ii] = coilMethodType; |
180 |
|
|
ii = airArrayLenIncr(arr, 1); enm[ii] = coilKindType; |
181 |
|
|
|
182 |
|
|
/* push */ |
183 |
|
|
ii = airArrayLenIncr(arr, 1); enm[ii] = pushEnergyType; |
184 |
|
|
#endif |
185 |
|
|
|
186 |
|
|
/* mite */ |
187 |
|
2 |
ii = airArrayLenIncr(arr, 1); enm[ii] = miteVal; |
188 |
|
2 |
ii = airArrayLenIncr(arr, 1); enm[ii] = miteStageOp; |
189 |
|
|
|
190 |
|
|
/* meet: no new airEnums of its own */ |
191 |
|
|
|
192 |
|
|
/* NULL-terminate the list */ |
193 |
|
2 |
ii = airArrayLenIncr(arr, 1); enm[ii] = NULL; |
194 |
|
|
|
195 |
|
|
/* nix, not nuke the airArray */ |
196 |
|
2 |
airArrayNix(arr); |
197 |
|
4 |
return enm; |
198 |
|
2 |
} |
199 |
|
|
|
200 |
|
|
void |
201 |
|
|
meetAirEnumAllPrint(FILE *file) { |
202 |
|
|
const airEnum **enm, *ee; |
203 |
|
|
unsigned int ei; |
204 |
|
|
|
205 |
✗✓ |
2 |
if (!file) { |
206 |
|
|
return; |
207 |
|
|
} |
208 |
|
1 |
enm = meetAirEnumAll(); |
209 |
|
|
ei = 0; |
210 |
✓✓ |
126 |
while ((ee = enm[ei])) { |
211 |
|
62 |
airEnumPrint(file, ee); |
212 |
|
62 |
fprintf(file, "\n"); |
213 |
|
62 |
ei++; |
214 |
|
|
} |
215 |
|
1 |
free(AIR_CAST(void *, enm)); |
216 |
|
1 |
return; |
217 |
|
1 |
} |
218 |
|
|
|
219 |
|
|
int |
220 |
|
|
meetAirEnumAllCheck(void) { |
221 |
|
|
static const char me[]="meetAirEnumAllCheck"; |
222 |
|
|
const airEnum **enm, *ee; |
223 |
|
2 |
char err[AIR_STRLEN_LARGE]; |
224 |
|
|
unsigned int ei; |
225 |
|
|
airArray *mop; |
226 |
|
|
|
227 |
|
1 |
mop = airMopNew(); |
228 |
|
1 |
enm = meetAirEnumAll(); |
229 |
|
1 |
airMopAdd(mop, (void*)enm, airFree, airMopAlways); |
230 |
|
|
ei = 0; |
231 |
✓✓ |
126 |
while ((ee = enm[ei])) { |
232 |
|
|
/* fprintf(stderr, "!%s: %u %s\n", me, ei, ee->name); */ |
233 |
✗✓ |
62 |
if (airEnumCheck(err, ee)) { |
234 |
|
|
biffAddf(MEET, "%s: problem with enum %u", me, ei); |
235 |
|
|
biffAddf(MEET, "%s", err); /* kind of a hack */ |
236 |
|
|
airMopError(mop); |
237 |
|
|
return 1; |
238 |
|
|
} |
239 |
|
62 |
ei++; |
240 |
|
|
} |
241 |
|
1 |
airMopOkay(mop); |
242 |
|
1 |
return 0; |
243 |
|
1 |
} |
244 |
|
|
|
245 |
|
|
const char *const |
246 |
|
|
meetTeemLibs[] = { |
247 |
|
|
/* TEEM_LIB_LIST */ |
248 |
|
|
"air", |
249 |
|
|
"hest", |
250 |
|
|
"biff", |
251 |
|
|
"nrrd", |
252 |
|
|
"ell", |
253 |
|
|
"unrrdu", |
254 |
|
|
#if defined(TEEM_BUILD_EXPERIMENTAL_LIBS) |
255 |
|
|
"alan", |
256 |
|
|
#endif |
257 |
|
|
"moss", |
258 |
|
|
#if defined(TEEM_BUILD_EXPERIMENTAL_LIBS) |
259 |
|
|
"tijk", |
260 |
|
|
#endif |
261 |
|
|
"gage", |
262 |
|
|
"dye", |
263 |
|
|
#if defined(TEEM_BUILD_EXPERIMENTAL_LIBS) |
264 |
|
|
"bane", |
265 |
|
|
#endif |
266 |
|
|
"limn", |
267 |
|
|
"echo", |
268 |
|
|
"hoover", |
269 |
|
|
"seek", |
270 |
|
|
"ten", |
271 |
|
|
#if defined(TEEM_BUILD_EXPERIMENTAL_LIBS) |
272 |
|
|
"elf", |
273 |
|
|
#endif |
274 |
|
|
"pull", |
275 |
|
|
#if defined(TEEM_BUILD_EXPERIMENTAL_LIBS) |
276 |
|
|
"coil", |
277 |
|
|
"push", |
278 |
|
|
#endif |
279 |
|
|
"mite", |
280 |
|
|
"meet", |
281 |
|
|
NULL |
282 |
|
|
}; |
283 |
|
|
|
284 |
|
|
|