]> andersk Git - splint.git/blob - src/Headers/rangeTable.h
Cleaned up flags to generate manual help.
[splint.git] / src / Headers / rangeTable.h
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@*/ /*@nullwhentrue@*/ bool rangeTable_isUndefined (rangeTable p_s);
47 extern /*@unused@*/ /*@nullwhentrue@*/ bool 
48   rangeTable_isEmpty (/*@sef@*/ rangeTable p_s);
49 extern /*@falsewhennull@*/ 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
This page took 0.117314 seconds and 5 git commands to generate.