/*
** guardSet.h
*/
# ifndef GUARDSET_H
# define GUARDSET_H
/*
** guardSet is usually empty, so allow NULL to represent this.
*/
/* in forwardTypes: typedef struct _guardSet *guardSet; */
/*@null@*/ struct s_guardSet
{
/*@only@*/ sRefSet tguard; /* guarded on true branch */
/*@only@*/ sRefSet fguard; /* guarded on false branch */
} ;
/*@constant null guardSet guardSet_undefined;@*/
# define guardSet_undefined ((guardSet)NULL)
extern /*@falsewhennull@*/ /*@unused@*/ bool
guardSet_isDefined (guardSet p_g) /*@*/ ;
# define guardSet_isDefined(g) ((g) != guardSet_undefined)
extern /*@falsewhennull@*/ bool guardSet_isEmpty (guardSet p_g);
extern /*@only@*/ guardSet guardSet_new (void);
extern guardSet guardSet_addTrueGuard (/*@returned@*/ guardSet p_g, /*@exposed@*/ sRef p_s);
extern guardSet guardSet_addFalseGuard (/*@returned@*/ guardSet p_g, /*@exposed@*/ sRef p_s);
extern guardSet guardSet_or (/*@returned@*/ /*@unique@*/ guardSet p_s, guardSet p_t);
extern guardSet guardSet_and (/*@returned@*/ /*@unique@*/ guardSet p_s, guardSet p_t);
extern void guardSet_delete (guardSet p_g, sRef p_s) /*@modifies p_g@*/ ;
extern /*@only@*/ cstring guardSet_unparse (guardSet p_g);
extern void guardSet_free (/*@only@*/ /*@only@*/ guardSet p_g);
extern /*@dependent@*/ /*@exposed@*/ sRefSet
guardSet_getTrueGuards (guardSet p_g) /*@*/ ;
extern /*@dependent@*/ /*@exposed@*/ sRefSet
guardSet_getFalseGuards (guardSet p_g) /*@*/ ;
extern guardSet guardSet_union (/*@only@*/ guardSet p_s, guardSet p_t)
/*@modifies p_s@*/ ;
extern /*@only@*/ guardSet guardSet_invert (/*@temp@*/ guardSet p_g) /*@*/ ;
extern /*@only@*/ guardSet guardSet_copy (/*@temp@*/ guardSet p_g) /*@*/ ;
extern bool guardSet_isGuarded (guardSet p_g, sRef p_s) /*@*/ ;
extern bool guardSet_mustBeNull (guardSet p_g, sRef p_s) /*@*/ ;
extern guardSet
guardSet_levelUnion (/*@only@*/ guardSet p_s,
guardSet p_t, int p_lexlevel)
/*@modifies p_s@*/ ;
extern guardSet
guardSet_levelUnionFree (/*@returned@*/ /*@unique@*/ guardSet p_s,
/*@only@*/ guardSet p_t, int p_lexlevel)
/*@modifies p_t, p_s@*/ ;
extern void guardSet_flip (guardSet p_g);
# else
# error "Multiple include"
# endif
syntax highlighted by Code2HTML, v. 0.9.1