]> andersk Git - splint.git/blob - src/Headers/environmentTable.h
Periodic commit
[splint.git] / src / Headers / environmentTable.h
1 /*
2 ** Copyright (C) University of Virginia, Massachusetts Institue of Technology 1994-2000.
3 ** See ../LICENSE for license information.
4 **
5 */
6 /*
7 ** environmentTable.h
8 */
9
10 # ifndef environmentTable_H
11 # define environmentTable_H
12
13
14 typedef struct environmentAt_ {
15   int max;
16   int min;
17 } * environmentAt;
18
19
20 typedef struct rangeAt_ {
21   int max;
22   int min;
23   bool isRelative;
24   bool unknown;
25   bool isReferenced;
26 }  rangeAt;
27
28
29 struct _environmentTable
30 {
31   int nelements;
32   int nspace;
33   /*@reldef@*/ /*@only@*/ e_sRef * keys;
34   /*@reldef@*/ /*@only@*/ o_sRefSet * values;
35   /*@reldef@*/ /*@only@*/ rangeAt *  rangeValues;
36 };
37
38
39
40 /* extern rangeAt getEnvironment (key); */
41 /* extern boolean inRange (int, range); */
42
43 /* extern void setMinium (key, min); */
44 /* extern void setMaximum (key, min); */
45
46 environmentTable
47 environmentTable_addExactValue (/*@returned@*/ environmentTable p_s, /*@exposed@*/ sRef p_sr, int p_val);
48
49 extern /*@unused@*/ /*@truenull@*/ bool environmentTable_isUndefined (environmentTable p_s);
50 extern /*@unused@*/ /*@truenull@*/ bool 
51   environmentTable_isEmpty (/*@sef@*/ environmentTable p_s);
52 extern /*@falsenull@*/ bool environmentTable_isDefined (environmentTable p_s);
53
54 /*@constant null environmentTable environmentTable_undefined; @*/
55 # define environmentTable_undefined      ((environmentTable) NULL)
56 # define environmentTable_isDefined(s)   ((s) != environmentTable_undefined)
57 # define environmentTable_isUndefined(s) ((s) == environmentTable_undefined)
58 # define environmentTable_isEmpty(s)     (environmentTable_size(s) == 0)
59
60 extern int environmentTable_size (/*@sef@*/ environmentTable p_s);
61 # define environmentTable_size(s)  (environmentTable_isDefined (s) ? (s)->nelements : 0)
62
63 /*@iter environmentTable_elements (sef environmentTable t, yield exposed sRef key, yield exposed sRefSet values); @*/
64 # define environmentTable_elements(t, m_key, m_value) \
65    { if (environmentTable_isDefined (t)) \
66      { int m_ind; sRef *m_keys = &((t)->keys[0]); \
67        sRefSet *m_values = &((t)->values[0]); \
68        for (m_ind = 0 ; m_ind < (t)->nelements; m_ind++) \
69          { sRef m_key = *(m_keys++); sRefSet m_value = *(m_values++);
70
71 # define end_environmentTable_elements }}}
72
73 extern environmentTable environmentTable_new (void) /*@*/ ;
74
75 extern void environmentTable_clearEnvironmentes (environmentTable p_s, sRef p_sr) 
76    /*@modifies p_s, p_sr@*/ ;
77
78 extern /*@only@*/ sRefSet environmentTable_canEnvironment (environmentTable p_s, sRef p_sr) /*@*/ ;
79 extern environmentTable environmentTable_copy (environmentTable p_s) /*@*/ ;
80  
81 extern /*@only@*/ cstring environmentTable_unparse (environmentTable p_s) /*@*/ ;
82 extern void environmentTable_free (/*@only@*/ environmentTable p_s) ;
83
84 extern environmentTable 
85   environmentTable_addMustEnvironment (/*@returned@*/ environmentTable p_s, /*@exposed@*/ sRef p_sr, sRef p_al)
86   /*@modifies p_s@*/ ;
87
88 extern environmentTable
89   environmentTable_levelUnion (/*@returned@*/ environmentTable p_t1, environmentTable p_t2, int p_level) 
90   /*@modifies p_t1@*/ ;
91
92 extern environmentTable 
93   environmentTable_levelUnionNew (environmentTable p_t1, environmentTable p_t2, int p_level) 
94   /*@modifies nothing*/ ;
95
96 extern void environmentTable_checkGlobs (environmentTable p_t) /*@modifies g_msgstream@*/ ;
97 extern /*@only@*/ sRefSet environmentTable_environmentedBy (environmentTable p_s, sRef p_sr) /*@*/ ;
98 extern void environmentTable_fixSrefs (environmentTable p_s);
99 extern environmentTable environmentTable_levelUnionSeq (/*@returned@*/ environmentTable p_t1, 
100                                             /*@only@*/ environmentTable p_t2, int p_level);
101
102
103 extern environmentTable
104 environmentTable_addRelativeRange (/*@returned@*/ environmentTable p_s,
105                          /*@exposed@*/ sRef p_sr);
106 exprNode exprNode_mergeEnvironments (exprNode p_ret, exprNode p_e1, exprNode p_e2);
107
108                      
109 extern void 
110 environmentTable_testInRange ( environmentTable p_s,  /*@exposed@*/ sRef p_sr, int p_index);
111
112
113 /*@constant int environmentTableBASESIZE; @*/
114 # define environmentTableBASESIZE MIDBASESIZE
115
116 # else
117 # error "Multiple include"
118 # endif
119
120
121
122
This page took 0.16885 seconds and 5 git commands to generate.