Free cookie consent management tool by TermsFeed Policy Generator

source: branches/HeuristicLab.Analysis.AlgorithmBehavior/qhull-2012.1/src/libqhull/stat.h @ 11303

Last change on this file since 11303 was 10207, checked in by ascheibe, 11 years ago

#1886 added a unit test for volume calculation and the qhull library

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