1#ifndef _stack_h_INCLUDED
2#define _stack_h_INCLUDED
16#define FULL_STACK(S) ((S).end == (S).allocated)
17#define EMPTY_STACK(S) ((S).begin == (S).end)
18#define SIZE_STACK(S) ((size_t) ((S).end - (S).begin))
19#define CAPACITY_STACK(S) ((size_t) ((S).allocated - (S).begin))
21#define INIT_STACK(S) \
23 (S).begin = (S).end = (S).allocated = 0; \
26#define TOP_STACK(S) (END_STACK (S)[KISSAT_assert (!EMPTY_STACK (S)), -1])
28#define PEEK_STACK(S, N) \
29 (BEGIN_STACK (S)[KISSAT_assert ((N) < SIZE_STACK (S)), (N)])
31#define POKE_STACK(S, N, E) \
33 PEEK_STACK (S, N) = (E); \
36#define POP_STACK(S) (KISSAT_assert (!EMPTY_STACK (S)), *--(S).end)
38#define ENLARGE_STACK(S) \
40 KISSAT_assert (FULL_STACK (S)); \
41 kissat_stack_enlarge (solver, (chars *) &(S), sizeof *(S).begin); \
44#define SHRINK_STACK(S) \
46 if (!FULL_STACK (S)) \
47 kissat_shrink_stack (solver, (chars *) &(S), sizeof *(S).begin); \
50#define PUSH_STACK(S, E) \
57#define BEGIN_STACK(S) (S).begin
59#define END_STACK(S) (S).end
61#define CLEAR_STACK(S) \
63 (S).end = (S).begin; \
66#define RESIZE_STACK(S, NEW_SIZE) \
68 const size_t TMP_NEW_SIZE = (NEW_SIZE); \
69 KISSAT_assert (TMP_NEW_SIZE <= SIZE_STACK (S)); \
70 (S).end = (S).begin + TMP_NEW_SIZE; \
73#define SET_END_OF_STACK(S, P) \
75 KISSAT_assert (BEGIN_STACK (S) <= (P)); \
76 KISSAT_assert ((P) <= END_STACK (S)); \
77 if ((P) == END_STACK (S)) \
82#define RELEASE_STACK(S) \
84 DEALLOC ((S).begin, CAPACITY_STACK (S)); \
88#define REMOVE_STACK(T, S, E) \
90 KISSAT_assert (!EMPTY_STACK (S)); \
91 T *END_REMOVE_STACK = END_STACK (S); \
92 T *P_REMOVE_STACK = BEGIN_STACK (S); \
93 while (*P_REMOVE_STACK != (E)) { \
95 KISSAT_assert (P_REMOVE_STACK != END_REMOVE_STACK); \
98 while (P_REMOVE_STACK != END_REMOVE_STACK) { \
99 P_REMOVE_STACK[-1] = *P_REMOVE_STACK; \
105#define REVERSE_STACK(T, S) \
107 if (SIZE_STACK (S) < 2) \
109 T *HEAD = (S).begin, *TAIL = (S).end - 1; \
110 while (HEAD < TAIL) { \
117#define all_stack(T, E, S) \
118 T E, *E##_PTR = BEGIN_STACK (S), *const E##_END = END_STACK (S); \
119 E##_PTR != E##_END && (E = *E##_PTR, true); \
122#define all_pointers(T, E, S) \
123 T *E, *const *E##_PTR = BEGIN_STACK (S), \
124 *const *const E##_END = END_STACK (S); \
125 E##_PTR != E##_END && (E = *E##_PTR, true); \
133typedef STACK (
unsigned) unsigneds;
140 size_t size_of_element);
#define ABC_NAMESPACE_HEADER_END
#define ABC_NAMESPACE_HEADER_START
NAMESPACES ///.
void kissat_shrink_stack(struct kissat *, chars *, size_t size_of_element)
void kissat_stack_enlarge(struct kissat *, chars *, size_t size_of_element)