2 ** Copyright (C) University of Virginia, Massachusetts Institue of Technology 1994-2000.
3 ** See ../LICENSE for license information.
10 # ifndef environmentTable_H
11 # define environmentTable_H
14 typedef struct environmentAt_ {
20 typedef struct rangeAt_ {
29 struct _environmentTable
33 /*@reldef@*/ /*@only@*/ e_sRef * keys;
34 /*@reldef@*/ /*@only@*/ o_sRefSet * values;
35 /*@reldef@*/ /*@only@*/ rangeAt * rangeValues;
40 /* extern rangeAt getEnvironment (key); */
41 /* extern boolean inRange (int, range); */
43 /* extern void setMinium (key, min); */
44 /* extern void setMaximum (key, min); */
46 extern /*@unused@*/ /*@truenull@*/ bool environmentTable_isUndefined (environmentTable p_s);
47 extern /*@unused@*/ /*@truenull@*/ bool
48 environmentTable_isEmpty (/*@sef@*/ environmentTable p_s);
49 extern /*@falsenull@*/ bool environmentTable_isDefined (environmentTable p_s);
51 /*@constant null environmentTable environmentTable_undefined; @*/
52 # define environmentTable_undefined ((environmentTable) NULL)
53 # define environmentTable_isDefined(s) ((s) != environmentTable_undefined)
54 # define environmentTable_isUndefined(s) ((s) == environmentTable_undefined)
55 # define environmentTable_isEmpty(s) (environmentTable_size(s) == 0)
57 extern int environmentTable_size (/*@sef@*/ environmentTable p_s);
58 # define environmentTable_size(s) (environmentTable_isDefined (s) ? (s)->nelements : 0)
60 /*@iter environmentTable_elements (sef environmentTable t, yield exposed sRef key, yield exposed sRefSet values); @*/
61 # define environmentTable_elements(t, m_key, m_value) \
62 { if (environmentTable_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_environmentTable_elements }}}
70 //extern environmentTable environmentTable_new (void) /*@*/ ;
72 //extern void environmentTable_clearEnvironmentes (environmentTable p_s, sRef p_sr)
73 // /*@modifies p_s, p_sr@*/ ;
75 //extern /*@only@*/ sRefSet environmentTable_canEnvironment (environmentTable p_s, sRef p_sr) /*@*/ ;
76 //extern environmentTable environmentTable_copy (environmentTable p_s) /*@*/ ;
78 //extern /*@only@*/ cstring environmentTable_unparse (environmentTable p_s) /*@*/ ;
79 //extern void environmentTable_free (/*@only@*/ environmentTable p_s) ;
81 //extern environmentTable
82 // environmentTable_addMustEnvironment (/*@returned@*/ environmentTable p_s, /*@exposed@*/ sRef p_sr, sRef p_al)
83 // /*@modifies p_s@*/ ;
85 // extern environmentTable
86 // environmentTable_levelUnion (/*@returned@*/ environmentTable p_t1, environmentTable p_t2, int p_level)
87 // /*@modifies p_t1@*/ ;
89 // extern environmentTable
90 // environmentTable_levelUnionNew (environmentTable p_t1, environmentTable p_t2, int p_level)
91 // /*@modifies nothing*/ ;
93 // extern void environmentTable_checkGlobs (environmentTable p_t) /*@modifies g_msgstream@*/ ;
94 // extern /*@only@*/ sRefSet environmentTable_environmentedBy (environmentTable p_s, sRef p_sr) /*@*/ ;
95 // extern void environmentTable_fixSrefs (environmentTable p_s);
96 // extern environmentTable environmentTable_levelUnionSeq (/*@returned@*/ environmentTable p_t1,
97 // /*@only@*/ environmentTable p_t2, int p_level);
100 // extern environmentTable
101 // environmentTable_addRelativeRange (/*@returned@*/ environmentTable p_s,
102 // /*@exposed@*/ sRef p_sr);
103 // exprNode exprNode_mergeEnvironments (exprNode p_ret, exprNode p_e1, exprNode p_e2);
107 // environmentTable_testInRange ( environmentTable p_s, /*@exposed@*/ sRef p_sr, int p_index);
110 /*@constant int environmentTableBASESIZE; @*/
111 # define environmentTableBASESIZE MIDBASESIZE
114 # error "Multiple include"