1#ifndef _fifo_h_INCLUDED
2#define _fifo_h_INCLUDED
20#define BEGIN_FIFO(F) ((F).begin)
21#define END_FIFO(F) ((F).end)
22#define START_FIFO(F) ((F).start)
23#define LIMIT_FIFO(F) ((F).limit)
24#define ALLOCATED_FIFO(F) ((F).allocated)
26#define INIT_FIFO(F) memset (&(F), 0, sizeof (F))
28#define EMPTY_FIFO(F) (END_FIFO (F) == BEGIN_FIFO (F))
29#define FULL_FIFO(F) (END_FIFO (F) == ALLOCATED_FIFO (F))
30#define SIZE_FIFO(F) (END_FIFO (F) - BEGIN_FIFO (F))
32#define MOVABLE_FIFO(F) (BEGIN_FIFO (F) == LIMIT_FIFO (F))
33#define CAPACITY_FIFO(F) (ALLOCATED_FIFO (F) - START_FIFO (F))
35#define ENLARGE_FIFO(T, F) \
37 size_t OLD_BEGIN_OFFSET = BEGIN_FIFO (F) - START_FIFO (F); \
38 size_t OLD_END_OFFSET = END_FIFO (F) - START_FIFO (F); \
39 size_t OLD_CAPACITY = CAPACITY_FIFO (F); \
40 size_t NEW_CAPACITY = OLD_CAPACITY ? 2 * OLD_CAPACITY : 2; \
41 size_t OLD_BYTES = OLD_CAPACITY * sizeof *BEGIN_FIFO (F); \
42 size_t NEW_BYTES = NEW_CAPACITY * sizeof *BEGIN_FIFO (F); \
44 (T*) kissat_realloc (solver, START_FIFO (F), OLD_BYTES, NEW_BYTES); \
45 ALLOCATED_FIFO (F) = START_FIFO (F) + NEW_CAPACITY; \
46 LIMIT_FIFO (F) = START_FIFO (F) + NEW_CAPACITY / 2; \
47 BEGIN_FIFO (F) = START_FIFO (F) + OLD_BEGIN_OFFSET; \
48 END_FIFO (F) = START_FIFO (F) + OLD_END_OFFSET; \
49 KISSAT_assert (BEGIN_FIFO (F) < LIMIT_FIFO (F)); \
54 size_t SIZE = SIZE_FIFO (F); \
55 size_t BYTES = SIZE * sizeof *BEGIN_FIFO (F); \
56 memmove (START_FIFO (F), BEGIN_FIFO (F), BYTES); \
57 BEGIN_FIFO (F) = START_FIFO (F); \
58 END_FIFO (F) = BEGIN_FIFO (F) + SIZE; \
61#define ENQUEUE_FIFO(T, F, E) \
64 ENLARGE_FIFO (T, F); \
65 *END_FIFO (F)++ = (E); \
68#define DEQUEUE_FIFO(F, E) \
70 KISSAT_assert (!EMPTY_FIFO (F)); \
71 (E) = *BEGIN_FIFO (F)++; \
72 if (MOVABLE_FIFO (F)) \
76#define POP_FIFO(F) (KISSAT_assert (!EMPTY_FIFO (F)), *--END_FIFO (F))
78#define RELEASE_FIFO(F) \
80 size_t CAPACITY = CAPACITY_FIFO (F); \
81 size_t BYTES = CAPACITY * sizeof *BEGIN_FIFO (F); \
82 kissat_free (solver, START_FIFO (F), BYTES); \
86#define CLEAR_FIFO(F) \
88 BEGIN_FIFO (F) = END_FIFO (F) = START_FIFO (F); \
98#define all_fifo all_stack
#define ABC_NAMESPACE_HEADER_END
#define ABC_NAMESPACE_HEADER_START
NAMESPACES ///.