2 ** Copyright (C) University of Virginia, Massachusetts Institue of Technology 1994-2000.
3 ** See ../LICENSE for license information.
13 typedef /*@only@*/ sRefSet o_sRefSet;
14 typedef /*@exposed@*/ sRef e_sRef;
15 typedef struct rangeAt_ {
20 struct _environmentTable
24 /*@reldef@*/ /*@only@*/ e_sRef * keys;
25 /*@reldef@*/ /*@only@*/ o_sRefSet * values;
26 /*@reldef@*/ /*@only@*/ rangeAt * rangeValues;
30 extern rangeAt_ getRange (key);
31 extern boolean inRange (int, range);
33 extern void setMinium (key, min);
34 extern void setMaximum (key, min);
40 /*@reldef@*/ /*@only@*/ e_sRef *keys;
41 /*@reldef@*/ /*@only@*/ o_sRefSet *values;
42 /*@reldef@*/ /*@only@*/ rangeAt *ranges;
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);
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)
57 extern int rangeTable_size (/*@sef@*/ rangeTable p_s);
58 # define rangeTable_size(s) (rangeTable_isDefined (s) ? (s)->nelements : 0)
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++);
68 # define end_rangeTable_elements }}}
70 extern rangeTable rangeTable_new (void) /*@*/ ;
72 extern void rangeTable_clearRangees (rangeTable p_s, sRef p_sr)
73 /*@modifies p_s, p_sr@*/ ;
75 extern /*@only@*/ sRefSet rangeTable_canRange (rangeTable p_s, sRef p_sr) /*@*/ ;
76 extern rangeTable rangeTable_copy (rangeTable p_s) /*@*/ ;
78 extern /*@only@*/ cstring rangeTable_unparse (rangeTable p_s) /*@*/ ;
79 extern void rangeTable_free (/*@only@*/ rangeTable p_s) ;
82 rangeTable_addMustRange (/*@returned@*/ rangeTable p_s, /*@exposed@*/ sRef p_sr, sRef p_al)
86 rangeTable_levelUnion (/*@returned@*/ rangeTable p_t1, rangeTable p_t2, int p_level)
90 rangeTable_levelUnionNew (rangeTable p_t1, rangeTable p_t2, int p_level)
91 /*@modifies nothing*/ ;
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);
99 /*@constant int rangeTableBASESIZE; @*/
100 # define rangeTableBASESIZE MIDBASESIZE
103 # error "Multiple include"