Home My Page Projects Code Snippets Project Openings SML/NJ
Summary Activity Forums Tracker Lists Tasks Docs Surveys News SCM Files

SCM Repository

[smlnj] Annotation of /sml/trunk/src/runtime/include/cntr.h
ViewVC logotype

Annotation of /sml/trunk/src/runtime/include/cntr.h

Parent Directory Parent Directory | Revision Log Revision Log


Revision 651 - (view) (download) (as text)

1 : monnier 249 /* cntr.h
2 :     *
3 :     * COPYRIGHT (c) 1992 AT&T Bell Laboratories
4 :     *
5 :     * Large counters for large (> 2^31) values.
6 :     */
7 :    
8 :     #ifndef _CNTR_
9 :     #define _CNTR_
10 :    
11 :     #define ONE_MILLION 1000000
12 :    
13 :     typedef struct {
14 :     Unsigned32_t millions;
15 :     Unsigned32_t ones;
16 :     } cntr_t;
17 :    
18 :     #define CNTR_INCR(cp, i) { \
19 :     cntr_t *__cp = (cp); \
20 :     __cp->ones += (i); \
21 :     while (__cp->ones > ONE_MILLION) { \
22 :     __cp->ones -= ONE_MILLION; \
23 :     __cp->millions++; \
24 :     } \
25 :     }
26 :    
27 :     #define CNTR_INCR1(cp) { \
28 :     cntr_t *__cp = (cp); \
29 :     __cp->ones++; \
30 :     if (__cp->ones > ONE_MILLION) { \
31 :     __cp->ones -= ONE_MILLION; \
32 :     __cp->millions++; \
33 :     } \
34 :     }
35 :    
36 :     #define CNTR_ZERO(cp) { \
37 :     cntr_t *__cp = (cp); \
38 :     __cp->ones = __cp->millions = 0; \
39 :     }
40 :    
41 :     #define CNTR_TO_REAL(cp) \
42 :     (((double)((cp)->millions)*(double)ONE_MILLION) + (double)((cp)->ones))
43 :    
44 :     /* Add cp2 to cp1 */
45 :     #define CNTR_ADD(cp1, cp2) { \
46 :     cntr_t *__cp1 = (cp1); \
47 :     cntr_t *__cp2 = (cp2); \
48 :     __cp1->ones += __cp2->ones; \
49 :     if (__cp1->ones > ONE_MILLION) { \
50 :     __cp1->ones -= ONE_MILLION; \
51 :     __cp1->millions++; \
52 :     } \
53 :     __cp1->millions += __cp2->millions; \
54 :     }
55 :    
56 :     #define CNTR_PERCENT(cp1, cp2) ((100.0*CNTR_TO_REAL(cp1)) / CNTR_TO_REAL(cp2))
57 :    
58 :     #define CNTR_FPRINTF(f,cp,wid) { \
59 :     cntr_t *__cp = (cp); \
60 :     int __w = (wid); \
61 :     if (__cp->millions > 0) \
62 :     fprintf (f, "%*d%06d", __w-6, __cp->millions, __cp->ones); \
63 :     else \
64 :     fprintf (f, "%*d", __w, __cp->ones); \
65 :     }
66 :    
67 :     #endif /* !_CNTR_ */
68 :    

root@smlnj-gforge.cs.uchicago.edu
ViewVC Help
Powered by ViewVC 1.0.0