ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/group/trunk/OOPSE-4/src/QuickHull/stat.h
Revision: 3138
Committed: Tue May 29 22:51:00 2007 UTC (17 years, 11 months ago) by chuckv
Content type: text/plain
File size: 12258 byte(s)
Log Message:
Addded QuickHull to cvs.

File Contents

# Content
1 /*<html><pre> -<a href="qh-stat.htm"
2 >-------------------------------</a><a name="TOP">-</a>
3
4 stat.h
5 contains all statistics that are collected for qhull
6
7 see qh-stat.htm and stat.c
8
9 copyright (c) 1993-2003, The Geometry Center
10
11 recompile qhull if you change this file
12
13 Integer statistics are Z* while real statistics are W*.
14
15 define maydebugx to call a routine at every statistic event
16
17 */
18
19 #ifndef qhDEFstat
20 #define qhDEFstat 1
21
22
23 /*-<a href="qh-stat.htm#TOC"
24 >-------------------------------</a><a name="KEEPstatistics">-</a>
25
26 qh_KEEPstatistics
27 0 turns off statistic gathering (except zzdef/zzinc/zzadd/zzval/wwval)
28 */
29 #ifndef qh_KEEPstatistics
30 #define qh_KEEPstatistics 1
31 #endif
32
33 /*-<a href="qh-stat.htm#TOC"
34 >-------------------------------</a><a name="statistics">-</a>
35
36 Zxxx for integers, Wxxx for reals
37
38 notes:
39 be sure that all statistics are defined in stat.c
40 otherwise initialization may core dump
41 can pick up all statistics by:
42 grep '[zw].*_[(][ZW]' *.c >z.x
43 remove trailers with query">-</a>
44 remove leaders with query-replace-regexp [ ^I]+ (
45 */
46 #if qh_KEEPstatistics
47 enum statistics { /* alphabetical after Z/W */
48 Zacoplanar,
49 Wacoplanarmax,
50 Wacoplanartot,
51 Zangle,
52 Wangle,
53 Wanglemax,
54 Wanglemin,
55 Zangletests,
56 Wareatot,
57 Wareamax,
58 Wareamin,
59 Zavoidold,
60 Wavoidoldmax,
61 Wavoidoldtot,
62 Zback0,
63 Zbestcentrum,
64 Zbestdist,
65 Zbestlower,
66 Zbestlowerv,
67 Zcentrumtests,
68 Zcheckpart,
69 Zcomputefurthest,
70 Zconcave,
71 Wconcavemax,
72 Wconcavetot,
73 Zconcaveridges,
74 Zconcaveridge,
75 Zcoplanar,
76 Wcoplanarmax,
77 Wcoplanartot,
78 Zcoplanarangle,
79 Zcoplanarcentrum,
80 Zcoplanarhorizon,
81 Zcoplanarinside,
82 Zcoplanarpart,
83 Zcoplanarridges,
84 Wcpu,
85 Zcyclefacetmax,
86 Zcyclefacettot,
87 Zcyclehorizon,
88 Zcyclevertex,
89 Zdegen,
90 Wdegenmax,
91 Wdegentot,
92 Zdegenvertex,
93 Zdelfacetdup,
94 Zdelridge,
95 Zdelvertextot,
96 Zdelvertexmax,
97 Zdetsimplex,
98 Zdistcheck,
99 Zdistconvex,
100 Zdistgood,
101 Zdistio,
102 Zdistplane,
103 Zdiststat,
104 Zdistvertex,
105 Zdistzero,
106 Zdoc1,
107 Zdoc2,
108 Zdoc3,
109 Zdoc4,
110 Zdoc5,
111 Zdoc6,
112 Zdoc7,
113 Zdoc8,
114 Zdoc9,
115 Zdoc10,
116 Zdoc11,
117 Zdoc12,
118 Zdropdegen,
119 Zdropneighbor,
120 Zdupflip,
121 Zduplicate,
122 Wduplicatemax,
123 Wduplicatetot,
124 Zdupridge,
125 Zdupsame,
126 Zflipped,
127 Wflippedmax,
128 Wflippedtot,
129 Zflippedfacets,
130 Zfindbest,
131 Zfindbestmax,
132 Zfindbesttot,
133 Zfindcoplanar,
134 Zfindfail,
135 Zfindhorizon,
136 Zfindhorizonmax,
137 Zfindhorizontot,
138 Zfindjump,
139 Zfindnew,
140 Zfindnewmax,
141 Zfindnewtot,
142 Zfindnewjump,
143 Zfindnewsharp,
144 Zgauss0,
145 Zgoodfacet,
146 Zhashlookup,
147 Zhashridge,
148 Zhashridgetest,
149 Zhashtests,
150 Zinsidevisible,
151 Zintersect,
152 Zintersectfail,
153 Zintersectmax,
154 Zintersectnum,
155 Zintersecttot,
156 Zmaxneighbors,
157 Wmaxout,
158 Wmaxoutside,
159 Zmaxridges,
160 Zmaxvertex,
161 Zmaxvertices,
162 Zmaxvneighbors,
163 Zmemfacets,
164 Zmempoints,
165 Zmemridges,
166 Zmemvertices,
167 Zmergeflipdup,
168 Zmergehorizon,
169 Zmergeinittot,
170 Zmergeinitmax,
171 Zmergeinittot2,
172 Zmergeintohorizon,
173 Zmergenew,
174 Zmergesettot,
175 Zmergesetmax,
176 Zmergesettot2,
177 Zmergesimplex,
178 Zmergevertex,
179 Wmindenom,
180 Wminvertex,
181 Zminnorm,
182 Zmultiridge,
183 Znearlysingular,
184 Zneighbor,
185 Wnewbalance,
186 Wnewbalance2,
187 Znewfacettot,
188 Znewfacetmax,
189 Znewvertex,
190 Wnewvertex,
191 Wnewvertexmax,
192 Znoarea,
193 Znonsimplicial,
194 Znowsimplicial,
195 Znotgood,
196 Znotgoodnew,
197 Znotmax,
198 Znumfacets,
199 Znummergemax,
200 Znummergetot,
201 Znumneighbors,
202 Znumridges,
203 Znumvertices,
204 Znumvisibility,
205 Znumvneighbors,
206 Zonehorizon,
207 Zpartangle,
208 Zpartcoplanar,
209 Zpartflip,
210 Zparthorizon,
211 Zpartinside,
212 Zpartition,
213 Zpartitionall,
214 Zpartnear,
215 Zpbalance,
216 Wpbalance,
217 Wpbalance2,
218 Zpostfacets,
219 Zpremergetot,
220 Zprocessed,
221 Zremvertex,
222 Zremvertexdel,
223 Zrenameall,
224 Zrenamepinch,
225 Zrenameshare,
226 Zretry,
227 Wretrymax,
228 Zridge,
229 Wridge,
230 Wridgemax,
231 Zridge0,
232 Wridge0,
233 Wridge0max,
234 Zridgemid,
235 Wridgemid,
236 Wridgemidmax,
237 Zridgeok,
238 Wridgeok,
239 Wridgeokmax,
240 Zsearchpoints,
241 Zsetplane,
242 Ztestvneighbor,
243 Ztotcheck,
244 Ztothorizon,
245 Ztotmerge,
246 Ztotpartcoplanar,
247 Ztotpartition,
248 Ztotridges,
249 Ztotvertices,
250 Ztotvisible,
251 Ztricoplanar,
252 Ztricoplanarmax,
253 Ztricoplanartot,
254 Ztridegen,
255 Ztrimirror,
256 Ztrinull,
257 Wvertexmax,
258 Wvertexmin,
259 Zvertexridge,
260 Zvertexridgetot,
261 Zvertexridgemax,
262 Zvertices,
263 Zvisfacettot,
264 Zvisfacetmax,
265 Zvisvertextot,
266 Zvisvertexmax,
267 Zwidefacet,
268 Zwidevertices,
269 ZEND};
270
271 /*-<a href="qh-stat.htm#TOC"
272 >-------------------------------</a><a name="ZZstat">-</a>
273
274 Zxxx/Wxxx statistics that remain defined if qh_KEEPstatistics=0
275
276 notes:
277 be sure to use zzdef, zzinc, etc. with these statistics (no double checking!)
278 */
279 #else
280 enum statistics { /* for zzdef etc. macros */
281 Zback0,
282 Zbestdist,
283 Zcentrumtests,
284 Zcheckpart,
285 Zconcaveridges,
286 Zcoplanarhorizon,
287 Zcoplanarpart,
288 Zcoplanarridges,
289 Zcyclefacettot,
290 Zcyclehorizon,
291 Zdelvertextot,
292 Zdistcheck,
293 Zdistconvex,
294 Zdistzero,
295 Zdoc1,
296 Zdoc2,
297 Zdoc3,
298 Zdoc11,
299 Zflippedfacets,
300 Zgauss0,
301 Zminnorm,
302 Zmultiridge,
303 Znearlysingular,
304 Wnewvertexmax,
305 Znumvisibility,
306 Zpartcoplanar,
307 Zpartition,
308 Zpartitionall,
309 Zprocessed,
310 Zretry,
311 Zridge,
312 Wridge,
313 Wridgemax,
314 Zridge0,
315 Wridge0,
316 Wridge0max,
317 Zridgemid,
318 Wridgemid,
319 Wridgemidmax,
320 Zridgeok,
321 Wridgeok,
322 Wridgeokmax,
323 Zsetplane,
324 Ztotmerge,
325 ZEND};
326 #endif
327
328 /*-<a href="qh-stat.htm#TOC"
329 >-------------------------------</a><a name="ztype">-</a>
330
331 ztype
332 the type of a statistic sets its initial value.
333
334 notes:
335 The type should be the same as the macro for collecting the statistic
336 */
337 enum ztypes {zdoc,zinc,zadd,zmax,zmin,ZTYPEreal,wadd,wmax,wmin,ZTYPEend};
338
339 /*========== macros and constants =============*/
340
341 /*-<a href="qh-stat.htm#TOC"
342 >--------------------------------</a><a name="MAYdebugx">-</a>
343
344 MAYdebugx
345 define as maydebug() to be called frequently for error trapping
346 */
347 #define MAYdebugx
348
349 /*-<a href="qh-stat.htm#TOC"
350 >--------------------------------</a><a name="zdef_">-</a>
351
352 zzdef_, zdef_( type, name, doc, -1)
353 define a statistic (assumes 'qhstat.next= 0;')
354
355 zdef_( type, name, doc, count)
356 define an averaged statistic
357 printed as name/count
358 */
359 #define zzdef_(stype,name,string,cnt) qhstat id[qhstat next++]=name; \
360 qhstat doc[name]= string; qhstat count[name]= cnt; qhstat type[name]= stype
361 #if qh_KEEPstatistics
362 #define zdef_(stype,name,string,cnt) qhstat id[qhstat next++]=name; \
363 qhstat doc[name]= string; qhstat count[name]= cnt; qhstat type[name]= stype
364 #else
365 #define zdef_(type,name,doc,count)
366 #endif
367
368 /*-<a href="qh-stat.htm#TOC"
369 >--------------------------------</a><a name="zinc_">-</a>
370
371 zzinc_( name ), zinc_( name)
372 increment an integer statistic
373 */
374 #define zzinc_(id) {MAYdebugx; qhstat stats[id].i++;}
375 #if qh_KEEPstatistics
376 #define zinc_(id) {MAYdebugx; qhstat stats[id].i++;}
377 #else
378 #define zinc_(id) {}
379 #endif
380
381 /*-<a href="qh-stat.htm#TOC"
382 >--------------------------------</a><a name="zadd_">-</a>
383
384 zzadd_( name, value ), zadd_( name, value ), wadd_( name, value )
385 add value to an integer or real statistic
386 */
387 #define zzadd_(id, val) {MAYdebugx; qhstat stats[id].i += (val);}
388 #define wwadd_(id, val) {MAYdebugx; qhstat stats[id].r += (val);}
389 #if qh_KEEPstatistics
390 #define zadd_(id, val) {MAYdebugx; qhstat stats[id].i += (val);}
391 #define wadd_(id, val) {MAYdebugx; qhstat stats[id].r += (val);}
392 #else
393 #define zadd_(id, val) {}
394 #define wadd_(id, val) {}
395 #endif
396
397 /*-<a href="qh-stat.htm#TOC"
398 >--------------------------------</a><a name="zval_">-</a>
399
400 zzval_( name ), zval_( name ), wwval_( name )
401 set or return value of a statistic
402 */
403 #define zzval_(id) ((qhstat stats[id]).i)
404 #define wwval_(id) ((qhstat stats[id]).r)
405 #if qh_KEEPstatistics
406 #define zval_(id) ((qhstat stats[id]).i)
407 #define wval_(id) ((qhstat stats[id]).r)
408 #else
409 #define zval_(id) qhstat tempi
410 #define wval_(id) qhstat tempr
411 #endif
412
413 /*-<a href="qh-stat.htm#TOC"
414 >--------------------------------</a><a name="zmax_">-</a>
415
416 zmax_( id, val ), wmax_( id, value )
417 maximize id with val
418 */
419 #define wwmax_(id, val) {MAYdebugx; maximize_(qhstat stats[id].r,(val));}
420 #if qh_KEEPstatistics
421 #define zmax_(id, val) {MAYdebugx; maximize_(qhstat stats[id].i,(val));}
422 #define wmax_(id, val) {MAYdebugx; maximize_(qhstat stats[id].r,(val));}
423 #else
424 #define zmax_(id, val) {}
425 #define wmax_(id, val) {}
426 #endif
427
428 /*-<a href="qh-stat.htm#TOC"
429 >--------------------------------</a><a name="zmin_">-</a>
430
431 zmin_( id, val ), wmin_( id, value )
432 minimize id with val
433 */
434 #if qh_KEEPstatistics
435 #define zmin_(id, val) {MAYdebugx; minimize_(qhstat stats[id].i,(val));}
436 #define wmin_(id, val) {MAYdebugx; minimize_(qhstat stats[id].r,(val));}
437 #else
438 #define zmin_(id, val) {}
439 #define wmin_(id, val) {}
440 #endif
441
442 /*================== stat.h types ==============*/
443
444
445 /*-<a href="qh-stat.htm#TOC"
446 >--------------------------------</a><a name="intrealT">-</a>
447
448 intrealT
449 union of integer and real, used for statistics
450 */
451 typedef union intrealT intrealT; /* union of int and realT */
452 union intrealT {
453 int i;
454 realT r;
455 };
456
457 /*-<a href="qh-stat.htm#TOC"
458 >--------------------------------</a><a name="qhstat">-</a>
459
460 qhstat
461 global data structure for statistics
462
463 notes:
464 access to qh_qhstat is via the "qhstat" macro. There are two choices
465 qh_QHpointer = 1 access globals via a pointer
466 enables qh_saveqhull() and qh_restoreqhull()
467 = 0 qh_qhstat is a static data structure
468 only one instance of qhull() can be active at a time
469 default value
470 qh_QHpointer is defined in qhull.h
471
472 allocated in stat.c
473 */
474 typedef struct qhstatT qhstatT;
475 #if qh_QHpointer
476 #define qhstat qh_qhstat->
477 extern qhstatT *qh_qhstat;
478 #else
479 #define qhstat qh_qhstat.
480 extern qhstatT qh_qhstat;
481 #endif
482 struct qhstatT {
483 intrealT stats[ZEND]; /* integer and real statistics */
484 unsigned char id[ZEND+10]; /* id's in print order */
485 char *doc[ZEND]; /* array of documentation strings */
486 short int count[ZEND]; /* -1 if none, else index of count to use */
487 char type[ZEND]; /* type, see ztypes above */
488 char printed[ZEND]; /* true, if statistic has been printed */
489 intrealT init[ZTYPEend]; /* initial values by types, set initstatistics */
490
491 int next; /* next index for zdef_ */
492 int precision; /* index for precision problems */
493 int vridges; /* index for Voronoi ridges */
494 int tempi;
495 realT tempr;
496 };
497
498 /*========== function prototypes ===========*/
499
500 void qh_allstatA(void);
501 void qh_allstatB(void);
502 void qh_allstatC(void);
503 void qh_allstatD(void);
504 void qh_allstatE(void);
505 void qh_allstatE2(void);
506 void qh_allstatF(void);
507 void qh_allstatG(void);
508 void qh_allstatH(void);
509 void qh_allstatI(void);
510 void qh_allstatistics (void);
511 void qh_collectstatistics (void);
512 void qh_freestatistics (void);
513 void qh_initstatistics (void);
514 boolT qh_newstats (int index, int *nextindex);
515 boolT qh_nostatistic (int i);
516 void qh_printallstatistics (FILE *fp, char *string);
517 void qh_printstatistics (FILE *fp, char *string);
518 void qh_printstatlevel (FILE *fp, int id, int start);
519 void qh_printstats (FILE *fp, int index, int *nextindex);
520 realT qh_stddev (int num, realT tot, realT tot2, realT *ave);
521
522 #endif /* qhDEFstat */