GCC Code Coverage Report
Directory: ./ Exec Total Coverage
File: src/meet/enumall.c Lines: 87 92 94.6 %
Date: 2017-05-26 Branches: 6 8 75.0 %

Line Branch Exec Source
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