]>
Commit | Line | Data |
---|---|---|
d0e5b01f | 1 | /* |
2 | ** Copyright (C) University of Virginia, Massachusetts Institue of Technology 1994-2000. | |
3 | ** See ../LICENSE for license information. | |
4 | ** | |
5 | */ | |
6 | /* | |
7 | ** rangeTable.h | |
8 | */ | |
9 | ||
10 | # ifndef rangeTable_H | |
11 | # define rangeTable_H | |
12 | ||
13 | typedef /*@only@*/ sRefSet o_sRefSet; | |
14 | typedef /*@exposed@*/ sRef e_sRef; | |
15 | typedef struct rangeAt_ { | |
16 | int max; | |
17 | int min; | |
18 | } * rangeAt; | |
19 | ||
20 | struct _environmentTable | |
21 | { | |
22 | int nelements | |
23 | int nspace; | |
24 | /*@reldef@*/ /*@only@*/ e_sRef * keys; | |
25 | /*@reldef@*/ /*@only@*/ o_sRefSet * values; | |
26 | /*@reldef@*/ /*@only@*/ rangeAt * rangeValues; | |
27 | ||
28 | } | |
29 | ||
30 | extern rangeAt_ getRange (key); | |
31 | extern boolean inRange (int, range); | |
32 | ||
33 | extern void setMinium (key, min); | |
34 | extern void setMaximum (key, min); | |
35 | ||
36 | struct _rangeTable | |
37 | { | |
38 | int nelements; | |
39 | int nspace; | |
40 | /*@reldef@*/ /*@only@*/ e_sRef *keys; | |
41 | /*@reldef@*/ /*@only@*/ o_sRefSet *values; | |
42 | /*@reldef@*/ /*@only@*/ rangeAt *ranges; | |
43 | ||
44 | } ; | |
45 | ||
46 | extern /*@unused@*/ /*@truenull@*/ bool rangeTable_isUndefined (rangeTable p_s); | |
47 | extern /*@unused@*/ /*@truenull@*/ bool | |
48 | rangeTable_isEmpty (/*@sef@*/ rangeTable p_s); | |
49 | extern /*@falsenull@*/ bool rangeTable_isDefined (rangeTable p_s); | |
50 | ||
51 | /*@constant null rangeTable rangeTable_undefined; @*/ | |
52 | # define rangeTable_undefined ((rangeTable) NULL) | |
53 | # define rangeTable_isDefined(s) ((s) != rangeTable_undefined) | |
54 | # define rangeTable_isUndefined(s) ((s) == rangeTable_undefined) | |
55 | # define rangeTable_isEmpty(s) (rangeTable_size(s) == 0) | |
56 | ||
57 | extern int rangeTable_size (/*@sef@*/ rangeTable p_s); | |
58 | # define rangeTable_size(s) (rangeTable_isDefined (s) ? (s)->nelements : 0) | |
59 | ||
60 | /*@iter rangeTable_elements (sef rangeTable t, yield exposed sRef key, yield exposed sRefSet values); @*/ | |
61 | # define rangeTable_elements(t, m_key, m_value) \ | |
62 | { if (rangeTable_isDefined (t)) \ | |
63 | { int m_ind; sRef *m_keys = &((t)->keys[0]); \ | |
64 | sRefSet *m_values = &((t)->values[0]); \ | |
65 | for (m_ind = 0 ; m_ind < (t)->nelements; m_ind++) \ | |
66 | { sRef m_key = *(m_keys++); sRefSet m_value = *(m_values++); | |
67 | ||
68 | # define end_rangeTable_elements }}} | |
69 | ||
70 | extern rangeTable rangeTable_new (void) /*@*/ ; | |
71 | ||
72 | extern void rangeTable_clearRangees (rangeTable p_s, sRef p_sr) | |
73 | /*@modifies p_s, p_sr@*/ ; | |
74 | ||
75 | extern /*@only@*/ sRefSet rangeTable_canRange (rangeTable p_s, sRef p_sr) /*@*/ ; | |
76 | extern rangeTable rangeTable_copy (rangeTable p_s) /*@*/ ; | |
77 | ||
78 | extern /*@only@*/ cstring rangeTable_unparse (rangeTable p_s) /*@*/ ; | |
79 | extern void rangeTable_free (/*@only@*/ rangeTable p_s) ; | |
80 | ||
81 | extern rangeTable | |
82 | rangeTable_addMustRange (/*@returned@*/ rangeTable p_s, /*@exposed@*/ sRef p_sr, sRef p_al) | |
83 | /*@modifies p_s@*/ ; | |
84 | ||
85 | extern rangeTable | |
86 | rangeTable_levelUnion (/*@returned@*/ rangeTable p_t1, rangeTable p_t2, int p_level) | |
87 | /*@modifies p_t1@*/ ; | |
88 | ||
89 | extern rangeTable | |
90 | rangeTable_levelUnionNew (rangeTable p_t1, rangeTable p_t2, int p_level) | |
91 | /*@modifies nothing*/ ; | |
92 | ||
93 | extern void rangeTable_checkGlobs (rangeTable p_t) /*@modifies g_msgstream@*/ ; | |
94 | extern /*@only@*/ sRefSet rangeTable_rangeedBy (rangeTable p_s, sRef p_sr) /*@*/ ; | |
95 | extern void rangeTable_fixSrefs (rangeTable p_s); | |
96 | extern rangeTable rangeTable_levelUnionSeq (/*@returned@*/ rangeTable p_t1, | |
97 | /*@only@*/ rangeTable p_t2, int p_level); | |
98 | ||
99 | /*@constant int rangeTableBASESIZE; @*/ | |
100 | # define rangeTableBASESIZE MIDBASESIZE | |
101 | ||
102 | # else | |
103 | # error "Multiple include" | |
104 | # endif | |
105 | ||
106 | ||
107 | ||
108 |